diff options
Diffstat (limited to 'tests/fdc-test.c')
-rw-r--r-- | tests/fdc-test.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/tests/fdc-test.c b/tests/fdc-test.c index 10d11a4173..fa7441110d 100644 --- a/tests/fdc-test.c +++ b/tests/fdc-test.c @@ -93,17 +93,21 @@ static uint8_t floppy_recv(void) return inb(FLOPPY_BASE + reg_fifo); } -static uint8_t ack_irq(void) +/* pcn: Present Cylinder Number */ +static void ack_irq(uint8_t *pcn) { uint8_t ret; g_assert(get_irq(FLOPPY_IRQ)); floppy_send(CMD_SENSE_INT); floppy_recv(); + ret = floppy_recv(); - g_assert(!get_irq(FLOPPY_IRQ)); + if (pcn != NULL) { + *pcn = ret; + } - return ret; + g_assert(!get_irq(FLOPPY_IRQ)); } static uint8_t send_read_command(void) @@ -162,7 +166,7 @@ static uint8_t send_read_command(void) return ret; } -static void send_step_pulse(int cyl) +static void send_seek(int cyl) { int drive = 0; int head = 0; @@ -171,7 +175,7 @@ static void send_step_pulse(int cyl) floppy_send(head << 2 | drive); g_assert(!get_irq(FLOPPY_IRQ)); floppy_send(cyl); - ack_irq(); + ack_irq(NULL); } static uint8_t cmos_read(uint8_t reg) @@ -198,7 +202,7 @@ static void test_no_media_on_start(void) assert_bit_set(dir, DSKCHG); dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); - send_step_pulse(1); + send_seek(1); dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); dir = inb(FLOPPY_BASE + reg_dir); @@ -229,14 +233,14 @@ static void test_media_change(void) dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); - send_step_pulse(0); + send_seek(0); dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); /* Step to next track should clear DSKCHG bit. */ - send_step_pulse(1); + send_seek(1); dir = inb(FLOPPY_BASE + reg_dir); assert_bit_clear(dir, DSKCHG); dir = inb(FLOPPY_BASE + reg_dir); @@ -252,13 +256,13 @@ static void test_media_change(void) dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); - send_step_pulse(0); + send_seek(0); dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); - send_step_pulse(1); + send_seek(1); dir = inb(FLOPPY_BASE + reg_dir); assert_bit_set(dir, DSKCHG); dir = inb(FLOPPY_BASE + reg_dir); @@ -292,10 +296,10 @@ static void test_relative_seek(void) uint8_t drive = 0; uint8_t head = 0; uint8_t cyl = 1; - uint8_t ret; + uint8_t pcn; /* Send seek to track 0 */ - send_step_pulse(0); + send_seek(0); /* Send relative seek to increase track by 1 */ floppy_send(CMD_RELATIVE_SEEK_IN); @@ -303,8 +307,8 @@ static void test_relative_seek(void) g_assert(!get_irq(FLOPPY_IRQ)); floppy_send(cyl); - ret = ack_irq(); - g_assert(ret == 1); + ack_irq(&pcn); + g_assert(pcn == 1); /* Send relative seek to decrease track by 1 */ floppy_send(CMD_RELATIVE_SEEK_OUT); @@ -312,8 +316,8 @@ static void test_relative_seek(void) g_assert(!get_irq(FLOPPY_IRQ)); floppy_send(cyl); - ret = ack_irq(); - g_assert(ret == 0); + ack_irq(&pcn); + g_assert(pcn == 0); } /* success if no crash or abort */ |