Module Name:    src
Committed By:   riz
Date:           Sat Mar 30 23:03:19 UTC 2013

Modified Files:
        src/sys/dev/usb [netbsd-6]: dwc_otg.c

Log Message:
Pull up following revision(s) (requested by nick in ticket #847):
        sys/dev/usb/dwc_otg.c: revision 1.47
        sys/dev/usb/dwc_otg.c: revision 1.48
Consistently use the macros to get softc, dxfer, etc.
Fix misunderstanding of how to handle wMaxPacketSize.
The *_host_{setup,data}_[tr]x routines already split transfers into < mps
units, so there no reason to do it in *_setup_{ctrl,data}_chain. Fix
short_pkt handling in the process.
This gives urtwn a fighting change to Tx large packets.


To generate a diff of this commit:
cvs rdiff -u -r1.45.2.4 -r1.45.2.5 src/sys/dev/usb/dwc_otg.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/dwc_otg.c
diff -u src/sys/dev/usb/dwc_otg.c:1.45.2.4 src/sys/dev/usb/dwc_otg.c:1.45.2.5
--- src/sys/dev/usb/dwc_otg.c:1.45.2.4	Mon Feb 18 18:13:05 2013
+++ src/sys/dev/usb/dwc_otg.c	Sat Mar 30 23:03:19 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: dwc_otg.c,v 1.45.2.4 2013/02/18 18:13:05 riz Exp $	*/
+/*	$NetBSD: dwc_otg.c,v 1.45.2.5 2013/03/30 23:03:19 riz Exp $	*/
 
 /*-
  * Copyright (c) 2012 Hans Petter Selasky. All rights reserved.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dwc_otg.c,v 1.45.2.4 2013/02/18 18:13:05 riz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dwc_otg.c,v 1.45.2.5 2013/03/30 23:03:19 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -119,7 +119,9 @@ int dwc_otgdebug = 0;
 
 #define	DWC_OTG_BUS2SC(bus)	((bus)->hci_private)
 
-#define	DWC_OTG_XFER2SC(xfer)	DWC_OTG_BUS2SC((xfer)->pipe->device->bus)
+#define	DWC_OTG_PIPE2SC(pipe)	DWC_OTG_BUS2SC((pipe)->device->bus)
+
+#define	DWC_OTG_XFER2SC(xfer)	DWC_OTG_PIPE2SC((xfer)->pipe)
 
 #define	DWC_OTG_TD2SC(td)	DWC_OTG_XFER2SC((td)->xfer)
 
@@ -130,6 +132,8 @@ int dwc_otgdebug = 0;
 
 #define	DWC_OTG_XFER2DPIPE(x) (struct dwc_otg_pipe *)(x)->pipe;
 
+#define	DWC_OTG_PIPE2DPIPE(p) (struct dwc_otg_pipe *)(p)
+
 #define usbd_copy_in(d, o, b, s) \
     memcpy(((char *)(d) + (o)), (b), (s))
 
@@ -337,7 +341,7 @@ Static const struct usbd_pipe_methods dw
 Static usbd_status
 dwc_otg_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
 {
-	struct dwc_otg_softc *sc = bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_BUS2SC(bus);
 	usbd_status status;
 
 	status = usb_allocmem(&sc->sc_bus, size, 0, dma);
@@ -349,7 +353,7 @@ dwc_otg_allocm(struct usbd_bus *bus, usb
 Static void
 dwc_otg_freem(struct usbd_bus *bus, usb_dma_t *dma)
 {
-	struct dwc_otg_softc *sc = bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_BUS2SC(bus);
 
 	DPRINTF("\n");
 
@@ -363,7 +367,7 @@ dwc_otg_freem(struct usbd_bus *bus, usb_
 usbd_xfer_handle
 dwc_otg_allocx(struct usbd_bus *bus)
 {
-	struct dwc_otg_softc *sc = bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_BUS2SC(bus);
 	struct dwc_otg_xfer *dxfer;
 
 	DPRINTF("\n");
@@ -383,7 +387,7 @@ dwc_otg_allocx(struct usbd_bus *bus)
 void
 dwc_otg_freex(struct usbd_bus *bus, usbd_xfer_handle xfer)
 {
-	struct dwc_otg_softc *sc = bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_BUS2SC(bus);
 
 	DPRINTF("\n");
 
@@ -402,7 +406,7 @@ Static void
 dwc_otg_softintr(void *v)
 {
 	struct usbd_bus *bus = v;
-	struct dwc_otg_softc *sc = bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_BUS2SC(bus);
 	struct dwc_otg_xfer *dxfer;
 
 	DOTG_EVCNT_INCR(sc->sc_ev_soft_intr);
@@ -466,9 +470,9 @@ dwc_otg_waitintr(struct dwc_otg_softc *s
 Static void
 dwc_otg_timeout(void *addr)
 {
-	struct dwc_otg_xfer *dxfer = addr;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)dxfer->xfer.pipe;
-	struct dwc_otg_softc *sc = dpipe->pipe.device->bus->hci_private;
+	usbd_xfer_handle xfer = addr;
+	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	DPRINTF("dxfer=%p\n", dxfer);
 
@@ -496,9 +500,10 @@ dwc_otg_timeout_task(void *addr)
 usbd_status
 dwc_otg_open(usbd_pipe_handle pipe)
 {
-	usbd_device_handle dev = pipe->device;
-	struct dwc_otg_softc *sc = dev->bus->hci_private;
+	struct dwc_otg_pipe *dpipe = DWC_OTG_PIPE2DPIPE(pipe);
+	struct dwc_otg_softc *sc = DWC_OTG_DPIPE2SC(dpipe);
 	usb_endpoint_descriptor_t *ed = pipe->endpoint->edesc;
+	usbd_device_handle dev = pipe->device;
 	uint8_t addr = dev->address;
 	uint8_t xfertype = UE_GET_XFERTYPE(ed->bmAttributes);
 	usbd_status err;
@@ -560,7 +565,7 @@ fail:
 Static void
 dwc_otg_poll(struct usbd_bus *bus)
 {
-	struct dwc_otg_softc *sc = bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_BUS2SC(bus);
 
 	mutex_spin_enter(&sc->sc_intr_lock);
 	dwc_otg_interrupt(sc);
@@ -583,9 +588,8 @@ dwc_otg_close_pipe(usbd_pipe_handle pipe
 Static void
 dwc_otg_abort_xfer(usbd_xfer_handle xfer, usbd_status status)
 {
-	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
-	struct dwc_otg_softc *sc = dpipe->pipe.device->bus->hci_private;
+	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 	bool wake;
 	int s;
 
@@ -764,7 +768,7 @@ dwc_otg_root_ctrl_transfer(usbd_xfer_han
 Static usbd_status
 dwc_otg_root_ctrl_start(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_softc *sc = xfer->pipe->device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 	usb_device_request_t *req;
 	uint8_t *buf;
 	int len, value, index, l, totlen;
@@ -1182,8 +1186,7 @@ dwc_otg_root_intr_transfer(usbd_xfer_han
 Static usbd_status
 dwc_otg_root_intr_start(usbd_xfer_handle xfer)
 {
-	usbd_pipe_handle pipe = xfer->pipe;
-	struct dwc_otg_softc *sc = pipe->device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	DPRINTF("\n");
 
@@ -1213,7 +1216,7 @@ dwc_otg_root_intr_abort(usbd_xfer_handle
 Static void
 dwc_otg_root_intr_close(usbd_pipe_handle pipe)
 {
-	struct dwc_otg_softc *sc = pipe->device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_PIPE2SC(pipe);
 
 	DPRINTF("\n");
 
@@ -1250,7 +1253,7 @@ dwc_otg_device_ctrl_transfer(usbd_xfer_h
 Static usbd_status
 dwc_otg_device_ctrl_start(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_softc *sc = xfer->pipe->device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	DPRINTF("\n");
 
@@ -1274,8 +1277,8 @@ dwc_otg_device_ctrl_abort(usbd_xfer_hand
 Static void
 dwc_otg_device_ctrl_close(usbd_pipe_handle pipe)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)pipe;
-	struct dwc_otg_softc *sc = pipe->device->bus->hci_private;
+	struct dwc_otg_pipe *dpipe = DWC_OTG_PIPE2DPIPE(pipe);
+	struct dwc_otg_softc *sc = DWC_OTG_PIPE2SC(pipe);
 
 	dpipe = dpipe;
 	sc = sc;
@@ -1325,7 +1328,7 @@ dwc_otg_device_bulk_transfer(usbd_xfer_h
 Static usbd_status
 dwc_otg_device_bulk_start(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_softc *sc = xfer->pipe->device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	DPRINTF("xfer=%p\n", xfer);
 
@@ -1349,8 +1352,8 @@ dwc_otg_device_bulk_abort(usbd_xfer_hand
 Static void
 dwc_otg_device_bulk_close(usbd_pipe_handle pipe)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)pipe;
-	struct dwc_otg_softc *sc = pipe->device->bus->hci_private;
+	struct dwc_otg_pipe *dpipe = DWC_OTG_PIPE2DPIPE(pipe);
+	struct dwc_otg_softc *sc = DWC_OTG_PIPE2SC(pipe);
 
 	DPRINTF("\n");
 
@@ -1363,7 +1366,7 @@ dwc_otg_device_bulk_close(usbd_pipe_hand
 Static void
 dwc_otg_device_bulk_done(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_softc *sc = xfer->pipe->device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	DPRINTF("\n");
 
@@ -1395,9 +1398,7 @@ dwc_otg_device_intr_transfer(usbd_xfer_h
 Static usbd_status
 dwc_otg_device_intr_start(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
-	usbd_device_handle dev = dpipe->pipe.device;
-	struct dwc_otg_softc *sc = dev->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	DPRINTF("\n");
 
@@ -1427,8 +1428,8 @@ dwc_otg_device_intr_abort(usbd_xfer_hand
 Static void
 dwc_otg_device_intr_close(usbd_pipe_handle pipe)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)pipe;
-	struct dwc_otg_softc *sc = pipe->device->bus->hci_private;
+	struct dwc_otg_pipe *dpipe = DWC_OTG_PIPE2DPIPE(pipe);
+	struct dwc_otg_softc *sc = DWC_OTG_PIPE2SC(pipe);
 
 	dpipe = dpipe;
 	sc = sc;
@@ -1483,9 +1484,9 @@ dwc_otg_device_isoc_transfer(usbd_xfer_h
 void
 dwc_otg_device_isoc_enter(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
+	struct dwc_otg_pipe *dpipe = DWC_OTG_XFER2DPIPE(xfer);
 	usbd_device_handle dev = dpipe->pipe.device;
-	struct dwc_otg_softc *sc = dev->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	DPRINTF("\n");
 
@@ -1496,8 +1497,7 @@ dwc_otg_device_isoc_enter(usbd_xfer_hand
 usbd_status
 dwc_otg_device_isoc_start(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
-	struct dwc_otg_softc *sc = dpipe->pipe.device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	sc = sc;
 	DPRINTF("\n");
@@ -1508,8 +1508,7 @@ dwc_otg_device_isoc_start(usbd_xfer_hand
 void
 dwc_otg_device_isoc_abort(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
-	struct dwc_otg_softc *sc = dpipe->pipe.device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	sc = sc;
 	DPRINTF("\n");
@@ -1520,8 +1519,8 @@ dwc_otg_device_isoc_abort(usbd_xfer_hand
 usbd_status
 dwc_otg_setup_isoc(usbd_pipe_handle pipe)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)pipe;
-	struct dwc_otg_softc *sc = pipe->device->bus->hci_private;
+	struct dwc_otg_pipe *dpipe = DWC_OTG_PIPE2DPIPE(pipe);
+	struct dwc_otg_softc *sc = DWC_OTG_PIPE2SC(pipe);
 
 	dpipe = dpipe;
 	sc = sc;
@@ -1534,8 +1533,8 @@ dwc_otg_setup_isoc(usbd_pipe_handle pipe
 void
 dwc_otg_device_isoc_close(usbd_pipe_handle pipe)
 {
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)pipe;
-	struct dwc_otg_softc *sc = pipe->device->bus->hci_private;
+	struct dwc_otg_pipe *dpipe = DWC_OTG_PIPE2DPIPE(pipe);
+	struct dwc_otg_softc *sc = DWC_OTG_PIPE2SC(pipe);
 
 	dpipe = dpipe;
 	sc = sc;
@@ -2914,7 +2913,7 @@ dwc_otg_host_data_tx(struct dwc_otg_td *
 					return 0;	/* complete */
 
 				/*
-				 * Else we need to transmit a short
+				 * Else we need to transmit a 0 length
 				 * packet:
 				 */
 			}
@@ -3085,7 +3084,7 @@ uint32_t fifoenters;
 static uint8_t
 dwc_otg_xfer_do_fifo(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
+	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
 	struct dwc_otg_td *td;
 	uint8_t toggle;
 	uint8_t channel;
@@ -3596,8 +3595,8 @@ dwc_otg_setup_standard_chain_sub(struct 
 Static void
 dwc_otg_setup_ctrl_chain(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
+	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_pipe *dpipe = DWC_OTG_XFER2DPIPE(xfer);
 	usb_endpoint_descriptor_t *ed = dpipe->pipe.endpoint->edesc;
 	usb_device_request_t *req = &xfer->request;
 #ifdef DWC_OTG_DEBUG
@@ -3607,7 +3606,6 @@ dwc_otg_setup_ctrl_chain(usbd_xfer_handl
 	uint32_t len = UGETW(req->wLength);
 	struct dwc_otg_std_temp temp;	/* XXX */
 	struct dwc_otg_td *td;
-	int done;
 
 	DPRINTFN(3, "type=0x%02x, request=0x%02x, wValue=0x%04x,"
 	    "wIndex=0x%04x len=%d, addr=%d, endpt=%d, dir=%s, speed=%d\n",
@@ -3637,11 +3635,8 @@ dwc_otg_setup_ctrl_chain(usbd_xfer_handl
 	temp.short_pkt = 1;		/* We're 8 bytes this is short for HS */
 	temp.setup_alt_next = 0;	/* XXXNH */
 
-	DPRINTF("SE temp.len %d temp.pc %p\n", temp.len, temp.buf);
-
 	dwc_otg_setup_standard_chain_sub(&temp);
 
-	done = 0;
 	KASSERT((temp.buf == NULL) == (temp.len == 0));
 	if (dir == UT_READ) {
 		temp.func = &dwc_otg_host_data_rx;
@@ -3650,22 +3645,15 @@ dwc_otg_setup_ctrl_chain(usbd_xfer_handl
 	}
 
 	/* Optional Data stage */
-	while (done != len) {
+	if (len != 0) {
 
 		/* DATA0 / DATA1 message */
 
-		temp.buf = len ? KERNADDR(&xfer->dmabuf, done) : NULL;
-		temp.len = len - done;
+		temp.buf = KERNADDR(&xfer->dmabuf, 0);
+		temp.len = len;
 		temp.short_pkt = ( (xfer->flags & USBD_FORCE_SHORT_XFER) ? 0 : 1);
 
-		if (temp.len > UGETW(ed->wMaxPacketSize))
-			temp.len = UGETW(ed->wMaxPacketSize);
-
 		dwc_otg_setup_standard_chain_sub(&temp);
-
-		done += temp.len;
-		if (temp.len)
-			temp.buf = (char *)KERNADDR(&xfer->dmabuf, 0) + done;
 	}
 
 	/* Status Stage */
@@ -3699,8 +3687,8 @@ dwc_otg_setup_ctrl_chain(usbd_xfer_handl
 Static void
 dwc_otg_setup_data_chain(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
+	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_pipe *dpipe = DWC_OTG_XFER2DPIPE(xfer);
 	usb_endpoint_descriptor_t *ed = dpipe->pipe.endpoint->edesc;
 #ifdef DWC_OTG_DEBUG
 	usbd_device_handle dev = dpipe->pipe.device;
@@ -3708,9 +3696,6 @@ dwc_otg_setup_data_chain(usbd_xfer_handl
 	uint8_t dir = UE_GET_DIR(ed->bEndpointAddress);
 	struct dwc_otg_std_temp temp;	/* XXX */
 	struct dwc_otg_td *td;
-	int off;
-	int done;
-	int len;
 
 	DPRINTFN(3, "xfer=%p, len=%d, flags=%d, addr=%d, endpt=%d, dir %s\n",
 	    xfer, xfer->length, xfer->flags, dev->address,
@@ -3731,30 +3716,27 @@ dwc_otg_setup_data_chain(usbd_xfer_handl
 	temp.did_stall = 0; /* !xfer->flags_int.control_stall; */
 	temp.func = NULL;
 
-	done = 0;
 	if (dir == UE_DIR_IN) {
 		temp.func = &dwc_otg_host_data_rx;
 	} else {
 		temp.func = &dwc_otg_host_data_tx;
 	}
 
-	/* Data stage */
-	off = 0;
-	len = xfer->length;
-	while (len > 0) {
-		/* DATA0 / DATA1 message */
-		temp.buf = KERNADDR(&xfer->dmabuf, off);
-		temp.len = MIN(len, UGETW(ed->wMaxPacketSize));
-		temp.short_pkt = (xfer->flags & USBD_FORCE_SHORT_XFER) ? 0 : 1;
-		if (len <= UGETW(ed->wMaxPacketSize))
-			temp.setup_alt_next = 0;
+	/* DATA0 / DATA1 message */
+	temp.buf = KERNADDR(&xfer->dmabuf, 0);
+	temp.len = xfer->length;
+	if (temp.len == 0) {
 
-		dwc_otg_setup_standard_chain_sub(&temp);
+		/* make sure that we send an USB packet */
+
+		temp.short_pkt = 0;
 
-		len -= temp.len;
-		off += temp.len;
+	} else {
+		temp.short_pkt = (xfer->flags & USBD_FORCE_SHORT_XFER) ? 0 : 1;
 	}
 
+	dwc_otg_setup_standard_chain_sub(&temp);
+
 	/* must have at least one frame! */
 	td = temp.td;
 	dxfer->td_transfer_last = td;
@@ -3784,12 +3766,12 @@ dwc_otg_setup_isoc_chain(usbd_xfer_handl
 Static void
 dwc_otg_setup_standard_chain(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
+	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_pipe *dpipe = DWC_OTG_XFER2DPIPE(xfer);
 	usb_endpoint_descriptor_t *ed = dpipe->pipe.endpoint->edesc;
 	usbd_device_handle dev = dpipe->pipe.device;
 	usb_device_request_t *req = &xfer->request;
-	struct dwc_otg_softc *sc = dev->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 	uint8_t addr = dev->address;
 	uint8_t xfertype = UE_GET_XFERTYPE(ed->bmAttributes);
 	uint8_t epnum = UE_GET_ADDR(ed->bEndpointAddress);
@@ -3900,10 +3882,8 @@ dwc_otg_setup_standard_chain(usbd_xfer_h
 Static void
 dwc_otg_start_standard_chain(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
-	usbd_device_handle dev = dpipe->pipe.device;
-	struct dwc_otg_softc *sc = dev->bus->hci_private;
+	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	DPRINTFN(9, "\n");
 
@@ -3963,7 +3943,7 @@ Static void
 dwc_otg_standard_done(usbd_xfer_handle xfer)
 {
 	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
-	struct dwc_otg_softc *sc = xfer->pipe->device->bus->hci_private;
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 	struct dwc_otg_td *td;
 	usbd_status err = 0;
 
@@ -4287,9 +4267,9 @@ dwc_otg_init(struct dwc_otg_softc *sc)
 Static void
 dwc_otg_xfer_setup(usbd_xfer_handle xfer)
 {
-	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
-	struct dwc_otg_softc *sc = dpipe->pipe.device->bus->hci_private;
+	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_pipe *dpipe = DWC_OTG_XFER2DPIPE(xfer);
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 	usb_endpoint_descriptor_t *ed = dpipe->pipe.endpoint->edesc;
 	uint16_t mps = UGETW(ed->wMaxPacketSize);
 	uint8_t xfertype = UE_GET_XFERTYPE(ed->bmAttributes);
@@ -4339,11 +4319,8 @@ done:
 Static void
 dwc_otg_xfer_start(usbd_xfer_handle xfer)
 {
- 	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
-	struct dwc_otg_softc *sc = dpipe->pipe.device->bus->hci_private;
-
-
+ 	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 
 	if (sc->sc_bus.use_polling) {
 		dwc_otg_start_standard_chain(xfer);
@@ -4357,9 +4334,8 @@ dwc_otg_xfer_start(usbd_xfer_handle xfer
 Static void
 dwc_otg_xfer_end(usbd_xfer_handle xfer)
 {
- 	struct dwc_otg_xfer *dxfer = (struct dwc_otg_xfer *)xfer;
-	struct dwc_otg_pipe *dpipe = (struct dwc_otg_pipe *)xfer->pipe;
-	struct dwc_otg_softc *sc = dpipe->pipe.device->bus->hci_private;
+ 	struct dwc_otg_xfer *dxfer = DWC_OTG_XFER2DXFER(xfer);
+	struct dwc_otg_softc *sc = DWC_OTG_XFER2SC(xfer);
 	struct dwc_otg_td *td, *td_next;
 
 	DPRINTF("\n");

Reply via email to