On 10/04/13(Wed) 16:24, Martin Pieuchot wrote:
> To submit a USB transfer, you generally use one of the variant of
> usbd_setup_xfer() coupled with one of the variant of usbd_transfer().
>
> But if you're lazy or don't care about the non-default options you
> can use one of the variant of usbd_do_request() that mostly do
> the two previous steps for you.
>
> The following diff start to reduce the number of different way to submit
> a transfer by getting rid of usbd_sync_transfer() which is just a
> wrapper around usbd_transfer() but with one more flag that can be
> specified in the chosen variant of usbd_setup_xfer() (:
New diff without a double "| USBD_SYNCHRONOUS" in uticom.c, spotted by
sthen@.
ok?
Index: if_athn_usb.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_athn_usb.c,v
retrieving revision 1.14
diff -u -p -r1.14 if_athn_usb.c
--- if_athn_usb.c 5 Apr 2013 05:39:46 -0000 1.14
+++ if_athn_usb.c 11 Apr 2013 07:36:23 -0000
@@ -730,8 +730,9 @@ athn_usb_htc_msg(struct athn_usb_softc *
usbd_setup_xfer(data->xfer, usc->tx_intr_pipe, NULL, data->buf,
sizeof(*htc) + sizeof(*msg) + len,
- USBD_SHORT_XFER_OK | USBD_NO_COPY, ATHN_USB_CMD_TIMEOUT, NULL);
- return (usbd_sync_transfer(data->xfer));
+ USBD_SHORT_XFER_OK | USBD_NO_COPY | USBD_SYNCHRONOUS,
+ ATHN_USB_CMD_TIMEOUT, NULL);
+ return (usbd_transfer(data->xfer));
}
int
Index: if_atu.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_atu.c,v
retrieving revision 1.101
diff -u -p -r1.101 if_atu.c
--- if_atu.c 24 Feb 2012 06:19:00 -0000 1.101
+++ if_atu.c 11 Apr 2013 07:36:23 -0000
@@ -330,9 +330,9 @@ atu_usb_request(struct atu_softc *sc, u_
xfer = usbd_alloc_xfer(sc->atu_udev);
usbd_setup_default_xfer(xfer, sc->atu_udev, 0, 500000, &req, data,
- length, USBD_SHORT_XFER_OK, 0);
+ length, USBD_SHORT_XFER_OK | USBD_SYNCHRONOUS, 0);
- err = usbd_sync_transfer(xfer);
+ err = usbd_transfer(xfer);
usbd_get_xfer_status(xfer, NULL, NULL, &total_len, NULL);
Index: if_otus.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_otus.c,v
retrieving revision 1.32
diff -u -p -r1.32 if_otus.c
--- if_otus.c 12 Oct 2012 19:53:24 -0000 1.32
+++ if_otus.c 11 Apr 2013 07:36:23 -0000
@@ -867,8 +867,9 @@ otus_cmd(struct otus_softc *sc, uint8_t
cmd->done = 0;
usbd_setup_xfer(cmd->xfer, sc->cmd_tx_pipe, cmd, cmd->buf, xferlen,
- USBD_FORCE_SHORT_XFER | USBD_NO_COPY, OTUS_CMD_TIMEOUT, NULL);
- error = usbd_sync_transfer(cmd->xfer);
+ USBD_FORCE_SHORT_XFER | USBD_NO_COPY | USBD_SYNCHRONOUS,
+ OTUS_CMD_TIMEOUT, NULL);
+ error = usbd_transfer(cmd->xfer);
if (error != 0) {
splx(s);
printf("%s: could not send command 0x%x (error=%s)\n",
Index: if_ral.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_ral.c,v
retrieving revision 1.121
diff -u -p -r1.121 if_ral.c
--- if_ral.c 3 Jul 2011 15:47:17 -0000 1.121
+++ if_ral.c 11 Apr 2013 07:36:23 -0000
@@ -1018,9 +1018,9 @@ ural_tx_bcn(struct ural_softc *sc, struc
}
usbd_setup_xfer(xfer, sc->sc_tx_pipeh, NULL, &cmd, sizeof cmd,
- USBD_FORCE_SHORT_XFER, RAL_TX_TIMEOUT, NULL);
+ USBD_FORCE_SHORT_XFER | USBD_SYNCHRONOUS, RAL_TX_TIMEOUT, NULL);
- error = usbd_sync_transfer(xfer);
+ error = usbd_transfer(xfer);
if (error != 0) {
usbd_free_xfer(xfer);
return error;
@@ -1036,9 +1036,10 @@ ural_tx_bcn(struct ural_softc *sc, struc
m0->m_pkthdr.len, rate, xferlen));
usbd_setup_xfer(xfer, sc->sc_tx_pipeh, NULL, buf, xferlen,
- USBD_FORCE_SHORT_XFER | USBD_NO_COPY, RAL_TX_TIMEOUT, NULL);
+ USBD_FORCE_SHORT_XFER | USBD_NO_COPY | USBD_SYNCHRONOUS,
+ RAL_TX_TIMEOUT, NULL);
- error = usbd_sync_transfer(xfer);
+ error = usbd_transfer(xfer);
usbd_free_xfer(xfer);
return error;
Index: if_rsu.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_rsu.c,v
retrieving revision 1.15
diff -u -p -r1.15 if_rsu.c
--- if_rsu.c 4 Feb 2013 23:13:41 -0000 1.15
+++ if_rsu.c 11 Apr 2013 07:36:23 -0000
@@ -776,8 +776,9 @@ rsu_fw_cmd(struct rsu_softc *sc, uint8_t
DPRINTFN(2, ("Tx cmd code=%d len=%d\n", code, cmdsz));
pipe = sc->pipe[sc->qid2idx[RSU_QID_H2C]];
usbd_setup_xfer(data->xfer, pipe, NULL, data->buf, xferlen,
- USBD_SHORT_XFER_OK | USBD_NO_COPY, RSU_CMD_TIMEOUT, NULL);
- return (usbd_sync_transfer(data->xfer));
+ USBD_SHORT_XFER_OK | USBD_NO_COPY | USBD_SYNCHRONOUS,
+ RSU_CMD_TIMEOUT, NULL);
+ return (usbd_transfer(data->xfer));
}
int
@@ -2013,9 +2014,10 @@ rsu_fw_loadsection(struct rsu_softc *sc,
memcpy(&txd[1], buf, mlen);
usbd_setup_xfer(data->xfer, pipe, NULL, data->buf,
- sizeof(*txd) + mlen, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+ sizeof(*txd) + mlen,
+ USBD_SHORT_XFER_OK | USBD_NO_COPY | USBD_SYNCHRONOUS,
RSU_TX_TIMEOUT, NULL);
- error = usbd_sync_transfer(data->xfer);
+ error = usbd_transfer(data->xfer);
if (error != 0)
return (error);
buf += mlen;
Index: if_uath.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_uath.c,v
retrieving revision 1.52
diff -u -p -r1.52 if_uath.c
--- if_uath.c 3 Oct 2012 08:05:26 -0000 1.52
+++ if_uath.c 11 Apr 2013 07:36:23 -0000
@@ -1319,8 +1319,8 @@ uath_tx_null(struct uath_softc *sc)
usbd_setup_xfer(data->xfer, sc->data_tx_pipe, data, data->buf,
sizeof (uint32_t) + sizeof (struct uath_tx_desc), USBD_NO_COPY |
- USBD_FORCE_SHORT_XFER, UATH_DATA_TIMEOUT, NULL);
- if (usbd_sync_transfer(data->xfer) != 0)
+ USBD_FORCE_SHORT_XFER | USBD_SYNCHRONOUS, UATH_DATA_TIMEOUT, NULL);
+ if (usbd_transfer(data->xfer) != 0)
return EIO;
sc->data_idx = (sc->data_idx + 1) % UATH_TX_DATA_LIST_COUNT;
@@ -2081,9 +2081,10 @@ uath_loadfirmware(struct uath_softc *sc,
/* send firmware block meta-data */
usbd_setup_xfer(ctlxfer, sc->cmd_tx_pipe, sc, txblock,
- sizeof (struct uath_fwblock), USBD_NO_COPY,
+ sizeof (struct uath_fwblock),
+ USBD_NO_COPY | USBD_SYNCHRONOUS,
UATH_CMD_TIMEOUT, NULL);
- if ((error = usbd_sync_transfer(ctlxfer)) != 0) {
+ if ((error = usbd_transfer(ctlxfer)) != 0) {
printf("%s: could not send firmware block info\n",
sc->sc_dev.dv_xname);
break;
@@ -2092,8 +2093,8 @@ uath_loadfirmware(struct uath_softc *sc,
/* send firmware block data */
bcopy(fw, txdata, mlen);
usbd_setup_xfer(txxfer, sc->data_tx_pipe, sc, txdata, mlen,
- USBD_NO_COPY, UATH_DATA_TIMEOUT, NULL);
- if ((error = usbd_sync_transfer(txxfer)) != 0) {
+ USBD_NO_COPY | USBD_SYNCHRONOUS, UATH_DATA_TIMEOUT, NULL);
+ if ((error = usbd_transfer(txxfer)) != 0) {
printf("%s: could not send firmware block data\n",
sc->sc_dev.dv_xname);
break;
@@ -2102,8 +2103,8 @@ uath_loadfirmware(struct uath_softc *sc,
/* wait for ack from firmware */
usbd_setup_xfer(rxxfer, sc->cmd_rx_pipe, sc, rxblock,
sizeof (struct uath_fwblock), USBD_SHORT_XFER_OK |
- USBD_NO_COPY, UATH_CMD_TIMEOUT, NULL);
- if ((error = usbd_sync_transfer(rxxfer)) != 0) {
+ USBD_NO_COPY | USBD_SYNCHRONOUS, UATH_CMD_TIMEOUT, NULL);
+ if ((error = usbd_transfer(rxxfer)) != 0) {
printf("%s: could not read firmware answer\n",
sc->sc_dev.dv_xname);
break;
Index: ueagle.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/ueagle.c,v
retrieving revision 1.36
diff -u -p -r1.36 ueagle.c
--- ueagle.c 27 Nov 2011 09:20:57 -0000 1.36
+++ ueagle.c 11 Apr 2013 07:36:23 -0000
@@ -356,18 +356,18 @@ ueagle_loadpage(void *xsc)
USETW(bi.wLast, (i == blockcount - 1) ? 1 : 0);
/* send block info through the IDMA pipe */
- usbd_setup_xfer(xfer, sc->pipeh_idma, sc, &bi, sizeof bi, 0,
- UEAGLE_IDMA_TIMEOUT, NULL);
- if (usbd_sync_transfer(xfer) != 0) {
+ usbd_setup_xfer(xfer, sc->pipeh_idma, sc, &bi, sizeof bi,
+ USBD_SYNCHRONOUS, UEAGLE_IDMA_TIMEOUT, NULL);
+ if (usbd_transfer(xfer) != 0) {
printf("%s: could not transfer block info\n",
sc->sc_dev.dv_xname);
break;
}
/* send block data through the IDMA pipe */
- usbd_setup_xfer(xfer, sc->pipeh_idma, sc, p, blocksize, 0,
- UEAGLE_IDMA_TIMEOUT, NULL);
- if (usbd_sync_transfer(xfer) != 0) {
+ usbd_setup_xfer(xfer, sc->pipeh_idma, sc, p, blocksize,
+ USBD_SYNCHRONOUS, UEAGLE_IDMA_TIMEOUT, NULL);
+ if (usbd_transfer(xfer) != 0) {
printf("%s: could not transfer block data\n",
sc->sc_dev.dv_xname);
break;
Index: umbg.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/umbg.c,v
retrieving revision 1.19
diff -u -p -r1.19 umbg.c
--- umbg.c 28 Mar 2013 03:58:03 -0000 1.19
+++ umbg.c 11 Apr 2013 07:36:23 -0000
@@ -402,10 +402,10 @@ umbg_read(struct umbg_softc *sc, u_int8_
}
usbd_setup_xfer(xfer, sc->sc_bulkout_pipe, NULL, &cmd, sizeof(cmd),
- USBD_SHORT_XFER_OK, USBD_DEFAULT_TIMEOUT, NULL);
+ USBD_SHORT_XFER_OK | USBD_SYNCHRONOUS, USBD_DEFAULT_TIMEOUT, NULL);
if (tstamp)
nanotime(tstamp);
- err = usbd_sync_transfer(xfer);
+ err = usbd_transfer(xfer);
if (err) {
DPRINTF(("%s: sending of command failed: %s\n",
sc->sc_dev.dv_xname, usbd_errstr(err)));
@@ -414,9 +414,9 @@ umbg_read(struct umbg_softc *sc, u_int8_
}
usbd_setup_xfer(xfer, sc->sc_bulkin_pipe, NULL, buf, len,
- USBD_SHORT_XFER_OK, USBD_DEFAULT_TIMEOUT, NULL);
+ USBD_SHORT_XFER_OK | USBD_SYNCHRONOUS, USBD_DEFAULT_TIMEOUT, NULL);
- err = usbd_sync_transfer(xfer);
+ err = usbd_transfer(xfer);
usbd_free_xfer(xfer);
if (err) {
DPRINTF(("%s: reading data failed: %s\n",
Index: uow.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/uow.c,v
retrieving revision 1.31
diff -u -p -r1.31 uow.c
--- uow.c 28 Mar 2013 03:58:03 -0000 1.31
+++ uow.c 11 Apr 2013 07:36:23 -0000
@@ -462,8 +462,8 @@ uow_read(struct uow_softc *sc, void *buf
return (-1);
}
usbd_setup_xfer(sc->sc_xfer, sc->sc_ph_ibulk, sc, buf, len,
- USBD_SHORT_XFER_OK, UOW_TIMEOUT, NULL);
- error = usbd_sync_transfer(sc->sc_xfer);
+ USBD_SHORT_XFER_OK | USBD_SYNCHRONOUS, UOW_TIMEOUT, NULL);
+ error = usbd_transfer(sc->sc_xfer);
usbd_free_xfer(sc->sc_xfer);
if (error != 0) {
printf("%s: read failed, len %d: %s\n",
@@ -492,9 +492,9 @@ uow_write(struct uow_softc *sc, const vo
printf("%s: failed to alloc xfer\n", sc->sc_dev.dv_xname);
return (-1);
}
- usbd_setup_xfer(sc->sc_xfer, sc->sc_ph_obulk, sc, (void *)buf, len, 0,
- UOW_TIMEOUT, NULL);
- error = usbd_sync_transfer(sc->sc_xfer);
+ usbd_setup_xfer(sc->sc_xfer, sc->sc_ph_obulk, sc, (void *)buf, len,
+ USBD_SYNCHRONOUS, UOW_TIMEOUT, NULL);
+ error = usbd_transfer(sc->sc_xfer);
usbd_free_xfer(sc->sc_xfer);
if (error != 0) {
printf("%s: write failed, len %d: %s\n",
Index: usbdi.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdi.c,v
retrieving revision 1.46
diff -u -p -r1.46 usbdi.c
--- usbdi.c 9 Apr 2013 08:47:56 -0000 1.46
+++ usbdi.c 11 Apr 2013 07:36:23 -0000
@@ -380,14 +380,6 @@ usbd_transfer(usbd_xfer_handle xfer)
return (xfer->status);
}
-/* Like usbd_transfer(), but waits for completion. */
-usbd_status
-usbd_sync_transfer(usbd_xfer_handle xfer)
-{
- xfer->flags |= USBD_SYNCHRONOUS;
- return (usbd_transfer(xfer));
-}
-
void *
usbd_alloc_buffer(usbd_xfer_handle xfer, u_int32_t size)
{
@@ -974,9 +966,9 @@ usbd_do_request_flags(usbd_device_handle
if (xfer == NULL)
return (USBD_NOMEM);
usbd_setup_default_xfer(xfer, dev, 0, timeout, req, data,
- UGETW(req->wLength), flags, 0);
+ UGETW(req->wLength), flags | USBD_SYNCHRONOUS, 0);
xfer->pipe = pipe;
- err = usbd_sync_transfer(xfer);
+ err = usbd_transfer(xfer);
#if defined(USB_DEBUG) || defined(DIAGNOSTIC)
if (xfer->actlen > xfer->length)
DPRINTF(("usbd_do_request: overrun addr=%d type=0x%02x req=0x"
@@ -1005,8 +997,8 @@ usbd_do_request_flags(usbd_device_handle
USETW(treq.wIndex, 0);
USETW(treq.wLength, sizeof(usb_status_t));
usbd_setup_default_xfer(xfer, dev, 0, USBD_DEFAULT_TIMEOUT,
- &treq, &status,sizeof(usb_status_t), 0, 0);
- nerr = usbd_sync_transfer(xfer);
+ &treq, &status, sizeof(usb_status_t), USBD_SYNCHRONOUS, 0);
+ nerr = usbd_transfer(xfer);
if (nerr)
goto bad;
s = UGETW(status.wStatus);
@@ -1019,8 +1011,8 @@ usbd_do_request_flags(usbd_device_handle
USETW(treq.wIndex, 0);
USETW(treq.wLength, 0);
usbd_setup_default_xfer(xfer, dev, 0, USBD_DEFAULT_TIMEOUT,
- &treq, &status, 0, 0, 0);
- nerr = usbd_sync_transfer(xfer);
+ &treq, &status, 0, USBD_SYNCHRONOUS, 0);
+ nerr = usbd_transfer(xfer);
if (nerr)
goto bad;
}
Index: usbdi.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdi.h,v
retrieving revision 1.46
diff -u -p -r1.46 usbdi.h
--- usbdi.h 10 Apr 2013 07:39:43 -0000 1.46
+++ usbdi.h 11 Apr 2013 07:36:23 -0000
@@ -118,7 +118,6 @@ usbd_device_handle usbd_pipe2device_hand
void *usbd_alloc_buffer(usbd_xfer_handle xfer, u_int32_t size);
void usbd_free_buffer(usbd_xfer_handle xfer);
void *usbd_get_buffer(usbd_xfer_handle xfer);
-usbd_status usbd_sync_transfer(usbd_xfer_handle req);
usbd_status usbd_open_pipe_intr(usbd_interface_handle iface, u_int8_t address,
u_int8_t flags, usbd_pipe_handle *pipe, usbd_private_handle priv,
void *buffer, u_int32_t length, usbd_callback, int);
Index: uticom.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/uticom.c,v
retrieving revision 1.18
diff -u -p -r1.18 uticom.c
--- uticom.c 17 Aug 2011 18:58:45 -0000 1.18
+++ uticom.c 11 Apr 2013 07:36:41 -0000
@@ -971,7 +971,7 @@ uticom_download_fw(struct uticom_softc *
usbd_setup_xfer(oxfer, pipe, (usbd_private_handle)sc, obuf, buffer_size,
USBD_NO_COPY | USBD_SYNCHRONOUS, USBD_NO_TIMEOUT, 0);
- err = usbd_sync_transfer(oxfer);
+ err = usbd_transfer(oxfer);
if (err != USBD_NORMAL_COMPLETION)
printf("%s: uticom_download_fw: error: %s\n",