summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb2/core/usb2_transfer.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb2/core/usb2_transfer.c')
-rw-r--r--sys/dev/usb2/core/usb2_transfer.c197
1 files changed, 96 insertions, 101 deletions
diff --git a/sys/dev/usb2/core/usb2_transfer.c b/sys/dev/usb2/core/usb2_transfer.c
index 2167624..59ac2c9 100644
--- a/sys/dev/usb2/core/usb2_transfer.c
+++ b/sys/dev/usb2/core/usb2_transfer.c
@@ -802,7 +802,6 @@ usb2_transfer_setup(struct usb2_device *udev,
usb2_cv_init(&info->cv_drain, "WDRAIN");
- info->usb2_mtx = &udev->bus->mtx;
info->priv_mtx = priv_mtx;
usb2_dma_tag_setup(&info->dma_parent_tag,
@@ -825,7 +824,7 @@ usb2_transfer_setup(struct usb2_device *udev,
/* create a callback thread */
if (usb2_proc_setup(&info->done_p,
- &udev->bus->mtx, USB_PRI_HIGH)) {
+ &udev->bus->bus_mtx, USB_PRI_HIGH)) {
parm.err = USB_ERR_NO_INTR_THREAD;
goto done;
}
@@ -878,13 +877,12 @@ usb2_transfer_setup(struct usb2_device *udev,
xfer->udev = udev;
xfer->address = udev->address;
xfer->priv_sc = priv_sc;
- xfer->priv_mtx = priv_mtx;
- xfer->usb2_mtx = &udev->bus->mtx;
+ xfer->xfer_mtx = priv_mtx;
xfer->usb2_root = info;
info->setup_refcount++;
- usb2_callout_init_mtx(&xfer->timeout_handle, xfer->usb2_mtx,
- CALLOUT_RETURNUNLOCKED);
+ usb2_callout_init_mtx(&xfer->timeout_handle,
+ &udev->bus->bus_mtx, CALLOUT_RETURNUNLOCKED);
} else {
/*
* Setup a dummy xfer, hence we are
@@ -1020,9 +1018,9 @@ done:
if (info->setup_refcount == 0) {
/*
* "usb2_transfer_unsetup_sub" will unlock
- * "usb2_mtx" before returning !
+ * the bus mutex before returning !
*/
- mtx_lock(info->usb2_mtx);
+ USB_BUS_LOCK(info->bus);
/* something went wrong */
usb2_transfer_unsetup_sub(info, 0);
@@ -1043,15 +1041,15 @@ usb2_transfer_unsetup_sub(struct usb2_xfer_root *info, uint8_t needs_delay)
struct usb2_page_cache *pc;
uint32_t temp;
- mtx_assert(info->usb2_mtx, MA_OWNED);
+ USB_BUS_LOCK_ASSERT(info->bus, MA_OWNED);
/* wait for any outstanding DMA operations */
if (needs_delay) {
temp = usb2_get_dma_delay(info->bus);
- usb2_pause_mtx(info->usb2_mtx, temp);
+ usb2_pause_mtx(&info->bus->bus_mtx, temp);
}
- mtx_unlock(info->usb2_mtx);
+ USB_BUS_UNLOCK(info->bus);
/* wait for interrupt thread to exit */
usb2_proc_unsetup(&info->done_p);
@@ -1105,8 +1103,8 @@ usb2_transfer_unsetup(struct usb2_xfer **pxfer, uint16_t n_setup)
if (xfer) {
if (xfer->pipe) {
- mtx_lock(xfer->priv_mtx);
- mtx_lock(xfer->usb2_mtx);
+ USB_XFER_LOCK(xfer);
+ USB_BUS_LOCK(xfer->udev->bus);
/*
* HINT: when you start/stop a transfer, it
@@ -1130,8 +1128,8 @@ usb2_transfer_unsetup(struct usb2_xfer **pxfer, uint16_t n_setup)
*/
pxfer[n_setup] = NULL;
- mtx_unlock(xfer->usb2_mtx);
- mtx_unlock(xfer->priv_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
+ USB_XFER_UNLOCK(xfer);
usb2_transfer_drain(xfer);
@@ -1154,7 +1152,7 @@ usb2_transfer_unsetup(struct usb2_xfer **pxfer, uint16_t n_setup)
if (xfer->usb2_root) {
info = xfer->usb2_root;
- mtx_lock(info->usb2_mtx);
+ USB_BUS_LOCK(info->bus);
USB_ASSERT(info->setup_refcount != 0,
("Invalid setup "
@@ -1166,7 +1164,7 @@ usb2_transfer_unsetup(struct usb2_xfer **pxfer, uint16_t n_setup)
usb2_transfer_unsetup_sub(info,
needs_delay);
} else {
- mtx_unlock(info->usb2_mtx);
+ USB_BUS_UNLOCK(info->bus);
}
}
}
@@ -1358,16 +1356,16 @@ usb2_start_hardware(struct usb2_xfer *xfer)
#if USB_DEBUG
if (USB_DEBUG_VAR > 0) {
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
usb2_dump_pipe(xfer->pipe);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
}
#endif
- mtx_assert(xfer->priv_mtx, MA_OWNED);
- mtx_assert(xfer->usb2_mtx, MA_NOTOWNED);
+ USB_XFER_LOCK_ASSERT(xfer, MA_OWNED);
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_NOTOWNED);
/* Only open the USB transfer once! */
if (!xfer->flags_int.open) {
@@ -1375,9 +1373,9 @@ usb2_start_hardware(struct usb2_xfer *xfer)
DPRINTF("open\n");
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
(xfer->pipe->methods->open) (xfer);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
}
/* set "transferring" flag */
xfer->flags_int.transferring = 1;
@@ -1387,9 +1385,9 @@ usb2_start_hardware(struct usb2_xfer *xfer)
* frequently the "done_q":
*/
if (xfer->wait_queue) {
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
usb2_transfer_dequeue(xfer);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
}
/* clear "did_dma_delay" flag */
xfer->flags_int.did_dma_delay = 0;
@@ -1421,16 +1419,16 @@ usb2_start_hardware(struct usb2_xfer *xfer)
*/
DPRINTF("xfer=%p nframes=0: stall "
"or clear stall!\n", xfer);
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
xfer->flags_int.can_cancel_immed = 1;
/* start the transfer */
usb2_command_wrapper(&xfer->pipe->pipe_q, xfer);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
usb2_transfer_done(xfer, USB_ERR_INVAL);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
/* compute total transfer length */
@@ -1439,9 +1437,9 @@ usb2_start_hardware(struct usb2_xfer *xfer)
xfer->sumlen += xfer->frlengths[x];
if (xfer->sumlen < xfer->frlengths[x]) {
/* length wrapped around */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
usb2_transfer_done(xfer, USB_ERR_INVAL);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
}
@@ -1456,9 +1454,9 @@ usb2_start_hardware(struct usb2_xfer *xfer)
if (xfer->flags_int.control_xfr) {
if (usb2_start_hardware_sub(xfer)) {
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
usb2_transfer_done(xfer, USB_ERR_STALLED);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
}
@@ -1513,9 +1511,9 @@ usb2_pipe_enter(struct usb2_xfer *xfer)
{
struct usb2_pipe *pipe;
- mtx_assert(xfer->priv_mtx, MA_OWNED);
+ USB_XFER_LOCK_ASSERT(xfer, MA_OWNED);
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
pipe = xfer->pipe;
@@ -1531,7 +1529,7 @@ usb2_pipe_enter(struct usb2_xfer *xfer)
if (xfer->error) {
/* some error has happened */
usb2_transfer_done(xfer, 0);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
} else {
@@ -1540,7 +1538,7 @@ usb2_pipe_enter(struct usb2_xfer *xfer)
/* start the transfer */
usb2_command_wrapper(&pipe->pipe_q, xfer);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
@@ -1558,7 +1556,7 @@ usb2_transfer_start(struct usb2_xfer *xfer)
/* transfer is gone */
return;
}
- mtx_assert(xfer->priv_mtx, MA_OWNED);
+ USB_XFER_LOCK_ASSERT(xfer, MA_OWNED);
/* mark the USB transfer started */
@@ -1570,10 +1568,10 @@ usb2_transfer_start(struct usb2_xfer *xfer)
if (xfer->flags_int.transferring) {
return;
}
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
/* call the USB transfer callback */
usb2_callback_ss_done_defer(xfer);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
@@ -1594,7 +1592,7 @@ usb2_transfer_stop(struct usb2_xfer *xfer)
/* transfer is gone */
return;
}
- mtx_assert(xfer->priv_mtx, MA_OWNED);
+ USB_XFER_LOCK_ASSERT(xfer, MA_OWNED);
/* check if the USB transfer was ever opened */
@@ -1605,7 +1603,7 @@ usb2_transfer_stop(struct usb2_xfer *xfer)
}
/* try to stop the current USB transfer */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
xfer->error = USB_ERR_CANCELLED;/* override any previous error */
/*
* Clear "open" and "started" when both private and USB lock
@@ -1657,7 +1655,7 @@ usb2_transfer_stop(struct usb2_xfer *xfer)
}
}
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
@@ -1676,16 +1674,16 @@ usb2_transfer_pending(struct usb2_xfer *xfer)
struct usb2_xfer_root *info;
struct usb2_xfer_queue *pq;
- mtx_assert(xfer->priv_mtx, MA_OWNED);
+ USB_XFER_LOCK_ASSERT(xfer, MA_OWNED);
if (xfer->flags_int.transferring) {
/* trivial case */
return (1);
}
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
if (xfer->wait_queue) {
/* we are waiting on a queue somewhere */
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return (1);
}
info = xfer->usb2_root;
@@ -1693,11 +1691,11 @@ usb2_transfer_pending(struct usb2_xfer *xfer)
if (pq->curr == xfer) {
/* we are currently scheduled for callback */
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return (1);
}
/* we are not pending */
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return (0);
}
@@ -1719,10 +1717,10 @@ usb2_transfer_drain(struct usb2_xfer *xfer)
/* transfer is gone */
return;
}
- if (xfer->priv_mtx != &Giant) {
- mtx_assert(xfer->priv_mtx, MA_NOTOWNED);
+ if (xfer->xfer_mtx != &Giant) {
+ USB_XFER_LOCK_ASSERT(xfer, MA_NOTOWNED);
}
- mtx_lock(xfer->priv_mtx);
+ USB_XFER_LOCK(xfer);
usb2_transfer_stop(xfer);
@@ -1732,9 +1730,9 @@ usb2_transfer_drain(struct usb2_xfer *xfer)
* Wait until the current outstanding USB
* transfer is complete !
*/
- usb2_cv_wait(&xfer->usb2_root->cv_drain, xfer->priv_mtx);
+ usb2_cv_wait(&xfer->usb2_root->cv_drain, xfer->xfer_mtx);
}
- mtx_unlock(xfer->priv_mtx);
+ USB_XFER_UNLOCK(xfer);
return;
}
@@ -1786,14 +1784,14 @@ usb2_callback_proc(struct usb2_proc_msg *_pm)
struct usb2_xfer_root *info = pm->usb2_root;
/* Change locking order */
- mtx_unlock(info->usb2_mtx);
+ USB_BUS_UNLOCK(info->bus);
/*
* We exploit the fact that the mutex is the same for all
* callbacks that will be called from this thread:
*/
mtx_lock(info->priv_mtx);
- mtx_lock(info->usb2_mtx);
+ USB_BUS_LOCK(info->bus);
/* Continue where we lost track */
usb2_command_wrapper(&info->done_q,
@@ -1815,9 +1813,8 @@ usb2_callback_ss_done_defer(struct usb2_xfer *xfer)
struct usb2_xfer_root *info = xfer->usb2_root;
struct usb2_xfer_queue *pq = &info->done_q;
- if (!mtx_owned(xfer->usb2_mtx)) {
- panic("%s: called unlocked!\n", __FUNCTION__);
- }
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
+
if (pq->curr != xfer) {
usb2_transfer_enqueue(pq, xfer);
}
@@ -1854,10 +1851,8 @@ usb2_callback_wrapper(struct usb2_xfer_queue *pq)
struct usb2_xfer *xfer = pq->curr;
struct usb2_xfer_root *info = xfer->usb2_root;
- if (!mtx_owned(xfer->usb2_mtx)) {
- panic("%s: called unlocked!\n", __FUNCTION__);
- }
- if (!mtx_owned(xfer->priv_mtx)) {
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
+ if (!mtx_owned(xfer->xfer_mtx)) {
/*
* Cases that end up here:
*
@@ -1888,22 +1883,22 @@ usb2_callback_wrapper(struct usb2_xfer_queue *pq)
/* get next USB transfer in the queue */
info->done_q.curr = NULL;
- mtx_unlock(xfer->usb2_mtx);
- mtx_assert(xfer->usb2_mtx, MA_NOTOWNED);
+ USB_BUS_UNLOCK(xfer->udev->bus);
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_NOTOWNED);
/* set correct USB state for callback */
if (!xfer->flags_int.transferring) {
xfer->usb2_state = USB_ST_SETUP;
if (!xfer->flags_int.started) {
/* we got stopped before we even got started */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
goto done;
}
} else {
if (usb2_callback_wrapper_sub(xfer)) {
/* the callback has been deferred */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
goto done;
}
xfer->flags_int.transferring = 0;
@@ -1926,7 +1921,7 @@ usb2_callback_wrapper(struct usb2_xfer_queue *pq)
(xfer->callback) (xfer);
/* pickup the USB mutex again */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
/*
* Check if we got started after that we got cancelled, but
@@ -1965,14 +1960,14 @@ usb2_dma_delay_done_cb(void *arg)
{
struct usb2_xfer *xfer = arg;
- mtx_assert(xfer->usb2_mtx, MA_OWNED);
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
DPRINTFN(3, "Completed %p\n", xfer);
/* queue callback for execution, again */
usb2_transfer_done(xfer, 0);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
@@ -2035,7 +2030,7 @@ usb2_transfer_done(struct usb2_xfer *xfer, usb2_error_t error)
{
struct usb2_xfer_queue *pq;
- mtx_assert(xfer->usb2_mtx, MA_OWNED);
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
DPRINTF("err=%s\n", usb2_errstr(error));
@@ -2061,7 +2056,7 @@ usb2_transfer_done(struct usb2_xfer *xfer, usb2_error_t error)
*/
usb2_transfer_dequeue(xfer);
- if (mtx_owned(xfer->priv_mtx)) {
+ if (mtx_owned(xfer->xfer_mtx)) {
/*
* If the private USB lock is not locked, then we assume
* that the BUS-DMA load stage has been passed:
@@ -2100,7 +2095,7 @@ usb2_transfer_start_cb(void *arg)
struct usb2_xfer *xfer = arg;
struct usb2_pipe *pipe = xfer->pipe;
- mtx_assert(xfer->usb2_mtx, MA_OWNED);
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
DPRINTF("start\n");
@@ -2117,7 +2112,7 @@ usb2_transfer_start_cb(void *arg)
} else {
xfer->flags_int.can_cancel_immed = 0;
}
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
@@ -2135,14 +2130,14 @@ usb2_transfer_set_stall(struct usb2_xfer *xfer)
/* tearing down */
return;
}
- mtx_assert(xfer->priv_mtx, MA_OWNED);
+ USB_XFER_LOCK_ASSERT(xfer, MA_OWNED);
/* avoid any races by locking the USB mutex */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
xfer->flags.stall_pipe = 1;
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
@@ -2160,14 +2155,14 @@ usb2_transfer_clear_stall(struct usb2_xfer *xfer)
/* tearing down */
return;
}
- mtx_assert(xfer->priv_mtx, MA_OWNED);
+ USB_XFER_LOCK_ASSERT(xfer, MA_OWNED);
/* avoid any races by locking the USB mutex */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
xfer->flags.stall_pipe = 0;
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return;
}
@@ -2187,7 +2182,7 @@ usb2_pipe_start(struct usb2_xfer_queue *pq)
xfer = pq->curr;
pipe = xfer->pipe;
- mtx_assert(xfer->usb2_mtx, MA_OWNED);
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
/*
* If the pipe is already stalled we do nothing !
@@ -2290,7 +2285,7 @@ void
usb2_transfer_timeout_ms(struct usb2_xfer *xfer,
void (*cb) (void *arg), uint32_t ms)
{
- mtx_assert(xfer->usb2_mtx, MA_OWNED);
+ USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
/* defer delay */
usb2_callout_reset(&xfer->timeout_handle,
@@ -2324,9 +2319,9 @@ usb2_callback_wrapper_sub(struct usb2_xfer *xfer)
if ((!xfer->flags_int.open) &&
(!xfer->flags_int.did_close)) {
DPRINTF("close\n");
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
(xfer->pipe->methods->close) (xfer);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
/* only close once */
xfer->flags_int.did_close = 1;
return (1); /* wait for new callback */
@@ -2353,10 +2348,10 @@ usb2_callback_wrapper_sub(struct usb2_xfer *xfer)
"on %p\n", temp, xfer);
if (temp != 0) {
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
usb2_transfer_timeout_ms(xfer,
&usb2_dma_delay_done_cb, temp);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
return (1); /* wait for new callback */
}
}
@@ -2448,7 +2443,7 @@ usb2_callback_wrapper_sub(struct usb2_xfer *xfer)
* If the current USB transfer is completing we need to start the
* next one:
*/
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
if (pipe->pipe_q.curr == xfer) {
usb2_command_wrapper(&pipe->pipe_q, NULL);
@@ -2460,7 +2455,7 @@ usb2_callback_wrapper_sub(struct usb2_xfer *xfer)
xfer->pipe->is_synced = 0;
}
}
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
done:
return (0);
}
@@ -2544,7 +2539,7 @@ repeat:
xfer = udev->default_xfer[0];
if (xfer) {
- mtx_lock(xfer->priv_mtx);
+ USB_XFER_LOCK(xfer);
no_resetup =
((xfer->address == udev->address) &&
(udev->default_ep_desc.wMaxPacketSize[0] ==
@@ -2559,7 +2554,7 @@ repeat:
usb2_transfer_start(xfer);
}
}
- mtx_unlock(xfer->priv_mtx);
+ USB_XFER_UNLOCK(xfer);
} else {
no_resetup = 0;
}
@@ -2609,9 +2604,9 @@ usb2_clear_data_toggle(struct usb2_device *udev, struct usb2_pipe *pipe)
{
DPRINTFN(5, "udev=%p pipe=%p\n", udev, pipe);
- mtx_lock(&udev->bus->mtx);
+ USB_BUS_LOCK(udev->bus);
pipe->toggle_next = 0;
- mtx_unlock(&udev->bus->mtx);
+ USB_BUS_UNLOCK(udev->bus);
return;
}
@@ -2655,8 +2650,8 @@ usb2_clear_stall_callback(struct usb2_xfer *xfer1,
DPRINTF("NULL input parameter\n");
return (0);
}
- mtx_assert(xfer1->priv_mtx, MA_OWNED);
- mtx_assert(xfer2->priv_mtx, MA_OWNED);
+ USB_XFER_LOCK_ASSERT(xfer1, MA_OWNED);
+ USB_XFER_LOCK_ASSERT(xfer2, MA_OWNED);
switch (USB_GET_STATE(xfer1)) {
case USB_ST_SETUP:
@@ -2786,15 +2781,15 @@ usb2_do_poll(struct usb2_xfer **ppxfer, uint16_t max)
* Poll hardware - signal that we are polling by
* locking the private mutex:
*/
- mtx_lock(xfer->priv_mtx);
+ USB_XFER_LOCK(xfer);
(udev->bus->methods->do_poll) (udev->bus);
- mtx_unlock(xfer->priv_mtx);
+ USB_XFER_UNLOCK(xfer);
/* poll clear stall start */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
pm = &udev->cs_msg[0].hdr;
(pm->pm_callback) (pm);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
if (udev->default_xfer[1]) {
@@ -2802,20 +2797,20 @@ usb2_do_poll(struct usb2_xfer **ppxfer, uint16_t max)
usb2_callout_poll(udev->default_xfer[1]);
/* poll clear stall done thread */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
pm = &udev->default_xfer[1]->
usb2_root->done_m[0].hdr;
(pm->pm_callback) (pm);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
}
/* poll timeout */
usb2_callout_poll(xfer);
/* poll done thread */
- mtx_lock(xfer->usb2_mtx);
+ USB_BUS_LOCK(xfer->udev->bus);
pm = &usb2_root->done_m[0].hdr;
(pm->pm_callback) (pm);
- mtx_unlock(xfer->usb2_mtx);
+ USB_BUS_UNLOCK(xfer->udev->bus);
}
}
return;
OpenPOWER on IntegriCloud