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 ***
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to