From owner-svn-src-head@FreeBSD.ORG Fri Mar 20 21:48:12 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 340C31065677; Fri, 20 Mar 2009 21:48:12 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2005A8FC22; Fri, 20 Mar 2009 21:48:12 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n2KLmBG1014548; Fri, 20 Mar 2009 21:48:11 GMT (envelope-from thompsa@svn.freebsd.org) Received: (from thompsa@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n2KLmBD1014532; Fri, 20 Mar 2009 21:48:11 GMT (envelope-from thompsa@svn.freebsd.org) Message-Id: <200903202148.n2KLmBD1014532@svn.freebsd.org> From: Andrew Thompson Date: Fri, 20 Mar 2009 21:48:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r190180 - in head/sys/dev/usb: . controller X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Mar 2009 21:48:13 -0000 Author: thompsa Date: Fri Mar 20 21:48:11 2009 New Revision: 190180 URL: http://svn.freebsd.org/changeset/base/190180 Log: MFp4 //depot/projects/usb@159392 Add ifdefs for making parts of usb conditional. Submitted by: Hans Petter Selasky Modified: head/sys/dev/usb/controller/at91dci.c head/sys/dev/usb/controller/atmegadci.c head/sys/dev/usb/controller/musb_otg.c head/sys/dev/usb/controller/usb_controller.c head/sys/dev/usb/controller/uss820dci.c head/sys/dev/usb/usb_busdma.c head/sys/dev/usb/usb_busdma.h head/sys/dev/usb/usb_core.h head/sys/dev/usb/usb_debug.h head/sys/dev/usb/usb_device.c head/sys/dev/usb/usb_device.h head/sys/dev/usb/usb_request.c 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 Modified: head/sys/dev/usb/controller/at91dci.c ============================================================================== --- head/sys/dev/usb/controller/at91dci.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/controller/at91dci.c Fri Mar 20 21:48:11 2009 (r190180) @@ -69,7 +69,7 @@ __FBSDID("$FreeBSD$"); USB_P2U(&(((struct at91dci_softc *)0)->sc_bus)))) #define AT9100_DCI_PC2SC(pc) \ - AT9100_DCI_BUS2SC((pc)->tag_parent->info->bus) + AT9100_DCI_BUS2SC(USB_DMATAG_TO_XROOT((pc)->tag_parent)->bus) #if USB_DEBUG static int at91dcidebug = 0; Modified: head/sys/dev/usb/controller/atmegadci.c ============================================================================== --- head/sys/dev/usb/controller/atmegadci.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/controller/atmegadci.c Fri Mar 20 21:48:11 2009 (r190180) @@ -62,7 +62,7 @@ __FBSDID("$FreeBSD$"); USB_P2U(&(((struct atmegadci_softc *)0)->sc_bus)))) #define ATMEGA_PC2SC(pc) \ - ATMEGA_BUS2SC((pc)->tag_parent->info->bus) + ATMEGA_BUS2SC(USB_DMATAG_TO_XROOT((pc)->tag_parent)->bus) #if USB_DEBUG static int atmegadci_debug = 0; Modified: head/sys/dev/usb/controller/musb_otg.c ============================================================================== --- head/sys/dev/usb/controller/musb_otg.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/controller/musb_otg.c Fri Mar 20 21:48:11 2009 (r190180) @@ -63,7 +63,7 @@ USB_P2U(&(((struct musbotg_softc *)0)->sc_bus)))) #define MUSBOTG_PC2SC(pc) \ - MUSBOTG_BUS2SC((pc)->tag_parent->info->bus) + MUSBOTG_BUS2SC(USB_DMATAG_TO_XROOT((pc)->tag_parent)->bus) #if USB_DEBUG static int musbotgdebug = 0; Modified: head/sys/dev/usb/controller/usb_controller.c ============================================================================== --- head/sys/dev/usb/controller/usb_controller.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/controller/usb_controller.c Fri Mar 20 21:48:11 2009 (r190180) @@ -49,15 +49,6 @@ static device_detach_t usb2_detach; static void usb2_attach_sub(device_t, struct usb2_bus *); static void usb2_post_init(void *); -static void usb2_bus_mem_flush_all_cb(struct usb2_bus *, - struct usb2_page_cache *, struct usb2_page *, uint32_t, - uint32_t); -static void usb2_bus_mem_alloc_all_cb(struct usb2_bus *, - struct usb2_page_cache *, struct usb2_page *, uint32_t, - uint32_t); -static void usb2_bus_mem_free_all_cb(struct usb2_bus *, - struct usb2_page_cache *, struct usb2_page *, uint32_t, - uint32_t); static void usb2_bus_roothub(struct usb2_proc_msg *pm); /* static variables */ @@ -487,16 +478,19 @@ SYSUNINIT(usb2_bus_unload, SI_SUB_KLD, S /*------------------------------------------------------------------------* * usb2_bus_mem_flush_all_cb *------------------------------------------------------------------------*/ +#if USB_HAVE_BUSDMA static void usb2_bus_mem_flush_all_cb(struct usb2_bus *bus, struct usb2_page_cache *pc, struct usb2_page *pg, uint32_t size, uint32_t align) { usb2_pc_cpu_flush(pc); } +#endif /*------------------------------------------------------------------------* * usb2_bus_mem_flush_all - factored out code *------------------------------------------------------------------------*/ +#if USB_HAVE_BUSDMA void usb2_bus_mem_flush_all(struct usb2_bus *bus, usb2_bus_mem_cb_t *cb) { @@ -504,10 +498,12 @@ usb2_bus_mem_flush_all(struct usb2_bus * cb(bus, &usb2_bus_mem_flush_all_cb); } } +#endif /*------------------------------------------------------------------------* * usb2_bus_mem_alloc_all_cb *------------------------------------------------------------------------*/ +#if USB_HAVE_BUSDMA static void usb2_bus_mem_alloc_all_cb(struct usb2_bus *bus, struct usb2_page_cache *pc, struct usb2_page *pg, uint32_t size, uint32_t align) @@ -519,6 +515,7 @@ usb2_bus_mem_alloc_all_cb(struct usb2_bu bus->alloc_failed = 1; } } +#endif /*------------------------------------------------------------------------* * usb2_bus_mem_alloc_all - factored out code @@ -541,9 +538,10 @@ usb2_bus_mem_alloc_all(struct usb2_bus * TAILQ_INIT(&bus->intr_q.head); +#if USB_HAVE_BUSDMA usb2_dma_tag_setup(bus->dma_parent_tag, bus->dma_tags, - dmat, &bus->bus_mtx, NULL, NULL, 32, USB_BUS_DMA_TAG_MAX); - + dmat, &bus->bus_mtx, NULL, 32, USB_BUS_DMA_TAG_MAX); +#endif if ((bus->devices_max > USB_MAX_DEVICES) || (bus->devices_max < USB_MIN_DEVICES) || (bus->devices == NULL)) { @@ -551,9 +549,11 @@ usb2_bus_mem_alloc_all(struct usb2_bus * "initialised properly!\n"); bus->alloc_failed = 1; /* failure */ } +#if USB_HAVE_BUSDMA if (cb) { cb(bus, &usb2_bus_mem_alloc_all_cb); } +#endif if (bus->alloc_failed) { usb2_bus_mem_free_all(bus, cb); } @@ -563,12 +563,14 @@ usb2_bus_mem_alloc_all(struct usb2_bus * /*------------------------------------------------------------------------* * usb2_bus_mem_free_all_cb *------------------------------------------------------------------------*/ +#if USB_HAVE_BUSDMA static void usb2_bus_mem_free_all_cb(struct usb2_bus *bus, struct usb2_page_cache *pc, struct usb2_page *pg, uint32_t size, uint32_t align) { usb2_pc_free_mem(pc); } +#endif /*------------------------------------------------------------------------* * usb2_bus_mem_free_all - factored out code @@ -576,10 +578,12 @@ usb2_bus_mem_free_all_cb(struct usb2_bus void usb2_bus_mem_free_all(struct usb2_bus *bus, usb2_bus_mem_cb_t *cb) { +#if USB_HAVE_BUSDMA if (cb) { cb(bus, &usb2_bus_mem_free_all_cb); } usb2_dma_tag_unsetup(bus->dma_parent_tag); +#endif mtx_destroy(&bus->bus_mtx); } Modified: head/sys/dev/usb/controller/uss820dci.c ============================================================================== --- head/sys/dev/usb/controller/uss820dci.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/controller/uss820dci.c Fri Mar 20 21:48:11 2009 (r190180) @@ -58,7 +58,7 @@ USB_P2U(&(((struct uss820dci_softc *)0)->sc_bus)))) #define USS820_DCI_PC2SC(pc) \ - USS820_DCI_BUS2SC((pc)->tag_parent->info->bus) + USS820_DCI_BUS2SC(USB_DMATAG_TO_XROOT((pc)->tag_parent)->bus) #if USB_DEBUG static int uss820dcidebug = 0; Modified: head/sys/dev/usb/usb_busdma.c ============================================================================== --- head/sys/dev/usb/usb_busdma.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_busdma.c Fri Mar 20 21:48:11 2009 (r190180) @@ -41,20 +41,20 @@ #include #include +#if USB_HAVE_BUSDMA static void usb2_dma_tag_create(struct usb2_dma_tag *, uint32_t, uint32_t); static void usb2_dma_tag_destroy(struct usb2_dma_tag *); +#endif -#ifdef __FreeBSD__ +#if USB_HAVE_BUSDMA && defined(__FreeBSD__) static void usb2_dma_lock_cb(void *, bus_dma_lock_op_t); -static int32_t usb2_m_copy_in_cb(void *, void *, uint32_t); static void usb2_pc_alloc_mem_cb(void *, bus_dma_segment_t *, int, int); static void usb2_pc_load_mem_cb(void *, bus_dma_segment_t *, int, int); static void usb2_pc_common_mem_cb(void *, bus_dma_segment_t *, int, int, uint8_t); #endif -#ifdef __NetBSD__ -static int32_t usb2_m_copy_in_cb(void *, caddr_t, uint32_t); +#if USB_HAVE_BUSDMA && defined(__NetBSD__) static void usb2_pc_common_mem_cb(struct usb2_page_cache *, bus_dma_segment_t *, int, int, uint8_t); #endif @@ -71,6 +71,7 @@ usb2_get_page(struct usb2_page_cache *pc { struct usb2_page *page; +#if USB_HAVE_BUSDMA if (pc->page_start) { /* Case 1 - something has been loaded into DMA */ @@ -105,14 +106,16 @@ usb2_get_page(struct usb2_page_cache *pc res->buffer = USB_ADD_BYTES(page->buffer, offset); } - } else { - - /* Case 2 - Plain PIO */ - - res->buffer = USB_ADD_BYTES(pc->buffer, offset); - res->length = 0 - 1; - res->physaddr = 0; + return; } +#endif + /* Case 2 - Plain PIO */ + + res->buffer = USB_ADD_BYTES(pc->buffer, offset); + res->length = 0 - 1; +#if USB_HAVE_BUSDMA + res->physaddr = 0; +#endif } /*------------------------------------------------------------------------* @@ -146,6 +149,7 @@ usb2_copy_in(struct usb2_page_cache *cac * 0: Success * Else: Failure *------------------------------------------------------------------------*/ +#if USB_HAVE_USER_IO int usb2_copy_in_user(struct usb2_page_cache *cache, uint32_t offset, const void *ptr, uint32_t len) @@ -170,10 +174,12 @@ usb2_copy_in_user(struct usb2_page_cache } return (0); /* success */ } +#endif /*------------------------------------------------------------------------* * usb2_m_copy_in - copy a mbuf chain directly into DMA-able memory *------------------------------------------------------------------------*/ +#if USB_HAVE_MBUF struct usb2_m_copy_in_arg { struct usb2_page_cache *cache; uint32_t dst_offset; @@ -202,10 +208,12 @@ usb2_m_copy_in(struct usb2_page_cache *c error = m_apply(m, src_offset, src_len, &usb2_m_copy_in_cb, &arg); } +#endif /*------------------------------------------------------------------------* * usb2_uiomove - factored out code *------------------------------------------------------------------------*/ +#if USB_HAVE_USER_IO int usb2_uiomove(struct usb2_page_cache *pc, struct uio *uio, uint32_t pc_offset, uint32_t len) @@ -234,6 +242,7 @@ usb2_uiomove(struct usb2_page_cache *pc, } return (error); } +#endif /*------------------------------------------------------------------------* * usb2_copy_out - copy directly from DMA-able memory @@ -266,6 +275,7 @@ usb2_copy_out(struct usb2_page_cache *ca * 0: Success * Else: Failure *------------------------------------------------------------------------*/ +#if USB_HAVE_USER_IO int usb2_copy_out_user(struct usb2_page_cache *cache, uint32_t offset, void *ptr, uint32_t len) @@ -290,6 +300,7 @@ usb2_copy_out_user(struct usb2_page_cach } return (0); /* success */ } +#endif /*------------------------------------------------------------------------* * usb2_bzero - zero DMA-able memory @@ -313,8 +324,7 @@ usb2_bzero(struct usb2_page_cache *cache } } - -#ifdef __FreeBSD__ +#if USB_HAVE_BUSDMA && defined(__FreeBSD__) /*------------------------------------------------------------------------* * usb2_dma_lock_cb - dummy callback @@ -691,7 +701,7 @@ usb2_pc_dmamap_create(struct usb2_page_c struct usb2_dma_tag *utag; /* get info */ - info = pc->tag_parent->info; + info = USB_DMATAG_TO_XROOT(pc->tag_parent); /* sanity check */ if (info == NULL) { @@ -731,7 +741,7 @@ usb2_pc_dmamap_destroy(struct usb2_page_ #endif -#ifdef __NetBSD__ +#if USB_HAVE_BUSDMA && defined(__NetBSD__) /*------------------------------------------------------------------------* * usb2_dma_tag_create - allocate a DMA tag @@ -1062,7 +1072,7 @@ usb2_pc_dmamap_create(struct usb2_page_c struct usb2_dma_tag *utag; /* get info */ - info = pc->tag_parent->info; + info = USB_DMATAG_TO_XROOT(pc->tag_parent); /* sanity check */ if (info == NULL) { @@ -1106,6 +1116,8 @@ usb2_pc_dmamap_destroy(struct usb2_page_ #endif +#if USB_HAVE_BUSDMA + /*------------------------------------------------------------------------* * usb2_dma_tag_find - factored out code *------------------------------------------------------------------------*/ @@ -1148,8 +1160,7 @@ void usb2_dma_tag_setup(struct usb2_dma_parent_tag *udpt, struct usb2_dma_tag *udt, bus_dma_tag_t dmat, struct mtx *mtx, usb2_dma_callback_t *func, - struct usb2_xfer_root *info, uint8_t ndmabits, - uint8_t nudt) + uint8_t ndmabits, uint8_t nudt) { bzero(udpt, sizeof(*udpt)); @@ -1167,7 +1178,6 @@ usb2_dma_tag_setup(struct usb2_dma_paren /* store some information */ udpt->mtx = mtx; - udpt->info = info; udpt->func = func; udpt->tag = dmat; udpt->utag_first = udt; @@ -1349,7 +1359,7 @@ usb2_bdma_done_event(struct usb2_dma_par { struct usb2_xfer_root *info; - info = udpt->info; + info = USB_DMATAG_TO_XROOT(udpt); mtx_assert(info->xfer_mtx, MA_OWNED); @@ -1423,3 +1433,5 @@ usb2_bdma_post_sync(struct usb2_xfer *xf pc++; } } + +#endif Modified: head/sys/dev/usb/usb_busdma.h ============================================================================== --- head/sys/dev/usb/usb_busdma.h Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_busdma.h Fri Mar 20 21:48:11 2009 (r190180) @@ -60,8 +60,10 @@ typedef void (usb2_dma_callback_t)(struc * address of a memory page having size USB_PAGE_SIZE. */ struct usb2_page { +#if USB_HAVE_BUSDMA bus_size_t physaddr; void *buffer; /* non Kernel Virtual Address */ +#endif }; /* @@ -71,7 +73,9 @@ struct usb2_page { */ struct usb2_page_search { void *buffer; +#if USB_HAVE_BUSDMA bus_size_t physaddr; +#endif uint32_t length; }; @@ -81,62 +85,67 @@ struct usb2_page_search { */ struct usb2_page_cache { -#ifdef __FreeBSD__ +#if USB_HAVE_BUSDMA && defined(__FreeBSD__) bus_dma_tag_t tag; bus_dmamap_t map; #endif -#ifdef __NetBSD__ +#if USB_HAVE_BUSDMA && defined(__NetBSD__) bus_dma_tag_t tag; bus_dmamap_t map; bus_dma_segment_t *p_seg; #endif +#if USB_HAVE_BUSDMA struct usb2_page *page_start; +#endif struct usb2_dma_parent_tag *tag_parent; /* always set */ void *buffer; /* virtual buffer pointer */ -#ifdef __NetBSD__ +#if USB_HAVE_BUSDMA && defined(_NetBSD__) int n_seg; #endif +#if USB_HAVE_BUSDMA uint32_t page_offset_buf; uint32_t page_offset_end; uint8_t isread:1; /* set if we are currently reading * from the memory. Else write. */ uint8_t ismultiseg:1; /* set if we can have multiple * segments */ +#endif }; /* * The following structure describes the parent USB DMA tag. */ struct usb2_dma_parent_tag { -#ifdef __FreeBSD__ +#if USB_HAVE_BUSDMA && defined(__FreeBSD__) struct cv cv[1]; /* internal condition variable */ #endif - +#if USB_HAVE_BUSDMA bus_dma_tag_t tag; /* always set */ struct mtx *mtx; /* private mutex, always set */ - struct usb2_xfer_root *info; /* used by the callback function */ usb2_dma_callback_t *func; /* load complete callback function */ struct usb2_dma_tag *utag_first;/* pointer to first USB DMA tag */ - uint8_t dma_error; /* set if DMA load operation failed */ uint8_t dma_bits; /* number of DMA address lines */ uint8_t utag_max; /* number of USB DMA tags */ +#endif }; /* * The following structure describes an USB DMA tag. */ struct usb2_dma_tag { -#ifdef __NetBSD__ +#if USB_HAVE_BUSDMA && defined(__NetBSD__) bus_dma_segment_t *p_seg; #endif +#if USB_HAVE_BUSDMA struct usb2_dma_parent_tag *tag_parent; bus_dma_tag_t tag; uint32_t align; uint32_t size; -#ifdef __NetBSD__ +#endif +#if USB_HAVE_BUSDMA && defined(__NetBSD__) uint32_t n_seg; #endif }; @@ -168,8 +177,7 @@ int usb2_copy_out_user(struct usb2_page_ void *ptr, uint32_t len); void usb2_dma_tag_setup(struct usb2_dma_parent_tag *udpt, struct usb2_dma_tag *udt, bus_dma_tag_t dmat, struct mtx *mtx, - usb2_dma_callback_t *func, struct usb2_xfer_root *info, - uint8_t ndmabits, uint8_t nudt); + usb2_dma_callback_t *func, uint8_t ndmabits, uint8_t nudt); void usb2_dma_tag_unsetup(struct usb2_dma_parent_tag *udpt); void usb2_get_page(struct usb2_page_cache *pc, uint32_t offset, struct usb2_page_search *res); Modified: head/sys/dev/usb/usb_core.h ============================================================================== --- head/sys/dev/usb/usb_core.h Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_core.h Fri Mar 20 21:48:11 2009 (r190180) @@ -32,16 +32,84 @@ #ifndef _USB2_CORE_H_ #define _USB2_CORE_H_ +/* Allow defines in "opt_usb.h" to override configuration */ + +#include "opt_usb.h" +#include "opt_bus.h" + /* Default USB configuration */ -#ifndef USB_USE_CONDVAR -#define USB_USE_CONDVAR 0 +/* + * The following macro defines if the code shall use cv_xxx() instead + * of msleep() and wakeup(). + */ +#ifndef USB_HAVE_CONDVAR +#define USB_HAVE_CONDVAR 0 #endif +/* + * The following macro defines if the code shall support + * /dev/usb/x.y.z. + */ #ifndef USB_HAVE_UGEN #define USB_HAVE_UGEN 1 #endif +/* + * The following macro defines if the code shall support any forms of + * ASCII strings. + */ +#ifndef USB_HAVE_STRINGS +#define USB_HAVE_STRINGS 1 +#endif + +/* + * The following macro defines if the code shall support BUS-DMA. + */ +#ifndef USB_HAVE_BUSDMA +#define USB_HAVE_BUSDMA 1 +#endif + +/* + * The following macro defines if the code shall support the Linux + * compatibility layer. + */ +#ifndef USB_HAVE_COMPAT_LINUX +#define USB_HAVE_COMPAT_LINUX 1 +#endif + +/* + * The following macro defines if the code shall support + * userland data transfer via copyin() and copyout() + */ +#ifndef USB_HAVE_USER_IO +#define USB_HAVE_USER_IO 1 +#endif + +/* + * The following macro defines if the code shall support copy in via + * bsd-mbufs to USB. + */ +#ifndef USB_HAVE_MBUF +#define USB_HAVE_MBUF 1 +#endif + +/* + * The following macro defines if the code shall compile a table + * describing USB vendor and product IDs. + */ +#ifndef USB_VERBOSE +#define USB_VERBOSE 1 +#endif + +/* + * The following macro defines if USB debugging support shall be + * compiled for the USB core and all drivers. + */ +#ifndef USB_DEBUG +#define USB_DEBUG 1 +#endif + #ifndef USB_TD_GET_PROC #define USB_TD_GET_PROC(td) (td)->td_proc #endif @@ -76,8 +144,6 @@ #include #include "usb_if.h" -#include "opt_usb.h" -#include "opt_bus.h" #define USB_STACK_VERSION 2000 /* 2.0 */ @@ -95,10 +161,6 @@ #define USB_MAX_IPACKET 8 /* maximum size of the initial USB * data packet */ -#ifndef USB_VERBOSE -#define USB_VERBOSE 1 -#endif - #define USB_HUB_MAX_DEPTH 5 /* USB transfer states */ @@ -256,12 +318,14 @@ struct usb2_xfer_flags_int { uint8_t short_frames_ok:1; /* filtered version */ uint8_t short_xfer_ok:1; /* filtered version */ +#if USB_HAVE_BUSDMA uint8_t bdma_enable:1; /* filtered version (only set if * hardware supports DMA) */ uint8_t bdma_no_post_sync:1; /* set if the USB callback wrapper * should not do the BUS-DMA post sync * operation */ uint8_t bdma_setup:1; /* set if BUS-DMA has been setup */ +#endif uint8_t isochronous_xfr:1; /* set if isochronous transfer */ uint8_t usb2_mode:1; /* shadow copy of "udev->usb2_mode" */ uint8_t curr_dma_set:1; /* used by USB HC/DC driver */ Modified: head/sys/dev/usb/usb_debug.h ============================================================================== --- head/sys/dev/usb/usb_debug.h Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_debug.h Fri Mar 20 21:48:11 2009 (r190180) @@ -35,11 +35,6 @@ SYSCTL_DECL(_hw_usb2); /* Declare global USB debug variable. */ extern int usb2_debug; -/* Force debugging until further */ -#ifndef USB_DEBUG -#define USB_DEBUG 1 -#endif - /* Check if USB debugging is enabled. */ #ifdef USB_DEBUG_VAR #if (USB_DEBUG != 0) Modified: head/sys/dev/usb/usb_device.c ============================================================================== --- head/sys/dev/usb/usb_device.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_device.c Fri Mar 20 21:48:11 2009 (r190180) @@ -44,9 +44,11 @@ #include #include #include -#include #include +#if USB_HAVE_UGEN +#include #include +#endif #include @@ -68,7 +70,9 @@ static void usb2_init_attach_arg(struct static void usb2_suspend_resume_sub(struct usb2_device *, device_t, uint8_t); static void usb2_clear_stall_proc(struct usb2_proc_msg *_pm); +#if USB_HAVE_STRINGS static void usb2_check_strings(struct usb2_device *); +#endif static usb2_error_t usb2_fill_iface_data(struct usb2_device *, uint8_t, uint8_t); static void usb2_notify_addq(const char *type, struct usb2_device *); @@ -482,11 +486,13 @@ usb2_free_iface_data(struct usb2_device /* mtx_assert() */ +#if USB_HAVE_COMPAT_LINUX /* free Linux compat device, if any */ if (udev->linux_dev) { usb_linux_free_device(udev->linux_dev); udev->linux_dev = NULL; } +#endif /* free all pipes, if any */ usb2_free_pipe_data(udev, 0, 0); @@ -1584,6 +1590,7 @@ usb2_alloc_device(device_t parent_dev, s /* assume 100mA bus powered for now. Changed when configured. */ udev->power = USB_MIN_POWER; +#if USB_HAVE_STRINGS /* get serial number string */ err = usb2_req_get_string_any (udev, NULL, (char *)scratch_ptr, @@ -1607,6 +1614,7 @@ usb2_alloc_device(device_t parent_dev, s /* finish up all the strings */ usb2_check_strings(udev); +#endif if (udev->flags.usb2_mode == USB_MODE_HOST) { uint8_t config_index; @@ -2032,6 +2040,7 @@ usb2_devinfo(struct usb2_device *udev, c } } +#if USB_HAVE_STRINGS #if USB_VERBOSE /* * Descriptions of of known vendors and devices ("products"). @@ -2128,6 +2137,7 @@ usb2_check_strings(struct usb2_device *u sizeof(udev->product), "product 0x%04x", product_id); } } +#endif /* * Returns: Modified: head/sys/dev/usb/usb_device.h ============================================================================== --- head/sys/dev/usb/usb_device.h Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_device.h Fri Mar 20 21:48:11 2009 (r190180) @@ -28,6 +28,7 @@ #define _USB2_DEVICE_H_ struct usb2_symlink; +struct usb_device; /* linux compat */ #define USB_DEFAULT_XFER_MAX 2 @@ -114,7 +115,9 @@ struct usb2_device { struct usb2_device *parent_hub; struct usb2_config_descriptor *cdesc; /* full config descr */ struct usb2_hub *hub; /* only if this is a hub */ +#if USB_HAVE_COMPAT_LINUX struct usb_device *linux_dev; +#endif struct usb2_xfer *default_xfer[USB_DEFAULT_XFER_MAX]; struct usb2_temp_data *usb2_template_ptr; struct usb2_pipe *pipe_curr; /* current clear stall pipe */ Modified: head/sys/dev/usb/usb_request.c ============================================================================== --- head/sys/dev/usb/usb_request.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_request.c Fri Mar 20 21:48:11 2009 (r190180) @@ -264,6 +264,10 @@ usb2_do_request_flags(struct usb2_device if (actlen) { *actlen = 0; } +#if (USB_HAVE_USER_IO == 0) + if (flags & USB_USER_DATA_PTR) + return (USB_ERR_INVAL); +#endif if (udev->flags.usb2_mode == USB_MODE_DEVICE) { DPRINTF("USB device mode\n"); (usb2_temp_get_desc_p) (udev, req, &desc, &temp); @@ -277,13 +281,14 @@ usb2_do_request_flags(struct usb2_device *actlen = length; } if (length > 0) { +#if USB_HAVE_USER_IO if (flags & USB_USER_DATA_PTR) { if (copyout(desc, data, length)) { return (USB_ERR_INVAL); } - } else { + } else +#endif bcopy(desc, data, length); - } } return (0); /* success */ } @@ -339,6 +344,7 @@ usb2_do_request_flags(struct usb2_device if (temp > 0) { if (!(req->bmRequestType & UT_READ)) { +#if USB_HAVE_USER_IO if (flags & USB_USER_DATA_PTR) { USB_XFER_UNLOCK(xfer); err = usb2_copy_in_user(xfer->frbuffers + 1, @@ -348,9 +354,10 @@ usb2_do_request_flags(struct usb2_device err = USB_ERR_INVAL; break; } - } else { - usb2_copy_in(xfer->frbuffers + 1, 0, data, temp); - } + } else +#endif + usb2_copy_in(xfer->frbuffers + 1, + 0, data, temp); } xfer->nframes = 2; } else { @@ -408,6 +415,7 @@ usb2_do_request_flags(struct usb2_device } if (temp > 0) { if (req->bmRequestType & UT_READ) { +#if USB_HAVE_USER_IO if (flags & USB_USER_DATA_PTR) { USB_XFER_UNLOCK(xfer); err = usb2_copy_out_user(xfer->frbuffers + 1, @@ -417,10 +425,10 @@ usb2_do_request_flags(struct usb2_device err = USB_ERR_INVAL; break; } - } else { + } else +#endif usb2_copy_out(xfer->frbuffers + 1, 0, data, temp); - } } } /* Modified: head/sys/dev/usb/usb_transfer.c ============================================================================== --- head/sys/dev/usb/usb_transfer.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_transfer.c Fri Mar 20 21:48:11 2009 (r190180) @@ -191,6 +191,7 @@ usb2_get_dma_delay(struct usb2_bus *bus) * 0: Success * Else: Failure *------------------------------------------------------------------------*/ +#if USB_HAVE_BUSDMA uint8_t usb2_transfer_setup_sub_malloc(struct usb2_setup_params *parm, struct usb2_page_cache **ppc, uint32_t size, uint32_t align, @@ -301,6 +302,7 @@ usb2_transfer_setup_sub_malloc(struct us parm->dma_page_ptr = pg; return (0); } +#endif /*------------------------------------------------------------------------* * usb2_transfer_setup_sub - transfer setup subroutine @@ -643,6 +645,7 @@ usb2_transfer_setup_sub(struct usb2_setu if (parm->bufsize_max < parm->bufsize) { parm->bufsize_max = parm->bufsize; } +#if USB_HAVE_BUSDMA if (xfer->flags_int.bdma_enable) { /* * Setup "dma_page_ptr". @@ -670,6 +673,7 @@ usb2_transfer_setup_sub(struct usb2_setu parm->dma_page_ptr += (2 * n_frbuffers); parm->dma_page_ptr += (parm->bufsize / USB_PAGE_SIZE); } +#endif if (zmps) { /* correct maximum data length */ xfer->max_data_length = 0; @@ -694,7 +698,7 @@ usb2_transfer_setup_sub(struct usb2_setu for (x = 0; x != n_frbuffers; x++) { xfer->frbuffers[x].tag_parent = &xfer->xroot->dma_parent_tag; - +#if USB_HAVE_BUSDMA if (xfer->flags_int.bdma_enable && (parm->bufsize_max > 0)) { @@ -705,6 +709,7 @@ usb2_transfer_setup_sub(struct usb2_setu goto done; } } +#endif } } done: @@ -815,28 +820,31 @@ usb2_transfer_setup(struct usb2_device * info->memory_base = buf; info->memory_size = parm.size[0]; +#if USB_HAVE_BUSDMA info->dma_page_cache_start = USB_ADD_BYTES(buf, parm.size[4]); info->dma_page_cache_end = USB_ADD_BYTES(buf, parm.size[5]); +#endif info->xfer_page_cache_start = USB_ADD_BYTES(buf, parm.size[5]); info->xfer_page_cache_end = USB_ADD_BYTES(buf, parm.size[2]); usb2_cv_init(&info->cv_drain, "WDRAIN"); info->xfer_mtx = xfer_mtx; - +#if USB_HAVE_BUSDMA usb2_dma_tag_setup(&info->dma_parent_tag, parm.dma_tag_p, udev->bus->dma_parent_tag[0].tag, - xfer_mtx, &usb2_bdma_done_event, info, 32, parm.dma_tag_max); + xfer_mtx, &usb2_bdma_done_event, 32, parm.dma_tag_max); +#endif info->bus = udev->bus; info->udev = udev; TAILQ_INIT(&info->done_q.head); info->done_q.command = &usb2_callback_wrapper; - +#if USB_HAVE_BUSDMA TAILQ_INIT(&info->dma_q.head); info->dma_q.command = &usb2_bdma_work_loop; - +#endif info->done_m[0].hdr.pm_callback = &usb2_callback_proc; info->done_m[0].xroot = info; info->done_m[1].hdr.pm_callback = &usb2_callback_proc; @@ -1084,6 +1092,7 @@ usb2_transfer_unsetup_sub(struct usb2_xf USB_BUS_UNLOCK(info->bus); +#if USB_HAVE_BUSDMA /* free DMA'able memory, if any */ pc = info->dma_page_cache_start; while (pc != info->dma_page_cache_end) { @@ -1100,6 +1109,7 @@ usb2_transfer_unsetup_sub(struct usb2_xf /* free all DMA tags */ usb2_dma_tag_unsetup(&info->dma_parent_tag); +#endif usb2_cv_destroy(&info->cv_drain); @@ -1161,9 +1171,10 @@ usb2_transfer_unsetup(struct usb2_xfer * usb2_transfer_drain(xfer); +#if USB_HAVE_BUSDMA if (xfer->flags_int.bdma_enable) needs_delay = 1; - +#endif /* * NOTE: default pipe does not have an * interface, even if pipe->iface_index == 0 @@ -1412,9 +1423,10 @@ usb2_start_hardware(struct usb2_xfer *xf /* clear "did_close" flag */ xfer->flags_int.did_close = 0; +#if USB_HAVE_BUSDMA /* clear "bdma_setup" flag */ xfer->flags_int.bdma_setup = 0; - +#endif /* by default we cannot cancel any USB transfer immediately */ xfer->flags_int.can_cancel_immed = 0; @@ -1507,11 +1519,13 @@ usb2_start_hardware(struct usb2_xfer *xf * Check if BUS-DMA support is enabled and try to load virtual * buffers into DMA, if any: */ +#if USB_HAVE_BUSDMA if (xfer->flags_int.bdma_enable) { /* insert the USB transfer last in the BUS-DMA queue */ usb2_command_wrapper(&xfer->xroot->dma_q, xfer); return; } +#endif /* * Enter the USB transfer into the Host Controller or * Device Controller schedule: @@ -1923,12 +1937,13 @@ usb2_callback_wrapper(struct usb2_xfer_q } else { /* set transferred state */ xfer->usb2_state = USB_ST_TRANSFERRED; - +#if USB_HAVE_BUSDMA /* sync DMA memory, if any */ if (xfer->flags_int.bdma_enable && (!xfer->flags_int.bdma_no_post_sync)) { usb2_bdma_post_sync(xfer); } +#endif } } @@ -2042,8 +2057,6 @@ usb2_transfer_enqueue(struct usb2_xfer_q void usb2_transfer_done(struct usb2_xfer *xfer, usb2_error_t error) { - struct usb2_xfer_queue *pq; - USB_BUS_LOCK_ASSERT(xfer->xroot->bus, MA_OWNED); DPRINTF("err=%s\n", usb2_errstr(error)); @@ -2070,7 +2083,10 @@ usb2_transfer_done(struct usb2_xfer *xfe */ usb2_transfer_dequeue(xfer); +#if USB_HAVE_BUSDMA if (mtx_owned(xfer->xroot->xfer_mtx)) { + struct usb2_xfer_queue *pq; + /* * If the private USB lock is not locked, then we assume * that the BUS-DMA load stage has been passed: @@ -2082,6 +2098,7 @@ usb2_transfer_done(struct usb2_xfer *xfe usb2_command_wrapper(pq, NULL); } } +#endif /* keep some statistics */ if (xfer->error) { xfer->xroot->bus->stats_err.uds_requests Modified: head/sys/dev/usb/usb_transfer.h ============================================================================== --- head/sys/dev/usb/usb_transfer.h Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_transfer.h Fri Mar 20 21:48:11 2009 (r190180) @@ -36,23 +36,33 @@ struct usb2_done_msg { struct usb2_xfer_root *xroot; }; +#define USB_DMATAG_TO_XROOT(dpt) \ + ((struct usb2_xfer_root *)( \ + ((uint8_t *)(dpt)) - \ + ((uint8_t *)&((struct usb2_xfer_root *)0)->dma_parent_tag) + \ + ((uint8_t *)0))) + /* * The following structure is used to keep information about memory * that should be automatically freed at the moment all USB transfers * have been freed. */ struct usb2_xfer_root { + struct usb2_dma_parent_tag dma_parent_tag; +#if USB_HAVE_BUSDMA struct usb2_xfer_queue dma_q; +#endif struct usb2_xfer_queue done_q; struct usb2_done_msg done_m[2]; struct cv cv_drain; - struct usb2_dma_parent_tag dma_parent_tag; struct usb2_process *done_p; /* pointer to callback process */ void *memory_base; struct mtx *xfer_mtx; /* cannot be changed during operation */ +#if USB_HAVE_BUSDMA struct usb2_page_cache *dma_page_cache_start; struct usb2_page_cache *dma_page_cache_end; +#endif struct usb2_page_cache *xfer_page_cache_start; struct usb2_page_cache *xfer_page_cache_end; struct usb2_bus *bus; /* pointer to USB bus (cached) */ Modified: head/sys/dev/usb/usb_util.c ============================================================================== --- head/sys/dev/usb/usb_util.c Fri Mar 20 21:47:26 2009 (r190179) +++ head/sys/dev/usb/usb_util.c Fri Mar 20 21:48:11 2009 (r190180) @@ -39,7 +39,7 @@ #include /* function prototypes */ -#if (USB_USE_CONDVAR == 0) +#if (USB_HAVE_CONDVAR == 0) static int usb2_msleep(void *chan, struct mtx *mtx, int priority, const char *wmesg, int timo); #endif @@ -47,6 +47,7 @@ static int usb2_msleep(void *chan, struc /*------------------------------------------------------------------------* * device_delete_all_children - delete all children of a device *------------------------------------------------------------------------*/ *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***