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