forked from len0rd/rockbox
Improved retry handling
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2415 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
d3d342dc27
commit
7526cf70c3
1 changed files with 12 additions and 5 deletions
|
@ -165,11 +165,13 @@ int ata_read_sectors(unsigned long start,
|
||||||
int count,
|
int count,
|
||||||
void* buf) __attribute__ ((section (".icode")));
|
void* buf) __attribute__ ((section (".icode")));
|
||||||
int ata_read_sectors(unsigned long start,
|
int ata_read_sectors(unsigned long start,
|
||||||
int count,
|
int incount,
|
||||||
void* buf)
|
void* inbuf)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int timeout;
|
int timeout;
|
||||||
|
int count;
|
||||||
|
void* buf;
|
||||||
|
|
||||||
last_disk_activity = current_tick;
|
last_disk_activity = current_tick;
|
||||||
|
|
||||||
|
@ -201,6 +203,10 @@ int ata_read_sectors(unsigned long start,
|
||||||
led(true);
|
led(true);
|
||||||
|
|
||||||
timeout = current_tick + READ_TIMEOUT;
|
timeout = current_tick + READ_TIMEOUT;
|
||||||
|
|
||||||
|
retry:
|
||||||
|
buf = inbuf;
|
||||||
|
count = incount;
|
||||||
while (TIME_BEFORE(current_tick, timeout)) {
|
while (TIME_BEFORE(current_tick, timeout)) {
|
||||||
|
|
||||||
if ( count == 256 )
|
if ( count == 256 )
|
||||||
|
@ -221,11 +227,11 @@ int ata_read_sectors(unsigned long start,
|
||||||
|
|
||||||
if (!wait_for_start_of_transfer()) {
|
if (!wait_for_start_of_transfer()) {
|
||||||
ret = -4;
|
ret = -4;
|
||||||
continue;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ATA_ALT_STATUS & (STATUS_ERR | STATUS_DF) )
|
if ( ATA_ALT_STATUS & (STATUS_ERR | STATUS_DF) )
|
||||||
continue;
|
goto retry;
|
||||||
|
|
||||||
/* if destination address is odd, use byte copying,
|
/* if destination address is odd, use byte copying,
|
||||||
otherwise use word copying */
|
otherwise use word copying */
|
||||||
|
@ -259,9 +265,10 @@ int ata_read_sectors(unsigned long start,
|
||||||
|
|
||||||
if(!wait_for_end_of_transfer()) {
|
if(!wait_for_end_of_transfer()) {
|
||||||
ret = -3;
|
ret = -3;
|
||||||
continue;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
led(false);
|
led(false);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue