PERFORCE change 129507 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Sun Nov 25 06:00:41 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=129507
Change 129507 by hselasky at hselasky_laptop001 on 2007/11/25 14:00:35
Add code that makes UMASS load virtual buffers directly into DMA.
Testing did not reveal significantly increased throughput when
using this feature. Only less CPU usage.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/umass.c#32 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/umass.c#32 (text+ko) ====
@@ -121,6 +121,13 @@
#include <cam/cam_periph.h>
+#if 0
+/* this enables loading of virtual buffers into DMA */
+#define UMASS_USB_FLAGS .bdma_enable=1,.ext_buffer=1,
+#else
+#define UMASS_USB_FLAGS
+#endif
+
#ifdef USB_DEBUG
#define DIF(m, x) \
do { \
@@ -1097,7 +1104,7 @@
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.bufsize = UMASS_BULK_SIZE,
- .flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
+ .flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS},
.callback = &umass_t_bbb_data_read_callback,
.timeout = 0, /* overwritten later */
},
@@ -1117,7 +1124,7 @@
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
.bufsize = UMASS_BULK_SIZE,
- .flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
+ .flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS},
.callback = &umass_t_bbb_data_write_callback,
.timeout = 0, /* overwritten later */
},
@@ -1195,7 +1202,7 @@
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.bufsize = UMASS_BULK_SIZE,
- .flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
+ .flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS},
.callback = &umass_t_cbi_data_read_callback,
.timeout = 0, /* overwritten later */
},
@@ -1215,7 +1222,7 @@
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
.bufsize = UMASS_BULK_SIZE,
- .flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
+ .flags = {.proxy_buffer = 1,.short_xfer_ok = 1, UMASS_USB_FLAGS},
.callback = &umass_t_cbi_data_write_callback,
.timeout = 0, /* overwritten later */
},
@@ -1893,9 +1900,10 @@
switch (USBD_GET_STATE(xfer)) {
case USBD_ST_TRANSFERRED:
- usbd_copy_out(&(xfer->buf_data), 0,
- sc->sc_transfer.data_ptr, xfer->actlen);
-
+ if (!xfer->flags.bdma_enable) {
+ usbd_copy_out(&(xfer->buf_data), 0,
+ sc->sc_transfer.data_ptr, xfer->actlen);
+ }
sc->sc_transfer.data_rem -= xfer->actlen;
sc->sc_transfer.data_ptr += xfer->actlen;
sc->sc_transfer.actlen += xfer->actlen;
@@ -1918,6 +1926,10 @@
xfer->timeout = sc->sc_transfer.data_timeout;
xfer->frlengths[0] = max_bulk;
+ if (xfer->flags.bdma_enable) {
+ usbd_set_frame_data(xfer, sc->sc_transfer.data_ptr,
+ max_bulk, 0);
+ }
usbd_start_hardware(xfer);
return;
@@ -1970,8 +1982,13 @@
xfer->timeout = sc->sc_transfer.data_timeout;
xfer->frlengths[0] = max_bulk;
- usbd_copy_in(&(xfer->buf_data), 0,
- sc->sc_transfer.data_ptr, max_bulk);
+ if (xfer->flags.bdma_enable) {
+ usbd_set_frame_data(xfer, sc->sc_transfer.data_ptr,
+ max_bulk, 0);
+ } else {
+ usbd_copy_in(&(xfer->buf_data), 0,
+ sc->sc_transfer.data_ptr, max_bulk);
+ }
usbd_start_hardware(xfer);
return;
@@ -2386,9 +2403,10 @@
switch (USBD_GET_STATE(xfer)) {
case USBD_ST_TRANSFERRED:
- usbd_copy_out(&(xfer->buf_data), 0,
- sc->sc_transfer.data_ptr, xfer->actlen);
-
+ if (!xfer->flags.bdma_enable) {
+ usbd_copy_out(&(xfer->buf_data), 0,
+ sc->sc_transfer.data_ptr, xfer->actlen);
+ }
sc->sc_transfer.data_rem -= xfer->actlen;
sc->sc_transfer.data_ptr += xfer->actlen;
sc->sc_transfer.actlen += xfer->actlen;
@@ -2463,8 +2481,13 @@
}
xfer->timeout = sc->sc_transfer.data_timeout;
- usbd_copy_in(&(xfer->buf_data), 0,
- sc->sc_transfer.data_ptr, max_bulk);
+ if (xfer->flags.bdma_enable) {
+ usbd_set_frame_data(xfer, sc->sc_transfer.data_ptr,
+ max_bulk, 0);
+ } else {
+ usbd_copy_in(&(xfer->buf_data), 0,
+ sc->sc_transfer.data_ptr, max_bulk);
+ }
xfer->frlengths[0] = max_bulk;
usbd_start_hardware(xfer);
More information about the p4-projects
mailing list