summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/ata.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 584c8549e6..1a8ff37cb7 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -122,9 +122,25 @@ static int wait_for_bsy(void)
122static int wait_for_rdy(void) __attribute__ ((section (".icode"))); 122static int wait_for_rdy(void) __attribute__ ((section (".icode")));
123static int wait_for_rdy(void) 123static int wait_for_rdy(void)
124{ 124{
125 int timeout;
126
125 if (!wait_for_bsy()) 127 if (!wait_for_bsy())
126 return 0; 128 return 0;
127 return ATA_ALT_STATUS & STATUS_RDY; 129
130 timeout = current_tick + HZ*4;
131
132 while (TIME_BEFORE(current_tick, timeout) &&
133 !(ATA_ALT_STATUS & STATUS_RDY))
134 yield();
135
136 if (TIME_BEFORE(current_tick, timeout))
137 {
138 return STATUS_RDY;
139 }
140 else
141 {
142 return 0; /* timeout */
143 }
128} 144}
129 145
130static int wait_for_start_of_transfer(void) __attribute__ ((section (".icode"))); 146static int wait_for_start_of_transfer(void) __attribute__ ((section (".icode")));