svn commit: r194677 - in head: lib/libusb sys/compat/ndis
sys/dev/ata sys/dev/if_ndis sys/dev/sound/usb sys/dev/usb
sys/dev/usb/controller sys/dev/usb/input sys/dev/usb/misc
sys/dev/usb/net sys/dev...
Andrew Thompson
thompsa at FreeBSD.org
Tue Jun 23 02:20:00 UTC 2009
Author: thompsa
Date: Tue Jun 23 02:19:59 2009
New Revision: 194677
URL: http://svn.freebsd.org/changeset/base/194677
Log:
- Make struct usb_xfer opaque so that drivers can not access the internals
- Reduce the number of headers needed for a usb driver, the common case is just usb.h and usbdi.h
Added:
head/sys/dev/usb/usb_freebsd.h (contents, props changed)
head/sys/dev/usb/usbdi.h (contents, props changed)
head/sys/dev/usb/usbdi_util.h (contents, props changed)
Deleted:
head/sys/dev/usb/usb_defs.h
head/sys/dev/usb/usb_error.h
head/sys/dev/usb/usb_handle_request.h
head/sys/dev/usb/usb_hid.h
head/sys/dev/usb/usb_lookup.h
head/sys/dev/usb/usb_mfunc.h
head/sys/dev/usb/usb_parse.h
head/sys/dev/usb/usb_revision.h
Modified:
head/lib/libusb/libusb20_ugen20.c
head/sys/compat/ndis/kern_ndis.c
head/sys/compat/ndis/subr_ndis.c
head/sys/compat/ndis/subr_usbd.c
head/sys/dev/ata/ata-usb.c
head/sys/dev/if_ndis/if_ndis.c
head/sys/dev/if_ndis/if_ndis_pccard.c
head/sys/dev/if_ndis/if_ndis_pci.c
head/sys/dev/if_ndis/if_ndis_usb.c
head/sys/dev/sound/usb/uaudio.c
head/sys/dev/usb/controller/at91dci.c
head/sys/dev/usb/controller/at91dci_atmelarm.c
head/sys/dev/usb/controller/atmegadci.c
head/sys/dev/usb/controller/atmegadci_atmelarm.c
head/sys/dev/usb/controller/avr32dci.c
head/sys/dev/usb/controller/ehci.c
head/sys/dev/usb/controller/ehci_ixp4xx.c
head/sys/dev/usb/controller/ehci_mbus.c
head/sys/dev/usb/controller/ehci_pci.c
head/sys/dev/usb/controller/musb_otg.c
head/sys/dev/usb/controller/musb_otg_atmelarm.c
head/sys/dev/usb/controller/ohci.c
head/sys/dev/usb/controller/ohci_atmelarm.c
head/sys/dev/usb/controller/ohci_pci.c
head/sys/dev/usb/controller/uhci.c
head/sys/dev/usb/controller/uhci_pci.c
head/sys/dev/usb/controller/usb_controller.c
head/sys/dev/usb/controller/uss820dci.c
head/sys/dev/usb/controller/uss820dci_atmelarm.c
head/sys/dev/usb/input/uhid.c
head/sys/dev/usb/input/ukbd.c
head/sys/dev/usb/input/ums.c
head/sys/dev/usb/misc/udbp.c
head/sys/dev/usb/misc/ufm.c
head/sys/dev/usb/net/if_aue.c
head/sys/dev/usb/net/if_axe.c
head/sys/dev/usb/net/if_cdce.c
head/sys/dev/usb/net/if_cue.c
head/sys/dev/usb/net/if_kue.c
head/sys/dev/usb/net/if_rue.c
head/sys/dev/usb/net/if_udav.c
head/sys/dev/usb/net/usb_ethernet.c
head/sys/dev/usb/quirk/usb_quirk.c
head/sys/dev/usb/quirk/usb_quirk.h
head/sys/dev/usb/serial/u3g.c
head/sys/dev/usb/serial/uark.c
head/sys/dev/usb/serial/ubsa.c
head/sys/dev/usb/serial/ubser.c
head/sys/dev/usb/serial/uchcom.c
head/sys/dev/usb/serial/ucycom.c
head/sys/dev/usb/serial/ufoma.c
head/sys/dev/usb/serial/uftdi.c
head/sys/dev/usb/serial/ugensa.c
head/sys/dev/usb/serial/uipaq.c
head/sys/dev/usb/serial/ulpt.c
head/sys/dev/usb/serial/umct.c
head/sys/dev/usb/serial/umodem.c
head/sys/dev/usb/serial/umoscom.c
head/sys/dev/usb/serial/uplcom.c
head/sys/dev/usb/serial/usb_serial.c
head/sys/dev/usb/serial/uslcom.c
head/sys/dev/usb/serial/uvisor.c
head/sys/dev/usb/serial/uvscom.c
head/sys/dev/usb/storage/umass.c
head/sys/dev/usb/storage/urio.c
head/sys/dev/usb/storage/ustorage_fs.c
head/sys/dev/usb/template/usb_template.c
head/sys/dev/usb/template/usb_template_cdce.c
head/sys/dev/usb/template/usb_template_msc.c
head/sys/dev/usb/template/usb_template_mtp.c
head/sys/dev/usb/usb.h
head/sys/dev/usb/usb_busdma.c
head/sys/dev/usb/usb_busdma.h
head/sys/dev/usb/usb_compat_linux.c
head/sys/dev/usb/usb_compat_linux.h
head/sys/dev/usb/usb_controller.h
head/sys/dev/usb/usb_core.c
head/sys/dev/usb/usb_core.h
head/sys/dev/usb/usb_debug.c
head/sys/dev/usb/usb_debug.h
head/sys/dev/usb/usb_dev.c
head/sys/dev/usb/usb_dev.h
head/sys/dev/usb/usb_device.c
head/sys/dev/usb/usb_device.h
head/sys/dev/usb/usb_dynamic.c
head/sys/dev/usb/usb_dynamic.h
head/sys/dev/usb/usb_error.c
head/sys/dev/usb/usb_generic.c
head/sys/dev/usb/usb_handle_request.c
head/sys/dev/usb/usb_hid.c
head/sys/dev/usb/usb_hub.c
head/sys/dev/usb/usb_ioctl.h
head/sys/dev/usb/usb_lookup.c
head/sys/dev/usb/usb_mbuf.c
head/sys/dev/usb/usb_mbuf.h
head/sys/dev/usb/usb_msctest.c
head/sys/dev/usb/usb_parse.c
head/sys/dev/usb/usb_process.c
head/sys/dev/usb/usb_process.h
head/sys/dev/usb/usb_request.c
head/sys/dev/usb/usb_request.h
head/sys/dev/usb/usb_transfer.c
head/sys/dev/usb/usb_transfer.h
head/sys/dev/usb/usb_util.c
head/sys/dev/usb/usb_util.h
head/sys/dev/usb/usbhid.h
head/sys/dev/usb/wlan/if_rum.c
head/sys/dev/usb/wlan/if_uath.c
head/sys/dev/usb/wlan/if_upgt.c
head/sys/dev/usb/wlan/if_ural.c
head/sys/dev/usb/wlan/if_urtw.c
head/sys/dev/usb/wlan/if_zyd.c
head/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c
head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c
Modified: head/lib/libusb/libusb20_ugen20.c
==============================================================================
--- head/lib/libusb/libusb20_ugen20.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/lib/libusb/libusb20_ugen20.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -40,10 +40,8 @@
#include "libusb20_int.h"
#include <dev/usb/usb.h>
+#include <dev/usb/usbdi.h>
#include <dev/usb/usb_ioctl.h>
-#include <dev/usb/usb_mfunc.h>
-#include <dev/usb/usb_error.h>
-#include <dev/usb/usb_revision.h>
static libusb20_init_backend_t ugen20_init_backend;
static libusb20_open_device_t ugen20_open_device;
Modified: head/sys/compat/ndis/kern_ndis.c
==============================================================================
--- head/sys/compat/ndis/kern_ndis.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/compat/ndis/kern_ndis.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -66,7 +66,7 @@ __FBSDID("$FreeBSD$");
#include <net80211/ieee80211_ioctl.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_core.h>
+#include <dev/usb/usbdi.h>
#include <compat/ndis/pe_var.h>
#include <compat/ndis/cfg_var.h>
Modified: head/sys/compat/ndis/subr_ndis.c
==============================================================================
--- head/sys/compat/ndis/subr_ndis.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/compat/ndis/subr_ndis.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -96,7 +96,7 @@ __FBSDID("$FreeBSD$");
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_core.h>
+#include <dev/usb/usbdi.h>
#include <compat/ndis/pe_var.h>
#include <compat/ndis/cfg_var.h>
Modified: head/sys/compat/ndis/subr_usbd.c
==============================================================================
--- head/sys/compat/ndis/subr_usbd.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/compat/ndis/subr_usbd.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -42,6 +42,8 @@ __FBSDID("$FreeBSD$");
#include <sys/malloc.h>
#include <sys/lock.h>
#include <sys/mutex.h>
+#include <sys/sx.h>
+#include <sys/condvar.h>
#include <sys/module.h>
#include <sys/conf.h>
#include <sys/mbuf.h>
@@ -57,13 +59,10 @@ __FBSDID("$FreeBSD$");
#include <net80211/ieee80211_ioctl.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_core.h>
+#include <dev/usb/usbdi.h>
+#include <dev/usb/usbdi_util.h>
#include <dev/usb/usb_busdma.h>
-#include <dev/usb/usb_defs.h>
-#include <dev/usb/usb_process.h>
#include <dev/usb/usb_device.h>
-#include <dev/usb/usb_error.h>
-#include <dev/usb/usb_parse.h>
#include <dev/usb/usb_request.h>
#include <compat/ndis/pe_var.h>
@@ -616,7 +615,7 @@ usbd_setup_endpoint_one(ip, ifidx, ne, e
return (status);
}
xfer = ne->ne_xfer[0];
- xfer->priv_fifo = ne;
+ usbd_xfer_set_priv(xfer, ne);
return (status);
}
@@ -688,14 +687,14 @@ usbd_setup_endpoint(ip, ifidx, ep)
return (status);
}
xfer = ne->ne_xfer[0];
- xfer->priv_fifo = ne;
+ usbd_xfer_set_priv(xfer, ne);
if (UE_GET_DIR(ep->bEndpointAddress) == UE_DIR_IN)
- xfer->timeout = NDISUSB_NO_TIMEOUT;
+ usbd_xfer_set_timeout(xfer, NDISUSB_NO_TIMEOUT);
else {
if (UE_GET_XFERTYPE(ep->bmAttributes) == UE_BULK)
- xfer->timeout = NDISUSB_TX_TIMEOUT;
+ usbd_xfer_set_timeout(xfer, NDISUSB_TX_TIMEOUT);
else
- xfer->timeout = NDISUSB_INTR_TIMEOUT;
+ usbd_xfer_set_timeout(xfer, NDISUSB_INTR_TIMEOUT);
}
return (status);
@@ -853,34 +852,38 @@ usbd_aq_getfirst(struct ndis_softc *sc,
}
static void
-usbd_non_isoc_callback(struct usb_xfer *xfer)
+usbd_non_isoc_callback(struct usb_xfer *xfer, usb_error_t error)
{
irp *ip;
- struct ndis_softc *sc = xfer->priv_sc;
- struct ndisusb_ep *ne = xfer->priv_fifo;
+ struct ndis_softc *sc = usbd_xfer_softc(xfer);
+ struct ndisusb_ep *ne = usbd_xfer_get_priv(xfer);
struct ndisusb_xfer *nx;
struct usbd_urb_bulk_or_intr_transfer *ubi;
+ struct usb_page_cache *pc;
uint8_t irql;
uint32_t len;
union usbd_urb *urb;
usb_endpoint_descriptor_t *ep;
+ int actlen, sumlen;
+
+ usbd_xfer_status(xfer, &actlen, &sumlen, NULL, NULL);
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
nx = usbd_aq_getfirst(sc, ne);
+ pc = usbd_xfer_get_frame(xfer, 0);
if (nx == NULL)
return;
/* copy in data with regard to the URB */
if (ne->ne_dirin != 0)
- usbd_copy_out(xfer->frbuffers, 0, nx->nx_urbbuf,
- xfer->frlengths[0]);
- nx->nx_urbbuf += xfer->frlengths[0];
- nx->nx_urbactlen += xfer->frlengths[0];
- nx->nx_urblen -= xfer->frlengths[0];
+ usbd_copy_out(pc, 0, nx->nx_urbbuf, actlen);
+ nx->nx_urbbuf += actlen;
+ nx->nx_urbactlen += actlen;
+ nx->nx_urblen -= actlen;
/* check for short transfer */
- if (xfer->actlen < xfer->sumlen)
+ if (actlen < sumlen)
nx->nx_urblen = 0;
else {
/* check remainder */
@@ -897,7 +900,7 @@ usbd_non_isoc_callback(struct usb_xfer *
}
}
usbd_xfer_complete(sc, ne, nx,
- ((xfer->actlen < xfer->sumlen) && (nx->nx_shortxfer == 0)) ?
+ ((actlen < sumlen) && (nx->nx_shortxfer == 0)) ?
USB_ERR_SHORT_XFER : USB_ERR_NORMAL_COMPLETION);
/* fall through */
@@ -927,41 +930,44 @@ next:
nx->nx_shortxfer = (ubi->ubi_trans_flags &
USBD_SHORT_TRANSFER_OK) ? 1 : 0;
extra:
- len = MIN(xfer->max_data_length, nx->nx_urblen);
+ len = MIN(usbd_xfer_max_len(xfer), nx->nx_urblen);
+ pc = usbd_xfer_get_frame(xfer, 0);
if (UE_GET_DIR(ep->bEndpointAddress) == UE_DIR_OUT)
- usbd_copy_in(xfer->frbuffers, 0, nx->nx_urbbuf, len);
- xfer->frlengths[0] = len;
- xfer->nframes = 1;
+ usbd_copy_in(pc, 0, nx->nx_urbbuf, len);
+ usbd_xfer_set_frame_len(xfer, 0, len);
+ usbd_xfer_set_frames(xfer, 1);
usbd_transfer_submit(xfer);
break;
default:
nx = usbd_aq_getfirst(sc, ne);
if (nx == NULL)
return;
- if (xfer->error != USB_ERR_CANCELLED) {
- xfer->flags.stall_pipe = 1;
+ if (error != USB_ERR_CANCELLED) {
+ usbd_xfer_set_stall(xfer);
device_printf(sc->ndis_dev, "usb xfer warning (%s)\n",
- usbd_errstr(xfer->error));
+ usbd_errstr(error));
}
- usbd_xfer_complete(sc, ne, nx, xfer->error);
- if (xfer->error != USB_ERR_CANCELLED)
+ usbd_xfer_complete(sc, ne, nx, error);
+ if (error != USB_ERR_CANCELLED)
goto next;
break;
}
}
static void
-usbd_ctrl_callback(struct usb_xfer *xfer)
+usbd_ctrl_callback(struct usb_xfer *xfer, usb_error_t error)
{
irp *ip;
- struct ndis_softc *sc = xfer->priv_sc;
- struct ndisusb_ep *ne = xfer->priv_fifo;
+ struct ndis_softc *sc = usbd_xfer_softc(xfer);
+ struct ndisusb_ep *ne = usbd_xfer_get_priv(xfer);
struct ndisusb_xfer *nx;
uint8_t irql;
union usbd_urb *urb;
struct usbd_urb_vendor_or_class_request *vcreq;
+ struct usb_page_cache *pc;
uint8_t type = 0;
struct usb_device_request req;
+ int len;
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
@@ -974,9 +980,10 @@ usbd_ctrl_callback(struct usb_xfer *xfer
vcreq = &urb->uu_vcreq;
if (vcreq->uvc_trans_flags & USBD_TRANSFER_DIRECTION_IN) {
- usbd_copy_out(xfer->frbuffers + 1, 0,
- vcreq->uvc_trans_buf, xfer->frlengths[1]);
- nx->nx_urbactlen += xfer->frlengths[1];
+ pc = usbd_xfer_get_frame(xfer, 1);
+ len = usbd_xfer_get_framelen(xfer, 1);
+ usbd_copy_out(pc, 0, vcreq->uvc_trans_buf, len);
+ nx->nx_urbactlen += len;
}
usbd_xfer_complete(sc, ne, nx, USB_ERR_NORMAL_COMPLETION);
@@ -1044,17 +1051,19 @@ next:
nx->nx_urblen = vcreq->uvc_trans_buflen;
nx->nx_urbactlen = 0;
- usbd_copy_in(xfer->frbuffers, 0, &req, sizeof(req));
- xfer->frlengths[0] = sizeof(req);
- xfer->nframes = 1;
+ pc = usbd_xfer_get_frame(xfer, 0);
+ usbd_copy_in(pc, 0, &req, sizeof(req));
+ usbd_xfer_set_frame_len(xfer, 0, sizeof(req));
+ usbd_xfer_set_frames(xfer, 1);
if (vcreq->uvc_trans_flags & USBD_TRANSFER_DIRECTION_IN) {
if (vcreq->uvc_trans_buflen >= USBD_CTRL_READ_BUFFER_SP)
device_printf(sc->ndis_dev,
"warning: not enough buffer space (%d).\n",
vcreq->uvc_trans_buflen);
- xfer->frlengths[1] = MIN(xfer->max_data_length,
- vcreq->uvc_trans_buflen);
- xfer->nframes = 2;
+ usbd_xfer_set_frame_len(xfer, 1,
+ MIN(usbd_xfer_max_len(xfer),
+ vcreq->uvc_trans_buflen));
+ usbd_xfer_set_frames(xfer, 2);
} else {
if (nx->nx_urblen > 0)
device_printf(sc->ndis_dev,
@@ -1066,10 +1075,11 @@ next:
* the future if it needs to be.
*/
if (nx->nx_urblen > 0) {
- usbd_copy_in(xfer->frbuffers + 1 , 0,
- nx->nx_urbbuf, nx->nx_urblen);
- xfer->frlengths[1] = nx->nx_urblen;
- xfer->nframes = 2;
+ pc = usbd_xfer_get_frame(xfer, 1);
+ usbd_copy_in(pc, 0, nx->nx_urbbuf,
+ nx->nx_urblen);
+ usbd_xfer_set_frame_len(xfer, 1, nx->nx_urblen);
+ usbd_xfer_set_frames(xfer, 2);
}
}
usbd_transfer_submit(xfer);
@@ -1078,13 +1088,13 @@ next:
nx = usbd_aq_getfirst(sc, ne);
if (nx == NULL)
return;
- if (xfer->error != USB_ERR_CANCELLED) {
- xfer->flags.stall_pipe = 1;
+ if (error != USB_ERR_CANCELLED) {
+ usbd_xfer_set_stall(xfer);
device_printf(sc->ndis_dev, "usb xfer warning (%s)\n",
- usbd_errstr(xfer->error));
+ usbd_errstr(error));
}
- usbd_xfer_complete(sc, ne, nx, xfer->error);
- if (xfer->error != USB_ERR_CANCELLED)
+ usbd_xfer_complete(sc, ne, nx, error);
+ if (error != USB_ERR_CANCELLED)
goto next;
break;
}
Modified: head/sys/dev/ata/ata-usb.c
==============================================================================
--- head/sys/dev/ata/ata-usb.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/dev/ata/ata-usb.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -30,18 +30,30 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/stdint.h>
+#include <sys/stddef.h>
+#include <sys/param.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/linker_set.h>
+#include <sys/module.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/condvar.h>
+#include <sys/sysctl.h>
+#include <sys/sx.h>
+#include <sys/unistd.h>
+#include <sys/callout.h>
+#include <sys/malloc.h>
+#include <sys/priv.h>
+#include <machine/bus.h>
+
#include "usbdevs.h"
#include <dev/usb/usb.h>
-#include <dev/usb/usb_mfunc.h>
-#include <dev/usb/usb_error.h>
-
-#include <dev/usb/usb_core.h>
-#include <dev/usb/usb_util.h>
-#include <dev/usb/usb_busdma.h>
-#include <dev/usb/usb_request.h>
-#include <dev/usb/usb_debug.h>
-#include <dev/usb/usb_process.h>
-#include <dev/usb/usb_transfer.h>
+#include <dev/usb/usbdi.h>
#include <sys/ata.h>
#include <sys/bio.h>
@@ -145,7 +157,8 @@ static usb_callback_t atausb2_tr_error;
static void atausb2_cancel_request(struct atausb2_softc *sc);
static void atausb2_transfer_start(struct atausb2_softc *sc, uint8_t xfer_no);
-static void atausb2_t_bbb_data_clear_stall_callback(struct usb_xfer *xfer, uint8_t next_xfer, uint8_t stall_xfer);
+static void atausb2_t_bbb_data_clear_stall_callback(struct usb_xfer *xfer,
+ uint8_t next_xfer, uint8_t stall_xfer, usb_error_t error);
static int ata_usbchannel_begin_transaction(struct ata_request *request);
static int ata_usbchannel_end_transaction(struct ata_request *request);
@@ -467,10 +480,11 @@ atausb2_transfer_start(struct atausb2_so
}
static void
-atausb2_t_bbb_reset1_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_reset1_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct atausb2_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = usbd_xfer_softc(xfer);
struct usb_device_request req;
+ struct usb_page_cache *pc;
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
@@ -485,40 +499,40 @@ atausb2_t_bbb_reset1_callback(struct usb
req.wIndex[1] = 0;
USETW(req.wLength, 0);
- usbd_copy_in(xfer->frbuffers, 0, &req, sizeof(req));
+ pc = usbd_xfer_get_frame(xfer, 0);
+ usbd_copy_in(pc, 0, &req, sizeof(req));
- xfer->frlengths[0] = sizeof(req);
- xfer->nframes = 1;
+ usbd_xfer_set_frame_len(xfer, 0, sizeof(req));
+ usbd_xfer_set_frames(xfer, 1);
usbd_transfer_submit(xfer);
return;
default: /* Error */
- atausb2_tr_error(xfer);
+ atausb2_tr_error(xfer, error);
return;
}
}
static void
-atausb2_t_bbb_reset2_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_reset2_callback(struct usb_xfer *xfer, usb_error_t error)
{
atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_RESET3,
- ATAUSB_T_BBB_DATA_READ);
+ ATAUSB_T_BBB_DATA_READ, error);
}
static void
-atausb2_t_bbb_reset3_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_reset3_callback(struct usb_xfer *xfer, usb_error_t error)
{
atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_COMMAND,
- ATAUSB_T_BBB_DATA_WRITE);
+ ATAUSB_T_BBB_DATA_WRITE, error);
}
static void
atausb2_t_bbb_data_clear_stall_callback(struct usb_xfer *xfer,
- uint8_t next_xfer,
- uint8_t stall_xfer)
+ uint8_t next_xfer, uint8_t stall_xfer, usb_error_t error)
{
- struct atausb2_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = usbd_xfer_softc(xfer);
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
@@ -533,18 +547,19 @@ tr_transferred:
return;
default: /* Error */
- atausb2_tr_error(xfer);
+ atausb2_tr_error(xfer, error);
return;
}
}
static void
-atausb2_t_bbb_command_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_command_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct atausb2_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = usbd_xfer_softc(xfer);
struct ata_request *request = sc->ata_request;
struct ata_channel *ch;
+ struct usb_page_cache *pc;
uint32_t tag;
switch (USB_GET_STATE(xfer)) {
@@ -575,37 +590,42 @@ atausb2_t_bbb_command_callback(struct us
bzero(sc->cbw.cdb, 16);
bcopy(request->u.atapi.ccb, sc->cbw.cdb, 12); /* XXX SOS */
- usbd_copy_in(xfer->frbuffers, 0, &sc->cbw, sizeof(sc->cbw));
+ pc = usbd_xfer_get_frame(xfer, 0);
+ usbd_copy_in(pc, 0, &sc->cbw, sizeof(sc->cbw));
- xfer->frlengths[0] = sizeof(sc->cbw);
+ usbd_xfer_set_frame_len(xfer, 0, sizeof(sc->cbw));
usbd_transfer_submit(xfer);
}
return;
default: /* Error */
- atausb2_tr_error(xfer);
+ atausb2_tr_error(xfer, error);
return;
}
}
static void
-atausb2_t_bbb_data_read_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_data_read_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct atausb2_softc *sc = xfer->priv_sc;
- uint32_t max_bulk = xfer->max_data_length;
+ struct atausb2_softc *sc = usbd_xfer_softc(xfer);
+ uint32_t max_bulk = usbd_xfer_max_len(xfer);
+ struct usb_page_cache *pc;
+ int actlen, sumlen;
+
+ usbd_xfer_status(xfer, &actlen, &sumlen, NULL, NULL);
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
- usbd_copy_out(xfer->frbuffers, 0,
- sc->ata_data, xfer->actlen);
+ pc = usbd_xfer_get_frame(xfer, 0);
+ usbd_copy_out(pc, 0, sc->ata_data, actlen);
- sc->ata_bytecount -= xfer->actlen;
- sc->ata_data += xfer->actlen;
- sc->ata_donecount += xfer->actlen;
+ sc->ata_bytecount -= actlen;
+ sc->ata_data += actlen;
+ sc->ata_donecount += actlen;
- if (xfer->actlen < xfer->sumlen) {
+ if (actlen < sumlen) {
/* short transfer */
sc->ata_bytecount = 0;
}
@@ -622,15 +642,15 @@ atausb2_t_bbb_data_read_callback(struct
if (max_bulk > sc->ata_bytecount) {
max_bulk = sc->ata_bytecount;
}
- xfer->timeout = sc->timeout;
- xfer->frlengths[0] = max_bulk;
+ usbd_xfer_set_timeout(xfer, sc->timeout);
+ usbd_xfer_set_frame_len(xfer, 0, max_bulk);
usbd_transfer_submit(xfer);
return;
default: /* Error */
- if (xfer->error == USB_ERR_CANCELLED) {
- atausb2_tr_error(xfer);
+ if (error == USB_ERR_CANCELLED) {
+ atausb2_tr_error(xfer, error);
} else {
atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_RD_CS);
}
@@ -640,24 +660,28 @@ atausb2_t_bbb_data_read_callback(struct
}
static void
-atausb2_t_bbb_data_rd_cs_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_data_rd_cs_callback(struct usb_xfer *xfer, usb_error_t error)
{
atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_STATUS,
- ATAUSB_T_BBB_DATA_READ);
+ ATAUSB_T_BBB_DATA_READ, error);
}
static void
-atausb2_t_bbb_data_write_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_data_write_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct atausb2_softc *sc = xfer->priv_sc;
- uint32_t max_bulk = xfer->max_data_length;
+ struct atausb2_softc *sc = usbd_xfer_softc(xfer);
+ struct usb_page_cache *pc;
+ uint32_t max_bulk = usbd_xfer_max_len(xfer);
+ int actlen;
+
+ usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL);
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
- sc->ata_bytecount -= xfer->actlen;
- sc->ata_data += xfer->actlen;
- sc->ata_donecount += xfer->actlen;
+ sc->ata_bytecount -= actlen;
+ sc->ata_data += actlen;
+ sc->ata_donecount += actlen;
case USB_ST_SETUP:
@@ -672,18 +696,18 @@ atausb2_t_bbb_data_write_callback(struct
if (max_bulk > sc->ata_bytecount) {
max_bulk = sc->ata_bytecount;
}
- xfer->timeout = sc->timeout;
- xfer->frlengths[0] = max_bulk;
- usbd_copy_in(xfer->frbuffers, 0,
- sc->ata_data, max_bulk);
+ pc = usbd_xfer_get_frame(xfer, 0);
+ usbd_copy_in(pc, 0, sc->ata_data, max_bulk);
+ usbd_xfer_set_frame_len(xfer, 0, max_bulk);
+ usbd_xfer_set_timeout(xfer, sc->timeout);
usbd_transfer_submit(xfer);
return;
default: /* Error */
- if (xfer->error == USB_ERR_CANCELLED) {
- atausb2_tr_error(xfer);
+ if (error == USB_ERR_CANCELLED) {
+ atausb2_tr_error(xfer, error);
} else {
atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_WR_CS);
}
@@ -693,26 +717,31 @@ atausb2_t_bbb_data_write_callback(struct
}
static void
-atausb2_t_bbb_data_wr_cs_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_data_wr_cs_callback(struct usb_xfer *xfer, usb_error_t error)
{
atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_STATUS,
- ATAUSB_T_BBB_DATA_WRITE);
+ ATAUSB_T_BBB_DATA_WRITE, error);
}
static void
-atausb2_t_bbb_status_callback(struct usb_xfer *xfer)
+atausb2_t_bbb_status_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct atausb2_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = usbd_xfer_softc(xfer);
struct ata_request *request = sc->ata_request;
+ struct usb_page_cache *pc;
uint32_t residue;
+ int actlen;
+
+ usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL);
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
- if (xfer->actlen < sizeof(sc->csw)) {
+ if (actlen < sizeof(sc->csw)) {
bzero(&sc->csw, sizeof(sc->csw));
}
- usbd_copy_out(xfer->frbuffers, 0, &sc->csw, xfer->actlen);
+ pc = usbd_xfer_get_frame(xfer, 0);
+ usbd_copy_out(pc, 0, &sc->csw, actlen);
if (request->flags & (ATA_R_READ | ATA_R_WRITE)) {
request->donecount = sc->ata_donecount;
@@ -779,15 +808,14 @@ atausb2_t_bbb_status_callback(struct usb
return;
case USB_ST_SETUP:
- xfer->frlengths[0] = xfer->max_data_length;
+ usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer));
usbd_transfer_submit(xfer);
return;
default:
tr_error:
- if ((xfer->error == USB_ERR_CANCELLED) ||
- (sc->status_try)) {
- atausb2_tr_error(xfer);
+ if (error == USB_ERR_CANCELLED || sc->status_try) {
+ atausb2_tr_error(xfer, error);
} else {
sc->status_try = 1;
atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_RD_CS);
@@ -820,15 +848,15 @@ atausb2_cancel_request(struct atausb2_so
}
static void
-atausb2_tr_error(struct usb_xfer *xfer)
+atausb2_tr_error(struct usb_xfer *xfer, usb_error_t error)
{
- struct atausb2_softc *sc = xfer->priv_sc;
+ struct atausb2_softc *sc = usbd_xfer_softc(xfer);
- if (xfer->error != USB_ERR_CANCELLED) {
+ if (error != USB_ERR_CANCELLED) {
if (atausbdebug) {
device_printf(sc->dev, "transfer failed, %s, in state %d "
- "-> BULK reset\n", usbd_errstr(xfer->error),
+ "-> BULK reset\n", usbd_errstr(error),
sc->last_xfer_no);
}
}
Modified: head/sys/dev/if_ndis/if_ndis.c
==============================================================================
--- head/sys/dev/if_ndis/if_ndis.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/dev/if_ndis/if_ndis.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -74,7 +74,7 @@ __FBSDID("$FreeBSD$");
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_core.h>
+#include <dev/usb/usbdi.h>
#include <compat/ndis/pe_var.h>
#include <compat/ndis/cfg_var.h>
Modified: head/sys/dev/if_ndis/if_ndis_pccard.c
==============================================================================
--- head/sys/dev/if_ndis/if_ndis_pccard.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/dev/if_ndis/if_ndis_pccard.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -52,7 +52,7 @@ __FBSDID("$FreeBSD$");
#include <sys/rman.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_core.h>
+#include <dev/usb/usbdi.h>
#include <net80211/ieee80211_var.h>
Modified: head/sys/dev/if_ndis/if_ndis_pci.c
==============================================================================
--- head/sys/dev/if_ndis/if_ndis_pci.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/dev/if_ndis/if_ndis_pci.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -55,7 +55,7 @@ __FBSDID("$FreeBSD$");
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_core.h>
+#include <dev/usb/usbdi.h>
#include <compat/ndis/pe_var.h>
#include <compat/ndis/cfg_var.h>
Modified: head/sys/dev/if_ndis/if_ndis_usb.c
==============================================================================
--- head/sys/dev/if_ndis/if_ndis_usb.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/dev/if_ndis/if_ndis_usb.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$");
#include <sys/bus.h>
#include <machine/bus.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_core.h>
+#include <dev/usb/usbdi.h>
#include <net80211/ieee80211_var.h>
Modified: head/sys/dev/sound/usb/uaudio.c
==============================================================================
--- head/sys/dev/sound/usb/uaudio.c Tue Jun 23 01:04:58 2009 (r194676)
+++ head/sys/dev/sound/usb/uaudio.c Tue Jun 23 02:19:59 2009 (r194677)
@@ -45,23 +45,33 @@
* $NetBSD: uaudio.c,v 1.97 2005/02/24 08:19:38 martin Exp $
*/
+#include <sys/stdint.h>
+#include <sys/stddef.h>
+#include <sys/param.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/linker_set.h>
+#include <sys/module.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/condvar.h>
+#include <sys/sysctl.h>
+#include <sys/sx.h>
+#include <sys/unistd.h>
+#include <sys/callout.h>
+#include <sys/malloc.h>
+#include <sys/priv.h>
+
#include "usbdevs.h"
#include <dev/usb/usb.h>
-#include <dev/usb/usb_mfunc.h>
-#include <dev/usb/usb_error.h>
+#include <dev/usb/usbdi.h>
+#include <dev/usb/usbdi_util.h>
#define USB_DEBUG_VAR uaudio_debug
-
-#include <dev/usb/usb_core.h>
-#include <dev/usb/usb_lookup.h>
#include <dev/usb/usb_debug.h>
-#include <dev/usb/usb_util.h>
-#include <dev/usb/usb_busdma.h>
-#include <dev/usb/usb_parse.h>
-#include <dev/usb/usb_request.h>
-#include <dev/usb/usb_mbuf.h>
-#include <dev/usb/usb_dev.h>
-#include <dev/usb/usb_dynamic.h>
#include <dev/usb/quirk/usb_quirk.h>
@@ -946,8 +956,6 @@ uaudio_chan_fill_info_sub(struct uaudio_
bChannels = UAUDIO_MAX_CHAN(asf1d->bNrChannels);
bBitResolution = asf1d->bBitResolution;
- DPRINTFN(9, "bChannels=%u\n", bChannels);
-
if (asf1d->bSamFreqType == 0) {
DPRINTFN(16, "Sample rate: %d-%dHz\n",
UA_SAMP_LO(asf1d), UA_SAMP_HI(asf1d));
@@ -1106,14 +1114,17 @@ done:
}
static void
-uaudio_chan_play_callback(struct usb_xfer *xfer)
+uaudio_chan_play_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct uaudio_chan *ch = xfer->priv_sc;
- uint32_t *p_len = xfer->frlengths;
+ struct uaudio_chan *ch = usbd_xfer_softc(xfer);
+ struct usb_page_cache *pc;
uint32_t total;
uint32_t blockcount;
uint32_t n;
uint32_t offset;
+ int actlen, sumlen;
+
+ usbd_xfer_status(xfer, &actlen, &sumlen, NULL, NULL);
/* allow dynamic sizing of play buffer */
total = ch->intr_size;
@@ -1129,8 +1140,8 @@ uaudio_chan_play_callback(struct usb_xfe
blockcount = UAUDIO_MINFRAMES;
}
/* range check - max */
- if (blockcount > xfer->max_frame_count) {
- blockcount = xfer->max_frame_count;
+ if (blockcount > usbd_xfer_max_frames(xfer)) {
+ blockcount = usbd_xfer_max_frames(xfer);
}
/* compute the total length */
total = blockcount * ch->bytes_per_frame;
@@ -1138,25 +1149,24 @@ uaudio_chan_play_callback(struct usb_xfe
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
tr_transferred:
- if (xfer->actlen < xfer->sumlen) {
+ if (actlen < sumlen) {
DPRINTF("short transfer, "
- "%d of %d bytes\n", xfer->actlen, total);
+ "%d of %d bytes\n", actlen, total);
}
chn_intr(ch->pcm_ch);
case USB_ST_SETUP:
- if (ch->bytes_per_frame > xfer->max_frame_size) {
+ if (ch->bytes_per_frame > usbd_xfer_max_framelen(xfer)) {
DPRINTF("bytes per transfer, %d, "
"exceeds maximum, %d!\n",
ch->bytes_per_frame,
- xfer->max_frame_size);
+ usbd_xfer_max_framelen(xfer));
break;
}
/* setup frame length */
- xfer->nframes = blockcount;
- for (n = 0; n != blockcount; n++) {
- p_len[n] = ch->bytes_per_frame;
- }
+ usbd_xfer_set_frames(xfer, blockcount);
+ for (n = 0; n != blockcount; n++)
+ usbd_xfer_set_frame_len(xfer, n, ch->bytes_per_frame);
if (ch->end == ch->start) {
DPRINTF("no buffer!\n");
@@ -1166,13 +1176,14 @@ tr_transferred:
offset = 0;
+ pc = usbd_xfer_get_frame(xfer, 0);
while (total > 0) {
n = (ch->end - ch->cur);
if (n > total) {
n = total;
}
- usbd_copy_in(xfer->frbuffers, offset, ch->cur, n);
+ usbd_copy_in(pc, offset, ch->cur, n);
total -= n;
ch->cur += n;
@@ -1187,7 +1198,7 @@ tr_transferred:
break;
default: /* Error */
- if (xfer->error == USB_ERR_CANCELLED) {
+ if (error == USB_ERR_CANCELLED) {
break;
}
goto tr_transferred;
@@ -1195,16 +1206,20 @@ tr_transferred:
}
static void
-uaudio_chan_record_callback(struct usb_xfer *xfer)
+uaudio_chan_record_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct uaudio_chan *ch = xfer->priv_sc;
- uint32_t *p_len = xfer->frlengths;
+ struct uaudio_chan *ch = usbd_xfer_softc(xfer);
+ struct usb_page_cache *pc;
uint32_t n;
uint32_t m;
uint32_t total;
uint32_t blockcount;
uint32_t offset0;
uint32_t offset1;
+ int len;
+ int actlen, nframes;
+
+ usbd_xfer_status(xfer, &actlen, NULL, NULL, &nframes);
/* allow dynamic sizing of play buffer */
total = ch->intr_size;
@@ -1220,8 +1235,8 @@ uaudio_chan_record_callback(struct usb_x
blockcount = UAUDIO_MINFRAMES;
}
/* range check - max */
- if (blockcount > xfer->max_frame_count) {
- blockcount = xfer->max_frame_count;
+ if (blockcount > usbd_xfer_max_frames(xfer)) {
+ blockcount = usbd_xfer_max_frames(xfer);
}
/* compute the total length */
total = blockcount * ch->bytes_per_frame;
@@ -1229,29 +1244,31 @@ uaudio_chan_record_callback(struct usb_x
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
tr_transferred:
- if (xfer->actlen < total) {
+ if (actlen < total) {
DPRINTF("short transfer, "
- "%d of %d bytes\n", xfer->actlen, total);
+ "%d of %d bytes\n", actlen, total);
} else {
- DPRINTFN(6, "transferred %d bytes\n", xfer->actlen);
+ DPRINTFN(6, "transferred %d bytes\n", actlen);
}
offset0 = 0;
- for (n = 0; n != xfer->nframes; n++) {
+ for (n = 0; n != nframes; n++) {
offset1 = offset0;
+ pc = usbd_xfer_get_frame(xfer, n);
+ len = usbd_xfer_get_framelen(xfer, n);
- while (p_len[n] > 0) {
+ while (len > 0) {
m = (ch->end - ch->cur);
- if (m > p_len[n]) {
- m = p_len[n];
+ if (m > len) {
+ m = len;
}
- usbd_copy_out(xfer->frbuffers, offset1, ch->cur, m);
+ usbd_copy_out(pc, offset1, ch->cur, m);
- p_len[n] -= m;
+ len -= m;
offset1 += m;
ch->cur += m;
@@ -1266,16 +1283,16 @@ tr_transferred:
chn_intr(ch->pcm_ch);
case USB_ST_SETUP:
- if (ch->bytes_per_frame > xfer->max_frame_size) {
+ if (ch->bytes_per_frame > usbd_xfer_max_framelen(xfer)) {
DPRINTF("bytes per transfer, %d, "
"exceeds maximum, %d!\n",
ch->bytes_per_frame,
- xfer->max_frame_size);
+ usbd_xfer_max_framelen(xfer));
return;
}
- xfer->nframes = blockcount;
- for (n = 0; n != xfer->nframes; n++) {
- p_len[n] = ch->bytes_per_frame;
+ usbd_xfer_set_frames(xfer, blockcount);
+ for (n = 0; n < blockcount; n++) {
+ usbd_xfer_set_frame_len(xfer, n, ch->bytes_per_frame);
}
if (ch->end == ch->start) {
@@ -1286,7 +1303,7 @@ tr_transferred:
return;
default: /* Error */
- if (xfer->error == USB_ERR_CANCELLED) {
+ if (error == USB_ERR_CANCELLED) {
return;
}
goto tr_transferred;
@@ -2958,11 +2975,12 @@ uaudio_mixer_get(struct usb_device *udev
}
static void
-uaudio_mixer_write_cfg_callback(struct usb_xfer *xfer)
+uaudio_mixer_write_cfg_callback(struct usb_xfer *xfer, usb_error_t error)
{
struct usb_device_request req;
- struct uaudio_softc *sc = xfer->priv_sc;
+ struct uaudio_softc *sc = usbd_xfer_softc(xfer);
struct uaudio_mixer_node *mc = sc->sc_mixer_curr;
+ struct usb_page_cache *pc;
uint16_t len;
uint8_t repeat = 1;
uint8_t update;
@@ -3011,12 +3029,14 @@ tr_setup:
if (len > 1) {
buf[1] = (mc->wData[chan] >> 8) & 0xFF;
}
- usbd_copy_in(xfer->frbuffers, 0, &req, sizeof(req));
- usbd_copy_in(xfer->frbuffers + 1, 0, buf, len);
-
- xfer->frlengths[0] = sizeof(req);
- xfer->frlengths[1] = len;
- xfer->nframes = xfer->frlengths[1] ? 2 : 1;
+ pc = usbd_xfer_get_frame(xfer, 0);
+ usbd_copy_in(pc, 0, &req, sizeof(req));
+ pc = usbd_xfer_get_frame(xfer, 1);
+ usbd_copy_in(pc, 0, buf, len);
+
+ usbd_xfer_set_frame_len(xfer, 0, sizeof(req));
+ usbd_xfer_set_frame_len(xfer, 1, len);
+ usbd_xfer_set_frames(xfer, len ? 2 : 1);
usbd_transfer_submit(xfer);
return;
}
@@ -3033,8 +3053,8 @@ tr_setup:
break;
default: /* Error */
- DPRINTF("error=%s\n", usbd_errstr(xfer->error));
- if (xfer->error == USB_ERR_CANCELLED) {
+ DPRINTF("error=%s\n", usbd_errstr(error));
+ if (error == USB_ERR_CANCELLED) {
/* do nothing - we are detaching */
break;
}
@@ -3237,9 +3257,9 @@ uaudio_mixer_setrecsrc(struct uaudio_sof
*========================================================================*/
static void
-umidi_read_clear_stall_callback(struct usb_xfer *xfer)
+umidi_read_clear_stall_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct umidi_chan *chan = xfer->priv_sc;
+ struct umidi_chan *chan = usbd_xfer_softc(xfer);
struct usb_xfer *xfer_other = chan->xfer[1];
if (usbd_clear_stall_callback(xfer, xfer_other)) {
@@ -3250,42 +3270,47 @@ umidi_read_clear_stall_callback(struct u
}
static void
-umidi_bulk_read_callback(struct usb_xfer *xfer)
+umidi_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error)
{
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-all
mailing list