use u32int for eopio addresses for nix Reference: /n/atom/patch/applied2013/nixeopio32 Date: Sat Sep 21 21:52:19 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/k10/usbehci.h Sat Sep 21 21:52:08 2013 +++ /sys/src/nix/k10/usbehci.h Sat Sep 21 21:52:08 2013 @@ -62,16 +62,16 @@ */ struct Eopio { - ulong cmd; /* 00 command */ - ulong sts; /* 04 status */ - ulong intr; /* 08 interrupt enable */ - ulong frno; /* 0c frame index */ - ulong seg; /* 10 bits 63:32 of EHCI datastructs (unused) */ - ulong frbase; /* 14 frame list base addr, 4096-byte boundary */ - ulong link; /* 18 link for async list */ + u32int cmd; /* 00 command */ + u32int sts; /* 04 status */ + u32int intr; /* 08 interrupt enable */ + u32int frno; /* 0c frame index */ + u32int seg; /* 10 bits 63:32 of EHCI datastructs (unused) */ + u32int frbase; /* 14 frame list base addr, 4096-byte boundary */ + u32int link; /* 18 link for async list */ uchar d2c[0x40-0x1c]; /* 1c dummy */ - ulong config; /* 40 1: all ports default-routed to this HC */ - ulong portsc[1]; /* 44 Port status and control, one per port */ + u32int config; /* 40 1: all ports default-routed to this HC */ + u32int portsc[1]; /* 44 Port status and control, one per port */ }; extern int ehcidebug; --- /sys/src/nix/port/usbehci.c Sat Sep 21 21:52:12 2013 +++ /sys/src/nix/port/usbehci.c Sat Sep 21 21:52:15 2013 @@ -309,7 +309,7 @@ /* software */ Td* next; /* in qh or Isoio or free list */ - uint ndata; /* bytes available/used at data */ + int ndata; /* bytes available/used at data */ uchar* data; /* pointer to actual data */ uchar* buff; /* allocated data buffer or nil */ uchar sbuff[1]; /* first byte of embedded buffer */ @@ -395,7 +395,7 @@ if(i == 100) print("ehci %#p %s cmd timed out\n", ctlr->capio, on ? "run" : "halt"); - ddprint("ehci %#p cmd %#lux sts %#lux\n", + ddprint("ehci %#p cmd %#ux sts %#ux\n", ctlr->capio, opio->cmd, opio->sts); } @@ -524,9 +524,9 @@ } static void -qhsetaddr(Qh *qh, ulong addr) +qhsetaddr(Qh *qh, u32int addr) { - ulong eps0; + u32int eps0; eps0 = qh->eps0 & ~((Epmax<<8)|Devmax); qh->eps0 = eps0 | addr & Devmax | ((addr >> 7) & Epmax) << 8; @@ -645,7 +645,7 @@ static void qhsetmaxpkt(Qh *qh, int maxpkt) { - ulong eps0; + u32int eps0; eps0 = qh->eps0 & ~(Qhmplmask << Qhmplshift); qh->eps0 = eps0 | (maxpkt & Qhmplmask) << Qhmplshift; @@ -787,7 +787,7 @@ static void qhlinktd(Qh *qh, Td *td) { - ulong csw; + u32int csw; int i; csw = qh->csw; @@ -810,9 +810,9 @@ } static char* -seprintlink(char *s, char *se, char *name, ulong l, int typed) +seprintlink(char *s, char *se, char *name, u32int l, int typed) { - s = seprint(s, se, "%s %ulx", name, l); + s = seprint(s, se, "%s %ux", name, l); if((l & Lterm) != 0) return seprint(s, se, "T"); if(typed == 0) @@ -1125,14 +1125,14 @@ ctlr->capio, ctlr->frames, ctlr->nframes, ctlr->nintr, ctlr->ntdintr); print(" nqhintr %d nisointr %d\n", ctlr->nqhintr, ctlr->nisointr); - print("\tcmd %#lux sts %#lux intr %#lux frno %uld", + print("\tcmd %#ux sts %#ux intr %#ux frno %ud", opio->cmd, opio->sts, opio->intr, opio->frno); - print(" base %#lux link %#lux fr0 %#lux\n", + print(" base %#ux link %#ux fr0 %#lux\n", opio->frbase, opio->link, ctlr->frames[0]); se = buf+sizeof(buf); s = seprint(buf, se, "\t"); for(i = 0; i < hp->nports; i++){ - s = seprint(s, se, "p%d %#lux ", i, opio->portsc[i]); + s = seprint(s, se, "p%d %#ux ", i, opio->portsc[i]); if(hp->nports > 4 && i == hp->nports/2 - 1) s = seprint(s, se, "\n\t"); } @@ -1519,7 +1519,7 @@ Ctlr *ctlr; Eopio *opio; Isoio *iso; - ulong sts; + u32int sts; Qh *qh; int i, some; @@ -1562,7 +1562,7 @@ ctlr->nintr, ctlr->ntdintr); print(" nqhintr %d nisointr %d\n", ctlr->nqhintr, ctlr->nisointr); - print("\tcmd %#lux sts %#lux intr %#lux frno %uld", + print("\tcmd %#ux sts %#ux intr %#ux frno %ud", opio->cmd, opio->sts, opio->intr, opio->frno); } @@ -1632,7 +1632,7 @@ microdelay(64); iunlock(ctlr); tsleep(&up->sleep, return0, 0, Enabledelay); - dprint("ehci %#p port %d enable=%d: sts %#lux\n", + dprint("ehci %#p port %d enable=%d: sts %#ux\n", ctlr->capio, port, on, opio->portsc[port-1]); qunlock(&ctlr->portlck); poperror(); @@ -1651,7 +1651,7 @@ portlend(Ctlr *ctlr, int port, char *ss) { Eopio *opio; - ulong s; + u32int s; opio = ctlr->opio; @@ -1665,7 +1665,7 @@ static int portreset(Hci *hp, int port, int on) { - ulong *portscp; + u32int *portscp; Eopio *opio; Ctlr *ctlr; int i; @@ -1682,7 +1682,7 @@ nexterror(); } portscp = &opio->portsc[port-1]; - dprint("ehci %#p port %d reset; sts %#lux\n", ctlr->capio, port, *portscp); + dprint("ehci %#p port %d reset; sts %#ux\n", ctlr->capio, port, *portscp); ilock(ctlr); /* Shalted must be zero, else Psreset will stay set */ if (opio->sts & Shalted) @@ -1695,20 +1695,23 @@ * usb 2 spec: reset must finish within 20 ms. * linux says spec says it can take 50 ms. for hubs. */ - for(i = 0; *portscp & Psreset && i < 50; i++) + delay(50); + *portscp &= ~Psreset; /* terminate reset */ + + delay(10); + for(i = 0; *portscp & Psreset && i < 10; i++) delay(10); + if (*portscp & Psreset) - iprint("ehci %#p: port %d didn't reset within %d ms; sts %#lux\n", - ctlr->capio, port, i * 10, *portscp); - *portscp &= ~Psreset; /* force appearance of reset done */ - coherence(); + iprint("ehci %#p: port %d didn't reset sts %#ux\n", + ctlr->capio, port, *portscp); delay(10); /* ehci spec: enable within 2 ms. */ if((*portscp & Psenable) == 0) portlend(ctlr, port, "full"); iunlock(ctlr); - dprint("ehci %#p after port %d reset; sts %#lux\n", + dprint("ehci %#p after port %d reset; sts %#ux\n", ctlr->capio, port, *portscp); qunlock(&ctlr->portlck); poperror(); @@ -1848,15 +1851,15 @@ xdump(char* pref, void *qh) { int i; - ulong *u; + u32int *u; u = qh; print("%s %#p:", pref, u); for(i = 0; i < 16; i++) if((i%4) == 0) - print("\n %#8.8ulx", u[i]); + print("\n %#.8ux", u[i]); else - print(" %#8.8ulx", u[i]); + print(" %#.8ux", u[i]); print("\n"); } @@ -3215,7 +3218,7 @@ mkqhtree(ctlr); /* init sync list */ edfree(edalloc()); /* try to get some ones pre-allocated */ - dprint("ehci %#p flb %#lux frno %#lux\n", + dprint("ehci %#p flb %#ux frno %#ux\n", ctlr->capio, opio->frbase, opio->frno); }