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