summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2008-08-31 15:11:04 +0000
committerFrank Gevaerts <frank@gevaerts.be>2008-08-31 15:11:04 +0000
commitab7cfd28551c0123822425485afc0dc94350b78c (patch)
treed1cb2c774d053a26293b34d10a8b81b41720f5a3
parentca588afe51bf3adb4abcb8dd723476ee075f6bd4 (diff)
downloadrockbox-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.c20
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;
238unsigned char* cached_transfer_buffer;
239 238
240static struct { 239static 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 |