From c8d6a02c5a792f7c5d634dac8a99a82c6b4c3ad5 Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Mon, 18 May 2009 19:45:24 +0000 Subject: Speed up USB storage by being a bit smarter in ordering transfer setups git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20982 a1c6a512-1295-4272-9138-f99709370657 --- firmware/usbstack/usb_storage.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c index 73176ee93e..9ee58f8d90 100644 --- a/firmware/usbstack/usb_storage.c +++ b/firmware/usbstack/usb_storage.c @@ -234,6 +234,8 @@ static union { char *max_lun; } tb; +static char *cbw_buffer; + static struct { unsigned int sector; unsigned int count; @@ -397,6 +399,10 @@ void usb_storage_init_connection(void) #if CONFIG_CPU == IMX31L || defined(CPU_TCC77X) || defined(CPU_TCC780X) || \ defined(BOOTLOADER) || CONFIG_CPU == DM320 + static unsigned char _cbw_buffer[BUFFER_SIZE*2] + USB_DEVBSS_ATTR __attribute__((aligned(32))); + cbw_buffer = (void *)_cbw_buffer; + static unsigned char _transfer_buffer[BUFFER_SIZE*2] USB_DEVBSS_ATTR __attribute__((aligned(32))); tb.transfer_buffer = (void *)_transfer_buffer; @@ -410,14 +416,14 @@ void usb_storage_init_connection(void) unsigned char * audio_buffer; audio_buffer = audio_get_buffer(false,&bufsize); - tb.transfer_buffer = - (void *)UNCACHED_ADDR((unsigned int)(audio_buffer+31) & 0xffffffe0); + cbw_buffer = (void *)UNCACHED_ADDR((unsigned int)(audio_buffer+31) & 0xffffffe0); + tb.transfer_buffer = cbw_buffer + 1024; cpucache_invalidate(); #ifdef USB_USE_RAMDISK ramdisk_buffer = tb.transfer_buffer + BUFFER_SIZE*2; #endif #endif - usb_drv_recv(ep_out, tb.transfer_buffer, 1024); + usb_drv_recv(ep_out, cbw_buffer, 1024); int i; for(i=0;i