sce
sched_cancel(&iph1->sce);
&& p->sce.func == NULL && p->scr.func == NULL) {
sched_cancel(&iph2->sce);
struct sched sce; /* schedule for expire */
struct sched sce; /* schedule for expire */
isakmp_ph1dying(container_of(p, struct ph1handle, sce));
sched_schedule(&iph1->sce, iph1->approval->lifetime *
isakmp_ph1expire(container_of(p, struct ph1handle, sce));
isakmp_ph1delete(container_of(p, struct ph1handle, sce));
isakmp_ph2expire(container_of(p, struct ph2handle, sce));
sched_schedule(&iph2->sce, 1, isakmp_ph2delete_stub);
isakmp_ph2delete(container_of(p, struct ph2handle, sce));
sched_schedule(&iph2->sce, 1, isakmp_chkph1there_stub);
sched_cancel(&iph2->sce);
sched_schedule(&iph2->sce, 1, isakmp_chkph1there_stub);
isakmp_chkph1there(container_of(p, struct ph2handle, sce));
sched_schedule(&iph2->sce, 1, isakmp_chkph1there_stub);
sched_schedule(&iph1->sce,
sched_schedule(&iph1->sce, iph1->approval->lifetime,
quick_timeover(container_of(p, struct ph2handle, sce));
sched_schedule(&iph2->sce, lcconf->wait_ph2complete,
sched_schedule(&iph2->sce, lcconf->wait_ph2complete,
sched_cancel(&iph2->sce);
sched_schedule(&iph2->sce, iph2->approval->lifetime,
sched_cancel(&iph2->sce);
sched_cancel(&iph2->sce);
sce = kmem_alloc(sizeof(*sce), KM_SLEEP);
sce->sce_user_start = user_start;
sce->sce_user_end = user_end;
sce->sce_md_syscall = md_syscallemu(p);
KASSERT(sce->sce_md_syscall != NULL);
syscallemu_setsce(p, sce);
syscallemu_setsce(struct proc *p, struct syscallemu_data *sce)
proc_setspecific(p, syscallemu_data_key, sce);
struct syscallemu_data *sce = priv;
kmem_free(sce, sizeof(*sce));
struct syscallemu_data *sce;
struct syscallemu_data *sce;
sce = syscallemu_getsce(p);
if (sce) {
if ((pc_call >= sce->sce_user_start &&
pc_call < sce->sce_user_end) ||
(pc_call + INSN_SIZE >= sce->sce_user_start &&
pc_call + INSN_SIZE < sce->sce_user_end)) {
md_syscall = sce->sce_md_syscall;
struct syscallemu_data *sce;
sce = syscallemu_getsce(p);
if (sce) {
if ((rip_call >= sce->sce_user_start &&
rip_call < sce->sce_user_end) ||
(rip_call + frame->tf_err >= sce->sce_user_start &&
rip_call + frame->tf_err < sce->sce_user_end)) {
md_syscall = sce->sce_md_syscall;
while (sce->cur == sce->fill) {
DPRINTFN(5, "sleep on %jx", (uintptr_t)sce, 0, 0, 0);
error = cv_timedwait_sig(&sce->cv, &sc->sc_lock,
mstohz(sce->timeout));
while (sce->cur != sce->fill && uio->uio_resid > 0 && !error) {
if(sce->fill > sce->cur)
n = uimin(sce->fill - sce->cur, uio->uio_resid);
n = uimin(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];
KASSERT(sce->edesc);
KASSERT(sce->pipeh);
switch (sce->edesc->bmAttributes & UE_XFERTYPE) {
if (sce->state & UGEN_BULK_WB) {
uio->uio_resid, sce->ra_wb_used, 0, 0);
xfer = sce->ra_wb_xfer;
if (sce->ra_wb_used == sce->limit - sce->ibuf &&
while (sce->ra_wb_used ==
sce->limit - sce->ibuf) {
(uintptr_t)sce, 0, 0, 0);
error = cv_timedwait_sig(&sce->cv,
&sc->sc_lock, mstohz(sce->timeout));
sce->ra_wb_used < sce->limit - sce->ibuf) {
(sce->limit - sce->ibuf)
- sce->ra_wb_used);
n = uimin(n, sce->limit - sce->fill);
error = uiomove(sce->fill, n, uio);
sce->fill += n;
sce->ra_wb_used += n;
if (sce->fill == sce->limit)
sce->fill = sce->ibuf;
if (sce->state & UGEN_RA_WB_STOP &&
sce->ra_wb_used > 0) {
n = uimin(sce->ra_wb_used,
sce->ra_wb_xferlen);
tn = uimin(n, sce->limit - sce->cur);
memcpy(dbuf, sce->cur, tn);
memcpy(dbuf, sce->ibuf,
usbd_setup_xfer(xfer, sce, NULL, n,
sce->state &= ~UGEN_RA_WB_STOP;
sce->state |= UGEN_RA_WB_STOP;
error = usbd_create_xfer(sce->pipeh, UGEN_BBSIZE,
err = usbd_bulk_transfer(xfer, sce->pipeh, 0, sce->timeout,
error = usbd_create_xfer(sce->pipeh,
UGETW(sce->edesc->wMaxPacketSize), 0, 0, &xfer);
while ((n = uimin(UGETW(sce->edesc->wMaxPacketSize),
err = usbd_intr_transfer(xfer, sce->pipeh, 0,
sce->timeout, sc->sc_buffer, &n);
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[i][dir];
if (sce->pipeh)
usbd_abort_pipe(sce->pipeh);
sce = &sc->sc_endpoints[i][dir];
seldestroy(&sce->rsel);
cv_destroy(&sce->cv);
struct ugen_endpoint *sce;
struct ugen_endpoint *sce = addr;
struct ugen_softc *sc = sce->sc;
usbd_clear_endpoint_stall_async(sce->pipeh);
ibuf = sce->ibuf;
(void)b_to_q(ibuf, count, &sce->q);
cv_signal(&sce->cv);
selnotify(&sce->rsel, 0, 0);
struct ugen_endpoint *sce = req->sce;
struct ugen_softc *sc = sce->sc;
(intmax_t)(req - sce->isoreqs), count, 0, 0);
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);
n = uimin(actlen, sce->limit - sce->fill);
memcpy(sce->fill, tbuf, n);
sce->fill += n;
if (sce->fill == sce->limit)
sce->fill = sce->ibuf;
cv_signal(&sce->cv);
selnotify(&sce->rsel, 0, 0);
struct ugen_endpoint *sce = addr;
struct ugen_softc *sc = sce->sc;
sce->state |= UGEN_RA_WB_STOP;
usbd_clear_endpoint_stall_async(sce->pipeh);
sce->ra_wb_used += count;
tbuf = (char const *)usbd_get_buffer(sce->ra_wb_xfer);
n = uimin(count, sce->limit - sce->fill);
memcpy(sce->fill, tbuf, n);
sce->fill += n;
if (sce->fill == sce->limit)
sce->fill = sce->ibuf;
memcpy(sce->fill, tbuf, count);
sce->fill += count;
n = (sce->limit - sce->ibuf) - sce->ra_wb_used;
usbd_setup_xfer(xfer, sce, NULL, uimin(n, sce->ra_wb_xferlen), 0,
sce->state |= UGEN_RA_WB_STOP;
sce->state |= UGEN_RA_WB_STOP;
cv_signal(&sce->cv);
selnotify(&sce->rsel, 0, 0);
struct ugen_endpoint *sce = addr;
struct ugen_softc *sc = sce->sc;
sce->state |= UGEN_RA_WB_STOP;
usbd_clear_endpoint_stall_async(sce->pipeh);
sce->ra_wb_used -= count;
sce->cur += count;
if (sce->cur >= sce->limit)
sce->cur = sce->ibuf + (sce->cur - sce->limit);
if (sce->ra_wb_used > 0) {
tbuf = (char *)usbd_get_buffer(sce->ra_wb_xfer);
count = uimin(sce->ra_wb_used, sce->ra_wb_xferlen);
n = uimin(count, sce->limit - sce->cur);
memcpy(tbuf, sce->cur, n);
memcpy(tbuf, sce->ibuf, count - n);
usbd_setup_xfer(xfer, sce, NULL, count, 0, USBD_NO_TIMEOUT,
sce->state |= UGEN_RA_WB_STOP;
sce->state |= UGEN_RA_WB_STOP;
cv_signal(&sce->cv);
selnotify(&sce->rsel, 0, 0);
struct ugen_endpoint *sce;
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;
(uintptr_t)sce->pipeh, sce->state & UGEN_SHORT_OK, 0, 0);
sce = &sc->sc_endpoints[endpt][dir];
if (sce == NULL)
sce->timeout = *(int *)addr;
(uintptr_t)sce->pipeh, dir, sce->timeout, 0);
sce = &sc->sc_endpoints[endpt][IN];
if (sce == NULL || sce->pipeh == NULL)
edesc = sce->edesc;
if (sce->state & UGEN_BULK_RA)
KASSERT(sce->ra_wb_xfer == NULL);
KASSERT(sce->ibuf == NULL);
if (sce->ra_wb_bufsize == 0 || sce->ra_wb_reqsize == 0)
error = usbd_create_xfer(sce->pipeh,
sce->ra_wb_reqsize, 0, 0, &sce->ra_wb_xfer);
sce->ra_wb_xferlen = sce->ra_wb_reqsize;
sce->ibuf = kmem_alloc(sce->ra_wb_bufsize, KM_SLEEP);
sce->fill = sce->cur = sce->ibuf;
sce->limit = sce->ibuf + sce->ra_wb_bufsize;
sce->ra_wb_used = 0;
sce->state |= UGEN_BULK_RA;
sce->state &= ~UGEN_RA_WB_STOP;
usbd_setup_xfer(sce->ra_wb_xfer, sce, NULL,
uimin(sce->ra_wb_xferlen, sce->ra_wb_bufsize),
err = usbd_transfer(sce->ra_wb_xfer);
sce->state &= ~UGEN_BULK_RA;
kmem_free(sce->ibuf, sce->ra_wb_bufsize);
sce->ibuf = NULL;
usbd_destroy_xfer(sce->ra_wb_xfer);
sce->ra_wb_xfer = NULL;
if (!(sce->state & UGEN_BULK_RA))
sce->state &= ~UGEN_BULK_RA;
usbd_abort_pipe(sce->pipeh);
usbd_destroy_xfer(sce->ra_wb_xfer);
sce->ra_wb_xfer = NULL;
kmem_free(sce->ibuf, sce->ra_wb_bufsize);
sce->ibuf = NULL;
sce = &sc->sc_endpoints[endpt][OUT];
if (sce == NULL || sce->pipeh == NULL)
edesc = sce->edesc;
if (sce->state & UGEN_BULK_WB)
KASSERT(sce->ra_wb_xfer == NULL);
KASSERT(sce->ibuf == NULL);
if (sce->ra_wb_bufsize == 0 || sce->ra_wb_reqsize == 0)
error = usbd_create_xfer(sce->pipeh, sce->ra_wb_reqsize,
0, 0, &sce->ra_wb_xfer);
sce->ra_wb_xferlen = sce->ra_wb_reqsize;
sce->ibuf = kmem_alloc(sce->ra_wb_bufsize, KM_SLEEP);
sce->fill = sce->cur = sce->ibuf;
sce->limit = sce->ibuf + sce->ra_wb_bufsize;
sce->ra_wb_used = 0;
sce->state |= UGEN_BULK_WB | UGEN_RA_WB_STOP;
if (!(sce->state & UGEN_BULK_WB))
sce->state &= ~UGEN_BULK_WB;
usbd_abort_pipe(sce->pipeh);
usbd_destroy_xfer(sce->ra_wb_xfer);
sce->ra_wb_xfer = NULL;
kmem_free(sce->ibuf, sce->ra_wb_bufsize);
sce->ibuf = NULL;
sce = &sc->sc_endpoints[endpt][IN];
sce = &sc->sc_endpoints[endpt][OUT];
if (sce == NULL || sce->pipeh == NULL)
sce->ra_wb_bufsize = opt->ra_wb_buffer_size;
sce->ra_wb_reqsize = opt->ra_wb_request_size;
sce = &sc->sc_endpoints[endpt][IN];
ptr, ur->ucr_flags, &ur->ucr_actlen, sce->timeout);
struct ugen_endpoint *sce = kn->kn_hook;
struct ugen_softc *sc = sce->sc;
selremove_knote(&sce->rsel, kn);
struct ugen_endpoint *sce = kn->kn_hook;
struct ugen_softc *sc = sce->sc;
kn->kn_data = sce->q.c_cc;
struct ugen_endpoint *sce = kn->kn_hook;
struct ugen_softc *sc = sce->sc;
} else if (sce->cur == sce->fill) {
} else 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 = kn->kn_hook;
struct ugen_softc *sc = sce->sc;
} else if (!(sce->state & UGEN_BULK_RA)) {
} else if (sce->ra_wb_used == 0) {
kn->kn_data = sce->ra_wb_used;
struct ugen_endpoint *sce = kn->kn_hook;
struct ugen_softc *sc = sce->sc;
} else if (!(sce->state & UGEN_BULK_WB)) {
} else if (sce->ra_wb_used == sce->limit - sce->ibuf) {
kn->kn_data = (sce->limit - sce->ibuf) - sce->ra_wb_used;
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[UGENENDPOINT(dev)][IN];
if (sce == NULL) {
sip = &sce->rsel;
switch (sce->edesc->bmAttributes & UE_XFERTYPE) {
sce = &sc->sc_endpoints[UGENENDPOINT(dev)][OUT];
if (sce == NULL) {
sip = &sce->rsel;
switch (sce->edesc->bmAttributes & UE_XFERTYPE) {
kn->kn_hook = sce;
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[i][dir];
selinit(&sce->rsel);
cv_init(&sce->cv, "ugensce");
struct ugen_endpoint *sce = &sc->sc_endpoints[i][dir];
memset(sce, 0, UGEN_ENDPOINT_NONZERO_CRUFT);
struct ugen_endpoint *sce;
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][dir];
if (sce->edesc == NULL) {
sce = &sc->sc_endpoints[endpt][dir];
sce->state = 0;
sce->timeout = USBD_NO_TIMEOUT;
(uintptr_t)sc, endpt, dir, (uintptr_t)sce);
edesc = sce->edesc;
err = usbd_open_pipe(sce->iface,
edesc->bEndpointAddress, 0, &sce->pipeh);
sce->ibuf = kmem_alloc(isize, KM_SLEEP);
if (clalloc(&sce->q, UGEN_IBSIZE, 0) == -1) {
kmem_free(sce->ibuf, isize);
sce->ibuf = NULL;
err = usbd_open_pipe_intr(sce->iface,
USBD_SHORT_XFER_OK, &sce->pipeh, sce,
sce->ibuf, isize, ugenintr,
clfree(&sce->q);
kmem_free(sce->ibuf, isize);
sce->ibuf = NULL;
err = usbd_open_pipe(sce->iface,
edesc->bEndpointAddress, 0, &sce->pipeh);
sce->ra_wb_bufsize = UGEN_BULK_RA_WB_BUFSIZE;
sce->ra_wb_reqsize = UGEN_BBSIZE;
sce->ibuf = kmem_alloc(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);
kmem_free(sce->ibuf, isize * UGEN_NISOFRAMES);
sce->ibuf = NULL;
sce->isoreqs[i].sce = sce;
err = usbd_create_xfer(sce->pipeh,
sce->isoreqs[i].xfer = xfer;
sce->isoreqs[i].dmabuf = usbd_get_buffer(xfer);
sce->isoreqs[i].sizes[j] = isize;
usbd_setup_isoc_xfer(xfer, &sce->isoreqs[i],
sce->isoreqs[i].sizes, UGEN_NISORFRMS, 0,
usbd_destroy_xfer(sce->isoreqs[i].xfer);
sce->isoreqs[i].xfer = NULL;
usbd_close_pipe(sce->pipeh);
sce->pipeh = NULL;
kmem_free(sce->ibuf, isize * UGEN_NISOFRAMES);
sce->ibuf = NULL;
sce->timeout = USBD_DEFAULT_TIMEOUT;
struct ugen_endpoint *sce;
sce = &sc->sc_endpoints[endpt][dir];
if (sce->pipeh == NULL)
endpt, dir, (uintptr_t)sce, 0);
usbd_abort_pipe(sce->pipeh);
int isize = UGETW(sce->edesc->wMaxPacketSize);
switch (sce->edesc->bmAttributes & UE_XFERTYPE) {
ndflush(&sce->q, sce->q.c_cc);
clfree(&sce->q);
usbd_destroy_xfer(sce->isoreqs[i].xfer);
sce->isoreqs[i].xfer = NULL;
if (sce->state & (UGEN_BULK_RA | UGEN_BULK_WB)) {
usbd_destroy_xfer(sce->ra_wb_xfer);
sce->ra_wb_xfer = NULL;
msize = sce->ra_wb_bufsize;
usbd_close_pipe(sce->pipeh);
sce->pipeh = NULL;
if (sce->ibuf != NULL) {
kmem_free(sce->ibuf, msize);
sce->ibuf = NULL;
sce = &sc->sc_endpoints[endpt][dir];
KASSERT(sce->pipeh == NULL);
KASSERT(sce->ibuf == NULL);
KASSERT(sce->ra_wb_xfer == NULL);
KASSERT(sce->isoreqs[i].xfer == NULL);
struct ugen_endpoint *sce = &sc->sc_endpoints[endpt][IN];
KASSERT(sce->edesc);
KASSERT(sce->pipeh);
switch (sce->edesc->bmAttributes & UE_XFERTYPE) {
while (sce->q.c_cc == 0) {
DPRINTFN(5, "sleep on %jx", (uintptr_t)sce, 0, 0, 0);
error = cv_timedwait_sig(&sce->cv, &sc->sc_lock,
mstohz(sce->timeout));
while (sce->q.c_cc > 0 && uio->uio_resid > 0 && !error) {
n = uimin(sce->q.c_cc, uio->uio_resid);
q_to_b(&sce->q, sc->sc_buffer, n);
if (sce->state & UGEN_BULK_RA) {
uio->uio_resid, sce->ra_wb_used, 0, 0);
xfer = sce->ra_wb_xfer;
if (sce->ra_wb_used == 0 && flag & IO_NDELAY) {
while (sce->ra_wb_used == 0) {
(uintptr_t)sce, 0, 0, 0);
error = cv_timedwait_sig(&sce->cv,
&sc->sc_lock, mstohz(sce->timeout));
&& sce->ra_wb_used > 0) {
sce->ra_wb_used);
n = uimin(n, sce->limit - sce->cur);
error = uiomove(sce->cur, n, uio);
sce->cur += n;
sce->ra_wb_used -= n;
if (sce->cur == sce->limit)
sce->cur = sce->ibuf;
if (sce->state & UGEN_RA_WB_STOP &&
sce->ra_wb_used < sce->limit - sce->ibuf) {
n = (sce->limit - sce->ibuf)
- sce->ra_wb_used;
usbd_setup_xfer(xfer, sce, NULL,
uimin(n, sce->ra_wb_xferlen),
sce->state &= ~UGEN_RA_WB_STOP;
sce->state |= UGEN_RA_WB_STOP;
error = usbd_create_xfer(sce->pipeh, UGEN_BBSIZE,
err = usbd_bulk_transfer(xfer, sce->pipeh,
sce->state & UGEN_SHORT_OK ? USBD_SHORT_XFER_OK : 0,
sce->timeout, sc->sc_buffer, &tn);
struct syn_cache_head *scp2, *sce;
sce = &tcp_syn_cache[tcp_syn_cache_size];
if (scp2 >= sce)
sce();
static void sce(void);