svn commit: r213500 - in user/weongyo/usb/sys/dev/usb: . controller

Weongyo Jeong weongyo at FreeBSD.org
Wed Oct 6 23:04:07 UTC 2010


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


More information about the svn-src-user mailing list