diff options
Diffstat (limited to 'firmware/drivers/ata.c')
-rw-r--r-- | firmware/drivers/ata.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index d3ccf0e662..88b57d033e 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c | |||
@@ -110,9 +110,10 @@ static int wait_for_bsy(void) __attribute__ ((section (".icode"))); | |||
110 | static int wait_for_bsy(void) | 110 | static int wait_for_bsy(void) |
111 | { | 111 | { |
112 | int timeout = current_tick + HZ*10; | 112 | int timeout = current_tick + HZ*10; |
113 | last_disk_activity = timeout; | 113 | while (TIME_BEFORE(current_tick, timeout) && (ATA_STATUS & STATUS_BSY)) { |
114 | while (TIME_BEFORE(current_tick, timeout) && (ATA_STATUS & STATUS_BSY)) | 114 | last_disk_activity = current_tick; |
115 | yield(); | 115 | yield(); |
116 | } | ||
116 | 117 | ||
117 | if (TIME_BEFORE(current_tick, timeout)) | 118 | if (TIME_BEFORE(current_tick, timeout)) |
118 | return 1; | 119 | return 1; |
@@ -129,10 +130,12 @@ static int wait_for_rdy(void) | |||
129 | return 0; | 130 | return 0; |
130 | 131 | ||
131 | timeout = current_tick + HZ*10; | 132 | timeout = current_tick + HZ*10; |
132 | last_disk_activity = timeout; | ||
133 | 133 | ||
134 | while (TIME_BEFORE(current_tick, timeout) && !(ATA_ALT_STATUS & STATUS_RDY)) | 134 | while (TIME_BEFORE(current_tick, timeout) && |
135 | !(ATA_ALT_STATUS & STATUS_RDY)) { | ||
136 | last_disk_activity = current_tick; | ||
135 | yield(); | 137 | yield(); |
138 | } | ||
136 | 139 | ||
137 | if (TIME_BEFORE(current_tick, timeout)) | 140 | if (TIME_BEFORE(current_tick, timeout)) |
138 | return STATUS_RDY; | 141 | return STATUS_RDY; |