summaryrefslogtreecommitdiff
path: root/sys/src/9/port/devusb.c
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2018-03-06 17:18:48 +0000
committeraiju <devnull@localhost>2018-03-06 17:18:48 +0000
commit9226caf2a3bf88258665f4e3786c6abb8820d308 (patch)
treeb4746f9fde85eeffc8457c8c55d0406e52060f7d /sys/src/9/port/devusb.c
parent097879eace30b438c8c20edd543f5752d0eec07b (diff)
usbehci: add uframes control request to return uframes one at a time
Diffstat (limited to 'sys/src/9/port/devusb.c')
-rw-r--r--sys/src/9/port/devusb.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/src/9/port/devusb.c b/sys/src/9/port/devusb.c
index 362d40ca9..87c246e45 100644
--- a/sys/src/9/port/devusb.c
+++ b/sys/src/9/port/devusb.c
@@ -90,6 +90,7 @@ enum
CMtmout, /* timeout n (activate timeouts for ep) */
CMsampledelay, /* maximum delay introduced by buffering (iso) */
CMpreset, /* reset the port */
+ CMuframes, /* set uframe mode (iso) */
/* Hub feature selectors */
Rportenable = 1,
@@ -135,6 +136,7 @@ static Cmdtab epctls[] =
{CMtmout, "timeout", 2},
{CMsampledelay, "sampledelay", 2},
{CMpreset, "reset", 1},
+ {CMuframes, "uframes", 2},
};
static Dirtab usbdir[] =
@@ -291,9 +293,11 @@ seprintep(char *s, char *se, Ep *ep, int all)
s = seprint(s, se, " %s", usbmodename[ep->mode]);
s = seprint(s, se, " speed %s", spname[d->speed]);
s = seprint(s, se, " maxpkt %ld", ep->maxpkt);
+ s = seprint(s, se, " ntds %ld", ep->ntds);
s = seprint(s, se, " pollival %ld", ep->pollival);
s = seprint(s, se, " samplesz %ld", ep->samplesz);
s = seprint(s, se, " hz %ld", ep->hz);
+ s = seprint(s, se, " uframes %ld", ep->uframes);
s = seprint(s, se, " hub %d", ep->dev->hub);
s = seprint(s, se, " port %d", ep->dev->port);
s = seprint(s, se, " rootport %d", ep->dev->rootport);
@@ -352,7 +356,7 @@ epalloc(Hci *hp)
ep->hp = hp;
ep->maxpkt = 8;
ep->ntds = 1;
- ep->samplesz = ep->pollival = ep->hz = 0; /* make them void */
+ ep->uframes = ep->samplesz = ep->pollival = ep->hz = 0; /* make them void */
qunlock(&epslck);
return ep;
}
@@ -523,6 +527,7 @@ newdevep(Ep *ep, int i, int tt, int mode)
nep->pollival = 10;
nep->samplesz = 4;
nep->hz = 44100;
+ nep->uframes = 0;
break;
}
deprint("newdevep ep%d.%d %#p\n", d->nb, nep->nb, nep);
@@ -1336,6 +1341,17 @@ epctl(Ep *ep, Chan *c, void *a, long n)
setmaxpkt(ep, "hz");
qunlock(ep);
break;
+ case CMuframes:
+ if(ep->ttype != Tiso)
+ error("not an iso endpoint");
+ l = strtoul(cb->f[1], nil, 0);
+ deprint("usb uframes %s %d\n", cb->f[0], l);
+ if(l != 0 && l != 1)
+ error("uframes not in [0:1]");
+ qlock(ep);
+ ep->uframes = l;
+ qunlock(ep);
+ break;
case CMclrhalt:
qlock(ep);
deprint("usb epctl %s\n", cb->f[0]);