diff options
author | Frank Gevaerts <frank@gevaerts.be> | 2008-08-31 15:11:04 +0000 |
---|---|---|
committer | Frank Gevaerts <frank@gevaerts.be> | 2008-08-31 15:11:04 +0000 |
commit | ab7cfd28551c0123822425485afc0dc94350b78c (patch) | |
tree | d1cb2c774d053a26293b34d10a8b81b41720f5a3 | |
parent | ca588afe51bf3adb4abcb8dd723476ee075f6bd4 (diff) | |
download | rockbox-ab7cfd28551c0123822425485afc0dc94350b78c.tar.gz rockbox-ab7cfd28551c0123822425485afc0dc94350b78c.zip |
revert r18327, as it introduces serious issues on non-sd players (like ipods)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18370 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/usbstack/usb_storage.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c index 6d964f4622..17b8bb7168 100644 --- a/firmware/usbstack/usb_storage.c +++ b/firmware/usbstack/usb_storage.c | |||
@@ -235,7 +235,6 @@ static union { | |||
235 | struct command_status_wrapper* csw; | 235 | struct command_status_wrapper* csw; |
236 | char *max_lun; | 236 | char *max_lun; |
237 | } tb; | 237 | } tb; |
238 | unsigned char* cached_transfer_buffer; | ||
239 | 238 | ||
240 | static struct { | 239 | static struct { |
241 | unsigned int sector; | 240 | unsigned int sector; |
@@ -243,7 +242,6 @@ static struct { | |||
243 | unsigned int tag; | 242 | unsigned int tag; |
244 | unsigned int lun; | 243 | unsigned int lun; |
245 | unsigned char *data[2]; | 244 | unsigned char *data[2]; |
246 | unsigned char *cached_data[2]; | ||
247 | unsigned char data_select; | 245 | unsigned char data_select; |
248 | unsigned int last_result; | 246 | unsigned int last_result; |
249 | } cur_cmd; | 247 | } cur_cmd; |
@@ -382,17 +380,14 @@ void usb_storage_init_connection(void) | |||
382 | static unsigned char _transfer_buffer[BUFFER_SIZE*2] | 380 | static unsigned char _transfer_buffer[BUFFER_SIZE*2] |
383 | USBDEVBSS_ATTR __attribute__((aligned(32))); | 381 | USBDEVBSS_ATTR __attribute__((aligned(32))); |
384 | tb.transfer_buffer = (void *)_transfer_buffer; | 382 | tb.transfer_buffer = (void *)_transfer_buffer; |
385 | cached_transfer_buffer = tb.transfer_buffer; | ||
386 | #else | 383 | #else |
387 | /* TODO : check if bufsize is at least 32K ? */ | 384 | /* TODO : check if bufsize is at least 32K ? */ |
388 | size_t bufsize; | 385 | size_t bufsize; |
389 | unsigned char * audio_buffer; | 386 | unsigned char * audio_buffer; |
390 | 387 | ||
391 | audio_buffer = audio_get_buffer(false,&bufsize); | 388 | audio_buffer = audio_get_buffer(false,&bufsize); |
392 | cached_transfer_buffer = | ||
393 | (void *)((unsigned int)(audio_buffer + 31) & 0xffffffe0); | ||
394 | tb.transfer_buffer = | 389 | tb.transfer_buffer = |
395 | (void *)UNCACHED_ADDR(cached_transfer_buffer); | 390 | (void *)UNCACHED_ADDR((unsigned int)(audio_buffer + 31) & 0xffffffe0); |
396 | invalidate_icache(); | 391 | invalidate_icache(); |
397 | #endif | 392 | #endif |
398 | usb_drv_recv(usb_endpoint, tb.transfer_buffer, 1024); | 393 | usb_drv_recv(usb_endpoint, tb.transfer_buffer, 1024); |
@@ -433,14 +428,11 @@ void usb_storage_transfer_complete(int ep,bool in,int status,int length) | |||
433 | 428 | ||
434 | /* Now write the data that just came in, while the host is | 429 | /* Now write the data that just came in, while the host is |
435 | sending the next bit */ | 430 | sending the next bit */ |
436 | #if CONFIG_CPU == IMX31L || CONFIG_USBOTG == USBOTG_ISP1583 | ||
437 | invalidate_icache(); | ||
438 | #endif | ||
439 | int result = ata_write_sectors(IF_MV2(cur_cmd.lun,) | 431 | int result = ata_write_sectors(IF_MV2(cur_cmd.lun,) |
440 | cur_cmd.sector, | 432 | cur_cmd.sector, |
441 | MIN(BUFFER_SIZE/SECTOR_SIZE, | 433 | MIN(BUFFER_SIZE/SECTOR_SIZE, |
442 | cur_cmd.count), | 434 | cur_cmd.count), |
443 | cur_cmd.cached_data[cur_cmd.data_select]); | 435 | cur_cmd.data[cur_cmd.data_select]); |
444 | if(result != 0) { | 436 | if(result != 0) { |
445 | send_csw(UMS_STATUS_FAIL); | 437 | send_csw(UMS_STATUS_FAIL); |
446 | cur_sense_data.sense_key=SENSE_MEDIUM_ERROR; | 438 | cur_sense_data.sense_key=SENSE_MEDIUM_ERROR; |
@@ -658,10 +650,6 @@ static void handle_scsi(struct command_block_wrapper* cbw) | |||
658 | 650 | ||
659 | cur_cmd.tag = cbw->tag; | 651 | cur_cmd.tag = cbw->tag; |
660 | cur_cmd.lun = lun; | 652 | cur_cmd.lun = lun; |
661 | cur_cmd.cached_data[0] = cached_transfer_buffer; | ||
662 | cur_cmd.cached_data[1] = &cached_transfer_buffer[BUFFER_SIZE]; | ||
663 | cur_cmd.data[0] = tb.transfer_buffer; | ||
664 | cur_cmd.data[1] = &tb.transfer_buffer[BUFFER_SIZE]; | ||
665 | 653 | ||
666 | switch (cbw->command_block[0]) { | 654 | switch (cbw->command_block[0]) { |
667 | case SCSI_TEST_UNIT_READY: | 655 | case SCSI_TEST_UNIT_READY: |
@@ -917,6 +905,8 @@ static void handle_scsi(struct command_block_wrapper* cbw) | |||
917 | cur_sense_data.ascq=0; | 905 | cur_sense_data.ascq=0; |
918 | break; | 906 | break; |
919 | } | 907 | } |
908 | cur_cmd.data[0] = tb.transfer_buffer; | ||
909 | cur_cmd.data[1] = &tb.transfer_buffer[BUFFER_SIZE]; | ||
920 | cur_cmd.data_select=0; | 910 | cur_cmd.data_select=0; |
921 | cur_cmd.sector = block_size_mult * | 911 | cur_cmd.sector = block_size_mult * |
922 | (cbw->command_block[2] << 24 | | 912 | (cbw->command_block[2] << 24 | |
@@ -954,6 +944,8 @@ static void handle_scsi(struct command_block_wrapper* cbw) | |||
954 | cur_sense_data.ascq=0; | 944 | cur_sense_data.ascq=0; |
955 | break; | 945 | break; |
956 | } | 946 | } |
947 | cur_cmd.data[0] = tb.transfer_buffer; | ||
948 | cur_cmd.data[1] = &tb.transfer_buffer[BUFFER_SIZE]; | ||
957 | cur_cmd.data_select=0; | 949 | cur_cmd.data_select=0; |
958 | cur_cmd.sector = block_size_mult * | 950 | cur_cmd.sector = block_size_mult * |
959 | (cbw->command_block[2] << 24 | | 951 | (cbw->command_block[2] << 24 | |