Date: Wed, 6 Oct 2010 23:04:07 +0000 (UTC) From: Weongyo Jeong <weongyo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r213500 - in user/weongyo/usb/sys/dev/usb: . controller Message-ID: <201010062304.o96N47nC020903@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: weongyo Date: Wed Oct 6 23:04:07 2010 New Revision: 213500 URL: http://svn.freebsd.org/changeset/base/213500 Log: Rewrites USB_DMATAG_TO_XROOT macro to remove linux-like container_of() macro. Sometimes it's useful because it don't need to handle the parent pointer but it's not intuitive. Modified: user/weongyo/usb/sys/dev/usb/controller/usb_controller.c user/weongyo/usb/sys/dev/usb/usb_busdma.c user/weongyo/usb/sys/dev/usb/usb_busdma.h user/weongyo/usb/sys/dev/usb/usb_transfer.c user/weongyo/usb/sys/dev/usb/usb_transfer.h Modified: user/weongyo/usb/sys/dev/usb/controller/usb_controller.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/usb_controller.c Wed Oct 6 22:41:32 2010 (r213499) +++ user/weongyo/usb/sys/dev/usb/controller/usb_controller.c Wed Oct 6 23:04:07 2010 (r213500) @@ -473,7 +473,7 @@ usb_bus_mem_alloc_all(struct usb_bus *bu #if USB_HAVE_BUSDMA usb_dma_tag_setup(bus->dma_parent_tag, bus->dma_tags, - dmat, &bus->bus_mtx, NULL, 32, USB_BUS_DMA_TAG_MAX); + dmat, &bus->bus_mtx, NULL, 32, USB_BUS_DMA_TAG_MAX, NULL); if (bus->busmem_func != NULL) bus->busmem_func(bus, usb_bus_mem_alloc_all_cb); #endif Modified: user/weongyo/usb/sys/dev/usb/usb_busdma.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/usb_busdma.c Wed Oct 6 22:41:32 2010 (r213499) +++ user/weongyo/usb/sys/dev/usb/usb_busdma.c Wed Oct 6 23:04:07 2010 (r213500) @@ -767,7 +767,7 @@ usb_dma_tag_find(struct usb_dma_parent_t void usb_dma_tag_setup(struct usb_dma_parent_tag *udpt, struct usb_dma_tag *udt, bus_dma_tag_t dmat, struct mtx *mtx, usb_dma_callback_t *func, - uint8_t ndmabits, uint8_t nudt) + uint8_t ndmabits, uint8_t nudt, void *priv) { bzero(udpt, sizeof(*udpt)); @@ -786,6 +786,7 @@ usb_dma_tag_setup(struct usb_dma_parent_ udpt->utag_first = udt; udpt->utag_max = nudt; udpt->dma_bits = ndmabits; + udpt->priv = priv; while (nudt--) { bzero(udt, sizeof(*udt)); Modified: user/weongyo/usb/sys/dev/usb/usb_busdma.h ============================================================================== --- user/weongyo/usb/sys/dev/usb/usb_busdma.h Wed Oct 6 22:41:32 2010 (r213499) +++ user/weongyo/usb/sys/dev/usb/usb_busdma.h Wed Oct 6 23:04:07 2010 (r213500) @@ -115,6 +115,11 @@ struct usb_dma_parent_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 */ + /* + * pointer to struct usb_xfer_root. But it'd be NULL if + * `struct usb_dma_parent_tag' is for controller/usb_controller.c + */ + void *priv; }; #else struct usb_dma_parent_tag {}; /* empty struct */ @@ -151,7 +156,8 @@ void usb_bdma_pre_sync(struct usb_xfer * void usb_bdma_work_loop(struct usb_xfer_queue *pq); void usb_dma_tag_setup(struct usb_dma_parent_tag *udpt, struct usb_dma_tag *udt, bus_dma_tag_t dmat, struct mtx *mtx, - usb_dma_callback_t *func, uint8_t ndmabits, uint8_t nudt); + usb_dma_callback_t *func, uint8_t ndmabits, uint8_t nudt, + void *priv); void usb_dma_tag_unsetup(struct usb_dma_parent_tag *udpt); void usb_pc_cpu_flush(struct usb_page_cache *pc); void usb_pc_cpu_invalidate(struct usb_page_cache *pc); Modified: user/weongyo/usb/sys/dev/usb/usb_transfer.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/usb_transfer.c Wed Oct 6 22:41:32 2010 (r213499) +++ user/weongyo/usb/sys/dev/usb/usb_transfer.c Wed Oct 6 23:04:07 2010 (r213500) @@ -918,7 +918,7 @@ usbd_transfer_setup(struct usb_device *u #if USB_HAVE_BUSDMA usb_dma_tag_setup(&info->dma_parent_tag, parm.dma_tag_p, udev->bus->dma_parent_tag[0].tag, - xfer_mtx, &usb_bdma_done_event, 32, parm.dma_tag_max); + xfer_mtx, &usb_bdma_done_event, 32, parm.dma_tag_max, info); #endif info->bus = udev->bus; Modified: user/weongyo/usb/sys/dev/usb/usb_transfer.h ============================================================================== --- user/weongyo/usb/sys/dev/usb/usb_transfer.h Wed Oct 6 22:41:32 2010 (r213499) +++ user/weongyo/usb/sys/dev/usb/usb_transfer.h Wed Oct 6 23:04:07 2010 (r213500) @@ -29,10 +29,7 @@ #include <sys/taskqueue.h> -#define USB_DMATAG_TO_XROOT(dpt) \ - ((struct usb_xfer_root *)( \ - ((uint8_t *)(dpt)) - \ - ((uint8_t *)&((struct usb_xfer_root *)0)->dma_parent_tag))) +#define USB_DMATAG_TO_XROOT(dpt) ((struct usb_xfer_root *)(dpt)->priv) /* * The following structure is used to keep information about memory
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010062304.o96N47nC020903>