don't use ulong when uint or u32int is ment. Reference: /n/atom/patch/applied/usbnoulong Date: Wed Jun 4 18:37:28 CES 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/k10/etherusb.c Thu Jan 1 00:00:00 1970 +++ /sys/src/nix/k10/etherusb.c Wed Jun 4 18:36:49 2014 @@ -0,0 +1,439 @@ +/* + * Kernel proxy for usb ethernet device + */ + +#include "u.h" +#include "../port/lib.h" +#include "mem.h" +#include "dat.h" +#include "fns.h" +#include "io.h" +#include "../port/error.h" +#include "../port/netif.h" + +#include "etherif.h" +#include "../ip/ip.h" + +#define GET4(p) ((p)[3]<<24 | (p)[2]<<16 | (p)[1]<<8 | (p)[0]) +#define PUT4(p, v) ((p)[0] = (v), (p)[1] = (v)>>8, \ + (p)[2] = (v)>>16, (p)[3] = (v)>>24) +#define dprint if(debug) print +#define ddump if(0) dump + +static int debug = 0; + +enum { + Bind = 0, + Unbind, + + SmscRxerror = 0x8000, + SmscTxfirst = 0x2000, + SmscTxlast = 0x1000, +}; + +typedef struct Ctlr Ctlr; +typedef struct Udev Udev; + +typedef int (Unpackfn)(Ether*, Block*); +typedef void (Transmitfn)(Ctlr*, Block*); + +struct Ctlr { + Ether* edev; + Udev* udev; + Chan* inchan; + Chan* outchan; + char* buf; + int bufsize; + int maxpkt; + uint rxbuf; + uint rxpkt; + uint txbuf; + uint txpkt; + QLock; +}; + +struct Udev { + char *name; + Unpackfn *unpack; + Transmitfn *transmit; +}; + +static Cmdtab cmds[] = { + { Bind, "bind", 7, }, + { Unbind, "unbind", 0, }, +}; + +static Unpackfn unpackcdc, unpackasix, unpacksmsc; +static Transmitfn transmitcdc, transmitasix, transmitsmsc; + +static Udev udevtab[] = { + { "cdc", unpackcdc, transmitcdc, }, + { "asix", unpackasix, transmitasix, }, + { "smsc", unpacksmsc, transmitsmsc, }, + { nil }, +}; + +static void +dump(int c, Block *b) +{ + int s, i; + + s = splhi(); + print("%c%ld:", c, BLEN(b)); + for(i = 0; i < 32; i++) + print(" %2.2ux", b->rp[i]); + print("\n"); + splx(s); +} + +static int +unpack(Ether *edev, Block *b, int m) +{ + Block *nb; + Ctlr *ctlr; + + ctlr = edev->ctlr; + ddump('?', b); + if(m == BLEN(b)){ + etheriq(edev, b, 1); + ctlr->rxpkt++; + return 1; + } + nb = iallocb(m); + if(nb != nil){ + memmove(nb->wp, b->rp, m); + nb->wp += m; + etheriq(edev, nb, 1); + ctlr->rxpkt++; + }else + edev->soverflows++; + b->rp += m; + return 0; +} + +static int +unpackcdc(Ether *edev, Block *b) +{ + int m; + + m = BLEN(b); + if(m < 6) + return -1; + return unpack(edev, b, m); +} + +static int +unpackasix(Ether *edev, Block *b) +{ + ulong hd; + int m; + uchar *wp; + + if(BLEN(b) < 4) + return -1; + hd = GET4(b->rp); + b->rp += 4; + m = hd & 0xFFFF; + hd >>= 16; + if(m != (~hd & 0xFFFF)) + return -1; + m = ROUNDUP(m, 2); + if(m < 6 || m > BLEN(b)) + return -1; + if((wp = b->rp + m) != b->wp && b->wp - wp < 4) + b->wp = wp; + return unpack(edev, b, m); +} + +static int +unpacksmsc(Ether *edev, Block *b) +{ + ulong hd; + int m; + + ddump('@', b); + if(BLEN(b) < 4) + return -1; + hd = GET4(b->rp); + b->rp += 4; + m = hd >> 16; + if(m < 6 || m > BLEN(b)) + return -1; + if(BLEN(b) - m < 4) + b->wp = b->rp + m; + if(hd & SmscRxerror){ + edev->frames++; + b->rp += m; + if(BLEN(b) == 0){ + freeb(b); + return 1; + } + }else if(unpack(edev, b, m) == 1) + return 1; + if((m &= 3) != 0) + b->rp += 4 - m; + return 0; +} + +static void +transmit(Ctlr *ctlr, Block *b) +{ + Chan *c; + + ddump('!', b); + c = ctlr->outchan; + c->dev->bwrite(c, b, 0); +} + +static void +transmitcdc(Ctlr *ctlr, Block *b) +{ + transmit(ctlr, b); +} + +static void +transmitasix(Ctlr *ctlr, Block *b) +{ + int n; + + n = BLEN(b) & 0xFFFF; + n |= ~n << 16; + padblock(b, 4); + PUT4(b->rp, n); + if(BLEN(b) % ctlr->maxpkt == 0){ + padblock(b, -4); + PUT4(b->wp, 0xFFFF0000); + b->wp += 4; + } + transmit(ctlr, b); +} + +static void +transmitsmsc(Ctlr *ctlr, Block *b) +{ + int n; + + n = BLEN(b) & 0x7FF; + padblock(b, 8); + PUT4(b->rp, n | SmscTxfirst | SmscTxlast); + PUT4(b->rp+4, n); + transmit(ctlr, b); +} + +static void +etherusbproc(void *a) +{ + Ether *edev; + Ctlr *ctlr; + Chan *c; + Block *b; + + edev = a; + ctlr = edev->ctlr; + c = ctlr->inchan; + b = nil; + if(waserror()){ + print("etherusbproc: error exit %s\n", up->errstr); + pexit(up->errstr, 1); + return; + } + for(;;){ + if(b == nil){ + b = c->dev->bread(c, ctlr->bufsize, 0); + ctlr->rxbuf++; + } + switch(ctlr->udev->unpack(edev, b)){ + case -1: + edev->buffs++; + freeb(b); + /* fall through */ + case 1: + b = nil; + break; + } + } +} + +/* + * bind type indev outdev mac bufsize maxpkt + */ +static void +bind(Ctlr *ctlr, Udev *udev, Cmdbuf *cb) +{ + Chan *inchan, *outchan; + char *buf; + uint bufsize, maxpkt; + + qlock(ctlr); + inchan = outchan = nil; + buf = nil; + if(waserror()){ + free(buf); + if(inchan) + cclose(inchan); + if(outchan) + cclose(outchan); + qunlock(ctlr); + nexterror(); + } + if(ctlr->buf != nil) + cmderror(cb, "already bound to a device"); + maxpkt = strtol(cb->f[6], 0, 0); + if(maxpkt < 8 || maxpkt > 512) + cmderror(cb, "bad maxpkt"); + bufsize = strtol(cb->f[5], 0, 0); + if(bufsize < maxpkt || bufsize > 32*1024) + cmderror(cb, "bad bufsize"); + buf = smalloc(bufsize); + inchan = namec(cb->f[2], Aopen, OREAD, 0); + outchan = namec(cb->f[3], Aopen, OWRITE, 0); + assert(inchan != nil && outchan != nil); + if(parsemac(ctlr->edev->ea, cb->f[4], Eaddrlen) != Eaddrlen) + cmderror(cb, "bad etheraddr"); + memmove(ctlr->edev->addr, ctlr->edev->ea, Eaddrlen); + print("\netherusb %s: %E\n", udev->name, ctlr->edev->addr); + ctlr->buf = buf; + ctlr->inchan = inchan; + ctlr->outchan = outchan; + ctlr->bufsize = bufsize; + ctlr->maxpkt = maxpkt; + ctlr->udev = udev; + kproc("etherusb", etherusbproc, ctlr->edev); + poperror(); + qunlock(ctlr); +} + +static void +unbind(Ctlr *ctlr) +{ + qlock(ctlr); + if(ctlr->buf != nil){ + free(ctlr->buf); + ctlr->buf = nil; + if(ctlr->inchan) + cclose(ctlr->inchan); + if(ctlr->outchan) + cclose(ctlr->outchan); + ctlr->inchan = ctlr->outchan = nil; + } + qunlock(ctlr); +} + +static long +etherusbifstat(Ether* edev, void* a, long n, ulong offset) +{ + char *s, *p, *e; + Ctlr *ctlr; + + ctlr = edev->ctlr; + s = malloc(READSTR); + if(s == nil) + error(Enomem); + if(waserror()){ + free(s); + nexterror(); + } + p = s; + e = s+READSTR; + p = seprint(p, e, "rxbuf: %ud\n", ctlr->rxbuf); + p = seprint(p, e, "rxpkt: %ud\n", ctlr->rxpkt); + p = seprint(p, e, "txbuf: %ud\n", ctlr->txbuf); + p = seprint(p, e, "txpkt: %ud\n", ctlr->txpkt); + USED(p); + + n = readstr(offset, a, n, s); + poperror(); + free(s); + return n; +} + +static void +etherusbtransmit(Ether *edev) +{ + Ctlr *ctlr; + Block *b; + + ctlr = edev->ctlr; + while((b = qget(edev->oq)) != nil){ + ctlr->txpkt++; + if(ctlr->buf == nil) + freeb(b); + else{ + ctlr->udev->transmit(ctlr, b); + ctlr->txbuf++; + } + } +} + +static long +etherusbctl(Ether* edev, void* buf, long n) +{ + Ctlr *ctlr; + Cmdbuf *cb; + Cmdtab *ct; + Udev *udev; + + if((ctlr = edev->ctlr) == nil) + error(Enonexist); + + cb = parsecmd(buf, n); + if(waserror()){ + free(cb); + nexterror(); + } + ct = lookupcmd(cb, cmds, nelem(cmds)); + switch(ct->index){ + case Bind: + for(udev = udevtab; udev->name; udev++) + if(strcmp(cb->f[1], udev->name) == 0) + break; + if(udev->name == nil) + cmderror(cb, "unknown etherusb type"); + bind(ctlr, udev, cb); + break; + case Unbind: + unbind(ctlr); + break; + default: + cmderror(cb, "unknown etherusb control message"); + } + poperror(); + free(cb); + return n; +} + +static void +etherusbattach(Ether* edev) +{ + Ctlr *ctlr; + + ctlr = edev->ctlr; + ctlr->edev = edev; +} + +static int +etherusbpnp(Ether* edev) +{ + Ctlr *ctlr; + static int count; + + if(count >= 2) + return -1; + count++; + + ctlr = malloc(sizeof(Ctlr)); + edev->ctlr = ctlr; + edev->irq = -1; + edev->mbps = 100; /* TODO: get this from usbether */ + edev->attach = etherusbattach; + edev->transmit = etherusbtransmit; + edev->ifstat = etherusbifstat; + edev->ctl = etherusbctl; + return 0; +} + +void +etherusblink(void) +{ + addethercard("usb", etherusbpnp); +} --- /sys/src/nix/k10/usbehci.h Wed Jun 4 18:36:50 2014 +++ /sys/src/nix/k10/usbehci.h Wed Jun 4 18:36:51 2014 @@ -47,8 +47,8 @@ int ntree; /* number of dummy qhs in tree */ Qh* intrqhs; /* list of (not dummy) qhs in tree */ Isoio* iso; /* list of active Iso I/O */ - ulong load; - ulong isoload; + uint load; + uint isoload; int nintr; /* number of interrupts attended */ int ntdintr; /* number of intrs. with something to do */ int nqhintr; /* number of async td intrs. */ --- /sys/src/nix/k10/usbehcipc.c Wed Jun 4 18:36:52 2014 +++ /sys/src/nix/k10/usbehcipc.c Wed Jun 4 18:36:53 2014 @@ -212,7 +212,7 @@ * must be done before startup to prevent machine lockup. */ if((ctlr->capio->capparms & C64) != 0){ - print("ehci: segmented: set seg=0\n"); + dprint("ehci: segmented: set seg=0\n"); ctlr->opio->seg = 0; } --- /sys/src/nix/k10/usbohci.c Wed Jun 4 18:36:57 2014 +++ /sys/src/nix/k10/usbohci.c Wed Jun 4 18:37:00 2014 @@ -311,7 +311,7 @@ { int nel; int depth; - ulong* bw; + uint* bw; Ed** root; }; @@ -372,7 +372,6 @@ static int schedendpt(Ctlr *ub, Ep *ep); static void unschedendpt(Ctlr *ub, Ep *ep); -static long qtd(Ctlr*, Ep*, int, Block*, uchar*, uchar*, int, ulong); static char* errmsgs[] = { @@ -788,10 +787,10 @@ } static int -pickschedq(Qtree *qt, int pollival, ulong bw, ulong limit) +pickschedq(Qtree *qt, int pollival, uint bw, uint limit) { int i, j, d, upperb, q; - ulong best, worst, total; + uint best, worst, total; d = flog2lower(pollival); if(d > qt->depth) @@ -1475,7 +1474,7 @@ } static void -epiowait(Ctlr *ctlr, Qio *io, int tmout, ulong) +epiowait(Ctlr *ctlr, Qio *io, int tmout, uint) { Ed *ed; int timedout; @@ -1530,7 +1529,7 @@ Td *td, *ltd, *ntd, *td0; int last, ntds, tmout; long tot, n; - ulong load; + uint load; ed = io->ed; ctlr = ep->hp->aux; @@ -1676,7 +1675,7 @@ Ctlio *cio; Qio *io; char buf[80]; - ulong delta; + uint delta; if(ep->aux == nil) panic("epread: not open"); @@ -1921,7 +1920,7 @@ { Qio *io; Ctlio *cio; - ulong delta; + uint delta; uchar *b; long tot, nw; --- /sys/src/nix/k10/usbuhci.c Wed Jun 4 18:37:05 2014 +++ /sys/src/nix/k10/usbuhci.c Wed Jun 4 18:37:07 2014 @@ -149,8 +149,8 @@ Qh* qh[Tmax]; /* Dummy Qhs to insert Qhs after */ Isoio* iso; /* list of active iso I/O */ u32int* frames; /* frame list (used by hw) */ - ulong load; /* max load for a single frame */ - ulong isoload; /* max iso load for a single frame */ + uint load; /* max load for a single frame */ + uint isoload; /* max iso load for a single frame */ int nintr; /* number of interrupts attended */ int ntdintr; /* number of intrs. with something to do */ int nqhintr; /* number of intrs. for Qhs */ @@ -165,7 +165,7 @@ int usbid; /* usb address for endpoint/device */ int toggle; /* Tddata0/Tddata1 */ int tok; /* Tdtoksetup, Tdtokin, Tdtokout */ - ulong iotime; /* time of last I/O */ + uint iotime; /* time of last I/O (in ms) */ int debug; /* debug flag from the endpoint */ char* err; /* error string */ }; @@ -861,7 +861,7 @@ iso->err = errmsg(err); diprint("isointerrupt: tdi %#p error %#ux %s\n", tdi, err, iso->err); - diprint("ctlr load %uld\n", ctlr->load); + diprint("ctlr load %ud\n", ctlr->load); } tdi->ndata = 0; }else @@ -924,7 +924,7 @@ qh->io->err = errmsg(td->csw & Tderrors); dqprint("qhinterrupt: td %#p error %#ux %s\n", td, err, qh->io->err); - dqprint("ctlr load %uld\n", ctlr->load); + dqprint("ctlr load %ud\n", ctlr->load); } break; } @@ -1248,7 +1248,7 @@ } static void -epiowait(Ctlr *ctlr, Qio *io, int tmout, ulong load) +epiowait(Ctlr *ctlr, Qio *io, int tmout, uint load) { Qh *qh; int timedout; @@ -1305,13 +1305,13 @@ char buf[128]; uchar *c; int saved, ntds, tmout; - ulong load; + uint load; char *err; ctlr = ep->hp->aux; io->debug = ep->debug; tmout = ep->tmout; - ddeprint("epio: %s ep%d.%d io %#p count %ld load %uld\n", + ddeprint("epio: %s ep%d.%d io %#p count %ld load %ud\n", io->tok == Tdtokin ? "in" : "out", ep->dev->nb, ep->nb, io, count, ctlr->load); if((debug > 1 || ep->debug > 1) && io->tok != Tdtokin){ @@ -1360,7 +1360,7 @@ panic("epio: no td"); ltd->csw |= Tdioc; /* the last one interrupts */ - ddeprint("uhci: load %uld ctlr load %uld\n", load, ctlr->load); + ddeprint("uhci: load %ud ctlr load %ud\n", load, ctlr->load); ilock(ctlr); if(qh->state != Qclose){ io->iotime = TK2MS(sys->ticks); @@ -1456,7 +1456,7 @@ Qio *io; Isoio *iso; char buf[160]; - ulong delta; + uint delta; ddeprint("uhci: epread\n"); if(ep->aux == nil) @@ -1607,7 +1607,7 @@ Ctlio *cio; Isoio *iso; Qio *io; - ulong delta; + uint delta; char *b; int tot, nw; @@ -1684,7 +1684,7 @@ print("usb: uhci: bandwidth may be exceeded\n"); ctlr->load += ep->load; ctlr->isoload += ep->load; - dprint("uhci: load %uld isoload %uld\n", ctlr->load, ctlr->isoload); + dprint("uhci: load %ud isoload %ud\n", ctlr->load, ctlr->isoload); iunlock(ctlr); /* @@ -1859,7 +1859,7 @@ } static void -cancelisoio(Ctlr *ctlr, Isoio *iso, int pollival, ulong load) +cancelisoio(Ctlr *ctlr, Isoio *iso, int pollival, uint load) { Isoio **il; u32int *lp; --- /sys/src/nix/port/usbehci.c Wed Jun 4 18:37:12 2014 +++ /sys/src/nix/port/usbehci.c Wed Jun 4 18:37:16 2014 @@ -173,7 +173,7 @@ { int nel; int depth; - ulong* bw; + uint* bw; Qh** root; }; @@ -188,11 +188,11 @@ int usbid; /* usb address for endpoint/device */ int toggle; /* Tddata0/Tddata1 */ int tok; /* Tdtoksetup, Tdtokin, Tdtokout */ - ulong iotime; /* last I/O time; to hold interrupt polls */ + uint iotime; /* last I/O time in ms; to hold interrupt polls */ int debug; /* debug flag from the endpoint */ char* err; /* error string */ char* tag; /* debug (no room in Qh for this) */ - ulong bw; + uint bw; }; struct Ctlio @@ -213,13 +213,13 @@ uchar* data; /* iso data buffers if not embedded */ char* err; /* error string */ int nerrs; /* nb of consecutive I/O errors */ - ulong maxsize; /* ntds * ep->maxpkt */ + uint maxsize; /* ntds * ep->maxpkt */ long nleft; /* number of bytes left from last write */ int debug; /* debug flag from the endpoint */ int delay; /* max number of bytes to buffer */ int hs; /* is high speed? */ Isoio* next; /* in list of active Isoios */ - ulong td0frno; /* first frame used in ctlr */ + uint td0frno; /* first frame used in ctlr */ union{ Itd* tdi; /* next td processed by interrupt */ Sitd* stdi; @@ -547,10 +547,10 @@ } static int -pickschedq(Qtree *qt, int pollival, ulong bw, ulong limit) +pickschedq(Qtree *qt, int pollival, uint bw, uint limit) { int i, j, d, upperb, q; - ulong best, worst, total; + uint best, worst, total; d = flog2lower(pollival); if(d > qt->depth) @@ -580,11 +580,11 @@ { int q; Qh *tqh; - ulong bw; + uint bw; bw = qh->io->bw; q = pickschedq(ctlr->tree, pollival, 0, ~0); - ddqprint("ehci: sched %#p q %d, ival %d, bw %uld\n", + ddqprint("ehci: sched %#p q %d, ival %d, bw %ud\n", qh->io, q, pollival, bw); if(q < 0){ print("ehci: no room for ed\n"); @@ -608,7 +608,7 @@ int q; Qh *prev, *this, *next; Qh **l; - ulong bw; + uint bw; bw = qh->io->bw; q = qh->sched; @@ -1061,11 +1061,11 @@ print("\n"); return; } - print("iso %#p %s %s speed state %d nframes %d maxsz %uld", + print("iso %#p %s %s speed state %d nframes %d maxsz %ud", iso, iso->tok == Tdtokin ? "in" : "out", iso->hs ? "high" : "full", iso->state, iso->nframes, iso->maxsize); - print(" td0 %uld tdi %#p tdu %#p data %#p\n", + print(" td0 %ud tdi %#p tdu %#p data %#p\n", iso->td0frno, iso->tdi, iso->tdu, iso->data); if(iso->err != nil) print("\terr %s\n", iso->err); @@ -1242,7 +1242,7 @@ itdinit(Isoio *iso, Itd *td) { int p, t; - ulong pa, tsize, size; + u32int pa, tsize, size; /* * BUG: This does not put an integral number of samples @@ -1374,7 +1374,7 @@ iso->err = ierrmsg(err); diprint("isohsintr: tdi %#p error %#ux %s\n", tdi, err, iso->err); - diprint("ctlr load %uld\n", ctlr->load); + diprint("ctlr load %ud\n", ctlr->load); } tdi->ndata = 0; }else @@ -1438,7 +1438,7 @@ iso->err = serrmsg(err); diprint("isofsintr: tdi %#p error %#ux %s\n", stdi, err, iso->err); - diprint("ctlr load %uld\n", ctlr->load); + diprint("ctlr load %ud\n", ctlr->load); } stdi->ndata = 0; }else @@ -1774,7 +1774,7 @@ seprintio(char *s, char *e, Qio *io, char *pref) { s = seprint(s,e,"%s io %#p qh %#p id %#x", pref, io, io->qh, io->usbid); - s = seprint(s,e," iot %ld", io->iotime); + s = seprint(s,e," iot %d", io->iotime); s = seprint(s,e," tog %#x tok %#x err %s", io->toggle, io->tok, io->err); return s; } @@ -2272,7 +2272,7 @@ } static void -epiowait(Hci *hp, Qio *io, int tmout, ulong load) +epiowait(Hci *hp, Qio *io, int tmout, uint load) { Qh *qh; int timedout; @@ -2346,7 +2346,7 @@ { int saved, ntds, tmout; long n, tot; - ulong load; + uint load; char *err; char buf[128]; uchar *c; @@ -2357,7 +2357,7 @@ ctlr = ep->hp->aux; io->debug = ep->debug; tmout = ep->tmout; - ddeprint("epio: %s ep%d.%d io %#p count %ld load %uld\n", + ddeprint("epio: %s ep%d.%d io %#p count %ld load %ud\n", io->tok == Tdtokin ? "in" : "out", ep->dev->nb, ep->nb, io, count, ctlr->load); if((ehcidebug > 1 || ep->debug > 1) && io->tok != Tdtokin){ @@ -2408,7 +2408,7 @@ ltd->csw |= Tdioc; /* the last one interrupts */ coherence(); - ddeprint("ehci: load %uld ctlr load %uld\n", load, ctlr->load); + ddeprint("ehci: load %ud ctlr load %ud\n", load, ctlr->load); if(ehcidebug > 1 || ep->debug > 1) dumptd(td0, "epio: put: "); @@ -2486,7 +2486,7 @@ Qio *io; Isoio *iso; char buf[160]; - ulong delta; + uint delta; ddeprint("ehci: epread\n"); if(ep->aux == nil) @@ -2646,7 +2646,7 @@ Qio *io; Ctlio *cio; Isoio *iso; - ulong delta; + uint delta; pollcheck(ep->hp); @@ -2683,7 +2683,7 @@ long left; Sitd *td, *ltd; int i; - ulong frno; + uint frno; left = 0; ltd = nil; @@ -2729,8 +2729,9 @@ isohsinit(Ep *ep, Isoio *iso) { int ival, p; + uint frno, i; long left; - ulong frno, i, pa; + u32int pa; /* not 32-bit clean */ Itd *ltd, *td; iso->hs = 1; @@ -2778,7 +2779,7 @@ int ival; /* pollival in ms */ int tpf; /* tds per frame */ int i, n, w, woff; - ulong frno; + uint frno; Isoio *iso; iso = ep->aux; @@ -2816,7 +2817,7 @@ ctlr->load += ep->load; ctlr->isoload += ep->load; ctlr->nreqs++; - dprint("ehci: load %uld isoload %uld\n", ctlr->load, ctlr->isoload); + dprint("ehci: load %ud isoload %ud\n", ctlr->load, ctlr->isoload); diprint("iso nframes %d pollival %uld ival %d maxpkt %uld ntds %d\n", iso->nframes, ep->pollival, ival, ep->maxpkt, ep->ntds); iunlock(ctlr); @@ -2991,7 +2992,7 @@ } static void -cancelisoio(Ctlr *ctlr, Isoio *iso, int pollival, ulong load) +cancelisoio(Ctlr *ctlr, Isoio *iso, int pollival, uint load) { int frno, i, n, t, w, woff; u32int *lp, *tp; @@ -3151,7 +3152,7 @@ mkqhtree(Ctlr *ctlr) { int i, n, d, o, leaf0, depth; - ulong leafs[Nintrleafs]; + u32int leafs[Nintrleafs]; Qh *qh; Qh **tree; Qtree *qt; @@ -3212,7 +3213,7 @@ Eopio *opio; opio = ctlr->opio; - frsize = ctlr->nframes * sizeof(ulong); + frsize = ctlr->nframes * sizeof(u32int); assert((frsize & 0xFFF) == 0); /* must be 4k aligned */ ctlr->frames = mallocalign(frsize, frsize, 0, 0); if(ctlr->frames == nil)