Module Name:    src
Committed By:   skrll
Date:           Tue Dec  2 09:00:34 UTC 2014

Modified Files:
        src/sys/arch/mips/adm5120/dev [nick-nhusb]: ahci.c
        src/sys/conf [nick-nhusb]: files
        src/sys/dev/ic [nick-nhusb]: sl811hs.c
        src/sys/dev/usb [nick-nhusb]: aubtfwl.c auvitek_dtv.c auvitek_video.c
            ehci.c ehcivar.h emdtv_dtv.c files.usb if_athn_usb.c if_atu.c
            if_aue.c if_axe.c if_axen.c if_cdce.c if_cue.c if_kue.c if_otus.c
            if_rum.c if_run.c if_smsc.c if_udav.c if_upgt.c if_upl.c if_ural.c
            if_url.c if_urndis.c if_urtw.c if_urtwn.c if_zyd.c irmce.c motg.c
            motgvar.h ohci.c ohcivar.h pseye.c stuirda.c uaudio.c ubt.c ucom.c
            udl.c udsir.c ugen.c uhci.c uhcivar.h uhso.c uirda.c ulpt.c umass.c
            umidi.c urio.c usb_mem.c usb_mem.h usbdi.c usbdi.h usbdivar.h
            usscanner.c ustir.c utoppy.c uvideo.c xhci.c
        src/sys/external/bsd/dwc2 [nick-nhusb]: dwc2.c dwc2var.h
        src/sys/rump/dev/lib/libugenhc [nick-nhusb]: Makefile ugenhc.c
Removed Files:
        src/sys/rump/dev/lib/libugenhc [nick-nhusb]: ugenhc_dma.c

Log Message:
Step #1 of memory allocation re-organisation.

Centralised the buffer allocation routine which now supports DMA
and non-DMA capable host controllers.  Remove the
ubm_{alloc,free}m methods from usbd_bus_methods.

The buffer allocation is only allowed in thread context and,
therefore, negates the usefulness of the reserve dma code which
is removed in this change.

USBD_NO_COPY is also no longer required as usbd_transfer and
usbd_transfer_complete now track buffer usage and handle any
copying.


To generate a diff of this commit:
cvs rdiff -u -r1.12.6.3 -r1.12.6.4 src/sys/arch/mips/adm5120/dev/ahci.c
cvs rdiff -u -r1.1121 -r1.1121.2.1 src/sys/conf/files
cvs rdiff -u -r1.47.6.2 -r1.47.6.3 src/sys/dev/ic/sl811hs.c
cvs rdiff -u -r1.5.10.1 -r1.5.10.2 src/sys/dev/usb/aubtfwl.c
cvs rdiff -u -r1.6 -r1.6.14.1 src/sys/dev/usb/auvitek_dtv.c
cvs rdiff -u -r1.6 -r1.6.32.1 src/sys/dev/usb/auvitek_video.c
cvs rdiff -u -r1.234.2.6 -r1.234.2.7 src/sys/dev/usb/ehci.c
cvs rdiff -u -r1.42.14.2 -r1.42.14.3 src/sys/dev/usb/ehcivar.h
cvs rdiff -u -r1.10 -r1.10.14.1 src/sys/dev/usb/emdtv_dtv.c
cvs rdiff -u -r1.135 -r1.135.2.1 src/sys/dev/usb/files.usb
cvs rdiff -u -r1.6 -r1.6.8.1 src/sys/dev/usb/if_athn_usb.c
cvs rdiff -u -r1.50.2.1 -r1.50.2.2 src/sys/dev/usb/if_atu.c
cvs rdiff -u -r1.132.4.1 -r1.132.4.2 src/sys/dev/usb/if_aue.c
cvs rdiff -u -r1.67 -r1.67.4.1 src/sys/dev/usb/if_axe.c
cvs rdiff -u -r1.3 -r1.3.6.1 src/sys/dev/usb/if_axen.c
cvs rdiff -u -r1.38 -r1.38.14.1 src/sys/dev/usb/if_cdce.c
cvs rdiff -u -r1.68.4.1 -r1.68.4.2 src/sys/dev/usb/if_cue.c
cvs rdiff -u -r1.81 -r1.81.4.1 src/sys/dev/usb/if_kue.c
cvs rdiff -u -r1.25 -r1.25.6.1 src/sys/dev/usb/if_otus.c
cvs rdiff -u -r1.48 -r1.48.6.1 src/sys/dev/usb/if_rum.c
cvs rdiff -u -r1.10 -r1.10.6.1 src/sys/dev/usb/if_run.c
cvs rdiff -u -r1.22 -r1.22.2.1 src/sys/dev/usb/if_smsc.c
cvs rdiff -u -r1.43.4.1 -r1.43.4.2 src/sys/dev/usb/if_udav.c
cvs rdiff -u -r1.12.4.1 -r1.12.4.2 src/sys/dev/usb/if_upgt.c
cvs rdiff -u -r1.47.4.1 -r1.47.4.2 src/sys/dev/usb/if_upl.c
cvs rdiff -u -r1.44 -r1.44.14.1 src/sys/dev/usb/if_ural.c
cvs rdiff -u -r1.48.4.1 -r1.48.4.2 src/sys/dev/usb/if_url.c
cvs rdiff -u -r1.9 -r1.9.4.1 src/sys/dev/usb/if_urndis.c
cvs rdiff -u -r1.6 -r1.6.6.1 src/sys/dev/usb/if_urtw.c
cvs rdiff -u -r1.34 -r1.34.4.1 src/sys/dev/usb/if_urtwn.c
cvs rdiff -u -r1.36 -r1.36.14.1 src/sys/dev/usb/if_zyd.c
cvs rdiff -u -r1.1.32.1 -r1.1.32.2 src/sys/dev/usb/irmce.c
cvs rdiff -u -r1.12.2.4 -r1.12.2.5 src/sys/dev/usb/motg.c
cvs rdiff -u -r1.4.2.1 -r1.4.2.2 src/sys/dev/usb/motgvar.h
cvs rdiff -u -r1.254.2.5 -r1.254.2.6 src/sys/dev/usb/ohci.c
cvs rdiff -u -r1.55.6.1 -r1.55.6.2 src/sys/dev/usb/ohcivar.h
cvs rdiff -u -r1.21.34.1 -r1.21.34.2 src/sys/dev/usb/pseye.c
cvs rdiff -u -r1.16.2.2 -r1.16.2.3 src/sys/dev/usb/stuirda.c
cvs rdiff -u -r1.140.2.1 -r1.140.2.2 src/sys/dev/usb/uaudio.c
cvs rdiff -u -r1.51 -r1.51.4.1 src/sys/dev/usb/ubt.c
cvs rdiff -u -r1.108.2.1 -r1.108.2.2 src/sys/dev/usb/ucom.c
cvs rdiff -u -r1.11.6.1 -r1.11.6.2 src/sys/dev/usb/udl.c
cvs rdiff -u -r1.1.14.1 -r1.1.14.2 src/sys/dev/usb/udsir.c
cvs rdiff -u -r1.126.2.2 -r1.126.2.3 src/sys/dev/usb/ugen.c
cvs rdiff -u -r1.264.4.5 -r1.264.4.6 src/sys/dev/usb/uhci.c
cvs rdiff -u -r1.52.14.1 -r1.52.14.2 src/sys/dev/usb/uhcivar.h
cvs rdiff -u -r1.17 -r1.17.2.1 src/sys/dev/usb/uhso.c
cvs rdiff -u -r1.38.6.2 -r1.38.6.3 src/sys/dev/usb/uirda.c \
    src/sys/dev/usb/usscanner.c
cvs rdiff -u -r1.95.4.2 -r1.95.4.3 src/sys/dev/usb/ulpt.c
cvs rdiff -u -r1.149.2.1 -r1.149.2.2 src/sys/dev/usb/umass.c
cvs rdiff -u -r1.65.14.2 -r1.65.14.3 src/sys/dev/usb/umidi.c
cvs rdiff -u -r1.42.4.2 -r1.42.4.3 src/sys/dev/usb/urio.c
cvs rdiff -u -r1.65.2.1 -r1.65.2.2 src/sys/dev/usb/usb_mem.c
cvs rdiff -u -r1.30.14.2 -r1.30.14.3 src/sys/dev/usb/usb_mem.h
cvs rdiff -u -r1.162.2.4 -r1.162.2.5 src/sys/dev/usb/usbdi.c
cvs rdiff -u -r1.90.4.1 -r1.90.4.2 src/sys/dev/usb/usbdi.h
cvs rdiff -u -r1.109.2.3 -r1.109.2.4 src/sys/dev/usb/usbdivar.h
cvs rdiff -u -r1.33.10.2 -r1.33.10.3 src/sys/dev/usb/ustir.c
cvs rdiff -u -r1.24.4.1 -r1.24.4.2 src/sys/dev/usb/utoppy.c
cvs rdiff -u -r1.41.2.1 -r1.41.2.2 src/sys/dev/usb/uvideo.c
cvs rdiff -u -r1.28.2.3 -r1.28.2.4 src/sys/dev/usb/xhci.c
cvs rdiff -u -r1.32.2.2 -r1.32.2.3 src/sys/external/bsd/dwc2/dwc2.c
cvs rdiff -u -r1.3 -r1.3.12.1 src/sys/external/bsd/dwc2/dwc2var.h
cvs rdiff -u -r1.8 -r1.8.6.1 src/sys/rump/dev/lib/libugenhc/Makefile
cvs rdiff -u -r1.22.4.2 -r1.22.4.3 src/sys/rump/dev/lib/libugenhc/ugenhc.c
cvs rdiff -u -r1.1.12.1 -r0 src/sys/rump/dev/lib/libugenhc/ugenhc_dma.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/arch/mips/adm5120/dev/ahci.c
diff -u src/sys/arch/mips/adm5120/dev/ahci.c:1.12.6.3 src/sys/arch/mips/adm5120/dev/ahci.c:1.12.6.4
--- src/sys/arch/mips/adm5120/dev/ahci.c:1.12.6.3	Mon Dec  1 12:38:39 2014
+++ src/sys/arch/mips/adm5120/dev/ahci.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ahci.c,v 1.12.6.3 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: ahci.c,v 1.12.6.4 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko.
@@ -64,7 +64,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ahci.c,v 1.12.6.3 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ahci.c,v 1.12.6.4 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -94,8 +94,6 @@ static void		ahci_softintr(void *);
 static void		ahci_poll(struct usbd_bus *);
 static void		ahci_poll_hub(void *);
 static void		ahci_poll_device(void *arg);
-static usbd_status	ahci_allocm(struct usbd_bus *, usb_dma_t *, uint32_t);
-static void		ahci_freem(struct usbd_bus *, usb_dma_t *);
 static usbd_xfer_handle ahci_allocx(struct usbd_bus *);
 static void		ahci_freex(struct usbd_bus *, usbd_xfer_handle);
 
@@ -176,8 +174,6 @@ struct usbd_bus_methods ahci_bus_methods
 	.ubm_open = ahci_open,
 	.ubm_softint = ahci_softintr,
 	.ubm_dopoll = ahci_poll,
-	.ubm_allocm = ahci_allocm,
-	.ubm_freem = ahci_freem,
 	.ubm_allocx = ahci_allocx,
 	.ubm_freex = ahci_freex,
 	.ubm_getlock = ahci_get_lock,
@@ -280,6 +276,7 @@ ahci_attach(device_t parent, device_t se
 	sc->sc_bus.methods = &ahci_bus_methods;
 	sc->sc_bus.pipe_size = sizeof(struct ahci_pipe);
 	sc->sc_bus.dmatag = sc->sc_dmat;
+	sc->sc_bus.usedma = true;
 
 	/* Map the device. */
 	if (bus_space_map(sc->sc_st, aa->oba_addr,
@@ -468,24 +465,6 @@ ahci_poll_hub(void *arg)
 	mutex_exit(&sc->sc_lock);
 }
 
-usbd_status
-ahci_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct ahci_softc *sc = (struct ahci_softc *)bus;
-
-	DPRINTF(D_MEM, ("SLallocm"));
-	return usb_allocmem(&sc->sc_bus, size, 0, dma);
-}
-
-void
-ahci_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	struct ahci_softc *sc = (struct ahci_softc *)bus;
-
-	DPRINTF(D_MEM, ("SLfreem"));
-	usb_freemem(&sc->sc_bus, dma);
-}
-
 usbd_xfer_handle
 ahci_allocx(struct usbd_bus *bus)
 {

Index: src/sys/conf/files
diff -u src/sys/conf/files:1.1121 src/sys/conf/files:1.1121.2.1
--- src/sys/conf/files:1.1121	Fri Oct 31 07:38:36 2014
+++ src/sys/conf/files	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: files,v 1.1121 2014/10/31 07:38:36 uebayasi Exp $
+#	$NetBSD: files,v 1.1121.2.1 2014/12/02 09:00:33 skrll Exp $
 #	@(#)files.newconf	7.5 (Berkeley) 5/10/93
 
 version 	20141030
@@ -1206,8 +1206,6 @@ define	sdmmcbus { }			# SD/MMC attachmen
 # use them in an 'attach-with'.
 #
 
-defparam USB_MEM_RESERVE
-
 define	usbroothub
 file	dev/usb/usbroothub_subr.c	usbroothub
 
@@ -1235,7 +1233,7 @@ file	dev/usb/xhci.c			xhci			needs-flag
 
 # Mentor graphics OTG IP
 defflag	opt_motg.h	MOTG_ALLWINNER
-device	motg: usbus, usbroothub, usb_dma
+device	motg: usbus, usbroothub
 file	dev/usb/motg.c			motg			needs-flag
 
 # SL811HS/T USB controller

Index: src/sys/dev/ic/sl811hs.c
diff -u src/sys/dev/ic/sl811hs.c:1.47.6.2 src/sys/dev/ic/sl811hs.c:1.47.6.3
--- src/sys/dev/ic/sl811hs.c:1.47.6.2	Mon Dec  1 12:38:39 2014
+++ src/sys/dev/ic/sl811hs.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: sl811hs.c,v 1.47.6.2 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: sl811hs.c,v 1.47.6.3 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Not (c) 2007 Matthew Orgass
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sl811hs.c,v 1.47.6.2 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sl811hs.c,v 1.47.6.3 2014/12/02 09:00:33 skrll Exp $");
 
 #include "opt_slhci.h"
 
@@ -423,8 +423,6 @@ slhci_dump_cc_times(int n) {
 typedef usbd_status (*LockCallFunc)(struct slhci_softc *, struct slhci_pipe
     *, struct usbd_xfer *);
 
-usbd_status slhci_allocm(struct usbd_bus *, usb_dma_t *, uint32_t);
-void slhci_freem(struct usbd_bus *, usb_dma_t *);
 struct usbd_xfer * slhci_allocx(struct usbd_bus *);
 void slhci_freex(struct usbd_bus *, struct usbd_xfer *);
 static void slhci_get_lock(struct usbd_bus *, kmutex_t **);
@@ -683,8 +681,6 @@ const struct usbd_bus_methods slhci_bus_
 	.ubm_open = slhci_open,
 	.ubm_softint= slhci_void,
 	.ubm_dopoll = slhci_poll,
-	.ubm_allocm = slhci_allocm,
-	.ubm_freem = slhci_freem,
 	.ubm_allocx = slhci_allocx,
 	.ubm_freex = slhci_freex,
 	.ubm_getlock = slhci_get_lock,
@@ -760,55 +756,6 @@ enter_all_pipes(struct slhci_transfers *
 
 /* Start out of lock functions. */
 
-struct slhci_mem {
-	usb_dma_block_t block;
-	uint8_t data[];
-};
-
-/*
- * The SL811HS does not do DMA as a host controller, but NetBSD's USB interface
- * assumes DMA is used.  So we fake the DMA block.
- */
-usbd_status
-slhci_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct slhci_mem *mem;
-
-	mem = malloc(sizeof(struct slhci_mem) + size, M_USB, M_NOWAIT|M_ZERO);
-
-	DLOG(D_MEM, "allocm %p", mem, 0,0,0);
-
-	if (mem == NULL)
-		return USBD_NOMEM;
-
-	dma->block = &mem->block;
-	dma->block->kaddr = mem->data;
-
-	/* dma->offs = 0; */
-	dma->block->nsegs = 1;
-	dma->block->size = size;
-	dma->block->align = size;
-	dma->block->flags |= USB_DMA_FULLBLOCK;
-
-#ifdef SLHCI_MEM_ACCOUNTING
-	slhci_mem_use(bus, 1);
-#endif
-
-	return USBD_NORMAL_COMPLETION;
-}
-
-void
-slhci_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	DLOG(D_MEM, "freem %p", dma->block, 0,0,0);
-
-#ifdef SLHCI_MEM_ACCOUNTING
-	slhci_mem_use(bus, -1);
-#endif
-
-	free(dma->block, M_USB);
-}
-
 struct usbd_xfer *
 slhci_allocx(struct usbd_bus *bus)
 {
@@ -935,7 +882,7 @@ slhci_start(struct usbd_xfer *xfer)
 			spipe->control |= SL11_EPCTRL_DATATOGGLE;
 		spipe->tregs[LEN] = spipe->newlen[1];
 		if (spipe->tregs[LEN])
-			spipe->buffer = KERNADDR(&xfer->dmabuf, 0);
+			spipe->buffer = xfer->buf;
 		else
 			spipe->buffer = NULL;
 		spipe->lastframe = t->frame;
@@ -1262,6 +1209,7 @@ slhci_attach(struct slhci_softc *sc)
 	sc->sc_bus.usbrev = USBREV_1_1;
 	sc->sc_bus.methods = __UNCONST(&slhci_bus_methods);
 	sc->sc_bus.pipe_size = sizeof(struct slhci_pipe);
+	sc->sc_bus.usedma = false;
 
 	if (!sc->sc_enable_power)
 		t->flags |= F_REALPOWER;
@@ -2126,7 +2074,7 @@ slhci_abdone(struct slhci_softc *sc, int
 			    return);
 			spipe->tregs[LEN] = spipe->newlen[1];
 			spipe->bustime = spipe->newbustime[1];
-			spipe->buffer = KERNADDR(&xfer->dmabuf, 0);
+			spipe->buffer = xfer->buf;
 			spipe->ptype = PT_CTRL_DATA;
 		} else {
 status_setup:
@@ -2391,7 +2339,7 @@ slhci_callback(struct slhci_softc *sc)
 			if (t->rootintr != NULL) {
 				u_char *p;
 
-				p = KERNADDR(&t->rootintr->dmabuf, 0);
+				p = t->rootintr->buf;
 				p[0] = 2;
 				t->rootintr->actlen = 1;
 				t->rootintr->status = USBD_NORMAL_COMPLETION;
@@ -2502,7 +2450,7 @@ slhci_do_repeat(struct slhci_softc *sc, 
 	xfer->actlen = 0;
 	spipe->xfer = xfer;
 	if (spipe->tregs[LEN])
-		KASSERT(spipe->buffer == KERNADDR(&xfer->dmabuf, 0));
+		KASSERT(spipe->buffer == xfer->buf);
 	slhci_queue_timed(sc, spipe);
 	slhci_dotransfer(sc);
 }
@@ -3230,7 +3178,7 @@ slhci_root(struct slhci_softc *sc, struc
 	type = req->bmRequestType;
 
 	if (len)
-		buf = KERNADDR(&xfer->dmabuf, 0);
+		buf = xfer->buf;
 
 	SLHCI_DEXEC(D_TRACE, slhci_log_req_hub(req));
 
@@ -3434,7 +3382,7 @@ slhci_log_buffer(struct usbd_xfer *xfer)
 	if(xfer->length > 0 &&
 	    UE_GET_DIR(xfer->pipe->endpoint->edesc->bEndpointAddress) ==
 	    UE_DIR_IN) {
-		buf = KERNADDR(&xfer->dmabuf, 0);
+		buf = xfer->buf;
 		DDOLOGBUF(buf, xfer->actlen);
 		DDOLOG("len %d actlen %d short %d", xfer->length,
 		    xfer->actlen, xfer->length - xfer->actlen, 0);
@@ -3588,7 +3536,7 @@ slhci_log_xfer(struct usbd_xfer *xfer)
 	DDOLOG("xfer: length=%u, actlen=%u, flags=%#x, timeout=%u,",
 		xfer->length, xfer->actlen, xfer->flags, xfer->timeout);
 	if (xfer->dmabuf.block)
-		DDOLOG("buffer=%p", KERNADDR(&xfer->dmabuf, 0), 0,0,0);
+		DDOLOG("buffer=%p", xfer->buf, 0,0,0);
 	slhci_log_req_hub(&xfer->request);
 }
 

Index: src/sys/dev/usb/aubtfwl.c
diff -u src/sys/dev/usb/aubtfwl.c:1.5.10.1 src/sys/dev/usb/aubtfwl.c:1.5.10.2
--- src/sys/dev/usb/aubtfwl.c:1.5.10.1	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/aubtfwl.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: aubtfwl.c,v 1.5.10.1 2014/12/01 13:03:05 skrll Exp $ */
+/* $NetBSD: aubtfwl.c,v 1.5.10.2 2014/12/02 09:00:33 skrll Exp $ */
 
 /*
  * Copyright (c) 2011 Jonathan A. Kollasch
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: aubtfwl.c,v 1.5.10.1 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: aubtfwl.c,v 1.5.10.2 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <dev/usb/usb.h>
@@ -191,7 +191,7 @@ aubtfwl_firmware_load(device_t self, con
 			break;
 		}
 		error = usbd_bulk_transfer(xfer, pipe,
-		    USBD_NO_COPY, USBD_DEFAULT_TIMEOUT,
+		    0, USBD_DEFAULT_TIMEOUT,
 		    buf, &n);
 		if (error != USBD_NORMAL_COMPLETION) {
 			aprint_error_dev(self, "xfer failed, %s\n",

Index: src/sys/dev/usb/auvitek_dtv.c
diff -u src/sys/dev/usb/auvitek_dtv.c:1.6 src/sys/dev/usb/auvitek_dtv.c:1.6.14.1
--- src/sys/dev/usb/auvitek_dtv.c:1.6	Tue Jan 22 12:40:42 2013
+++ src/sys/dev/usb/auvitek_dtv.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: auvitek_dtv.c,v 1.6 2013/01/22 12:40:42 jmcneill Exp $ */
+/* $NetBSD: auvitek_dtv.c,v 1.6.14.1 2014/12/02 09:00:33 skrll Exp $ */
 
 /*-
  * Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: auvitek_dtv.c,v 1.6 2013/01/22 12:40:42 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: auvitek_dtv.c,v 1.6.14.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -350,8 +350,8 @@ auvitek_dtv_bulk_start1(struct auvitek_b
 
 	usbd_setup_xfer(bx->bx_xfer, ab->ab_pipe, bx,
 	    bx->bx_buffer, AUVITEK_BULK_BUFLEN,
-	    //USBD_SHORT_XFER_OK|USBD_NO_COPY, USBD_NO_TIMEOUT,
-	    USBD_NO_COPY, 100,
+	    //USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
+	    0, 100,
 	    auvitek_dtv_bulk_cb);
 
 	KERNEL_LOCK(1, curlwp);

Index: src/sys/dev/usb/auvitek_video.c
diff -u src/sys/dev/usb/auvitek_video.c:1.6 src/sys/dev/usb/auvitek_video.c:1.6.32.1
--- src/sys/dev/usb/auvitek_video.c:1.6	Sun Oct  2 19:15:40 2011
+++ src/sys/dev/usb/auvitek_video.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: auvitek_video.c,v 1.6 2011/10/02 19:15:40 jmcneill Exp $ */
+/* $NetBSD: auvitek_video.c,v 1.6.32.1 2014/12/02 09:00:33 skrll Exp $ */
 
 /*-
  * Copyright (c) 2010 Jared D. McNeill <[email protected]>
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: auvitek_video.c,v 1.6 2011/10/02 19:15:40 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: auvitek_video.c,v 1.6.32.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -680,7 +680,7 @@ auvitek_isoc_start1(struct auvitek_isoc 
 			     isoc,
 			     isoc->i_frlengths,
 			     ax->ax_nframes,
-			     USBD_NO_COPY | USBD_SHORT_XFER_OK,
+			     USBD_SHORT_XFER_OK,
 			     auvitek_isoc_intr);
 
 	err = usbd_transfer(isoc->i_xfer);

Index: src/sys/dev/usb/ehci.c
diff -u src/sys/dev/usb/ehci.c:1.234.2.6 src/sys/dev/usb/ehci.c:1.234.2.7
--- src/sys/dev/usb/ehci.c:1.234.2.6	Mon Dec  1 12:38:39 2014
+++ src/sys/dev/usb/ehci.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ehci.c,v 1.234.2.6 2014/12/01 12:38:39 skrll Exp $ */
+/*	$NetBSD: ehci.c,v 1.234.2.7 2014/12/02 09:00:33 skrll Exp $ */
 
 /*
  * Copyright (c) 2004-2012 The NetBSD Foundation, Inc.
@@ -53,7 +53,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.234.2.6 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.234.2.7 2014/12/02 09:00:33 skrll Exp $");
 
 #include "ohci.h"
 #include "uhci.h"
@@ -170,9 +170,6 @@ Static void		ehci_intrlist_timeout(void 
 Static void		ehci_doorbell(void *);
 Static void		ehci_pcd(void *);
 
-Static usbd_status	ehci_allocm(struct usbd_bus *, usb_dma_t *, uint32_t);
-Static void		ehci_freem(struct usbd_bus *, usb_dma_t *);
-
 Static usbd_xfer_handle	ehci_allocx(struct usbd_bus *);
 Static void		ehci_freex(struct usbd_bus *, usbd_xfer_handle);
 Static void		ehci_get_lock(struct usbd_bus *, kmutex_t **);
@@ -294,8 +291,6 @@ Static const struct usbd_bus_methods ehc
 	.ubm_open =	ehci_open,
 	.ubm_softint =	ehci_softintr,
 	.ubm_dopoll =	ehci_poll,
-	.ubm_allocm =	ehci_allocm,
-	.ubm_freem =	ehci_freem,
 	.ubm_allocx =	ehci_allocx,
 	.ubm_freex =	ehci_freex,
 	.ubm_getlock =	ehci_get_lock,
@@ -446,9 +441,8 @@ ehci_init(ehci_softc_t *sc)
 	}
 
 	sc->sc_bus.usbrev = USBREV_2_0;
-
-	usb_setup_reserve(sc->sc_dev, &sc->sc_dma_reserve, sc->sc_bus.dmatag,
-	    USB_MEM_RESERVE);
+	sc->sc_bus.usedma = true;
+	sc->sc_bus.dmaflags = USBMALLOC_MULTISEG;
 
 	/* Reset the controller */
 	USBHIST_LOG(ehcidebug, "resetting", 0, 0, 0, 0);
@@ -761,7 +755,7 @@ ehci_pcd(void *addr)
 		goto done;
 	}
 
-	p = KERNADDR(&xfer->dmabuf, 0);
+	p = xfer->buf;
 	m = min(sc->sc_noport, xfer->length * 8 - 1);
 	memset(p, 0, xfer->length);
 	for (i = 1; i <= m; i++) {
@@ -1513,41 +1507,6 @@ ehci_shutdown(device_t self, int flags)
 	return true;
 }
 
-Static usbd_status
-ehci_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct ehci_softc *sc = bus->hci_private;
-	usbd_status err;
-
-	err = usb_allocmem_flags(&sc->sc_bus, size, 0, dma, USBMALLOC_MULTISEG);
-#ifdef EHCI_DEBUG
-	if (err)
-		printf("ehci_allocm: usb_allocmem_flags()= %s (%d)\n",
-			usbd_errstr(err), err);
-#endif
-	if (err == USBD_NOMEM)
-		err = usb_reserve_allocm(&sc->sc_dma_reserve, dma, size);
-#ifdef EHCI_DEBUG
-	if (err)
-		printf("ehci_allocm: usb_reserve_allocm()= %s (%d)\n",
-			usbd_errstr(err), err);
-#endif
-	return (err);
-}
-
-Static void
-ehci_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	struct ehci_softc *sc = bus->hci_private;
-
-	if (dma->block->flags & USB_DMA_RESERVE) {
-		usb_reserve_freem(&sc->sc_dma_reserve,
-		    dma);
-		return;
-	}
-	usb_freemem(&sc->sc_bus, dma);
-}
-
 Static usbd_xfer_handle
 ehci_allocx(struct usbd_bus *bus)
 {
@@ -2418,7 +2377,7 @@ ehci_root_ctrl_start(usbd_xfer_handle xf
 	index = UGETW(req->wIndex);
 
 	if (len != 0)
-		buf = KERNADDR(&xfer->dmabuf, 0);
+		buf = xfer->buf;
 
 #define C(x,y) ((x) | ((y) << 8))
 	switch(C(req->bRequest, req->bmRequestType)) {

Index: src/sys/dev/usb/ehcivar.h
diff -u src/sys/dev/usb/ehcivar.h:1.42.14.2 src/sys/dev/usb/ehcivar.h:1.42.14.3
--- src/sys/dev/usb/ehcivar.h:1.42.14.2	Sun Nov 30 13:46:00 2014
+++ src/sys/dev/usb/ehcivar.h	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ehcivar.h,v 1.42.14.2 2014/11/30 13:46:00 skrll Exp $ */
+/*	$NetBSD: ehcivar.h,v 1.42.14.3 2014/12/02 09:00:33 skrll Exp $ */
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -186,7 +186,6 @@ typedef struct ehci_softc {
 
 	device_t sc_child; /* /dev/usb# device */
 	char sc_dying;
-	struct usb_dma_reserve sc_dma_reserve;
 
 	void (*sc_vendor_init)(struct ehci_softc *);
 	int (*sc_vendor_port_status)(struct ehci_softc *, uint32_t, int);

Index: src/sys/dev/usb/emdtv_dtv.c
diff -u src/sys/dev/usb/emdtv_dtv.c:1.10 src/sys/dev/usb/emdtv_dtv.c:1.10.14.1
--- src/sys/dev/usb/emdtv_dtv.c:1.10	Tue Jan 22 12:40:42 2013
+++ src/sys/dev/usb/emdtv_dtv.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: emdtv_dtv.c,v 1.10 2013/01/22 12:40:42 jmcneill Exp $ */
+/* $NetBSD: emdtv_dtv.c,v 1.10.14.1 2014/12/02 09:00:33 skrll Exp $ */
 
 /*-
  * Copyright (c) 2008, 2011 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: emdtv_dtv.c,v 1.10 2013/01/22 12:40:42 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: emdtv_dtv.c,v 1.10.14.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -381,7 +381,7 @@ emdtv_dtv_isoc_start(struct emdtv_softc 
 			     ix,
 			     ix->ix_frlengths,
 			     EMDTV_NFRAMES,
-			     USBD_NO_COPY | USBD_SHORT_XFER_OK,
+			     USBD_SHORT_XFER_OK,
 			     emdtv_dtv_isoc);
 
 	KERNEL_LOCK(1, curlwp);

Index: src/sys/dev/usb/files.usb
diff -u src/sys/dev/usb/files.usb:1.135 src/sys/dev/usb/files.usb:1.135.2.1
--- src/sys/dev/usb/files.usb:1.135	Fri Oct 10 17:31:12 2014
+++ src/sys/dev/usb/files.usb	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: files.usb,v 1.135 2014/10/10 17:31:12 uebayasi Exp $
+#	$NetBSD: files.usb,v 1.135.2.1 2014/12/02 09:00:33 skrll Exp $
 #
 # Config file and device description for machine-independent USB code.
 # Included by ports that need it.  Ports that use it must provide
@@ -106,7 +106,7 @@ file	dev/usb/usb_subr.c		usb
 file	dev/usb/usb_quirks.c		usb
 
 define	usb_dma: usb
-file	dev/usb/usb_mem.c		usb_dma
+file	dev/usb/usb_mem.c		usb_dma			needs-flag
 
 define	usbverbose: usb
 file	dev/usb/usb_verbose.c		usbverbose

Index: src/sys/dev/usb/if_athn_usb.c
diff -u src/sys/dev/usb/if_athn_usb.c:1.6 src/sys/dev/usb/if_athn_usb.c:1.6.8.1
--- src/sys/dev/usb/if_athn_usb.c:1.6	Wed Oct 16 18:23:39 2013
+++ src/sys/dev/usb/if_athn_usb.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_athn_usb.c,v 1.6 2013/10/16 18:23:39 christos Exp $	*/
+/*	$NetBSD: if_athn_usb.c,v 1.6.8.1 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$OpenBSD: if_athn_usb.c,v 1.12 2013/01/14 09:50:31 jsing Exp $	*/
 
 /*-
@@ -22,7 +22,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_athn_usb.c,v 1.6 2013/10/16 18:23:39 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_athn_usb.c,v 1.6.8.1 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef	_KERNEL_OPT
 #include "opt_inet.h"
@@ -904,7 +904,7 @@ athn_usb_htc_msg(struct athn_usb_softc *
 
 	usbd_setup_xfer(data->xfer, usc->usc_tx_intr_pipe, NULL, data->buf,
 	    sizeof(*htc) + sizeof(*msg) + len,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY, ATHN_USB_CMD_TIMEOUT, NULL);
+	    USBD_SHORT_XFER_OK, ATHN_USB_CMD_TIMEOUT, NULL);
 	return usbd_sync_transfer(data->xfer);
 }
 
@@ -1090,7 +1090,7 @@ athn_usb_wmi_xcmd(struct athn_usb_softc 
 
 	usbd_setup_xfer(data->xfer, usc->usc_tx_intr_pipe, usc, data->buf,
 	    sizeof(*htc) + sizeof(*wmi) + ilen,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY, ATHN_USB_CMD_TIMEOUT,
+	    USBD_SHORT_XFER_OK, ATHN_USB_CMD_TIMEOUT,
 	    athn_usb_wmieof);
 
 	s = splusb();
@@ -1821,7 +1821,7 @@ athn_usb_swba(struct athn_usb_softc *usc
 
 	usbd_setup_xfer(data->xfer, usc->usc_tx_data_pipe, data, data->buf,
 	    sizeof(*hdr) + sizeof(*htc) + sizeof(*bcn) + m->m_pkthdr.len,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY, ATHN_USB_TX_TIMEOUT,
+	    USBD_SHORT_XFER_OK, ATHN_USB_TX_TIMEOUT,
 	    athn_usb_bcneof);
 
 	m_freem(m);
@@ -2207,7 +2207,7 @@ athn_usb_rxeof(usbd_xfer_handle xfer, us
  resubmit:
 	/* Setup a new transfer. */
 	usbd_setup_xfer(xfer, usc->usc_rx_data_pipe, data, data->buf,
-	    ATHN_USB_RXBUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    ATHN_USB_RXBUFSZ, USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, athn_usb_rxeof);
 	(void)usbd_transfer(xfer);
 }
@@ -2358,7 +2358,7 @@ athn_usb_tx(struct athn_softc *sc, struc
 
 	s = splnet();
 	usbd_setup_xfer(data->xfer, usc->usc_tx_data_pipe, data, data->buf,
-	    xferlen, USBD_FORCE_SHORT_XFER | USBD_NO_COPY, ATHN_USB_TX_TIMEOUT,
+	    xferlen, USBD_FORCE_SHORT_XFER, ATHN_USB_TX_TIMEOUT,
 	    athn_usb_txeof);
 	error = usbd_transfer(data->xfer);
 	if (__predict_false(error != USBD_IN_PROGRESS && error != 0)) {
@@ -2689,7 +2689,7 @@ athn_usb_init(struct ifnet *ifp)
 		data = &usc->usc_rx_data[i];
 
 		usbd_setup_xfer(data->xfer, usc->usc_rx_data_pipe, data, data->buf,
-		    ATHN_USB_RXBUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    ATHN_USB_RXBUFSZ, USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, athn_usb_rxeof);
 		error = usbd_transfer(data->xfer);
 		if (error != 0 && error != USBD_IN_PROGRESS)

Index: src/sys/dev/usb/if_atu.c
diff -u src/sys/dev/usb/if_atu.c:1.50.2.1 src/sys/dev/usb/if_atu.c:1.50.2.2
--- src/sys/dev/usb/if_atu.c:1.50.2.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/if_atu.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_atu.c,v 1.50.2.1 2014/11/30 12:18:58 skrll Exp $ */
+/*	$NetBSD: if_atu.c,v 1.50.2.2 2014/12/02 09:00:33 skrll Exp $ */
 /*	$OpenBSD: if_atu.c,v 1.48 2004/12/30 01:53:21 dlg Exp $ */
 /*
  * Copyright (c) 2003, 2004
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_atu.c,v 1.50.2.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_atu.c,v 1.50.2.2 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -1722,7 +1722,7 @@ done1:
 done:
 	/* Setup new transfer. */
 	usbd_setup_xfer(c->atu_xfer, sc->atu_ep[ATU_ENDPT_RX], c, c->atu_buf,
-	    ATU_RX_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+	    ATU_RX_BUFSZ, USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
 		atu_rxeof);
 	usbd_transfer(c->atu_xfer);
 }
@@ -1829,7 +1829,7 @@ atu_tx_start(struct atu_softc *sc, struc
 	c->atu_mbuf = m;
 
 	usbd_setup_xfer(c->atu_xfer, sc->atu_ep[ATU_ENDPT_TX],
-	    c, c->atu_buf, c->atu_length, USBD_NO_COPY, ATU_TX_TIMEOUT,
+	    c, c->atu_buf, c->atu_length, 0, ATU_TX_TIMEOUT,
 	    atu_txeof);
 
 	/* Let's get this thing into the air! */
@@ -2017,7 +2017,7 @@ atu_init(struct ifnet *ifp)
 		c = &sc->atu_cdata.atu_rx_chain[i];
 
 		usbd_setup_xfer(c->atu_xfer, sc->atu_ep[ATU_ENDPT_RX], c,
-		    c->atu_buf, ATU_RX_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    c->atu_buf, ATU_RX_BUFSZ, USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, atu_rxeof);
 		usbd_transfer(c->atu_xfer);
 	}

Index: src/sys/dev/usb/if_aue.c
diff -u src/sys/dev/usb/if_aue.c:1.132.4.1 src/sys/dev/usb/if_aue.c:1.132.4.2
--- src/sys/dev/usb/if_aue.c:1.132.4.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/if_aue.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_aue.c,v 1.132.4.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: if_aue.c,v 1.132.4.2 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
@@ -78,7 +78,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.132.4.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.132.4.2 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1182,7 +1182,7 @@ aue_rxeof(usbd_xfer_handle xfer, usbd_pr
 	/* Setup new transfer. */
 	usbd_setup_xfer(xfer, sc->aue_ep[AUE_ENDPT_RX],
 	    c, c->aue_buf, AUE_BUFSZ,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, aue_rxeof);
 	usbd_transfer(xfer);
 
@@ -1324,7 +1324,7 @@ aue_send(struct aue_softc *sc, struct mb
 	total_len = m->m_pkthdr.len + 2;
 
 	usbd_setup_xfer(c->aue_xfer, sc->aue_ep[AUE_ENDPT_TX],
-	    c, c->aue_buf, total_len, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+	    c, c->aue_buf, total_len, USBD_FORCE_SHORT_XFER,
 	    AUE_TX_TIMEOUT, aue_txeof);
 
 	/* Transmit */
@@ -1498,7 +1498,7 @@ aue_openpipes(struct aue_softc *sc)
 		c = &sc->aue_cdata.aue_rx_chain[i];
 		usbd_setup_xfer(c->aue_xfer, sc->aue_ep[AUE_ENDPT_RX],
 		    c, c->aue_buf, AUE_BUFSZ,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+		    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
 		    aue_rxeof);
 		(void)usbd_transfer(c->aue_xfer); /* XXX */
 		DPRINTFN(5,("%s: %s: start read\n", device_xname(sc->aue_dev),

Index: src/sys/dev/usb/if_axe.c
diff -u src/sys/dev/usb/if_axe.c:1.67 src/sys/dev/usb/if_axe.c:1.67.4.1
--- src/sys/dev/usb/if_axe.c:1.67	Sun Aug 10 16:44:36 2014
+++ src/sys/dev/usb/if_axe.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_axe.c,v 1.67 2014/08/10 16:44:36 tls Exp $	*/
+/*	$NetBSD: if_axe.c,v 1.67.4.1 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$OpenBSD: if_axe.c,v 1.96 2010/01/09 05:33:08 jsg Exp $ */
 
 /*
@@ -89,7 +89,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.67 2014/08/10 16:44:36 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.67.4.1 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1101,7 +1101,7 @@ axe_rxeof(usbd_xfer_handle xfer, usbd_pr
 	/* Setup new transfer. */
 	usbd_setup_xfer(xfer, sc->axe_ep[AXE_ENDPT_RX],
 	    c, c->axe_buf, sc->axe_bufsz,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, axe_rxeof);
 	usbd_transfer(xfer);
 
@@ -1250,7 +1250,7 @@ axe_encap(struct axe_softc *sc, struct m
 	}
 
 	usbd_setup_xfer(c->axe_xfer, sc->axe_ep[AXE_ENDPT_TX],
-	    c, c->axe_buf, length, USBD_FORCE_SHORT_XFER | USBD_NO_COPY, 10000,
+	    c, c->axe_buf, length, USBD_FORCE_SHORT_XFER, 10000,
 	    axe_txeof);
 
 	/* Transmit */
@@ -1411,7 +1411,7 @@ axe_init(struct ifnet *ifp)
 		c = &sc->axe_cdata.axe_rx_chain[i];
 		usbd_setup_xfer(c->axe_xfer, sc->axe_ep[AXE_ENDPT_RX],
 		    c, c->axe_buf, sc->axe_bufsz,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+		    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
 		    axe_rxeof);
 		usbd_transfer(c->axe_xfer);
 	}

Index: src/sys/dev/usb/if_axen.c
diff -u src/sys/dev/usb/if_axen.c:1.3 src/sys/dev/usb/if_axen.c:1.3.6.1
--- src/sys/dev/usb/if_axen.c:1.3	Sun Aug 10 16:44:36 2014
+++ src/sys/dev/usb/if_axen.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_axen.c,v 1.3 2014/08/10 16:44:36 tls Exp $	*/
+/*	$NetBSD: if_axen.c,v 1.3.6.1 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$OpenBSD: if_axen.c,v 1.3 2013/10/21 10:10:22 yuo Exp $	*/
 
 /*
@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.3 2014/08/10 16:44:36 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.3.6.1 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1121,7 +1121,7 @@ done:
 	/* Setup new transfer. */
 	usbd_setup_xfer(xfer, sc->axen_ep[AXEN_ENDPT_RX],
 	    c, c->axen_buf, sc->axen_bufsz,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, axen_rxeof);
 	usbd_transfer(xfer);
 
@@ -1255,7 +1255,7 @@ axen_encap(struct axen_softc *sc, struct
 	}
 
 	usbd_setup_xfer(c->axen_xfer, sc->axen_ep[AXEN_ENDPT_TX],
-	    c, c->axen_buf, length, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+	    c, c->axen_buf, length, USBD_FORCE_SHORT_XFER,
 	    10000, axen_txeof);
 
 	/* Transmit */
@@ -1388,7 +1388,7 @@ axen_init(struct ifnet *ifp)
 		c = &sc->axen_cdata.axen_rx_chain[i];
 		usbd_setup_xfer(c->axen_xfer, sc->axen_ep[AXEN_ENDPT_RX],
 		    c, c->axen_buf, sc->axen_bufsz,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, axen_rxeof);
 		usbd_transfer(c->axen_xfer);
 	}

Index: src/sys/dev/usb/if_cdce.c
diff -u src/sys/dev/usb/if_cdce.c:1.38 src/sys/dev/usb/if_cdce.c:1.38.14.1
--- src/sys/dev/usb/if_cdce.c:1.38	Sat Jan  5 01:30:15 2013
+++ src/sys/dev/usb/if_cdce.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_cdce.c,v 1.38 2013/01/05 01:30:15 christos Exp $ */
+/*	$NetBSD: if_cdce.c,v 1.38.14.1 2014/12/02 09:00:33 skrll Exp $ */
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000-2003 Bill Paul <[email protected]>
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cdce.c,v 1.38 2013/01/05 01:30:15 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cdce.c,v 1.38.14.1 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -379,7 +379,7 @@ cdce_encap(struct cdce_softc *sc, struct
 	c->cdce_mbuf = m;
 
 	usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkout_pipe, c, c->cdce_buf,
-	    m->m_pkthdr.len + extra, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+	    m->m_pkthdr.len + extra, USBD_FORCE_SHORT_XFER,
 	    10000, cdce_txeof);
 	err = usbd_transfer(c->cdce_xfer);
 	if (err != USBD_IN_PROGRESS) {
@@ -575,7 +575,7 @@ cdce_init(void *xsc)
 	for (i = 0; i < CDCE_RX_LIST_CNT; i++) {
 		c = &sc->cdce_cdata.cdce_rx_chain[i];
 		usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkin_pipe, c,
-		    c->cdce_buf, CDCE_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    c->cdce_buf, CDCE_BUFSZ, USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, cdce_rxeof);
 		usbd_transfer(c->cdce_xfer);
 	}
@@ -732,7 +732,7 @@ done1:
 done:
 	/* Setup new transfer. */
 	usbd_setup_xfer(c->cdce_xfer, sc->cdce_bulkin_pipe, c, c->cdce_buf,
-	    CDCE_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+	    CDCE_BUFSZ, USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
 	    cdce_rxeof);
 	usbd_transfer(c->cdce_xfer);
 }

Index: src/sys/dev/usb/if_cue.c
diff -u src/sys/dev/usb/if_cue.c:1.68.4.1 src/sys/dev/usb/if_cue.c:1.68.4.2
--- src/sys/dev/usb/if_cue.c:1.68.4.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/if_cue.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_cue.c,v 1.68.4.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: if_cue.c,v 1.68.4.2 2014/12/02 09:00:33 skrll Exp $	*/
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
  *	Bill Paul <[email protected]>.  All rights reserved.
@@ -56,7 +56,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.68.4.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.68.4.2 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -806,7 +806,7 @@ cue_rxeof(usbd_xfer_handle xfer, usbd_pr
 done:
 	/* Setup new transfer. */
 	usbd_setup_xfer(c->cue_xfer, sc->cue_ep[CUE_ENDPT_RX],
-	    c, c->cue_buf, CUE_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    c, c->cue_buf, CUE_BUFSZ, USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, cue_rxeof);
 	usbd_transfer(c->cue_xfer);
 
@@ -928,7 +928,7 @@ cue_send(struct cue_softc *sc, struct mb
 
 	/* XXX 10000 */
 	usbd_setup_xfer(c->cue_xfer, sc->cue_ep[CUE_ENDPT_TX],
-	    c, c->cue_buf, total_len, USBD_NO_COPY, 10000, cue_txeof);
+	    c, c->cue_buf, total_len, 0, 10000, cue_txeof);
 
 	/* Transmit */
 	err = usbd_transfer(c->cue_xfer);
@@ -1099,7 +1099,7 @@ cue_open_pipes(struct cue_softc	*sc)
 		c = &sc->cue_cdata.cue_rx_chain[i];
 		usbd_setup_xfer(c->cue_xfer, sc->cue_ep[CUE_ENDPT_RX],
 		    c, c->cue_buf, CUE_BUFSZ,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+		    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
 		    cue_rxeof);
 		usbd_transfer(c->cue_xfer);
 	}

Index: src/sys/dev/usb/if_kue.c
diff -u src/sys/dev/usb/if_kue.c:1.81 src/sys/dev/usb/if_kue.c:1.81.4.1
--- src/sys/dev/usb/if_kue.c:1.81	Sun Aug 10 16:44:36 2014
+++ src/sys/dev/usb/if_kue.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_kue.c,v 1.81 2014/08/10 16:44:36 tls Exp $	*/
+/*	$NetBSD: if_kue.c,v 1.81.4.1 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1.81 2014/08/10 16:44:36 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1.81.4.1 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -731,7 +731,7 @@ kue_rxeof(usbd_xfer_handle xfer, usbd_pr
 
 	/* Setup new transfer. */
 	usbd_setup_xfer(c->kue_xfer, sc->kue_ep[KUE_ENDPT_RX],
-	    c, c->kue_buf, KUE_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    c, c->kue_buf, KUE_BUFSZ, USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, kue_rxeof);
 	usbd_transfer(c->kue_xfer);
 
@@ -810,7 +810,7 @@ kue_send(struct kue_softc *sc, struct mb
 	total_len = roundup2(total_len, 64);
 
 	usbd_setup_xfer(c->kue_xfer, sc->kue_ep[KUE_ENDPT_TX],
-	    c, c->kue_buf, total_len, USBD_NO_COPY, USBD_DEFAULT_TIMEOUT,
+	    c, c->kue_buf, total_len, 0, USBD_DEFAULT_TIMEOUT,
 	    kue_txeof);
 
 	/* Transmit */
@@ -965,7 +965,7 @@ kue_open_pipes(struct kue_softc *sc)
 		c = &sc->kue_cdata.kue_rx_chain[i];
 		usbd_setup_xfer(c->kue_xfer, sc->kue_ep[KUE_ENDPT_RX],
 		    c, c->kue_buf, KUE_BUFSZ,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+		    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
 		    kue_rxeof);
 		DPRINTFN(5,("%s: %s: start read\n", device_xname(sc->kue_dev),
 			    __func__));

Index: src/sys/dev/usb/if_otus.c
diff -u src/sys/dev/usb/if_otus.c:1.25 src/sys/dev/usb/if_otus.c:1.25.6.1
--- src/sys/dev/usb/if_otus.c:1.25	Thu Oct 17 21:07:37 2013
+++ src/sys/dev/usb/if_otus.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_otus.c,v 1.25 2013/10/17 21:07:37 christos Exp $	*/
+/*	$NetBSD: if_otus.c,v 1.25.6.1 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$OpenBSD: if_otus.c,v 1.18 2010/08/27 17:08:00 jsg Exp $	*/
 
 /*-
@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_otus.c,v 1.25 2013/10/17 21:07:37 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_otus.c,v 1.25.6.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -1045,7 +1045,7 @@ otus_open_pipes(struct otus_softc *sc)
 
 		data = &sc->sc_rx_data[i];
 		usbd_setup_xfer(data->xfer, sc->sc_data_rx_pipe, data, data->buf,
-		    OTUS_RXBUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    OTUS_RXBUFSZ, USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, otus_rxeof);
 		error = usbd_transfer(data->xfer);
 		if (error != USBD_IN_PROGRESS && error != 0) {
@@ -1440,7 +1440,7 @@ otus_cmd(struct otus_softc *sc, uint8_t 
 	cmd->odata = odata;
 	cmd->done = 0;
 	usbd_setup_xfer(cmd->xfer, sc->sc_cmd_tx_pipe, cmd, cmd->buf, xferlen,
-	    USBD_FORCE_SHORT_XFER | USBD_NO_COPY, OTUS_CMD_TIMEOUT, NULL);
+	    USBD_FORCE_SHORT_XFER, OTUS_CMD_TIMEOUT, NULL);
 	error = usbd_sync_transfer(cmd->xfer);
 	if (error != 0) {
 		splx(s);
@@ -1897,7 +1897,7 @@ otus_rxeof(usbd_xfer_handle xfer, usbd_p
 
  resubmit:
 	usbd_setup_xfer(xfer, sc->sc_data_rx_pipe, data, data->buf, OTUS_RXBUFSZ,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT, otus_rxeof);
+	    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, otus_rxeof);
 	(void)usbd_transfer(data->xfer);
 }
 
@@ -2054,7 +2054,7 @@ otus_tx(struct otus_softc *sc, struct mb
 	    head->len, head->macctl, head->phyctl, otus_rates[ridx].rate);
 
 	usbd_setup_xfer(data->xfer, sc->sc_data_tx_pipe, data, data->buf, xferlen,
-	    USBD_FORCE_SHORT_XFER | USBD_NO_COPY, OTUS_TX_TIMEOUT, otus_txeof);
+	    USBD_FORCE_SHORT_XFER, OTUS_TX_TIMEOUT, otus_txeof);
 	error = usbd_transfer(data->xfer);
 	if (__predict_false(
 		    error != USBD_NORMAL_COMPLETION &&

Index: src/sys/dev/usb/if_rum.c
diff -u src/sys/dev/usb/if_rum.c:1.48 src/sys/dev/usb/if_rum.c:1.48.6.1
--- src/sys/dev/usb/if_rum.c:1.48	Sat Mar 29 00:59:05 2014
+++ src/sys/dev/usb/if_rum.c	Tue Dec  2 09:00:33 2014
@@ -1,5 +1,5 @@
 /*	$OpenBSD: if_rum.c,v 1.40 2006/09/18 16:20:20 damien Exp $	*/
-/*	$NetBSD: if_rum.c,v 1.48 2014/03/29 00:59:05 zafer Exp $	*/
+/*	$NetBSD: if_rum.c,v 1.48.6.1 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2005-2007 Damien Bergamini <[email protected]>
@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_rum.c,v 1.48 2014/03/29 00:59:05 zafer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_rum.c,v 1.48.6.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -1194,7 +1194,7 @@ rum_tx_data(struct rum_softc *sc, struct
 		m_freem(mprot);
 
 		usbd_setup_xfer(data->xfer, sc->sc_tx_pipeh, data, data->buf,
-		    xferlen, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+		    xferlen, USBD_FORCE_SHORT_XFER,
 		    RUM_TX_TIMEOUT, rum_txeof);
 		error = usbd_transfer(data->xfer);
 		if (error != USBD_NORMAL_COMPLETION &&
@@ -1261,7 +1261,7 @@ rum_tx_data(struct rum_softc *sc, struct
 	m_freem(m0);
 
 	usbd_setup_xfer(data->xfer, sc->sc_tx_pipeh, data, data->buf, xferlen,
-	    USBD_FORCE_SHORT_XFER | USBD_NO_COPY, RUM_TX_TIMEOUT, rum_txeof);
+	    USBD_FORCE_SHORT_XFER, RUM_TX_TIMEOUT, rum_txeof);
 	error = usbd_transfer(data->xfer);
 	if (error != USBD_NORMAL_COMPLETION && error != USBD_IN_PROGRESS)
 		return error;

Index: src/sys/dev/usb/if_run.c
diff -u src/sys/dev/usb/if_run.c:1.10 src/sys/dev/usb/if_run.c:1.10.6.1
--- src/sys/dev/usb/if_run.c:1.10	Tue Jan 28 13:08:13 2014
+++ src/sys/dev/usb/if_run.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_run.c,v 1.10 2014/01/28 13:08:13 martin Exp $	*/
+/*	$NetBSD: if_run.c,v 1.10.6.1 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$OpenBSD: if_run.c,v 1.90 2012/03/24 15:11:04 jsg Exp $	*/
 
 /*-
@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_run.c,v 1.10 2014/01/28 13:08:13 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_run.c,v 1.10.6.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -2186,7 +2186,7 @@ run_rxeof(usbd_xfer_handle xfer, usbd_pr
 
 skip:	/* setup a new transfer */
 	usbd_setup_xfer(xfer, sc->rxq.pipeh, data, data->buf, RUN_MAX_RXSZ,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT, run_rxeof);
+	    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, run_rxeof);
 	(void)usbd_transfer(data->xfer);
 }
 
@@ -2345,7 +2345,7 @@ run_tx(struct run_softc *sc, struct mbuf
 	xferlen += sizeof (*txd) + 4;
 
 	usbd_setup_xfer(data->xfer, ring->pipeh, data, data->buf, xferlen,
-	    USBD_FORCE_SHORT_XFER | USBD_NO_COPY, RUN_TX_TIMEOUT, run_txeof);
+	    USBD_FORCE_SHORT_XFER, RUN_TX_TIMEOUT, run_txeof);
 	error = usbd_transfer(data->xfer);
 	if (__predict_false(error != USBD_IN_PROGRESS &&
 	    error != USBD_NORMAL_COMPLETION))
@@ -3620,7 +3620,7 @@ run_init(struct ifnet *ifp)
 		struct run_rx_data *data = &sc->rxq.data[i];
 
 		usbd_setup_xfer(data->xfer, sc->rxq.pipeh, data, data->buf,
-		    RUN_MAX_RXSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    RUN_MAX_RXSZ, USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, run_rxeof);
 		error = usbd_transfer(data->xfer);
 		if (error != USBD_NORMAL_COMPLETION &&

Index: src/sys/dev/usb/if_smsc.c
diff -u src/sys/dev/usb/if_smsc.c:1.22 src/sys/dev/usb/if_smsc.c:1.22.2.1
--- src/sys/dev/usb/if_smsc.c:1.22	Sat Sep 20 15:07:06 2014
+++ src/sys/dev/usb/if_smsc.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_smsc.c,v 1.22 2014/09/20 15:07:06 jmcneill Exp $	*/
+/*	$NetBSD: if_smsc.c,v 1.22.2.1 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*	$OpenBSD: if_smsc.c,v 1.4 2012/09/27 12:38:11 jsg Exp $	*/
 /* $FreeBSD: src/sys/dev/usb/net/if_smsc.c,v 1.1 2012/08/15 04:03:55 gonzo Exp $ */
@@ -604,7 +604,7 @@ smsc_init(struct ifnet *ifp)
 		c = &sc->sc_cdata.rx_chain[i];
 		usbd_setup_xfer(c->sc_xfer, sc->sc_ep[SMSC_ENDPT_RX],
 		    c, c->sc_buf, sc->sc_bufsz,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, smsc_rxeof);
 		usbd_transfer(c->sc_xfer);
 	}
@@ -1413,7 +1413,7 @@ done:
 	/* Setup new transfer. */
 	usbd_setup_xfer(xfer, sc->sc_ep[SMSC_ENDPT_RX],
 	    c, c->sc_buf, sc->sc_bufsz,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, smsc_rxeof);
 	usbd_transfer(xfer);
 
@@ -1573,7 +1573,7 @@ smsc_encap(struct smsc_softc *sc, struct
 	c->sc_mbuf = m;
 
 	usbd_setup_xfer(c->sc_xfer, sc->sc_ep[SMSC_ENDPT_TX],
-	    c, c->sc_buf, frm_len, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+	    c, c->sc_buf, frm_len, USBD_FORCE_SHORT_XFER,
 	    10000, smsc_txeof);
 
 	err = usbd_transfer(c->sc_xfer);

Index: src/sys/dev/usb/if_udav.c
diff -u src/sys/dev/usb/if_udav.c:1.43.4.1 src/sys/dev/usb/if_udav.c:1.43.4.2
--- src/sys/dev/usb/if_udav.c:1.43.4.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/if_udav.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_udav.c,v 1.43.4.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: if_udav.c,v 1.43.4.2 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$nabe: if_udav.c,v 1.3 2003/08/21 16:57:19 nabe Exp $	*/
 
 /*
@@ -45,7 +45,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_udav.c,v 1.43.4.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_udav.c,v 1.43.4.2 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -877,7 +877,7 @@ udav_openpipes(struct udav_softc *sc)
 		c = &sc->sc_cdata.udav_rx_chain[i];
 		usbd_setup_xfer(c->udav_xfer, sc->sc_pipe_rx,
 				c, c->udav_buf, UDAV_BUFSZ,
-				USBD_SHORT_XFER_OK | USBD_NO_COPY,
+				USBD_SHORT_XFER_OK,
 				USBD_NO_TIMEOUT, udav_rxeof);
 		(void)usbd_transfer(c->udav_xfer);
 		DPRINTF(("%s: %s: start read\n", device_xname(sc->sc_dev),
@@ -1052,7 +1052,7 @@ udav_send(struct udav_softc *sc, struct 
 	total_len += 2;
 
 	usbd_setup_xfer(c->udav_xfer, sc->sc_pipe_tx, c, c->udav_buf, total_len,
-			USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+			USBD_FORCE_SHORT_XFER,
 			UDAV_TX_TIMEOUT, udav_txeof);
 
 	/* Transmit */
@@ -1211,7 +1211,7 @@ udav_rxeof(usbd_xfer_handle xfer, usbd_p
  done:
 	/* Setup new transfer */
 	usbd_setup_xfer(xfer, sc->sc_pipe_rx, c, c->udav_buf, UDAV_BUFSZ,
-			USBD_SHORT_XFER_OK | USBD_NO_COPY,
+			USBD_SHORT_XFER_OK,
 			USBD_NO_TIMEOUT, udav_rxeof);
 	sc->sc_refcnt++;
 	usbd_transfer(xfer);

Index: src/sys/dev/usb/if_upgt.c
diff -u src/sys/dev/usb/if_upgt.c:1.12.4.1 src/sys/dev/usb/if_upgt.c:1.12.4.2
--- src/sys/dev/usb/if_upgt.c:1.12.4.1	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/if_upgt.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_upgt.c,v 1.12.4.1 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: if_upgt.c,v 1.12.4.2 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$OpenBSD: if_upgt.c,v 1.49 2010/04/20 22:05:43 tedu Exp $ */
 
 /*
@@ -18,7 +18,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_upgt.c,v 1.12.4.1 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_upgt.c,v 1.12.4.2 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/callout.h>
@@ -1661,7 +1661,7 @@ upgt_tx_task(void *arg)
 		    device_xname(sc->sc_dev));
 
 		usbd_setup_xfer(data_tx->xfer, sc->sc_tx_pipeh, data_tx,
-		    data_tx->buf, len, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+		    data_tx->buf, len, USBD_FORCE_SHORT_XFER,
 		    UPGT_USB_TIMEOUT, NULL);
 		error = usbd_transfer(data_tx->xfer);
 		if (error != USBD_NORMAL_COMPLETION &&
@@ -2366,7 +2366,7 @@ upgt_bulk_xmit(struct upgt_softc *sc, st
         usbd_status status;
 
 	status = usbd_bulk_transfer(data->xfer, pipeh,
-	    USBD_NO_COPY | flags, UPGT_USB_TIMEOUT, data->buf, size);
+	    flags, UPGT_USB_TIMEOUT, data->buf, size);
 	if (status != USBD_NORMAL_COMPLETION) {
 		aprint_error_dev(sc->sc_dev, "%s: error %s\n", __func__,
 		    usbd_errstr(status));

Index: src/sys/dev/usb/if_upl.c
diff -u src/sys/dev/usb/if_upl.c:1.47.4.1 src/sys/dev/usb/if_upl.c:1.47.4.2
--- src/sys/dev/usb/if_upl.c:1.47.4.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/if_upl.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_upl.c,v 1.47.4.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: if_upl.c,v 1.47.4.2 2014/12/02 09:00:33 skrll Exp $	*/
 /*
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_upl.c,v 1.47.4.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_upl.c,v 1.47.4.2 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -555,7 +555,7 @@ upl_rxeof(usbd_xfer_handle xfer, usbd_pr
 #if 1
 	/* Setup new transfer. */
 	usbd_setup_xfer(c->upl_xfer, sc->sc_ep[UPL_ENDPT_RX],
-	    c, c->upl_buf, UPL_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    c, c->upl_buf, UPL_BUFSZ, USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, upl_rxeof);
 	usbd_transfer(c->upl_xfer);
 
@@ -635,7 +635,7 @@ upl_send(struct upl_softc *sc, struct mb
 		     device_xname(sc->sc_dev), __func__, total_len));
 
 	usbd_setup_xfer(c->upl_xfer, sc->sc_ep[UPL_ENDPT_TX],
-	    c, c->upl_buf, total_len, USBD_NO_COPY, USBD_DEFAULT_TIMEOUT,
+	    c, c->upl_buf, total_len, 0, USBD_DEFAULT_TIMEOUT,
 	    upl_txeof);
 
 	/* Transmit */
@@ -774,7 +774,7 @@ upl_openpipes(struct upl_softc *sc)
 		c = &sc->sc_cdata.upl_rx_chain[i];
 		usbd_setup_xfer(c->upl_xfer, sc->sc_ep[UPL_ENDPT_RX],
 		    c, c->upl_buf, UPL_BUFSZ,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+		    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
 		    upl_rxeof);
 		usbd_transfer(c->upl_xfer);
 	}

Index: src/sys/dev/usb/if_ural.c
diff -u src/sys/dev/usb/if_ural.c:1.44 src/sys/dev/usb/if_ural.c:1.44.14.1
--- src/sys/dev/usb/if_ural.c:1.44	Tue Jan 22 12:40:43 2013
+++ src/sys/dev/usb/if_ural.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ural.c,v 1.44 2013/01/22 12:40:43 jmcneill Exp $ */
+/*	$NetBSD: if_ural.c,v 1.44.14.1 2014/12/02 09:00:33 skrll Exp $ */
 /*	$FreeBSD: /repoman/r/ncvs/src/sys/dev/usb/if_ural.c,v 1.40 2006/06/02 23:14:40 sam Exp $	*/
 
 /*-
@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ural.c,v 1.44 2013/01/22 12:40:43 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ural.c,v 1.44.14.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -1187,7 +1187,7 @@ ural_tx_bcn(struct ural_softc *sc, struc
 	    m0->m_pkthdr.len, rate, xferlen));
 
 	usbd_setup_xfer(xfer, sc->sc_tx_pipeh, NULL, buf, xferlen,
-	    USBD_FORCE_SHORT_XFER | USBD_NO_COPY, RAL_TX_TIMEOUT, NULL);
+	    USBD_FORCE_SHORT_XFER, RAL_TX_TIMEOUT, NULL);
 
 	error = usbd_sync_transfer(xfer);
 	usbd_free_xfer(xfer);
@@ -1271,7 +1271,7 @@ ural_tx_mgt(struct ural_softc *sc, struc
 	    m0->m_pkthdr.len, rate, xferlen));
 
 	usbd_setup_xfer(data->xfer, sc->sc_tx_pipeh, data, data->buf,
-	    xferlen, USBD_FORCE_SHORT_XFER | USBD_NO_COPY, RAL_TX_TIMEOUT,
+	    xferlen, USBD_FORCE_SHORT_XFER, RAL_TX_TIMEOUT,
 	    ural_txeof);
 
 	error = usbd_transfer(data->xfer);
@@ -1362,7 +1362,7 @@ ural_tx_data(struct ural_softc *sc, stru
 	    m0->m_pkthdr.len, rate, xferlen));
 
 	usbd_setup_xfer(data->xfer, sc->sc_tx_pipeh, data, data->buf,
-	    xferlen, USBD_FORCE_SHORT_XFER | USBD_NO_COPY, RAL_TX_TIMEOUT,
+	    xferlen, USBD_FORCE_SHORT_XFER, RAL_TX_TIMEOUT,
 	    ural_txeof);
 
 	error = usbd_transfer(data->xfer);

Index: src/sys/dev/usb/if_url.c
diff -u src/sys/dev/usb/if_url.c:1.48.4.1 src/sys/dev/usb/if_url.c:1.48.4.2
--- src/sys/dev/usb/if_url.c:1.48.4.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/if_url.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_url.c,v 1.48.4.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: if_url.c,v 1.48.4.2 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001, 2002
@@ -44,7 +44,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_url.c,v 1.48.4.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_url.c,v 1.48.4.2 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -746,7 +746,7 @@ url_openpipes(struct url_softc *sc)
 		c = &sc->sc_cdata.url_rx_chain[i];
 		usbd_setup_xfer(c->url_xfer, sc->sc_pipe_rx,
 				c, c->url_buf, URL_BUFSZ,
-				USBD_SHORT_XFER_OK | USBD_NO_COPY,
+				USBD_SHORT_XFER_OK,
 				USBD_NO_TIMEOUT, url_rxeof);
 		(void)usbd_transfer(c->url_xfer);
 		DPRINTF(("%s: %s: start read\n", device_xname(sc->sc_dev),
@@ -915,7 +915,7 @@ url_send(struct url_softc *sc, struct mb
 		total_len = URL_MIN_FRAME_LEN;
 	}
 	usbd_setup_xfer(c->url_xfer, sc->sc_pipe_tx, c, c->url_buf, total_len,
-			USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+			USBD_FORCE_SHORT_XFER,
 			URL_TX_TIMEOUT, url_txeof);
 
 	/* Transmit */
@@ -1073,7 +1073,7 @@ url_rxeof(usbd_xfer_handle xfer, usbd_pr
  done:
 	/* Setup new transfer */
 	usbd_setup_xfer(xfer, sc->sc_pipe_rx, c, c->url_buf, URL_BUFSZ,
-			USBD_SHORT_XFER_OK | USBD_NO_COPY,
+			USBD_SHORT_XFER_OK,
 			USBD_NO_TIMEOUT, url_rxeof);
 	sc->sc_refcnt++;
 	usbd_transfer(xfer);

Index: src/sys/dev/usb/if_urndis.c
diff -u src/sys/dev/usb/if_urndis.c:1.9 src/sys/dev/usb/if_urndis.c:1.9.4.1
--- src/sys/dev/usb/if_urndis.c:1.9	Sat Jul 19 08:38:28 2014
+++ src/sys/dev/usb/if_urndis.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_urndis.c,v 1.9 2014/07/19 08:38:28 skrll Exp $ */
+/*	$NetBSD: if_urndis.c,v 1.9.4.1 2014/12/02 09:00:33 skrll Exp $ */
 /*	$OpenBSD: if_urndis.c,v 1.31 2011/07/03 15:47:17 matthew Exp $ */
 
 /*
@@ -21,7 +21,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_urndis.c,v 1.9 2014/07/19 08:38:28 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_urndis.c,v 1.9.4.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -755,7 +755,7 @@ urndis_encap(struct urndis_softc *sc, st
 	c->sc_mbuf = m;
 
 	usbd_setup_xfer(c->sc_xfer, sc->sc_bulkout_pipe, c, c->sc_buf,
-	    le32toh(msg->rm_len), USBD_FORCE_SHORT_XFER | USBD_NO_COPY, 10000,
+	    le32toh(msg->rm_len), USBD_FORCE_SHORT_XFER, 10000,
 	    urndis_txeof);
 
 	/* Transmit */
@@ -1081,7 +1081,7 @@ urndis_init(struct ifnet *ifp)
 		c = &sc->sc_data.sc_rx_chain[i];
 		usbd_setup_xfer(c->sc_xfer, sc->sc_bulkin_pipe, c,
 		    c->sc_buf, RNDIS_BUFSZ,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, urndis_rxeof);
 		usbd_transfer(c->sc_xfer);
 	}
@@ -1226,7 +1226,7 @@ urndis_rxeof(usbd_xfer_handle xfer,
 done:
 	/* Setup new transfer. */
 	usbd_setup_xfer(c->sc_xfer, sc->sc_bulkin_pipe, c, c->sc_buf,
-	    RNDIS_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+	    RNDIS_BUFSZ, USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT,
 	    urndis_rxeof);
 	usbd_transfer(c->sc_xfer);
 }

Index: src/sys/dev/usb/if_urtw.c
diff -u src/sys/dev/usb/if_urtw.c:1.6 src/sys/dev/usb/if_urtw.c:1.6.6.1
--- src/sys/dev/usb/if_urtw.c:1.6	Wed Oct 16 18:55:31 2013
+++ src/sys/dev/usb/if_urtw.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_urtw.c,v 1.6 2013/10/16 18:55:31 christos Exp $	*/
+/*	$NetBSD: if_urtw.c,v 1.6.6.1 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$OpenBSD: if_urtw.c,v 1.39 2011/07/03 15:47:17 matthew Exp $	*/
 
 /*-
@@ -19,7 +19,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_urtw.c,v 1.6 2013/10/16 18:55:31 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_urtw.c,v 1.6.6.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -2676,7 +2676,7 @@ urtw_tx_start(struct urtw_softc *sc, str
 	usbd_setup_xfer(data->xfer,
 	    (prior == URTW_PRIORITY_LOW) ? sc->sc_txpipe_low :
 	    sc->sc_txpipe_normal, data, data->buf, xferlen,
-	    USBD_FORCE_SHORT_XFER | USBD_NO_COPY, URTW_DATA_TIMEOUT,
+	    USBD_FORCE_SHORT_XFER, URTW_DATA_TIMEOUT,
 	    (prior == URTW_PRIORITY_LOW) ? urtw_txeof_low : urtw_txeof_normal);
 	error = usbd_transfer(data->xfer);
 	if (error != USBD_IN_PROGRESS && error != USBD_NORMAL_COMPLETION) {

Index: src/sys/dev/usb/if_urtwn.c
diff -u src/sys/dev/usb/if_urtwn.c:1.34 src/sys/dev/usb/if_urtwn.c:1.34.4.1
--- src/sys/dev/usb/if_urtwn.c:1.34	Fri Jul 25 15:07:03 2014
+++ src/sys/dev/usb/if_urtwn.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_urtwn.c,v 1.34 2014/07/25 15:07:03 nonaka Exp $	*/
+/*	$NetBSD: if_urtwn.c,v 1.34.4.1 2014/12/02 09:00:33 skrll Exp $	*/
 /*	$OpenBSD: if_urtwn.c,v 1.20 2011/11/26 06:39:33 ckuethe Exp $	*/
 
 /*-
@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_urtwn.c,v 1.34 2014/07/25 15:07:03 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_urtwn.c,v 1.34.4.1 2014/12/02 09:00:33 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -2380,7 +2380,7 @@ urtwn_rxeof(usbd_xfer_handle xfer, usbd_
  resubmit:
 	/* Setup a new transfer. */
 	usbd_setup_xfer(xfer, sc->rx_pipe, data, data->buf, URTWN_RXBUFSZ,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT, urtwn_rxeof);
+	    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, urtwn_rxeof);
 	(void)usbd_transfer(xfer);
 }
 
@@ -2599,7 +2599,7 @@ urtwn_tx(struct urtwn_softc *sc, struct 
 	s = splnet();
 	data->pipe = pipe;
 	usbd_setup_xfer(data->xfer, pipe, data, data->buf, xferlen,
-	    USBD_FORCE_SHORT_XFER | USBD_NO_COPY, URTWN_TX_TIMEOUT,
+	    USBD_FORCE_SHORT_XFER, URTWN_TX_TIMEOUT,
 	    urtwn_txeof);
 	error = usbd_transfer(data->xfer);
 	if (__predict_false(error != USBD_NORMAL_COMPLETION &&
@@ -4386,7 +4386,7 @@ urtwn_init(struct ifnet *ifp)
 	for (i = 0; i < URTWN_RX_LIST_COUNT; i++) {
 		data = &sc->rx_data[i];
 		usbd_setup_xfer(data->xfer, sc->rx_pipe, data, data->buf,
-		    URTWN_RXBUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    URTWN_RXBUFSZ, USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, urtwn_rxeof);
 		error = usbd_transfer(data->xfer);
 		if (__predict_false(error != USBD_NORMAL_COMPLETION &&

Index: src/sys/dev/usb/if_zyd.c
diff -u src/sys/dev/usb/if_zyd.c:1.36 src/sys/dev/usb/if_zyd.c:1.36.14.1
--- src/sys/dev/usb/if_zyd.c:1.36	Tue Jan 22 12:40:43 2013
+++ src/sys/dev/usb/if_zyd.c	Tue Dec  2 09:00:33 2014
@@ -1,5 +1,5 @@
 /*	$OpenBSD: if_zyd.c,v 1.52 2007/02/11 00:08:04 jsg Exp $	*/
-/*	$NetBSD: if_zyd.c,v 1.36 2013/01/22 12:40:43 jmcneill Exp $	*/
+/*	$NetBSD: if_zyd.c,v 1.36.14.1 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2006 by Damien Bergamini <[email protected]>
@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_zyd.c,v 1.36 2013/01/22 12:40:43 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_zyd.c,v 1.36.14.1 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -2045,7 +2045,7 @@ zyd_rxeof(usbd_xfer_handle xfer, usbd_pr
 
 skip:	/* setup a new transfer */
 	usbd_setup_xfer(xfer, sc->zyd_ep[ZYD_ENDPT_BIN], data, NULL,
-	    ZYX_MAX_RXBUFSZ, USBD_NO_COPY | USBD_SHORT_XFER_OK,
+	    ZYX_MAX_RXBUFSZ, USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, zyd_rxeof);
 	(void)usbd_transfer(xfer);
 }
@@ -2150,7 +2150,7 @@ zyd_tx_mgt(struct zyd_softc *sc, struct 
 	m_freem(m0);	/* mbuf no longer needed */
 
 	usbd_setup_xfer(data->xfer, sc->zyd_ep[ZYD_ENDPT_BOUT], data,
-	    data->buf, xferlen, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+	    data->buf, xferlen, USBD_FORCE_SHORT_XFER,
 	    ZYD_TX_TIMEOUT, zyd_txeof);
 	error = usbd_transfer(data->xfer);
 	if (error != USBD_IN_PROGRESS && error != 0) {
@@ -2308,7 +2308,7 @@ zyd_tx_data(struct zyd_softc *sc, struct
 	m_freem(m0);	/* mbuf no longer needed */
 
 	usbd_setup_xfer(data->xfer, sc->zyd_ep[ZYD_ENDPT_BOUT], data,
-	    data->buf, xferlen, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+	    data->buf, xferlen, USBD_FORCE_SHORT_XFER,
 	    ZYD_TX_TIMEOUT, zyd_txeof);
 	error = usbd_transfer(data->xfer);
 	if (error != USBD_IN_PROGRESS && error != 0) {
@@ -2521,7 +2521,7 @@ zyd_init(struct ifnet *ifp)
 		struct zyd_rx_data *data = &sc->rx_data[i];
 
 		usbd_setup_xfer(data->xfer, sc->zyd_ep[ZYD_ENDPT_BIN], data,
-		    NULL, ZYX_MAX_RXBUFSZ, USBD_NO_COPY | USBD_SHORT_XFER_OK,
+		    NULL, ZYX_MAX_RXBUFSZ, USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT, zyd_rxeof);
 		error = usbd_transfer(data->xfer);
 		if (error != USBD_IN_PROGRESS && error != 0) {

Index: src/sys/dev/usb/irmce.c
diff -u src/sys/dev/usb/irmce.c:1.1.32.1 src/sys/dev/usb/irmce.c:1.1.32.2
--- src/sys/dev/usb/irmce.c:1.1.32.1	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/irmce.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: irmce.c,v 1.1.32.1 2014/12/01 13:03:05 skrll Exp $ */
+/* $NetBSD: irmce.c,v 1.1.32.2 2014/12/02 09:00:33 skrll Exp $ */
 
 /*-
  * Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irmce.c,v 1.1.32.1 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irmce.c,v 1.1.32.2 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -305,7 +305,7 @@ irmce_reset(struct irmce_softc *sc)
 
 	wlen = sizeof(reset_cmd);
 	err = usbd_bulk_transfer(sc->sc_bulkin_xfer,
-	    sc->sc_bulkout_pipe, USBD_NO_COPY|USBD_FORCE_SHORT_XFER,
+	    sc->sc_bulkout_pipe, USBD_FORCE_SHORT_XFER,
 	    USBD_DEFAULT_TIMEOUT, sc->sc_bulkout_buffer, &wlen);
 	if (err != USBD_NORMAL_COMPLETION) {
 		if (err == USBD_INTERRUPTED)
@@ -551,7 +551,7 @@ irmce_read(void *priv, struct uio *uio, 
 	while (uio->uio_resid > 0) {
 		rlen = sc->sc_bulkin_maxpktsize;
 		err = usbd_bulk_transfer(sc->sc_bulkin_xfer,
-		    sc->sc_bulkin_pipe, USBD_NO_COPY|USBD_SHORT_XFER_OK,
+		    sc->sc_bulkin_pipe, USBD_SHORT_XFER_OK,
 		    USBD_DEFAULT_TIMEOUT, sc->sc_bulkin_buffer, &rlen);
 		if (err != USBD_NORMAL_COMPLETION) {
 			if (err == USBD_INTERRUPTED)

Index: src/sys/dev/usb/motg.c
diff -u src/sys/dev/usb/motg.c:1.12.2.4 src/sys/dev/usb/motg.c:1.12.2.5
--- src/sys/dev/usb/motg.c:1.12.2.4	Mon Dec  1 12:38:39 2014
+++ src/sys/dev/usb/motg.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: motg.c,v 1.12.2.4 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: motg.c,v 1.12.2.5 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004, 2011, 2012, 2014 The NetBSD Foundation, Inc.
@@ -42,7 +42,7 @@
 #include "opt_motg.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: motg.c,v 1.12.2.4 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: motg.c,v 1.12.2.5 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -116,8 +116,6 @@ static void		motg_root_intr_done(usbd_xf
 static usbd_status	motg_open(usbd_pipe_handle);
 static void		motg_poll(struct usbd_bus *);
 static void		motg_softintr(void *);
-static usbd_status	motg_allocm(struct usbd_bus *, usb_dma_t *, uint32_t);
-static void		motg_freem(struct usbd_bus *, usb_dma_t *);
 static usbd_xfer_handle	motg_allocx(struct usbd_bus *);
 static void		motg_freex(struct usbd_bus *, usbd_xfer_handle);
 static void		motg_get_lock(struct usbd_bus *, kmutex_t **);
@@ -206,8 +204,6 @@ const struct usbd_bus_methods motg_bus_m
 	.ubm_open =	motg_open,
 	.ubm_softint =	motg_softintr,
 	.ubm_dopoll =	motg_poll,
-	.ubm_allocm =	motg_allocm,
-	.ubm_freem =	motg_freem,
 	.ubm_allocx =	motg_allocx,
 	.ubm_freex =	motg_freex,
 	.ubm_getlock =	motg_get_lock,
@@ -718,29 +714,6 @@ motg_intr_vbus(struct motg_softc *sc, in
 	return 1;
 }
 
-usbd_status
-motg_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct motg_softc *sc = bus->hci_private;
-	usbd_status status;
-
-	status = usb_allocmem(&sc->sc_bus, size, 0, dma);
-	if (status == USBD_NOMEM)
-		status = usb_reserve_allocm(&sc->sc_dma_reserve, dma, size);
-	return status;
-}
-
-void
-motg_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	if (dma->block->flags & USB_DMA_RESERVE) {
-		usb_reserve_freem(&((struct motg_softc *)bus)->sc_dma_reserve,
-		    dma);
-		return;
-	}
-	usb_freemem(&((struct motg_softc *)bus)->sc_bus, dma);
-}
-
 usbd_xfer_handle
 motg_allocx(struct usbd_bus *bus)
 {
@@ -894,7 +867,7 @@ motg_root_ctrl_start(usbd_xfer_handle xf
 	index = UGETW(req->wIndex);
 
 	if (len != 0)
-		buf = KERNADDR(&xfer->dmabuf, 0);
+		buf = xfer->buf;
 
 #define C(x,y) ((x) | ((y) << 8))
 	switch(C(req->bRequest, req->bmRequestType)) {
@@ -1325,7 +1298,7 @@ motg_hub_change(struct motg_softc *sc)
 	if (pipe->device == NULL || pipe->device->bus == NULL)
 		return;	/* device has detached */
 
-	p = KERNADDR(&xfer->dmabuf, 0);
+	p = xfer->buf;
 	p[0] = 1<<1;
 	xfer->actlen = 1;
 	xfer->status = USBD_NORMAL_COMPLETION;
@@ -1552,7 +1525,7 @@ motg_device_ctrl_start1(struct motg_soft
 	ep->xfer = xfer;
 	ep->datalen = xfer->length;
 	if (ep->datalen > 0)
-		ep->data = KERNADDR(&xfer->dmabuf, 0);
+		ep->data = xfer->buf;
 	else
 		ep->data = NULL;
 	if ((xfer->flags & USBD_FORCE_SHORT_XFER) &&
@@ -1998,7 +1971,7 @@ motg_device_data_start1(struct motg_soft
 	ep->xfer = xfer;
 	ep->datalen = xfer->length;
 	KASSERT(ep->datalen > 0);
-	ep->data = KERNADDR(&xfer->dmabuf, 0);
+	ep->data = xfer->buf;
 	if ((xfer->flags & USBD_FORCE_SHORT_XFER) &&
 	    (ep->datalen % 64) == 0)
 		ep->need_short_xfer = 1;

Index: src/sys/dev/usb/motgvar.h
diff -u src/sys/dev/usb/motgvar.h:1.4.2.1 src/sys/dev/usb/motgvar.h:1.4.2.2
--- src/sys/dev/usb/motgvar.h:1.4.2.1	Mon Dec  1 21:52:00 2014
+++ src/sys/dev/usb/motgvar.h	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: motgvar.h,v 1.4.2.1 2014/12/01 21:52:00 skrll Exp $	*/
+/*	$NetBSD: motgvar.h,v 1.4.2.2 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -85,8 +85,6 @@ struct motg_softc {
 	struct motg_hw_ep sc_in_ep[MOTG_MAX_HW_EP];
 	struct motg_hw_ep sc_out_ep[MOTG_MAX_HW_EP];
 
-	struct usb_dma_reserve sc_dma_reserve;
-
 	kmutex_t sc_lock;
 	kmutex_t sc_intr_lock;
 	int sc_dying;

Index: src/sys/dev/usb/ohci.c
diff -u src/sys/dev/usb/ohci.c:1.254.2.5 src/sys/dev/usb/ohci.c:1.254.2.6
--- src/sys/dev/usb/ohci.c:1.254.2.5	Mon Dec  1 12:38:39 2014
+++ src/sys/dev/usb/ohci.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ohci.c,v 1.254.2.5 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: ohci.c,v 1.254.2.6 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004, 2005, 2012 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.254.2.5 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.254.2.6 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -127,9 +127,6 @@ Static ohci_soft_itd_t  *ohci_hash_find_
 Static usbd_status	ohci_setup_isoc(usbd_pipe_handle pipe);
 Static void		ohci_device_isoc_enter(usbd_xfer_handle);
 
-Static usbd_status	ohci_allocm(struct usbd_bus *, usb_dma_t *, uint32_t);
-Static void		ohci_freem(struct usbd_bus *, usb_dma_t *);
-
 Static usbd_xfer_handle	ohci_allocx(struct usbd_bus *);
 Static void		ohci_freex(struct usbd_bus *, usbd_xfer_handle);
 Static void		ohci_get_lock(struct usbd_bus *, kmutex_t **);
@@ -254,8 +251,6 @@ Static const struct usbd_bus_methods ohc
 	.ubm_open =	ohci_open,
 	.ubm_softint =	ohci_softintr,
 	.ubm_dopoll =	ohci_poll,
-	.ubm_allocm =	ohci_allocm,
-	.ubm_freem =	ohci_freem,
 	.ubm_allocx =	ohci_allocx,
 	.ubm_freex =	ohci_freex,
 	.ubm_getlock =	ohci_get_lock,
@@ -670,9 +665,7 @@ ohci_init(ohci_softc_t *sc)
 		return (USBD_INVAL);
 	}
 	sc->sc_bus.usbrev = USBREV_1_0;
-
-	usb_setup_reserve(sc->sc_dev, &sc->sc_dma_reserve, sc->sc_bus.dmatag,
-	    USB_MEM_RESERVE);
+	sc->sc_bus.usedma = true;
 
 	/* XXX determine alignment by R/W */
 	/* Allocate the HCCA area. */
@@ -919,29 +912,6 @@ ohci_init(ohci_softc_t *sc)
 	return (err);
 }
 
-usbd_status
-ohci_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct ohci_softc *sc = bus->hci_private;
-	usbd_status status;
-
-	status = usb_allocmem(&sc->sc_bus, size, 0, dma);
-	if (status == USBD_NOMEM)
-		status = usb_reserve_allocm(&sc->sc_dma_reserve, dma, size);
-	return status;
-}
-
-void
-ohci_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	struct ohci_softc *sc = bus->hci_private;
-	if (dma->block->flags & USB_DMA_RESERVE) {
-		usb_reserve_freem(&sc->sc_dma_reserve, dma);
-		return;
-	}
-	usb_freemem(&sc->sc_bus, dma);
-}
-
 usbd_xfer_handle
 ohci_allocx(struct usbd_bus *bus)
 {
@@ -1597,7 +1567,7 @@ ohci_rhsc(ohci_softc_t *sc, usbd_xfer_ha
 		return;
 	}
 
-	p = KERNADDR(&xfer->dmabuf, 0);
+	p = xfer->buf;
 	m = min(sc->sc_noport, xfer->length * 8 - 1);
 	memset(p, 0, xfer->length);
 	for (i = 1; i <= m; i++) {
@@ -2526,7 +2496,7 @@ ohci_root_ctrl_start(usbd_xfer_handle xf
 	index = UGETW(req->wIndex);
 
 	if (len != 0)
-		buf = KERNADDR(&xfer->dmabuf, 0);
+		buf = xfer->buf;
 
 #define C(x,y) ((x) | ((y) << 8))
 	switch(C(req->bRequest, req->bmRequestType)) {

Index: src/sys/dev/usb/ohcivar.h
diff -u src/sys/dev/usb/ohcivar.h:1.55.6.1 src/sys/dev/usb/ohcivar.h:1.55.6.2
--- src/sys/dev/usb/ohcivar.h:1.55.6.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/ohcivar.h	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ohcivar.h,v 1.55.6.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: ohcivar.h,v 1.55.6.2 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -143,7 +143,6 @@ typedef struct ohci_softc {
 	struct callout sc_tmo_rhsc;
 	device_t sc_child;
 	char sc_dying;
-	struct usb_dma_reserve sc_dma_reserve;
 } ohci_softc_t;
 
 struct ohci_xfer {

Index: src/sys/dev/usb/pseye.c
diff -u src/sys/dev/usb/pseye.c:1.21.34.1 src/sys/dev/usb/pseye.c:1.21.34.2
--- src/sys/dev/usb/pseye.c:1.21.34.1	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/pseye.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: pseye.c,v 1.21.34.1 2014/12/01 13:03:05 skrll Exp $ */
+/* $NetBSD: pseye.c,v 1.21.34.2 2014/12/02 09:00:33 skrll Exp $ */
 
 /*-
  * Copyright (c) 2008 Jared D. McNeill <[email protected]>
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pseye.c,v 1.21.34.1 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pseye.c,v 1.21.34.2 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -622,7 +622,7 @@ pseye_get_frame(struct pseye_softc *sc, 
 		return USBD_IOERROR;
 
 	return usbd_bulk_transfer(sc->sc_bulkin_xfer, sc->sc_bulkin_pipe,
-	    USBD_SHORT_XFER_OK|USBD_NO_COPY, 1000,
+	    USBD_SHORT_XFER_OK, 1000,
 	    sc->sc_bulkin_buffer, plen);
 }
 

Index: src/sys/dev/usb/stuirda.c
diff -u src/sys/dev/usb/stuirda.c:1.16.2.2 src/sys/dev/usb/stuirda.c:1.16.2.3
--- src/sys/dev/usb/stuirda.c:1.16.2.2	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/stuirda.c	Tue Dec  2 09:00:33 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: stuirda.c,v 1.16.2.2 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: stuirda.c,v 1.16.2.3 2014/12/02 09:00:33 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001,2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: stuirda.c,v 1.16.2.2 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: stuirda.c,v 1.16.2.3 2014/12/02 09:00:33 skrll Exp $");
 
 #include <sys/param.h>
 
@@ -312,7 +312,7 @@ stuirda_write(void *h, struct uio *uio, 
 
 		n += STUIRDA_HEADER_SIZE + sc->sc_wr_buf[1];
 		err = usbd_bulk_transfer(sc->sc_wr_xfer, sc->sc_wr_pipe,
-			  USBD_FORCE_SHORT_XFER|USBD_NO_COPY,
+			  USBD_FORCE_SHORT_XFER,
 			  UIRDA_WR_TIMEOUT,
 			  sc->sc_wr_buf, &n);
 		DPRINTFN(2, ("uirdawrite: err=%d\n", err));

Index: src/sys/dev/usb/uaudio.c
diff -u src/sys/dev/usb/uaudio.c:1.140.2.1 src/sys/dev/usb/uaudio.c:1.140.2.2
--- src/sys/dev/usb/uaudio.c:1.140.2.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/uaudio.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uaudio.c,v 1.140.2.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: uaudio.c,v 1.140.2.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1999, 2012 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uaudio.c,v 1.140.2.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uaudio.c,v 1.140.2.2 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2823,7 +2823,7 @@ uaudio_chan_ptransfer(struct chan *ch)
 	//DPRINTFN(5, "ptransfer xfer=%p\n", cb->xfer);
 	/* Fill the request */
 	usbd_setup_isoc_xfer(cb->xfer, ch->pipe, cb, cb->sizes,
-			     UAUDIO_NFRAMES, USBD_NO_COPY,
+			     UAUDIO_NFRAMES, 0,
 			     uaudio_chan_pintr);
 
 	(void)usbd_transfer(cb->xfer);
@@ -2906,7 +2906,7 @@ uaudio_chan_rtransfer(struct chan *ch)
 	DPRINTFN(5, "transfer xfer=%p\n", cb->xfer);
 	/* Fill the request */
 	usbd_setup_isoc_xfer(cb->xfer, ch->pipe, cb, cb->sizes,
-			     UAUDIO_NFRAMES, USBD_NO_COPY,
+			     UAUDIO_NFRAMES, 0,
 			     uaudio_chan_rintr);
 
 	(void)usbd_transfer(cb->xfer);

Index: src/sys/dev/usb/ubt.c
diff -u src/sys/dev/usb/ubt.c:1.51 src/sys/dev/usb/ubt.c:1.51.4.1
--- src/sys/dev/usb/ubt.c:1.51	Tue May 20 18:25:54 2014
+++ src/sys/dev/usb/ubt.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ubt.c,v 1.51 2014/05/20 18:25:54 rmind Exp $	*/
+/*	$NetBSD: ubt.c,v 1.51.4.1 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2006 Itronix Inc.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ubt.c,v 1.51 2014/05/20 18:25:54 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ubt.c,v 1.51.4.1 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -1052,7 +1052,7 @@ ubt_xmit_cmd_start(struct ubt_softc *sc)
 				&req,
 				sc->sc_cmd_buf,
 				len,
-				USBD_NO_COPY | USBD_FORCE_SHORT_XFER,
+				USBD_FORCE_SHORT_XFER,
 				ubt_xmit_cmd_complete);
 
 	status = usbd_transfer(sc->sc_cmd_xfer);
@@ -1164,7 +1164,7 @@ ubt_xmit_acl_start(struct ubt_softc *sc)
 			sc,
 			sc->sc_aclwr_buf,
 			len,
-			USBD_NO_COPY | USBD_FORCE_SHORT_XFER,
+			USBD_FORCE_SHORT_XFER,
 			UBT_ACL_TIMEOUT,
 			ubt_xmit_acl_complete);
 
@@ -1325,7 +1325,7 @@ ubt_xmit_sco_start1(struct ubt_softc *sc
 			     isoc,
 			     isoc->size,
 			     num,
-			     USBD_NO_COPY | USBD_FORCE_SHORT_XFER,
+			     USBD_FORCE_SHORT_XFER,
 			     ubt_xmit_sco_complete);
 
 	usbd_transfer(isoc->xfer);
@@ -1460,7 +1460,7 @@ ubt_recv_acl_start(struct ubt_softc *sc)
 			sc,
 			sc->sc_aclrd_buf,
 			UBT_BUFSIZ_ACL,
-			USBD_NO_COPY | USBD_SHORT_XFER_OK,
+			USBD_SHORT_XFER_OK,
 			USBD_NO_TIMEOUT,
 			ubt_recv_acl_complete);
 
@@ -1559,7 +1559,7 @@ ubt_recv_sco_start1(struct ubt_softc *sc
 			     isoc,
 			     isoc->size,
 			     UBT_NFRAMES,
-			     USBD_NO_COPY | USBD_SHORT_XFER_OK,
+			     USBD_SHORT_XFER_OK,
 			     ubt_recv_sco_complete);
 
 	usbd_transfer(isoc->xfer);

Index: src/sys/dev/usb/ucom.c
diff -u src/sys/dev/usb/ucom.c:1.108.2.1 src/sys/dev/usb/ucom.c:1.108.2.2
--- src/sys/dev/usb/ucom.c:1.108.2.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/ucom.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ucom.c,v 1.108.2.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: ucom.c,v 1.108.2.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ucom.c,v 1.108.2.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ucom.c,v 1.108.2.2 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1150,7 +1150,7 @@ ucom_submit_write(struct ucom_softc *sc,
 
 	usbd_setup_xfer(ub->ub_xfer, sc->sc_bulkout_pipe,
 	    (usbd_private_handle)sc, ub->ub_data, ub->ub_len,
-	    USBD_NO_COPY, USBD_NO_TIMEOUT, ucomwritecb);
+	    0, USBD_NO_TIMEOUT, ucomwritecb);
 
 	ucom_write_status(sc, ub, usbd_transfer(ub->ub_xfer));
 }
@@ -1238,7 +1238,7 @@ ucomsubmitread(struct ucom_softc *sc, st
 
 	usbd_setup_xfer(ub->ub_xfer, sc->sc_bulkin_pipe,
 	    (usbd_private_handle)sc, ub->ub_data, sc->sc_ibufsize,
-	    USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT, ucomreadcb);
+	    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, ucomreadcb);
 
 	if ((err = usbd_transfer(ub->ub_xfer)) != USBD_IN_PROGRESS) {
 		/* XXX: Recover from this, please! */

Index: src/sys/dev/usb/udl.c
diff -u src/sys/dev/usb/udl.c:1.11.6.1 src/sys/dev/usb/udl.c:1.11.6.2
--- src/sys/dev/usb/udl.c:1.11.6.1	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/udl.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: udl.c,v 1.11.6.1 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: udl.c,v 1.11.6.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2009 FUKAUMI Naoki.
@@ -53,7 +53,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udl.c,v 1.11.6.1 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udl.c,v 1.11.6.2 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -1430,7 +1430,7 @@ udl_cmd_send(struct udl_softc *sc)
 
 	/* do xfer */
 	error = usbd_bulk_transfer(cmdq->cq_xfer, sc->sc_tx_pipeh,
-	    USBD_NO_COPY, USBD_NO_TIMEOUT, cmdq->cq_buf, &len);
+	    0, USBD_NO_TIMEOUT, cmdq->cq_buf, &len);
 
 	UDL_CMD_BUFINIT(sc);
 
@@ -1482,7 +1482,7 @@ udl_cmd_send_async(struct udl_softc *sc)
 	/* do xfer */
 	mutex_enter(&sc->sc_mtx);
 	usbd_setup_xfer(cmdq->cq_xfer, sc->sc_tx_pipeh, cmdq, cmdq->cq_buf,
-	    len, USBD_NO_COPY, USBD_NO_TIMEOUT, udl_cmd_send_async_cb);
+	    len, 0, USBD_NO_TIMEOUT, udl_cmd_send_async_cb);
 	error = usbd_transfer(cmdq->cq_xfer);
 	if (error != USBD_NORMAL_COMPLETION && error != USBD_IN_PROGRESS) {
 		aprint_error_dev(sc->sc_dev, "%s: %s!\n", __func__,

Index: src/sys/dev/usb/udsir.c
diff -u src/sys/dev/usb/udsir.c:1.1.14.1 src/sys/dev/usb/udsir.c:1.1.14.2
--- src/sys/dev/usb/udsir.c:1.1.14.1	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/udsir.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: udsir.c,v 1.1.14.1 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: udsir.c,v 1.1.14.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udsir.c,v 1.1.14.1 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udsir.c,v 1.1.14.2 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -604,8 +604,8 @@ udsir_write(void *h, struct uio *uio, in
 #endif
 
 		err = usbd_intr_transfer(sc->sc_wr_xfer, sc->sc_wr_pipe,
-				USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
-				UDSIR_WR_TIMEOUT, wrbuf, &btlen);
+				USBD_FORCE_SHORT_XFER, UDSIR_WR_TIMEOUT,
+				wrbuf, &btlen);
 		DPRINTFN(2, ("%s: err=%d\n", __func__, err));
 		if (err != USBD_NORMAL_COMPLETION) {
 			if (err == USBD_INTERRUPTED)
@@ -1045,7 +1045,7 @@ udsir_start_read(struct udsir_softc *sc)
 	}
 
 	usbd_setup_xfer(sc->sc_rd_xfer, sc->sc_rd_pipe, sc, sc->sc_rd_buf,
-	    sc->sc_rd_maxpsz, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    sc->sc_rd_maxpsz, USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, udsir_rd_cb);
 	err = usbd_transfer(sc->sc_rd_xfer);
 	if (err != USBD_IN_PROGRESS) {

Index: src/sys/dev/usb/ugen.c
diff -u src/sys/dev/usb/ugen.c:1.126.2.2 src/sys/dev/usb/ugen.c:1.126.2.3
--- src/sys/dev/usb/ugen.c:1.126.2.2	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/ugen.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ugen.c,v 1.126.2.2 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: ugen.c,v 1.126.2.3 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.126.2.2 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.126.2.3 2014/12/02 09:00:34 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -479,7 +479,7 @@ ugenopen(dev_t dev, int flag, int mode, 
 				usbd_setup_isoc_xfer
 					(xfer, sce->pipeh, &sce->isoreqs[i],
 					 sce->isoreqs[i].sizes,
-					 UGEN_NISORFRMS, USBD_NO_COPY,
+					 UGEN_NISORFRMS, 0,
 					 ugen_isoc_rintr);
 				(void)usbd_transfer(xfer);
 			}
@@ -697,7 +697,7 @@ ugen_do_read(struct ugen_softc *sc, int 
 					usbd_setup_xfer(xfer,
 					    sce->pipeh, sce, NULL,
 					    min(n, sce->ra_wb_xferlen),
-					    USBD_NO_COPY, USBD_NO_TIMEOUT,
+					    0, USBD_NO_TIMEOUT,
 					    ugen_bulkra_intr);
 					sce->state &= ~UGEN_RA_WB_STOP;
 					err = usbd_transfer(xfer);
@@ -911,7 +911,7 @@ ugen_do_write(struct ugen_softc *sc, int
 						       n - tn);
 					usbd_setup_xfer(xfer,
 					    sce->pipeh, sce, NULL, n,
-					    USBD_NO_COPY, USBD_NO_TIMEOUT,
+					    0, USBD_NO_TIMEOUT,
 					    ugen_bulkwb_intr);
 					sce->state &= ~UGEN_RA_WB_STOP;
 					err = usbd_transfer(xfer);
@@ -1161,7 +1161,7 @@ ugen_isoc_rintr(usbd_xfer_handle xfer, u
 	}
 
 	usbd_setup_isoc_xfer(xfer, sce->pipeh, req, req->sizes, UGEN_NISORFRMS,
-			     USBD_NO_COPY, ugen_isoc_rintr);
+			     0, ugen_isoc_rintr);
 	(void)usbd_transfer(xfer);
 
 	mutex_enter(&sc->sc_lock);
@@ -1219,7 +1219,7 @@ ugen_bulkra_intr(usbd_xfer_handle xfer, 
 	n = (sce->limit - sce->ibuf) - sce->ra_wb_used;
 	if (n > 0) {
 		usbd_setup_xfer(xfer, sce->pipeh, sce, NULL,
-		    min(n, sce->ra_wb_xferlen), USBD_NO_COPY,
+		    min(n, sce->ra_wb_xferlen), 0,
 		    USBD_NO_TIMEOUT, ugen_bulkra_intr);
 		err = usbd_transfer(xfer);
 		if (err != USBD_IN_PROGRESS) {
@@ -1288,7 +1288,7 @@ ugen_bulkwb_intr(usbd_xfer_handle xfer, 
 			memcpy(tbuf, sce->ibuf, count - n);
 
 		usbd_setup_xfer(xfer, sce->pipeh, sce, NULL,
-		    count, USBD_NO_COPY, USBD_NO_TIMEOUT, ugen_bulkwb_intr);
+		    count, 0, USBD_NO_TIMEOUT, ugen_bulkwb_intr);
 		err = usbd_transfer(xfer);
 		if (err != USBD_IN_PROGRESS) {
 			printf("usbd_bulkwb_intr: error=%d\n", err);
@@ -1503,7 +1503,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int
 			usbd_setup_xfer(sce->ra_wb_xfer, sce->pipeh, sce,
 			    NULL,
 			    min(sce->ra_wb_xferlen, sce->ra_wb_bufsize),
-			    USBD_NO_COPY, USBD_NO_TIMEOUT,
+			    0, USBD_NO_TIMEOUT,
 			    ugen_bulkra_intr);
 			err = usbd_transfer(sce->ra_wb_xfer);
 			if (err != USBD_IN_PROGRESS) {

Index: src/sys/dev/usb/uhci.c
diff -u src/sys/dev/usb/uhci.c:1.264.4.5 src/sys/dev/usb/uhci.c:1.264.4.6
--- src/sys/dev/usb/uhci.c:1.264.4.5	Mon Dec  1 12:38:39 2014
+++ src/sys/dev/usb/uhci.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhci.c,v 1.264.4.5 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: uhci.c,v 1.264.4.6 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004, 2011, 2012 The NetBSD Foundation, Inc.
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhci.c,v 1.264.4.5 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhci.c,v 1.264.4.6 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -165,9 +165,6 @@ Static void		uhci_rem_loop(uhci_softc_t 
 Static usbd_status	uhci_setup_isoc(usbd_pipe_handle pipe);
 Static void		uhci_device_isoc_enter(usbd_xfer_handle);
 
-Static usbd_status	uhci_allocm(struct usbd_bus *, usb_dma_t *, uint32_t);
-Static void		uhci_freem(struct usbd_bus *, usb_dma_t *);
-
 Static usbd_xfer_handle	uhci_allocx(struct usbd_bus *);
 Static void		uhci_freex(struct usbd_bus *, usbd_xfer_handle);
 Static void		uhci_get_lock(struct usbd_bus *, kmutex_t **);
@@ -286,8 +283,6 @@ const struct usbd_bus_methods uhci_bus_m
 	.ubm_open =	uhci_open,
 	.ubm_softint =	uhci_softintr,
 	.ubm_dopoll =	uhci_poll,
-	.ubm_allocm =	uhci_allocm,
-	.ubm_freem =	uhci_freem,
 	.ubm_allocx =	uhci_allocx,
 	.ubm_freex =	uhci_freex,
 	.ubm_getlock =	uhci_get_lock,
@@ -408,9 +403,6 @@ uhci_init(uhci_softc_t *sc)
 	uhci_globalreset(sc);			/* reset the controller */
 	uhci_reset(sc);
 
-	usb_setup_reserve(sc->sc_dev, &sc->sc_dma_reserve, sc->sc_bus.dmatag,
-	    USB_MEM_RESERVE);
-
 	/* Allocate and initialize real frame array. */
 	err = usb_allocmem(&sc->sc_bus,
 		  UHCI_FRAMELIST_COUNT * sizeof(uhci_physaddr_t),
@@ -536,6 +528,7 @@ uhci_init(uhci_softc_t *sc)
 	/* Set up the bus struct. */
 	sc->sc_bus.methods = &uhci_bus_methods;
 	sc->sc_bus.pipe_size = sizeof(struct uhci_pipe);
+	sc->sc_bus.usedma = true;
 
 	UHCICMD(sc, UHCI_CMD_MAXP); /* Assume 64 byte packets at frame end */
 
@@ -596,54 +589,6 @@ uhci_detach(struct uhci_softc *sc, int f
 	return (rv);
 }
 
-usbd_status
-uhci_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct uhci_softc *sc = bus->hci_private;
-	usbd_status status;
-	uint32_t n;
-
-	/*
-	 * XXX
-	 * Since we are allocating a buffer we can assume that we will
-	 * need TDs for it.  Since we don't want to allocate those from
-	 * an interrupt context, we allocate them here and free them again.
-	 * This is no guarantee that we'll get the TDs next time...
-	 */
-	n = size / 8;
-	if (n > 16) {
-		uint32_t i;
-		uhci_soft_td_t **stds;
-
-		DPRINTF(("uhci_allocm: get %d TDs\n", n));
-		stds = kmem_alloc(sizeof(uhci_soft_td_t *) * n, KM_SLEEP);
-		if (!stds)
-			return USBD_NOMEM;
-		for(i = 0; i < n; i++)
-			stds[i] = uhci_alloc_std(sc);
-		for(i = 0; i < n; i++)
-			if (stds[i] != NULL)
-				uhci_free_std(sc, stds[i]);
-		kmem_free(stds, sizeof(uhci_soft_td_t *) * n);
-	}
-
-	status = usb_allocmem(&sc->sc_bus, size, 0, dma);
-	if (status == USBD_NOMEM)
-		status = usb_reserve_allocm(&sc->sc_dma_reserve, dma, size);
-	return status;
-}
-
-void
-uhci_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	if (dma->block->flags & USB_DMA_RESERVE) {
-		usb_reserve_freem(&((struct uhci_softc *)bus)->sc_dma_reserve,
-		    dma);
-		return;
-	}
-	usb_freemem(&((struct uhci_softc *)bus)->sc_bus, dma);
-}
-
 usbd_xfer_handle
 uhci_allocx(struct usbd_bus *bus)
 {
@@ -1002,7 +947,7 @@ uhci_poll_hub(void *addr)
 	sc = pipe->device->bus->hci_private;
 	callout_reset(&sc->sc_poll_handle, sc->sc_ival, uhci_poll_hub, xfer);
 
-	p = KERNADDR(&xfer->dmabuf, 0);
+	p = xfer->buf;
 	p[0] = 0;
 	if (UREAD2(sc, UHCI_PORTSC1) & (UHCI_PORTSC_CSC|UHCI_PORTSC_OCIC))
 		p[0] |= 1<<1;
@@ -3585,7 +3530,7 @@ uhci_root_ctrl_start(usbd_xfer_handle xf
 	index = UGETW(req->wIndex);
 
 	if (len != 0)
-		buf = KERNADDR(&xfer->dmabuf, 0);
+		buf = xfer->buf;
 
 #define C(x,y) ((x) | ((y) << 8))
 	switch(C(req->bRequest, req->bmRequestType)) {

Index: src/sys/dev/usb/uhcivar.h
diff -u src/sys/dev/usb/uhcivar.h:1.52.14.1 src/sys/dev/usb/uhcivar.h:1.52.14.2
--- src/sys/dev/usb/uhcivar.h:1.52.14.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/uhcivar.h	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhcivar.h,v 1.52.14.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: uhcivar.h,v 1.52.14.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -182,7 +182,6 @@ typedef struct uhci_softc {
 	int sc_id_vendor;		/* vendor ID for root hub */
 
 	device_t sc_child;		/* /dev/usb# device */
-	struct usb_dma_reserve sc_dma_reserve;
 } uhci_softc_t;
 
 usbd_status	uhci_init(uhci_softc_t *);

Index: src/sys/dev/usb/uhso.c
diff -u src/sys/dev/usb/uhso.c:1.17 src/sys/dev/usb/uhso.c:1.17.2.1
--- src/sys/dev/usb/uhso.c:1.17	Sat Nov 15 19:18:19 2014
+++ src/sys/dev/usb/uhso.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhso.c,v 1.17 2014/11/15 19:18:19 christos Exp $	*/
+/*	$NetBSD: uhso.c,v 1.17.2.1 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2009 Iain Hibbert
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhso.c,v 1.17 2014/11/15 19:18:19 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhso.c,v 1.17.2.1 2014/12/02 09:00:34 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -907,7 +907,7 @@ uhso_mux_write(struct uhso_port *hp)
 	USETW(req.wLength, hp->hp_wlen);
 
 	usbd_setup_default_xfer(hp->hp_wxfer, sc->sc_udev, hp, USBD_NO_TIMEOUT,
-	    &req, hp->hp_wbuf, hp->hp_wlen, USBD_NO_COPY, hp->hp_write_cb);
+	    &req, hp->hp_wbuf, hp->hp_wlen, 0, hp->hp_write_cb);
 
 	status = usbd_transfer(hp->hp_wxfer);
 	if (status != USBD_IN_PROGRESS) {
@@ -943,7 +943,7 @@ uhso_mux_read(struct uhso_port *hp)
 	USETW(req.wLength, hp->hp_rsize);
 
 	usbd_setup_default_xfer(hp->hp_rxfer, sc->sc_udev, hp, USBD_NO_TIMEOUT,
-	    &req, hp->hp_rbuf, hp->hp_rsize, USBD_NO_COPY | USBD_SHORT_XFER_OK,
+	    &req, hp->hp_rbuf, hp->hp_rsize, USBD_SHORT_XFER_OK,
 	    hp->hp_read_cb);
 
 	status = usbd_transfer(hp->hp_rxfer);
@@ -1183,7 +1183,7 @@ uhso_bulk_write(struct uhso_port *hp)
 	DPRINTF(5, "hp=%p, wlen=%zd\n", hp, hp->hp_wlen);
 
 	usbd_setup_xfer(hp->hp_wxfer, hp->hp_wpipe, hp, hp->hp_wbuf,
-	    hp->hp_wlen, USBD_NO_COPY, USBD_NO_TIMEOUT, hp->hp_write_cb);
+	    hp->hp_wlen, 0, USBD_NO_TIMEOUT, hp->hp_write_cb);
 
 	status = usbd_transfer(hp->hp_wxfer);
 	if (status != USBD_IN_PROGRESS) {
@@ -1204,7 +1204,7 @@ uhso_bulk_read(struct uhso_port *hp)
 	DPRINTF(5, "hp=%p\n", hp);
 
 	usbd_setup_xfer(hp->hp_rxfer, hp->hp_rpipe, hp, hp->hp_rbuf,
-	    hp->hp_rsize, USBD_NO_COPY | USBD_SHORT_XFER_OK,
+	    hp->hp_rsize, USBD_SHORT_XFER_OK,
 	    USBD_NO_TIMEOUT, hp->hp_read_cb);
 
 	status = usbd_transfer(hp->hp_rxfer);

Index: src/sys/dev/usb/uirda.c
diff -u src/sys/dev/usb/uirda.c:1.38.6.2 src/sys/dev/usb/uirda.c:1.38.6.3
--- src/sys/dev/usb/uirda.c:1.38.6.2	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/uirda.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uirda.c,v 1.38.6.2 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: uirda.c,v 1.38.6.3 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uirda.c,v 1.38.6.2 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uirda.c,v 1.38.6.3 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -553,7 +553,7 @@ uirda_write(void *h, struct uio *uio, in
 
 		n += UIRDA_OUTPUT_HEADER_SIZE;
 		err = usbd_bulk_transfer(sc->sc_wr_xfer, sc->sc_wr_pipe,
-			  USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+			  USBD_FORCE_SHORT_XFER,
 			  UIRDA_WR_TIMEOUT,
 			  sc->sc_wr_buf, &n);
 		DPRINTFN(2, ("uirdawrite: err=%d\n", err));
@@ -776,8 +776,8 @@ uirda_set_params(void *h, struct irda_pa
 		sc->sc_wr_buf[0] = hdr;
 		n = UIRDA_OUTPUT_HEADER_SIZE;
 		err = usbd_bulk_transfer(sc->sc_wr_xfer, sc->sc_wr_pipe,
-			  USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
-			  UIRDA_WR_TIMEOUT, sc->sc_wr_buf, &n);
+			  USBD_FORCE_SHORT_XFER, UIRDA_WR_TIMEOUT,
+			  sc->sc_wr_buf, &n);
 		if (err) {
 			aprint_error_dev(sc->sc_dev, "set failed, err=%d\n",
 			    err);
@@ -888,7 +888,7 @@ uirda_start_read(struct uirda_softc *sc)
 
 	usbd_setup_xfer(sc->sc_rd_xfer, sc->sc_rd_pipe, sc, sc->sc_rd_buf,
 			sc->sc_params.maxsize + sc->sc_hdszi,
-			USBD_SHORT_XFER_OK | USBD_NO_COPY,
+			USBD_SHORT_XFER_OK,
 			USBD_NO_TIMEOUT, uirda_rd_cb);
 	err = usbd_transfer(sc->sc_rd_xfer);
 	if (err != USBD_IN_PROGRESS) {
Index: src/sys/dev/usb/usscanner.c
diff -u src/sys/dev/usb/usscanner.c:1.38.6.2 src/sys/dev/usb/usscanner.c:1.38.6.3
--- src/sys/dev/usb/usscanner.c:1.38.6.2	Sun Nov 30 13:14:11 2014
+++ src/sys/dev/usb/usscanner.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usscanner.c,v 1.38.6.2 2014/11/30 13:14:11 skrll Exp $	*/
+/*	$NetBSD: usscanner.c,v 1.38.6.3 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usscanner.c,v 1.38.6.2 2014/11/30 13:14:11 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usscanner.c,v 1.38.6.3 2014/12/02 09:00:34 skrll Exp $");
 
 #include "scsibus.h"
 #include <sys/param.h>
@@ -452,7 +452,7 @@ usscanner_sense(struct usscanner_softc *
 	sc->sc_state = UAS_SENSECMD;
 	memcpy(sc->sc_cmd_buffer, &sense_cmd, sizeof sense_cmd);
 	usbd_setup_xfer(sc->sc_cmd_xfer, sc->sc_out_pipe, sc, sc->sc_cmd_buffer,
-	    sizeof sense_cmd, USBD_NO_COPY, USSCANNER_TIMEOUT,
+	    sizeof sense_cmd, 0, USSCANNER_TIMEOUT,
 	    usscanner_sensecmd_cb);
 	err = usbd_transfer(sc->sc_cmd_xfer);
 	if (err == USBD_IN_PROGRESS)
@@ -579,7 +579,7 @@ usscanner_done(struct usscanner_softc *s
 
 	sc->sc_state = UAS_STATUS;
 	usbd_setup_xfer(sc->sc_intr_xfer, sc->sc_intr_pipe, sc, &sc->sc_status,
-	    1, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    1, USBD_SHORT_XFER_OK,
 	    USSCANNER_TIMEOUT, usscanner_intr_cb);
 	err = usbd_transfer(sc->sc_intr_xfer);
 	if (err == USBD_IN_PROGRESS)
@@ -622,7 +622,7 @@ usscanner_sensecmd_cb(usbd_xfer_handle x
 	sc->sc_state = UAS_SENSEDATA;
 	usbd_setup_xfer(sc->sc_data_xfer, sc->sc_in_pipe, sc,
 	    sc->sc_data_buffer,
-	    sizeof xs->sense, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    sizeof xs->sense, USBD_SHORT_XFER_OK,
 	    USSCANNER_TIMEOUT, usscanner_sensedata_cb);
 	err = usbd_transfer(sc->sc_data_xfer);
 	if (err == USBD_IN_PROGRESS)
@@ -685,7 +685,7 @@ usscanner_cmd_cb(usbd_xfer_handle xfer, 
 	}
 	sc->sc_state = UAS_DATA;
 	usbd_setup_xfer(sc->sc_data_xfer, pipe, sc, sc->sc_data_buffer,
-	    xs->datalen, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+	    xs->datalen, USBD_SHORT_XFER_OK,
 	    xs->timeout, usscanner_data_cb);
 	err = usbd_transfer(sc->sc_data_xfer);
 	if (err == USBD_IN_PROGRESS)
@@ -751,7 +751,7 @@ usscanner_scsipi_request(struct scsipi_c
 		sc->sc_xs = xs;
 		memcpy(sc->sc_cmd_buffer, xs->cmd, xs->cmdlen);
 		usbd_setup_xfer(sc->sc_cmd_xfer, sc->sc_out_pipe, sc,
-		    sc->sc_cmd_buffer, xs->cmdlen, USBD_NO_COPY,
+		    sc->sc_cmd_buffer, xs->cmdlen, 0,
 		    USSCANNER_TIMEOUT, usscanner_cmd_cb);
 		err = usbd_transfer(sc->sc_cmd_xfer);
 		if (err != USBD_IN_PROGRESS) {

Index: src/sys/dev/usb/ulpt.c
diff -u src/sys/dev/usb/ulpt.c:1.95.4.2 src/sys/dev/usb/ulpt.c:1.95.4.3
--- src/sys/dev/usb/ulpt.c:1.95.4.2	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/ulpt.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulpt.c,v 1.95.4.2 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: ulpt.c,v 1.95.4.3 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2003 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulpt.c,v 1.95.4.2 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulpt.c,v 1.95.4.3 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -631,7 +631,7 @@ ulpt_do_write(struct ulpt_softc *sc, str
 		if (error)
 			break;
 		DPRINTFN(4, ("ulptwrite: transfer %d bytes\n", n));
-		err = usbd_bulk_transfer(xfer, sc->sc_out_pipe, USBD_NO_COPY,
+		err = usbd_bulk_transfer(xfer, sc->sc_out_pipe, 0,
 			  USBD_NO_TIMEOUT, bufp, &n);
 		if (err) {
 			DPRINTFN(3, ("ulptwrite: error=%d\n", err));
@@ -721,8 +721,7 @@ ulpt_do_read(struct ulpt_softc *sc, stru
 		DPRINTFN(4, ("ulptread: transfer %d bytes, nonblocking=%d timeout=%d\n",
 			     n, nonblocking, timeout));
 		err = usbd_bulk_transfer(xfer, sc->sc_in_pipe,
-			  USBD_NO_COPY | USBD_SHORT_XFER_OK,
-			  timeout, bufp, &n);
+			  USBD_SHORT_XFER_OK, timeout, bufp, &n);
 
 		DPRINTFN(4, ("ulptread: transfer complete nreq %d n %d nread %d err %d\n",
 			     nreq, n, nread, err));
@@ -885,7 +884,7 @@ ulpt_tick(void *xsc)
 		return;
 
 	usbd_setup_xfer(sc->sc_in_xfer, sc->sc_in_pipe, sc, sc->sc_in_buf,
-			ULPT_BSIZE, USBD_NO_COPY | USBD_SHORT_XFER_OK,
+			ULPT_BSIZE, USBD_SHORT_XFER_OK,
 			ULPT_READ_TIMO, ulpt_read_cb);
 	err = usbd_transfer(sc->sc_in_xfer);
 	DPRINTFN(3, ("ulpt_tick: sc=%p err=%d\n", sc, err));

Index: src/sys/dev/usb/umass.c
diff -u src/sys/dev/usb/umass.c:1.149.2.1 src/sys/dev/usb/umass.c:1.149.2.2
--- src/sys/dev/usb/umass.c:1.149.2.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/umass.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: umass.c,v 1.149.2.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: umass.c,v 1.149.2.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -124,7 +124,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.149.2.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.149.2.2 2014/12/02 09:00:34 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -1117,7 +1117,7 @@ umass_bbb_state(usbd_xfer_handle xfer, u
 		if (sc->transfer_dir == DIR_IN) {
 			if (umass_setup_transfer(sc, sc->sc_pipe[UMASS_BULKIN],
 					sc->data_buffer, sc->transfer_datalen,
-					USBD_SHORT_XFER_OK | USBD_NO_COPY,
+					USBD_SHORT_XFER_OK,
 					sc->transfer_xfer[XFER_BBB_DATA]))
 				umass_bbb_reset(sc, STATUS_WIRE_FAILED);
 
@@ -1127,7 +1127,7 @@ umass_bbb_state(usbd_xfer_handle xfer, u
 			       sc->transfer_datalen);
 			if (umass_setup_transfer(sc, sc->sc_pipe[UMASS_BULKOUT],
 					sc->data_buffer, sc->transfer_datalen,
-					USBD_NO_COPY,/* fixed length transfer */
+					0,/* fixed length transfer */
 					sc->transfer_xfer[XFER_BBB_DATA]))
 				umass_bbb_reset(sc, STATUS_WIRE_FAILED);
 
@@ -1576,7 +1576,7 @@ umass_cbi_state(usbd_xfer_handle xfer, u
 		if (sc->transfer_dir == DIR_IN) {
 			if (umass_setup_transfer(sc, sc->sc_pipe[UMASS_BULKIN],
 					sc->data_buffer, sc->transfer_datalen,
-					USBD_SHORT_XFER_OK | USBD_NO_COPY,
+					USBD_SHORT_XFER_OK,
 					sc->transfer_xfer[XFER_CBI_DATA]))
 				umass_cbi_reset(sc, STATUS_WIRE_FAILED);
 
@@ -1586,7 +1586,7 @@ umass_cbi_state(usbd_xfer_handle xfer, u
 			       sc->transfer_datalen);
 			if (umass_setup_transfer(sc, sc->sc_pipe[UMASS_BULKOUT],
 					sc->data_buffer, sc->transfer_datalen,
-					USBD_NO_COPY,/* fixed length transfer */
+					0,/* fixed length transfer */
 					sc->transfer_xfer[XFER_CBI_DATA]))
 				umass_cbi_reset(sc, STATUS_WIRE_FAILED);
 

Index: src/sys/dev/usb/umidi.c
diff -u src/sys/dev/usb/umidi.c:1.65.14.2 src/sys/dev/usb/umidi.c:1.65.14.3
--- src/sys/dev/usb/umidi.c:1.65.14.2	Sun Nov 30 13:14:11 2014
+++ src/sys/dev/usb/umidi.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: umidi.c,v 1.65.14.2 2014/11/30 13:14:11 skrll Exp $	*/
+/*	$NetBSD: umidi.c,v 1.65.14.3 2014/12/02 09:00:34 skrll Exp $	*/
 /*
  * Copyright (c) 2001, 2012 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umidi.c,v 1.65.14.2 2014/11/30 13:14:11 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umidi.c,v 1.65.14.3 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -1431,7 +1431,7 @@ start_input_transfer(struct umidi_endpoi
 	usbd_setup_xfer(ep->xfer, ep->pipe,
 			(usbd_private_handle)ep,
 			ep->buffer, ep->buffer_size,
-			USBD_SHORT_XFER_OK | USBD_NO_COPY,
+			USBD_SHORT_XFER_OK,
 			USBD_NO_TIMEOUT, in_intr);
 	return usbd_transfer(ep->xfer);
 }
@@ -1449,7 +1449,7 @@ start_output_transfer(struct umidi_endpo
 	usbd_setup_xfer(ep->xfer, ep->pipe,
 			(usbd_private_handle)ep,
 			ep->buffer, length,
-			USBD_NO_COPY, USBD_NO_TIMEOUT, out_intr);
+			0, USBD_NO_TIMEOUT, out_intr);
 	rv = usbd_transfer(ep->xfer);
 
 	/*

Index: src/sys/dev/usb/urio.c
diff -u src/sys/dev/usb/urio.c:1.42.4.2 src/sys/dev/usb/urio.c:1.42.4.3
--- src/sys/dev/usb/urio.c:1.42.4.2	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/urio.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: urio.c,v 1.42.4.2 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: urio.c,v 1.42.4.3 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: urio.c,v 1.42.4.2 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: urio.c,v 1.42.4.3 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -358,7 +358,7 @@ urioread(dev_t dev, struct uio *uio, int
 	while ((n = min(URIO_BSIZE, uio->uio_resid)) != 0) {
 		DPRINTFN(1, ("urioread: start transfer %d bytes\n", n));
 		tn = n;
-		err = usbd_bulk_transfer(xfer, sc->sc_in_pipe, USBD_NO_COPY,
+		err = usbd_bulk_transfer(xfer, sc->sc_in_pipe, 0,
 			  URIO_RW_TIMEOUT, bufp, &tn);
 		if (err) {
 			if (err == USBD_INTERRUPTED)
@@ -420,7 +420,7 @@ uriowrite(dev_t dev, struct uio *uio, in
 
 		DPRINTFN(1, ("uriowrite: transfer %d bytes\n", n));
 
-		err = usbd_bulk_transfer(xfer, sc->sc_out_pipe, USBD_NO_COPY,
+		err = usbd_bulk_transfer(xfer, sc->sc_out_pipe, 0,
 			  URIO_RW_TIMEOUT, bufp, &n);
 		DPRINTFN(2, ("uriowrite: err=%d\n", err));
 		if (err) {

Index: src/sys/dev/usb/usb_mem.c
diff -u src/sys/dev/usb/usb_mem.c:1.65.2.1 src/sys/dev/usb/usb_mem.c:1.65.2.2
--- src/sys/dev/usb/usb_mem.c:1.65.2.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/usb_mem.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_mem.c,v 1.65.2.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: usb_mem.c,v 1.65.2.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_mem.c,v 1.65.2.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_mem.c,v 1.65.2.2 2014/12/02 09:00:34 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -124,20 +124,8 @@ usb_block_allocmem(bus_dma_tag_t tag, si
 
 	DPRINTFN(5, ("usb_block_allocmem: size=%zu align=%zu\n", size, align));
 
-	if (size == 0) {
-#ifdef DIAGNOSTIC
-		printf("usb_block_allocmem: called with size==0\n");
-#endif
-		return USBD_INVAL;
-	}
-
-#ifdef DIAGNOSTIC
-	if (cpu_softintr_p() || cpu_intr_p()) {
-		printf("usb_block_allocmem: in interrupt context, size=%lu\n",
-		    (unsigned long) size);
-	}
-#endif
-
+	ASSERT_SLEEPABLE();
+	KASSERT(size != 0);
 	KASSERT(mutex_owned(&usb_blk_lock));
 
 	/* First check the free list. */
@@ -155,13 +143,6 @@ usb_block_allocmem(bus_dma_tag_t tag, si
 		}
 	}
 
-#ifdef DIAGNOSTIC
-	if (cpu_softintr_p() || cpu_intr_p()) {
-		printf("usb_block_allocmem: in interrupt context, failed\n");
-		return (USBD_NOMEM);
-	}
-#endif
-
 	DPRINTFN(6, ("usb_block_allocmem: no free\n"));
 	b = kmem_zalloc(sizeof *b, KM_SLEEP);
 	if (b == NULL)
@@ -293,6 +274,8 @@ usb_allocmem_flags(usbd_bus_handle bus, 
 	static ONCE_DECL(init_control);
 	bool frag;
 
+	ASSERT_SLEEPABLE();
+
 	RUN_ONCE(&init_control, usb_mem_init);
 
 	frag = (flags & USBMALLOC_MULTISEG);
@@ -351,7 +334,6 @@ usb_allocmem_flags(usbd_bus_handle bus, 
 #ifdef USB_FRAG_DMA_WORKAROUND
 	p->offs += USB_MEM_SMALL;
 #endif
-	p->block->flags &= ~USB_DMA_RESERVE;
 	LIST_REMOVE(f, next);
 	mutex_exit(&usb_blk_lock);
 	DPRINTFN(5, ("usb_allocmem: use frag=%p size=%d\n", f, (int)size));
@@ -430,123 +412,3 @@ usb_syncmem(usb_dma_t *p, bus_addr_t off
 	bus_dmamap_sync(p->block->tag, p->block->map, p->offs + offset,
 	    len, ops);
 }
-
-
-usbd_status
-usb_reserve_allocm(struct usb_dma_reserve *rs, usb_dma_t *dma, uint32_t size)
-{
-	int error;
-	u_long start;
-	bus_addr_t baddr;
-
-	if (rs->vaddr == 0 || size > USB_MEM_RESERVE)
-		return USBD_NOMEM;
-
-	dma->block = kmem_zalloc(sizeof *dma->block, KM_SLEEP);
-	if (dma->block == NULL) {
-		aprint_error_dev(rs->dv, "%s: failed allocating dma block",
-		    __func__);
-		goto out0;
-	}
-
-	dma->block->nsegs = 1;
-	dma->block->segs = kmem_alloc(dma->block->nsegs *
-	    sizeof(*dma->block->segs), KM_SLEEP);
-	if (dma->block->segs == NULL) {
-		aprint_error_dev(rs->dv, "%s: failed allocating 1 dma segment",
-		    __func__);
-		goto out1;
-	}
-
-	error = extent_alloc(rs->extent, size, PAGE_SIZE, 0,
-	    EX_NOWAIT, &start);
-
-	if (error != 0) {
-		aprint_error_dev(rs->dv, "%s: extent_alloc size %u failed "
-		    "(error %d)", __func__, size, error);
-		goto out2;
-	}
-
-	baddr = start;
-	dma->offs = baddr - rs->paddr;
-	dma->block->flags = USB_DMA_RESERVE;
-	dma->block->align = PAGE_SIZE;
-	dma->block->size = size;
-	dma->block->segs[0] = rs->map->dm_segs[0];
-	dma->block->map = rs->map;
-	dma->block->kaddr = rs->vaddr;
-	dma->block->tag = rs->dtag;
-
-	return USBD_NORMAL_COMPLETION;
-out2:
-	kmem_free(dma->block->segs, dma->block->nsegs *
-	    sizeof(*dma->block->segs));
-out1:
-	kmem_free(dma->block, sizeof *dma->block);
-out0:
-	return USBD_NOMEM;
-}
-
-void
-usb_reserve_freem(struct usb_dma_reserve *rs, usb_dma_t *dma)
-{
-
-	extent_free(rs->extent,
-	    (u_long)(rs->paddr + dma->offs), dma->block->size, 0);
-	kmem_free(dma->block->segs, dma->block->nsegs *
-	    sizeof(*dma->block->segs));
-	kmem_free(dma->block, sizeof *dma->block);
-}
-
-int
-usb_setup_reserve(device_t dv, struct usb_dma_reserve *rs, bus_dma_tag_t dtag,
-		  size_t size)
-{
-	int error, nseg;
-	bus_dma_segment_t seg;
-
-	rs->dtag = dtag;
-	rs->size = size;
-	rs->dv = dv;
-
-	error = bus_dmamem_alloc(dtag, USB_MEM_RESERVE, PAGE_SIZE, 0,
-	    &seg, 1, &nseg, BUS_DMA_NOWAIT);
-	if (error != 0)
-		return error;
-
-	error = bus_dmamem_map(dtag, &seg, nseg, USB_MEM_RESERVE,
-	    &rs->vaddr, BUS_DMA_NOWAIT|BUS_DMA_COHERENT);
-	if (error != 0)
-		goto freeit;
-
-	error = bus_dmamap_create(dtag, USB_MEM_RESERVE, 1,
-	    USB_MEM_RESERVE, 0, BUS_DMA_NOWAIT, &rs->map);
-	if (error != 0)
-		goto unmap;
-
-	error = bus_dmamap_load(dtag, rs->map, rs->vaddr, USB_MEM_RESERVE,
-	    NULL, BUS_DMA_NOWAIT);
-	if (error != 0)
-		goto destroy;
-
-	rs->paddr = rs->map->dm_segs[0].ds_addr;
-	rs->extent = extent_create(device_xname(dv), (u_long)rs->paddr,
-	    (u_long)(rs->paddr + USB_MEM_RESERVE - 1), 0, 0, 0);
-	if (rs->extent == NULL) {
-		rs->vaddr = 0;
-		return ENOMEM;
-	}
-
-	return 0;
-
- destroy:
-	bus_dmamap_destroy(dtag, rs->map);
- unmap:
-	bus_dmamem_unmap(dtag, rs->vaddr, size);
- freeit:
-	bus_dmamem_free(dtag, &seg, nseg);
-
-	rs->vaddr = 0;
-
-	return error;
-}

Index: src/sys/dev/usb/usb_mem.h
diff -u src/sys/dev/usb/usb_mem.h:1.30.14.2 src/sys/dev/usb/usb_mem.h:1.30.14.3
--- src/sys/dev/usb/usb_mem.h:1.30.14.2	Sun Nov 30 13:14:11 2014
+++ src/sys/dev/usb/usb_mem.h	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_mem.h,v 1.30.14.2 2014/11/30 13:14:11 skrll Exp $	*/
+/*	$NetBSD: usb_mem.h,v 1.30.14.3 2014/12/02 09:00:34 skrll Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usb_mem.h,v 1.9 1999/11/17 22:33:47 n_hibma Exp $	*/
 
 /*
@@ -42,7 +42,6 @@ typedef struct usb_dma_block {
 	size_t align;
 	int flags;
 #define USB_DMA_FULLBLOCK	0x0001
-#define USB_DMA_RESERVE		0x0002
 	LIST_ENTRY(usb_dma_block) next;
 } usb_dma_block_t;
 
@@ -59,28 +58,3 @@ bus_addr_t	usb_dmaaddr(usb_dma_t *, unsi
 #define DMAADDR(dma, o) usb_dmaaddr((dma), (o))
 #define KERNADDR(dma, o) \
 	((void *)((char *)(dma)->block->kaddr + (dma)->offs + (o)))
-
-struct extent;
-
-struct usb_dma_reserve {
-	bus_dma_tag_t dtag;
-	bus_dmamap_t map;
-	void *vaddr;
-	bus_addr_t paddr;
-	size_t size;
-	struct extent *extent;
-	device_t dv;
-};
-
-#if defined(_KERNEL_OPT)
-#include "opt_usb_mem_reserve.h"
-#endif
-
-#ifndef USB_MEM_RESERVE
-#define USB_MEM_RESERVE (256 * 1024)
-#endif
-
-usbd_status usb_reserve_allocm(struct usb_dma_reserve *, usb_dma_t *,
-				uint32_t);
-int usb_setup_reserve(device_t, struct usb_dma_reserve *, bus_dma_tag_t, size_t);
-void usb_reserve_freem(struct usb_dma_reserve *, usb_dma_t *);

Index: src/sys/dev/usb/usbdi.c
diff -u src/sys/dev/usb/usbdi.c:1.162.2.4 src/sys/dev/usb/usbdi.c:1.162.2.5
--- src/sys/dev/usb/usbdi.c:1.162.2.4	Mon Dec  1 12:38:39 2014
+++ src/sys/dev/usb/usbdi.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi.c,v 1.162.2.4 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: usbdi.c,v 1.162.2.5 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc.
@@ -31,18 +31,21 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.162.2.4 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.162.2.5 2014/12/02 09:00:34 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
 #include "opt_compat_netbsd.h"
 #endif
 
+#include "usb_dma.h"
+
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
 #include <sys/device.h>
 #include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/proc.h>
 #include <sys/bus.h>
 #include <sys/cpu.h>
@@ -275,7 +278,6 @@ usbd_status
 usbd_transfer(usbd_xfer_handle xfer)
 {
 	usbd_pipe_handle pipe = xfer->pipe;
-	usb_dma_t *dmap = &xfer->dmabuf;
 	usbd_status err;
 	unsigned int size, flags;
 
@@ -297,29 +299,44 @@ usbd_transfer(usbd_xfer_handle xfer)
 		return (USBD_CANCELLED);
 	}
 
+	struct usbd_bus *bus = pipe->device->bus;
+
 	size = xfer->length;
-	/* If there is no buffer, allocate one. */
-	if (!(xfer->rqflags & URQ_DEV_DMABUF) && size != 0) {
-		struct usbd_bus *bus = pipe->device->bus;
+	flags = xfer->flags;
+
+	/*
+	 * isoc transfers are always size == 0, whereas other transfers can
+	 * require a URQ_AUTO_BUFFER buffer.
+	 *
+	 * URQ_AUTO_BUFFER will be removed at some point, i.e. the transfer
+	 * should provide the buffer.
+	 */
+	if (size != 0) {
+		if (xfer->buf == NULL) {
+			xfer->buf = usbd_alloc_buffer(xfer, size);
+			if (xfer->buf == NULL)
+				return USBD_NOMEM;
 
 #ifdef DIAGNOSTIC
-		if (xfer->rqflags & URQ_AUTO_DMABUF)
-			printf("usbd_transfer: has old buffer!\n");
+			if (xfer->rqflags & URQ_AUTO_BUFFER)
+				printf("usbd_transfer: has old buffer!\n");
 #endif
-		err = bus->methods->ubm_allocm(bus, dmap, size);
-		if (err) {
-			USBHIST_LOG(usbdebug,
-			    "<- done xfer %p, no mem", xfer, 0, 0, 0);
-			return (err);
+			xfer->rqflags |= URQ_AUTO_BUFFER;
 		}
-		xfer->rqflags |= URQ_AUTO_DMABUF;
 	}
-
-	flags = xfer->flags;
-
-	/* Copy data if going out. */
-	if (!(flags & USBD_NO_COPY) && size != 0 && !usbd_xfer_isread(xfer))
-		memcpy(KERNADDR(dmap, 0), xfer->buffer, size);
+	if (bus->usedma) {
+		/*
+		 * Copy data if not using the xfer buffer.  isoc transfers
+		 * always use DMA buffer, i.e. buffer == NULL
+		 */
+		if (xfer->buffer == NULL) {
+			xfer->buffer = xfer->buf;
+		} else if (xfer->buffer != xfer->buf) {
+			memcpy(xfer->buf, xfer->buffer, size);
+		}
+	} else {
+		xfer->buffer = xfer->buf;
+	}
 
 	/* xfer is not valid after the transfer method unless synchronous */
 	err = pipe->methods->upm_transfer(xfer);
@@ -327,11 +344,9 @@ usbd_transfer(usbd_xfer_handle xfer)
 
 	if (err != USBD_IN_PROGRESS && err) {
 		/* The transfer has not been queued, so free buffer. */
-		if (xfer->rqflags & URQ_AUTO_DMABUF) {
-			struct usbd_bus *bus = pipe->device->bus;
-
-			bus->methods->ubm_freem(bus, &xfer->dmabuf);
-			xfer->rqflags &= ~URQ_AUTO_DMABUF;
+		if (xfer->rqflags & URQ_AUTO_BUFFER) {
+			usbd_free_buffer(xfer);
+			xfer->rqflags &= ~URQ_AUTO_BUFFER;
 		}
 	}
 
@@ -388,39 +403,71 @@ usbd_sync_transfer_sig(usbd_xfer_handle 
 void *
 usbd_alloc_buffer(usbd_xfer_handle xfer, uint32_t size)
 {
+
+	KASSERT(xfer->buf == NULL);
+	KASSERT(size != 0);
+	KASSERT(!(xfer->rqflags & URQ_AUTO_BUFFER));
+
+	xfer->bufsize = 0;
+#if NUSB_DMA > 0
 	struct usbd_bus *bus = xfer->device->bus;
-	usbd_status err;
 
-#ifdef DIAGNOSTIC
-	if (xfer->rqflags & (URQ_DEV_DMABUF | URQ_AUTO_DMABUF))
-		printf("usbd_alloc_buffer: xfer already has a buffer\n");
+	if (bus->usedma) {
+		usb_dma_t *dmap = &xfer->dmabuf;
+
+		int err = usb_allocmem_flags(bus, size, 0, dmap, bus->dmaflags);
+		if (err) {
+			return NULL;
+		}
+		xfer->buf = KERNADDR(&xfer->dmabuf, 0);
+		xfer->bufsize = size;
+
+		return xfer->buf;
+	}
 #endif
-	err = bus->methods->ubm_allocm(bus, &xfer->dmabuf, size);
-	if (err)
-		return (NULL);
-	xfer->rqflags |= URQ_DEV_DMABUF;
-	return (KERNADDR(&xfer->dmabuf, 0));
+	KASSERT(xfer->device->bus->usedma == false);
+	xfer->buf = kmem_alloc(size, KM_SLEEP);
+
+	if (xfer->buf != NULL) {
+		xfer->bufsize = size;
+	}
+
+	return xfer->buf;
 }
 
 void
 usbd_free_buffer(usbd_xfer_handle xfer)
 {
-#ifdef DIAGNOSTIC
-	if (!(xfer->rqflags & (URQ_DEV_DMABUF | URQ_AUTO_DMABUF))) {
-		printf("usbd_free_buffer: no buffer\n");
+	KASSERT(xfer->buf != NULL);
+	KASSERT(xfer->bufsize != 0);
+
+	void *buf = xfer->buf;
+	uint32_t size = xfer->bufsize;
+
+	xfer->rqflags &= ~URQ_AUTO_BUFFER;
+	xfer->buf = NULL;
+	xfer->bufsize = 0;
+
+#if NUSB_DMA > 0
+	struct usbd_bus *bus = xfer->device->bus;
+
+	if (bus->usedma) {
+		usb_dma_t *dmap = &xfer->dmabuf;
+
+		usb_freemem(bus, dmap);
 		return;
 	}
 #endif
-	xfer->rqflags &= ~(URQ_DEV_DMABUF | URQ_AUTO_DMABUF);
-	xfer->device->bus->methods->ubm_freem(xfer->device->bus, &xfer->dmabuf);
+	KASSERT(xfer->device->bus->usedma == false);
+
+	kmem_free(buf, size);
 }
 
 void *
 usbd_get_buffer(usbd_xfer_handle xfer)
 {
-	if (!(xfer->rqflags & URQ_DEV_DMABUF))
-		return (NULL);
-	return (KERNADDR(&xfer->dmabuf, 0));
+
+	return xfer->buf;
 }
 
 usbd_xfer_handle
@@ -451,8 +498,9 @@ usbd_free_xfer(usbd_xfer_handle xfer)
 	USBHIST_FUNC(); USBHIST_CALLED(usbdebug);
 
 	USBHIST_LOG(usbdebug, "%p", xfer, 0, 0, 0);
-	if (xfer->rqflags & (URQ_DEV_DMABUF | URQ_AUTO_DMABUF))
+	if (xfer->buf) {
 		usbd_free_buffer(xfer);
+	}
 #if defined(DIAGNOSTIC)
 	if (callout_pending(&xfer->timeout_handle)) {
 		callout_stop(&xfer->timeout_handle);
@@ -817,11 +865,11 @@ void
 usb_transfer_complete(usbd_xfer_handle xfer)
 {
 	usbd_pipe_handle pipe = xfer->pipe;
-	usb_dma_t *dmap = &xfer->dmabuf;
+ 	struct usbd_bus *bus = pipe->device->bus;
 	int sync = xfer->flags & USBD_SYNCHRONOUS;
 	int erred = xfer->status == USBD_CANCELLED ||
 	    xfer->status == USBD_TIMEOUT;
-	int polling = pipe->device->bus->use_polling;
+	int polling = bus->use_polling;
 	int repeat;
 
 	USBHIST_FUNC(); USBHIST_CALLED(usbdebug);
@@ -849,24 +897,21 @@ usb_transfer_complete(usbd_xfer_handle x
 	if (polling)
 		pipe->running = 0;
 
-	if (!(xfer->flags & USBD_NO_COPY) && xfer->actlen != 0 &&
-	    usbd_xfer_isread(xfer)) {
-#ifdef DIAGNOSTIC
-		if (xfer->actlen > xfer->length) {
-			printf("%s: actlen (%d) > len (%d)\n", __func__,
-			       xfer->actlen, xfer->length);
-			xfer->actlen = xfer->length;
-		}
-#endif
-		memcpy(xfer->buffer, KERNADDR(dmap, 0), xfer->actlen);
+	if (xfer->buffer != xfer->buf) {
+		/* can only be different for DMA busses */
+		KASSERT(bus->usedma);
+		KDASSERTMSG(xfer->actlen <= xfer->length,
+		    "actlen %d length %d",xfer->actlen, xfer->length);
+
+		memcpy(xfer->buffer, xfer->buf, xfer->actlen);
 	}
 
+	/* XXX remove at some point */
 	/* if we allocated the buffer in usbd_transfer() we free it here. */
-	if (xfer->rqflags & URQ_AUTO_DMABUF) {
+	if (xfer->rqflags & URQ_AUTO_BUFFER) {
 		if (!repeat) {
-			struct usbd_bus *bus = pipe->device->bus;
-			bus->methods->ubm_freem(bus, dmap);
-			xfer->rqflags &= ~URQ_AUTO_DMABUF;
+			usbd_free_buffer(xfer);
+			xfer->rqflags &= ~URQ_AUTO_BUFFER;
 		}
 	}
 

Index: src/sys/dev/usb/usbdi.h
diff -u src/sys/dev/usb/usbdi.h:1.90.4.1 src/sys/dev/usb/usbdi.h:1.90.4.2
--- src/sys/dev/usb/usbdi.h:1.90.4.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/usbdi.h	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi.h,v 1.90.4.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: usbdi.h,v 1.90.4.2 2014/12/02 09:00:34 skrll Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usbdi.h,v 1.18 1999/11/17 22:33:49 n_hibma Exp $	*/
 
 /*
@@ -77,7 +77,6 @@ typedef void (*usbd_callback)(usbd_xfer_
 #define USBD_DEFAULT_INTERVAL	(-1)
 
 /* Request flags */
-#define USBD_NO_COPY		0x01	/* do not copy data to DMA buffer */
 #define USBD_SYNCHRONOUS	0x02	/* wait for completion */
 /* in usb.h #define USBD_SHORT_XFER_OK	0x04*/	/* allow short reads */
 #define USBD_FORCE_SHORT_XFER	0x08	/* force last short packet on write */

Index: src/sys/dev/usb/usbdivar.h
diff -u src/sys/dev/usb/usbdivar.h:1.109.2.3 src/sys/dev/usb/usbdivar.h:1.109.2.4
--- src/sys/dev/usb/usbdivar.h:1.109.2.3	Mon Dec  1 12:38:39 2014
+++ src/sys/dev/usb/usbdivar.h	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdivar.h,v 1.109.2.3 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: usbdivar.h,v 1.109.2.4 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc.
@@ -43,8 +43,6 @@
  *	open_pipe		-	might want to take lock?
  *	soft_intr		x
  *	do_poll			-	might want to take lock?
- *	allocm			-
- *	freem			-
  *	allocx			-
  *	freex			-
  *	get_lock 		-	Called at attach time
@@ -95,9 +93,6 @@ struct usbd_bus_methods {
 	usbd_status	      (*ubm_open)(struct usbd_pipe *pipe);
 	void		      (*ubm_softint)(void *);
 	void		      (*ubm_dopoll)(struct usbd_bus *);
-	usbd_status	      (*ubm_allocm)(struct usbd_bus *, usb_dma_t *,
-					uint32_t);
-	void		      (*ubm_freem)(struct usbd_bus *, usb_dma_t *);
 	struct usbd_xfer *    (*ubm_allocx)(struct usbd_bus *);
 	void		      (*ubm_freex)(struct usbd_bus *, struct usbd_xfer *);
 	void		      (*ubm_getlock)(struct usbd_bus *, kmutex_t **);
@@ -167,6 +162,9 @@ struct usbd_bus {
 #define USBREV_STR { "unknown", "pre 1.0", "1.0", "1.1", "2.0", "3.0" }
 
 	void		       *soft; /* soft interrupt cookie */
+
+	bool			usedma;		/* Does this HC support DMA */
+	int			dmaflags;
 	bus_dma_tag_t		dmatag;	/* DMA tag */
 };
 
@@ -255,11 +253,12 @@ struct usbd_xfer {
 	/* For memory allocation */
 	struct usbd_device     *device;
 	usb_dma_t		dmabuf;
+	void		       *buf;
+	uint32_t		bufsize;
 
 	uint8_t			rqflags;
 #define URQ_REQUEST	0x01
-#define URQ_AUTO_DMABUF	0x10
-#define URQ_DEV_DMABUF	0x20
+#define URQ_AUTO_BUFFER	0x10
 
 	SIMPLEQ_ENTRY(usbd_xfer) next;
 

Index: src/sys/dev/usb/ustir.c
diff -u src/sys/dev/usb/ustir.c:1.33.10.2 src/sys/dev/usb/ustir.c:1.33.10.3
--- src/sys/dev/usb/ustir.c:1.33.10.2	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/ustir.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ustir.c,v 1.33.10.2 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: ustir.c,v 1.33.10.3 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ustir.c,v 1.33.10.2 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ustir.c,v 1.33.10.3 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -650,7 +650,7 @@ ustir_start_read(struct ustir_softc *sc)
 
 	usbd_setup_xfer(sc->sc_rd_xfer, sc->sc_rd_pipe, sc, sc->sc_rd_buf,
 			sc->sc_params.maxsize,
-			USBD_SHORT_XFER_OK | USBD_NO_COPY,
+			USBD_SHORT_XFER_OK,
 			USBD_NO_TIMEOUT, ustir_rd_cb);
 	err = usbd_transfer(sc->sc_rd_xfer);
 	if (err != USBD_IN_PROGRESS) {
@@ -984,7 +984,7 @@ ustir_write(void *h, struct uio *uio, in
 #endif
 
 		err = usbd_bulk_transfer(sc->sc_wr_xfer, sc->sc_wr_pipe,
-					 USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+					 USBD_FORCE_SHORT_XFER,
 					 USTIR_WR_TIMEOUT,
 					 wrbuf, &btlen);
 		DPRINTFN(2, ("%s: err=%d\n", __func__, err));

Index: src/sys/dev/usb/utoppy.c
diff -u src/sys/dev/usb/utoppy.c:1.24.4.1 src/sys/dev/usb/utoppy.c:1.24.4.2
--- src/sys/dev/usb/utoppy.c:1.24.4.1	Sun Nov 30 12:18:58 2014
+++ src/sys/dev/usb/utoppy.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: utoppy.c,v 1.24.4.1 2014/11/30 12:18:58 skrll Exp $	*/
+/*	$NetBSD: utoppy.c,v 1.24.4.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: utoppy.c,v 1.24.4.1 2014/11/30 12:18:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: utoppy.c,v 1.24.4.2 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -614,7 +614,7 @@ utoppy_send_packet(struct utoppy_softc *
 		memcpy(sc->sc_out_buf, data, thislen);
 
 		err = utoppy_bulk_transfer(sc->sc_out_xfer, sc->sc_out_pipe,
-		    USBD_NO_COPY, timeout, sc->sc_out_buf, &thislen,
+		    0, timeout, sc->sc_out_buf, &thislen,
 		    "utoppytx");
 
 		if (thislen != min(len, UTOPPY_FRAG_SIZE)) {
@@ -655,7 +655,7 @@ utoppy_recv_packet(struct utoppy_softc *
 		requested = thislen = min(bytesleft, UTOPPY_FRAG_SIZE);
 
 		err = utoppy_bulk_transfer(sc->sc_in_xfer, sc->sc_in_pipe,
-		    USBD_NO_COPY | USBD_SHORT_XFER_OK, timeout, sc->sc_in_buf,
+		    USBD_SHORT_XFER_OK, timeout, sc->sc_in_buf,
 		    &thislen, "utoppyrx");
 
 		DPRINTF(UTOPPY_DBG_RECV_PACKET, ("%s: utoppy_recv_packet: "

Index: src/sys/dev/usb/uvideo.c
diff -u src/sys/dev/usb/uvideo.c:1.41.2.1 src/sys/dev/usb/uvideo.c:1.41.2.2
--- src/sys/dev/usb/uvideo.c:1.41.2.1	Mon Dec  1 13:03:05 2014
+++ src/sys/dev/usb/uvideo.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvideo.c,v 1.41.2.1 2014/12/01 13:03:05 skrll Exp $	*/
+/*	$NetBSD: uvideo.c,v 1.41.2.2 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2008 Patrick Mahoney
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvideo.c,v 1.41.2.1 2014/12/01 13:03:05 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvideo.c,v 1.41.2.2 2014/12/02 09:00:34 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -1745,7 +1745,7 @@ uvideo_stream_recv_isoc_start1(struct uv
 			     isoc,
 			     isoc->i_frlengths,
 			     ix->ix_nframes,
-			     USBD_NO_COPY | USBD_SHORT_XFER_OK,
+			     USBD_SHORT_XFER_OK,
 			     uvideo_stream_recv_isoc_complete);
 
 	err = usbd_transfer(isoc->i_xfer);
@@ -1853,7 +1853,7 @@ uvideo_stream_recv_bulk_transfer(void *a
 	while (bx->bx_running) {
 		len = bx->bx_buflen;
 		err = usbd_bulk_transfer(bx->bx_xfer, bx->bx_pipe,
-		    USBD_SHORT_XFER_OK | USBD_NO_COPY,
+		    USBD_SHORT_XFER_OK,
 		    USBD_NO_TIMEOUT,
 		    bx->bx_buffer, &len);
 

Index: src/sys/dev/usb/xhci.c
diff -u src/sys/dev/usb/xhci.c:1.28.2.3 src/sys/dev/usb/xhci.c:1.28.2.4
--- src/sys/dev/usb/xhci.c:1.28.2.3	Mon Dec  1 12:38:39 2014
+++ src/sys/dev/usb/xhci.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: xhci.c,v 1.28.2.3 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: xhci.c,v 1.28.2.4 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2013 Jonathan A. Kollasch
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.28.2.3 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.28.2.4 2014/12/02 09:00:34 skrll Exp $");
 
 #include "opt_usb.h"
 
@@ -119,8 +119,6 @@ static usbd_status xhci_open(usbd_pipe_h
 static int xhci_intr1(struct xhci_softc * const);
 static void xhci_softintr(void *);
 static void xhci_poll(struct usbd_bus *);
-static usbd_status xhci_allocm(struct usbd_bus *, usb_dma_t *, uint32_t);
-static void xhci_freem(struct usbd_bus *, usb_dma_t *);
 static usbd_xfer_handle xhci_allocx(struct usbd_bus *);
 static void xhci_freex(struct usbd_bus *, usbd_xfer_handle);
 static void xhci_get_lock(struct usbd_bus *, kmutex_t **);
@@ -187,8 +185,6 @@ static const struct usbd_bus_methods xhc
 	.ubm_open = xhci_open,
 	.ubm_softint = xhci_softintr,
 	.ubm_dopoll = xhci_poll,
-	.ubm_allocm = xhci_allocm,
-	.ubm_freem = xhci_freem,
 	.ubm_allocx = xhci_allocx,
 	.ubm_freex = xhci_freex,
 	.ubm_getlock = xhci_get_lock,
@@ -617,6 +613,7 @@ xhci_init(struct xhci_softc *sc)
 
 	/* XXX Low/Full/High speeds for now */
 	sc->sc_bus.usbrev = USBREV_2_0;
+	sc->sc_bus.usedma = true;
 
 	cap = xhci_read_4(sc, XHCI_CAPLENGTH);
 	caplength = XHCI_CAP_CAPLENGTH(cap);
@@ -1201,7 +1198,7 @@ xhci_rhpsc(struct xhci_softc * const sc,
 	port += 1;
 	DPRINTFN(4, "hs port %u status change", port, 0, 0, 0);
 
-	p = KERNADDR(&xfer->dmabuf, 0);
+	p = xfer->buf;
 	memset(p, 0, xfer->length);
 	p[port/NBBY] |= 1 << (port%NBBY);
 	xfer->actlen = xfer->length;
@@ -1375,43 +1372,6 @@ xhci_poll(struct usbd_bus *bus)
 	return;
 }
 
-static usbd_status
-xhci_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct xhci_softc * const sc = bus->hci_private;
-	usbd_status err;
-
-	XHCIHIST_FUNC(); XHCIHIST_CALLED();
-
-	err = usb_allocmem(&sc->sc_bus, size, 0, dma);
-#if 0
-	if (err == USBD_NOMEM)
-		err = usb_reserve_allocm(&sc->sc_dma_reserve, dma, size);
-#endif
-#ifdef XHCI_DEBUG
-	if (err)
-		DPRINTFN(1, "usb_allocmem(%u)=%d", err, size, 0, 0);
-#endif
-
-	return err;
-}
-
-static void
-xhci_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	struct xhci_softc * const sc = bus->hci_private;
-
-	XHCIHIST_FUNC(); XHCIHIST_CALLED();
-
-#if 0
-	if (dma->block->flags & USB_DMA_RESERVE) {
-		usb_reserve_freem(&sc->sc_dma_reserve, dma);
-		return;
-	}
-#endif
-	usb_freemem(&sc->sc_bus, dma);
-}
-
 static usbd_xfer_handle
 xhci_allocx(struct usbd_bus *bus)
 {
@@ -2157,7 +2117,7 @@ xhci_root_ctrl_start(usbd_xfer_handle xf
 	len = UGETW(req->wLength);
 
 	if (len != 0)
-		buf = KERNADDR(&xfer->dmabuf, 0);
+		buf = xfer->buf;
 
 	DPRINTFN(12, "rhreq: %04x %04x %04x %04x",
 	    req->bmRequestType | (req->bRequest << 8), value, index, len);

Index: src/sys/external/bsd/dwc2/dwc2.c
diff -u src/sys/external/bsd/dwc2/dwc2.c:1.32.2.2 src/sys/external/bsd/dwc2/dwc2.c:1.32.2.3
--- src/sys/external/bsd/dwc2/dwc2.c:1.32.2.2	Mon Dec  1 12:38:39 2014
+++ src/sys/external/bsd/dwc2/dwc2.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: dwc2.c,v 1.32.2.2 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: dwc2.c,v 1.32.2.3 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dwc2.c,v 1.32.2.2 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dwc2.c,v 1.32.2.3 2014/12/02 09:00:34 skrll Exp $");
 
 #include "opt_usb.h"
 
@@ -162,8 +162,6 @@ Static const struct usbd_bus_methods dwc
 	.ubm_open =	dwc2_open,
 	.ubm_softint =	dwc2_softintr,
 	.ubm_dopoll =	dwc2_poll,
-	.ubm_allocm =	dwc2_allocm,
-	.ubm_freem =	dwc2_freem,
 	.ubm_allocx =	dwc2_allocx,
 	.ubm_freex =	dwc2_freex,
 	.ubm_getlock =	dwc2_get_lock,
@@ -223,34 +221,6 @@ Static const struct usbd_pipe_methods dw
 	.upm_done =	dwc2_device_isoc_done,
 };
 
-Static usbd_status
-dwc2_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct dwc2_softc *sc = DWC2_BUS2SC(bus);
-	usbd_status status;
-
-	DPRINTFN(10, "\n");
-
-	status = usb_allocmem(&sc->sc_bus, size, 0, dma);
-	if (status == USBD_NOMEM)
-		status = usb_reserve_allocm(&sc->sc_dma_reserve, dma, size);
-	return status;
-}
-
-Static void
-dwc2_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	struct dwc2_softc *sc = DWC2_BUS2SC(bus);
-
-	DPRINTFN(10, "\n");
-
-	if (dma->block->flags & USB_DMA_RESERVE) {
-		usb_reserve_freem(&sc->sc_dma_reserve, dma);
-		return;
-	}
-	usb_freemem(&sc->sc_bus, dma);
-}
-
 usbd_xfer_handle
 dwc2_allocx(struct usbd_bus *bus)
 {
@@ -1571,6 +1541,7 @@ dwc2_init(struct dwc2_softc *sc)
 	sc->sc_bus.usbrev = USBREV_2_0;
 	sc->sc_bus.methods = &dwc2_bus_methods;
 	sc->sc_bus.pipe_size = sizeof(struct dwc2_pipe);
+	sc->sc_bus.usedma = true;
 	sc->sc_hcdenabled = false;
 
 	mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTUSB);
@@ -1580,9 +1551,6 @@ dwc2_init(struct dwc2_softc *sc)
 	sc->sc_rhc_si = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE,
 	    dwc2_rhc, sc);
 
-	usb_setup_reserve(sc->sc_dev, &sc->sc_dma_reserve, sc->sc_bus.dmatag,
-		USB_MEM_RESERVE);
-
 	sc->sc_xferpool = pool_cache_init(sizeof(struct dwc2_xfer), 0, 0, 0,
 	    "dwc2xfer", NULL, IPL_USB, NULL, NULL, NULL);
 	sc->sc_qhpool = pool_cache_init(sizeof(struct dwc2_qh), 0, 0, 0,

Index: src/sys/external/bsd/dwc2/dwc2var.h
diff -u src/sys/external/bsd/dwc2/dwc2var.h:1.3 src/sys/external/bsd/dwc2/dwc2var.h:1.3.12.1
--- src/sys/external/bsd/dwc2/dwc2var.h:1.3	Tue Oct 22 12:57:40 2013
+++ src/sys/external/bsd/dwc2/dwc2var.h	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: dwc2var.h,v 1.3 2013/10/22 12:57:40 skrll Exp $	*/
+/*	$NetBSD: dwc2var.h,v 1.3.12.1 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -94,7 +94,6 @@ typedef struct dwc2_softc {
 
 	device_t sc_child;		/* /dev/usb# device */
 	char sc_dying;
-	struct usb_dma_reserve sc_dma_reserve;
 
 	char sc_vendor[32];		/* vendor string for root hub */
 	int sc_id_vendor;		/* vendor ID for root hub */

Index: src/sys/rump/dev/lib/libugenhc/Makefile
diff -u src/sys/rump/dev/lib/libugenhc/Makefile:1.8 src/sys/rump/dev/lib/libugenhc/Makefile:1.8.6.1
--- src/sys/rump/dev/lib/libugenhc/Makefile:1.8	Thu Mar 13 01:38:11 2014
+++ src/sys/rump/dev/lib/libugenhc/Makefile	Tue Dec  2 09:00:34 2014
@@ -1,10 +1,10 @@
-#	$NetBSD: Makefile,v 1.8 2014/03/13 01:38:11 pooka Exp $
+#	$NetBSD: Makefile,v 1.8.6.1 2014/12/02 09:00:34 skrll Exp $
 #
 
 LIB=	rumpdev_ugenhc
 IOCONF= UGENHC.ioconf
 
-SRCS=	ugenhc.c ugenhc_at_mainbus.c ugenhc_dma.c
+SRCS=	ugenhc.c ugenhc_at_mainbus.c
 
 CPPFLAGS+=	-I${RUMPTOP}/librump/rumpkern
 

Index: src/sys/rump/dev/lib/libugenhc/ugenhc.c
diff -u src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.22.4.2 src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.22.4.3
--- src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.22.4.2	Mon Dec  1 12:38:39 2014
+++ src/sys/rump/dev/lib/libugenhc/ugenhc.c	Tue Dec  2 09:00:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ugenhc.c,v 1.22.4.2 2014/12/01 12:38:39 skrll Exp $	*/
+/*	$NetBSD: ugenhc.c,v 1.22.4.3 2014/12/02 09:00:34 skrll Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010 Antti Kantee.  All Rights Reserved.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ugenhc.c,v 1.22.4.2 2014/12/01 12:38:39 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ugenhc.c,v 1.22.4.3 2014/12/02 09:00:34 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -1039,22 +1039,6 @@ ugenhc_poll(struct usbd_bus *ubus)
 
 }
 
-static usbd_status
-ugenhc_allocm(struct usbd_bus *bus, usb_dma_t *dma, uint32_t size)
-{
-	struct ugenhc_softc *sc = bus->hci_private;
-
-	return usb_allocmem(&sc->sc_bus, size, 0, dma);
-}
-
-static void
-ugenhc_freem(struct usbd_bus *bus, usb_dma_t *dma)
-{
-	struct ugenhc_softc *sc = bus->hci_private;
-
-	usb_freemem(&sc->sc_bus, dma);
-}
-
 static struct usbd_xfer *
 ugenhc_allocx(struct usbd_bus *bus)
 {
@@ -1090,8 +1074,6 @@ static const struct usbd_bus_methods uge
 	.ubm_open =	ugenhc_open,
 	.ubm_softint =	ugenhc_softint,
 	.ubm_dopoll =	ugenhc_poll,
-	.ubm_allocm = 	ugenhc_allocm,
-	.ubm_freem = 	ugenhc_freem,
 	.ubm_allocx = 	ugenhc_allocx,
 	.ubm_freex =	ugenhc_freex,
 	.ubm_getlock =	ugenhc_getlock
@@ -1125,6 +1107,7 @@ ugenhc_attach(device_t parent, device_t 
 	sc->sc_bus.methods = &ugenhc_bus_methods;
 	sc->sc_bus.hci_private = sc;
 	sc->sc_bus.pipe_size = sizeof(struct ugenhc_pipe);
+	sc->sc_bus.usedma = false;
 	sc->sc_devnum = maa->maa_unit;
 
 	mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);

Reply via email to