sce
sce->timeout = *(int *)addr;
sce = &sc->sc_endpoints[endpt][IN];
ptr, ur->ucr_flags, &ur->ucr_actlen, sce->timeout);
struct ugen_endpoint *sce = (void *)kn->kn_hook;
klist_remove_locked(&sce->rsel.si_note, kn);
struct ugen_endpoint *sce = (void *)kn->kn_hook;
kn->kn_data = sce->q.c_cc;
struct ugen_endpoint *sce = (void *)kn->kn_hook;
if (sce->cur == sce->fill)
if (sce->cur < sce->fill)
kn->kn_data = sce->fill - sce->cur;
kn->kn_data = (sce->limit - sce->cur) +
(sce->fill - sce->ibuf);
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[UGENENDPOINT(dev)][IN];
if (sce == NULL)
klist = &sce->rsel.si_note;
switch (UE_GET_XFERTYPE(sce->edesc->bmAttributes)) {
klist = &sce->rsel.si_note;
switch (UE_GET_XFERTYPE(sce->edesc->bmAttributes)) {
kn->kn_hook = (void *)sce;
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[UE_GET_ADDR(endpt)][dir];
UE_GET_DIR(endpt), sce));
sce->sc = sc;
sce->edesc = ed;
sce->iface = iface;
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[endpt][dir];
if (sce == 0 || sce->edesc == 0)
sce = &sc->sc_endpoints[endpt][dir];
sce->state = 0;
sce->timeout = USBD_NO_TIMEOUT;
sc, endpt, dir, sce));
edesc = sce->edesc;
ugen_clear_iface_eps(sc, sce->iface);
err = usbd_open_pipe(sce->iface,
edesc->bEndpointAddress, 0, &sce->pipeh);
sce->ibuflen = isize;
sce->ibuf = malloc(sce->ibuflen, M_USBDEV, M_WAITOK);
clalloc(&sce->q, UGEN_IBSIZE, 0);
err = usbd_open_pipe_intr(sce->iface,
USBD_SHORT_XFER_OK, &sce->pipeh, sce,
sce->ibuf, isize, ugenintr,
free(sce->ibuf, M_USBDEV, sce->ibuflen);
clfree(&sce->q);
usbd_clear_endpoint_toggle(sce->pipeh);
err = usbd_open_pipe(sce->iface,
edesc->bEndpointAddress, 0, &sce->pipeh);
usbd_clear_endpoint_toggle(sce->pipeh);
sce->ibuflen = isize * UGEN_NISOFRAMES;
sce->ibuf = mallocarray(isize, UGEN_NISOFRAMES,
sce->cur = sce->fill = sce->ibuf;
sce->limit = sce->ibuf + isize * UGEN_NISOFRAMES;
err = usbd_open_pipe(sce->iface,
edesc->bEndpointAddress, 0, &sce->pipeh);
free(sce->ibuf, M_USBDEV, sce->ibuflen);
sce->isoreqs[i].sce = sce;
sce->isoreqs[i].xfer = xfer;
sce->isoreqs[i].dmabuf = buf;
sce->isoreqs[i].sizes[j] = isize;
usbd_setup_isoc_xfer(xfer, sce->pipeh,
&sce->isoreqs[i], sce->isoreqs[i].sizes,
usbd_free_xfer(sce->isoreqs[i].xfer);
sce->timeout = USBD_DEFAULT_TIMEOUT;
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[endpt][dir];
if (sce == NULL || sce->pipeh == NULL)
endpt, dir, sce));
usbd_close_pipe(sce->pipeh);
sce->pipeh = NULL;
switch (UE_GET_XFERTYPE(sce->edesc->bmAttributes)) {
ndflush(&sce->q, sce->q.c_cc);
clfree(&sce->q);
usbd_free_xfer(sce->isoreqs[i].xfer);
if (sce->ibuf != NULL) {
free(sce->ibuf, M_USBDEV, sce->ibuflen);
sce->ibuf = NULL;
struct ugen_endpoint *sce = &sc->sc_endpoints[endpt][IN];
if (sce->edesc == NULL) {
if (sce->pipeh == NULL) {
switch (UE_GET_XFERTYPE(sce->edesc->bmAttributes)) {
while (sce->q.c_cc == 0) {
sce->state |= UGEN_ASLP;
DPRINTFN(5, ("ugenread: sleep on %p\n", sce));
error = tsleep_nsec(sce, PZERO | PCATCH, "ugenrintr",
MSEC_TO_NSEC(sce->timeout));
sce->state &= ~UGEN_ASLP;
while (sce->q.c_cc > 0 && uio->uio_resid > 0 && !error) {
n = ulmin(sce->q.c_cc, uio->uio_resid);
q_to_b(&sce->q, buffer, n);
if (sce->state & UGEN_SHORT_OK)
if (sce->timeout == 0)
usbd_setup_xfer(xfer, sce->pipeh, 0, buf, n,
flags, sce->timeout, NULL);
usbd_clear_endpoint_stall(sce->pipeh);
while (sce->cur == sce->fill) {
sce->state |= UGEN_ASLP;
DPRINTFN(5, ("ugenread: sleep on %p\n", sce));
error = tsleep_nsec(sce, PZERO | PCATCH, "ugenriso",
MSEC_TO_NSEC(sce->timeout));
sce->state &= ~UGEN_ASLP;
while (sce->cur != sce->fill && uio->uio_resid > 0 && !error) {
if(sce->fill > sce->cur)
n = ulmin(sce->fill - sce->cur, uio->uio_resid);
n = ulmin(sce->limit - sce->cur, uio->uio_resid);
error = uiomove(sce->cur, n, uio);
sce->cur += n;
if(sce->cur >= sce->limit)
sce->cur = sce->ibuf;
struct ugen_endpoint *sce = &sc->sc_endpoints[endpt][OUT];
if (sce->edesc == NULL) {
if (sce->pipeh == NULL) {
if (sce->timeout == 0)
switch (UE_GET_XFERTYPE(sce->edesc->bmAttributes)) {
usbd_setup_xfer(xfer, sce->pipeh, 0, buf, n,
flags, sce->timeout, NULL);
usbd_clear_endpoint_stall(sce->pipeh);
while ((n = ulmin(UGETW(sce->edesc->wMaxPacketSize),
usbd_setup_xfer(xfer, sce->pipeh, 0, buf, n,
flags, sce->timeout, NULL);
usbd_clear_endpoint_stall(sce->pipeh);
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[i][dir];
if (sce && sce->pipeh)
usbd_abort_pipe(sce->pipeh);
sce = &sc->sc_endpoints[endptno][IN];
klist_invalidate(&sce->rsel.si_note);
struct ugen_endpoint *sce = addr;
usbd_clear_endpoint_stall_async(sce->pipeh);
ibuf = sce->ibuf;
(void)b_to_q(ibuf, count, &sce->q);
if (sce->state & UGEN_ASLP) {
sce->state &= ~UGEN_ASLP;
DPRINTFN(5, ("ugen_intr: waking %p\n", sce));
wakeup(sce);
selwakeup(&sce->rsel);
struct ugen_endpoint *sce = req->sce;
DPRINTFN(5,("%s: xfer %ld, count=%d\n", __func__, req - sce->isoreqs,
if(sce->fill < sce->cur && sce->cur <= sce->fill + count) {
sce->cur += count;
if(sce->cur >= sce->limit)
sce->cur = sce->ibuf + (sce->limit - sce->cur);
isize = UGETW(sce->edesc->wMaxPacketSize);
struct ugen_endpoint *sce;
n = min(actlen, sce->limit - sce->fill);
memcpy(sce->fill, buf, n);
sce->fill += n;
if(sce->fill == sce->limit)
sce->fill = sce->ibuf;
usbd_setup_isoc_xfer(xfer, sce->pipeh, req, req->sizes, UGEN_NISORFRMS,
if (sce->state & UGEN_ASLP) {
sce->state &= ~UGEN_ASLP;
DPRINTFN(5, ("ugen_isoc_rintr: waking %p\n", sce));
wakeup(sce);
selwakeup(&sce->rsel);
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[UE_GET_ADDR(endpt)][dir];
sce->sc = 0;
sce->edesc = 0;
sce->iface = 0;
sce = &sc->sc_endpoints[UE_GET_ADDR(endpt)][dir];
sce->sc = sc;
sce->edesc = ed;
sce->iface = iface;
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[endpt][IN];
if (sce == NULL || sce->pipeh == NULL)
sce->state |= UGEN_SHORT_OK;
sce->state &= ~UGEN_SHORT_OK;
sce = &sc->sc_endpoints[endpt][IN];
if (sce == NULL)
sce->timeout = *(int *)addr;
sce = &sc->sc_endpoints[endpt][OUT];
if (sce == NULL)
struct syn_cache_head *scp2, *sce;
sce = &set->scs_buckethead[set->scs_size];
if (scp2 >= sce)
sce();
void sce(void);