From owner-p4-projects@FreeBSD.ORG Sun Nov 25 14:00:41 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EAD0B16A420; Sun, 25 Nov 2007 14:00:40 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AF8A916A418 for ; Sun, 25 Nov 2007 14:00:40 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 927EB13C478 for ; Sun, 25 Nov 2007 14:00:40 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id lAPE0e3t099277 for ; Sun, 25 Nov 2007 14:00:40 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id lAPE0ewZ099274 for perforce@freebsd.org; Sun, 25 Nov 2007 14:00:40 GMT (envelope-from hselasky@FreeBSD.org) Date: Sun, 25 Nov 2007 14:00:40 GMT Message-Id: <200711251400.lAPE0ewZ099274@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 129507 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 25 Nov 2007 14:00:41 -0000 http://perforce.freebsd.org/chv.cgi?CH=129507 Change 129507 by hselasky@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 +#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);