diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2008-04-05 19:30:02 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2008-04-05 19:30:02 -0400 |
commit | 06ad44ee1e8b2e2e6dcfca206e5c29a62bf67f9b (patch) | |
tree | 65a3459ff9afd8c73f5bcbd06ffd17ea085430da /src/floppy.c | |
parent | e0113c99c083d9b812216e120aff9eb9806de91b (diff) | |
download | seabios-hppa-06ad44ee1e8b2e2e6dcfca206e5c29a62bf67f9b.zip seabios-hppa-06ad44ee1e8b2e2e6dcfca206e5c29a62bf67f9b.tar.gz seabios-hppa-06ad44ee1e8b2e2e6dcfca206e5c29a62bf67f9b.tar.bz2 |
Introduce cpu_relax() and use it in busy loops.
Diffstat (limited to 'src/floppy.c')
-rw-r--r-- | src/floppy.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/floppy.c b/src/floppy.c index 0954720..c27ee87 100644 --- a/src/floppy.c +++ b/src/floppy.c @@ -117,9 +117,12 @@ floppy_prepare_controller(u8 drive) if (prev_reset == 0) { irq_enable(); u8 v; - do { + for (;;) { v = GET_BDA(floppy_recalibration_status); - } while ((v & FRS_TIMEOUT) == 0); + if (v & FRS_TIMEOUT) + break; + cpu_relax(); + } irq_disable(); v &= ~FRS_TIMEOUT; @@ -139,14 +142,17 @@ floppy_pio(u8 *cmd, u8 cmdlen) irq_enable(); u8 v; - do { + for (;;) { if (!GET_BDA(floppy_motor_counter)) { irq_disable(); floppy_reset_controller(); return DISK_RET_ETIMEOUT; } v = GET_BDA(floppy_recalibration_status); - } while (!(v & FRS_TIMEOUT)); + if (v & FRS_TIMEOUT) + break; + cpu_relax(); + } irq_disable(); v &= ~FRS_TIMEOUT; |