Date: Tue, 23 Jun 2009 02:20:00 +0000 (UTC) From: Andrew Thompson <thompsa@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: 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... Message-ID: <200906230220.n5N2K0Yn061191@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906230220.n5N2K0Yn061191>