mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 05:05:20 -05:00
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
This commit is contained in:
parent
0fd94237f3
commit
c8d6a02c5a
1 changed files with 12 additions and 5 deletions
|
|
@ -234,6 +234,8 @@ static union {
|
||||||
char *max_lun;
|
char *max_lun;
|
||||||
} tb;
|
} tb;
|
||||||
|
|
||||||
|
static char *cbw_buffer;
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
unsigned int sector;
|
unsigned int sector;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
|
|
@ -397,6 +399,10 @@ void usb_storage_init_connection(void)
|
||||||
|
|
||||||
#if CONFIG_CPU == IMX31L || defined(CPU_TCC77X) || defined(CPU_TCC780X) || \
|
#if CONFIG_CPU == IMX31L || defined(CPU_TCC77X) || defined(CPU_TCC780X) || \
|
||||||
defined(BOOTLOADER) || CONFIG_CPU == DM320
|
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]
|
static unsigned char _transfer_buffer[BUFFER_SIZE*2]
|
||||||
USB_DEVBSS_ATTR __attribute__((aligned(32)));
|
USB_DEVBSS_ATTR __attribute__((aligned(32)));
|
||||||
tb.transfer_buffer = (void *)_transfer_buffer;
|
tb.transfer_buffer = (void *)_transfer_buffer;
|
||||||
|
|
@ -410,14 +416,14 @@ void usb_storage_init_connection(void)
|
||||||
unsigned char * audio_buffer;
|
unsigned char * audio_buffer;
|
||||||
|
|
||||||
audio_buffer = audio_get_buffer(false,&bufsize);
|
audio_buffer = audio_get_buffer(false,&bufsize);
|
||||||
tb.transfer_buffer =
|
cbw_buffer = (void *)UNCACHED_ADDR((unsigned int)(audio_buffer+31) & 0xffffffe0);
|
||||||
(void *)UNCACHED_ADDR((unsigned int)(audio_buffer+31) & 0xffffffe0);
|
tb.transfer_buffer = cbw_buffer + 1024;
|
||||||
cpucache_invalidate();
|
cpucache_invalidate();
|
||||||
#ifdef USB_USE_RAMDISK
|
#ifdef USB_USE_RAMDISK
|
||||||
ramdisk_buffer = tb.transfer_buffer + BUFFER_SIZE*2;
|
ramdisk_buffer = tb.transfer_buffer + BUFFER_SIZE*2;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
usb_drv_recv(ep_out, tb.transfer_buffer, 1024);
|
usb_drv_recv(ep_out, cbw_buffer, 1024);
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for(i=0;i<NUM_VOLUMES;i++) {
|
for(i=0;i<NUM_VOLUMES;i++) {
|
||||||
|
|
@ -443,7 +449,7 @@ void usb_storage_disconnect(void)
|
||||||
void usb_storage_transfer_complete(int ep,int dir,int status,int length)
|
void usb_storage_transfer_complete(int ep,int dir,int status,int length)
|
||||||
{
|
{
|
||||||
(void)ep;
|
(void)ep;
|
||||||
struct command_block_wrapper* cbw = (void*)tb.transfer_buffer;
|
struct command_block_wrapper* cbw = (void*)cbw_buffer;
|
||||||
|
|
||||||
//logf("transfer result %X %d", status, length);
|
//logf("transfer result %X %d", status, length);
|
||||||
switch(state) {
|
switch(state) {
|
||||||
|
|
@ -538,7 +544,6 @@ void usb_storage_transfer_complete(int ep,int dir,int status,int length)
|
||||||
queue_broadcast(SYS_USB_READ_DATA, (cur_cmd.lun<<16)+cur_cmd.orig_count);
|
queue_broadcast(SYS_USB_READ_DATA, (cur_cmd.lun<<16)+cur_cmd.orig_count);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
usb_drv_recv(ep_out, tb.transfer_buffer, 1024);
|
|
||||||
break;
|
break;
|
||||||
case SENDING_RESULT:
|
case SENDING_RESULT:
|
||||||
if(dir==USB_DIR_OUT) {
|
if(dir==USB_DIR_OUT) {
|
||||||
|
|
@ -1093,6 +1098,8 @@ static void send_csw(int status)
|
||||||
sizeof(struct command_status_wrapper));
|
sizeof(struct command_status_wrapper));
|
||||||
state = SENDING_CSW;
|
state = SENDING_CSW;
|
||||||
//logf("CSW: %X",status);
|
//logf("CSW: %X",status);
|
||||||
|
/* Already start waiting for the next command */
|
||||||
|
usb_drv_recv(ep_out, cbw_buffer, 1024);
|
||||||
|
|
||||||
if(status == UMS_STATUS_GOOD) {
|
if(status == UMS_STATUS_GOOD) {
|
||||||
cur_sense_data.sense_key=0;
|
cur_sense_data.sense_key=0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue