diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2015-07-07 09:01:52 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2015-07-14 14:40:07 -0400 |
commit | 85c72c6febbf7f4654c9ac57a8506dc5e1a5cba1 (patch) | |
tree | a15ca0dc8bdff1589f620c5332b424b0a0a8d510 /src | |
parent | c7fa7890200afd86e42813ce1bdbc1b32fcfccc5 (diff) | |
download | seabios-85c72c6febbf7f4654c9ac57a8506dc5e1a5cba1.tar.gz |
block: Introduce default_process_op() with common command handling codes
Most disk drivers only implement a couple of the available bios
commands. Unify the common fallback handling code into a new function
default_process_op() to reduce boiler-plate code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/block.c | 17 | ||||
-rw-r--r-- | src/block.h | 1 | ||||
-rw-r--r-- | src/cdrom.c | 7 | ||||
-rw-r--r-- | src/hw/ahci.c | 9 | ||||
-rw-r--r-- | src/hw/ata.c | 6 | ||||
-rw-r--r-- | src/hw/blockcmd.c | 8 | ||||
-rw-r--r-- | src/hw/ramdisk.c | 6 | ||||
-rw-r--r-- | src/hw/sdcard.c | 8 | ||||
-rw-r--r-- | src/hw/virtio-blk.c | 8 |
9 files changed, 25 insertions, 45 deletions
diff --git a/src/block.c b/src/block.c index e534319d..1d628f9c 100644 --- a/src/block.c +++ b/src/block.c @@ -467,6 +467,23 @@ fill_edd(u16 seg, struct int13dpt_s *param_far, struct drive_s *drive_gf) * Disk driver dispatch ****************************************************************/ +// Fallback handler for command requests not implemented by drivers +int +default_process_op(struct disk_op_s *op) +{ + switch (op->command) { + case CMD_FORMAT: + case CMD_RESET: + case CMD_ISREADY: + case CMD_VERIFY: + case CMD_SEEK: + // Return success if the driver doesn't implement these commands + return DISK_RET_SUCCESS; + default: + return DISK_RET_EPARAM; + } +} + static int process_atapi_op(struct disk_op_s *op) { diff --git a/src/block.h b/src/block.h index 8182288d..2fa52bda 100644 --- a/src/block.h +++ b/src/block.h @@ -102,6 +102,7 @@ void map_hd_drive(struct drive_s *drive); void map_cd_drive(struct drive_s *drive); struct int13dpt_s; int fill_edd(u16 seg, struct int13dpt_s *param_far, struct drive_s *drive_gf); +int default_process_op(struct disk_op_s *op); int process_op(struct disk_op_s *op); int send_disk_op(struct disk_op_s *op); int create_bounce_buf(void); diff --git a/src/cdrom.c b/src/cdrom.c index ba023405..bf1d2a6e 100644 --- a/src/cdrom.c +++ b/src/cdrom.c @@ -100,13 +100,8 @@ process_cdemu_op(struct disk_op_s *op) case CMD_WRITE: case CMD_FORMAT: return DISK_RET_EWRITEPROTECT; - case CMD_VERIFY: - case CMD_RESET: - case CMD_SEEK: - case CMD_ISREADY: - return DISK_RET_SUCCESS; default: - return DISK_RET_EPARAM; + return default_process_op(op); } } diff --git a/src/hw/ahci.c b/src/hw/ahci.c index 82fce429..ad813cec 100644 --- a/src/hw/ahci.c +++ b/src/hw/ahci.c @@ -306,15 +306,8 @@ process_ahci_op(struct disk_op_s *op) return ahci_disk_readwrite(op, 0); case CMD_WRITE: return ahci_disk_readwrite(op, 1); - case CMD_FORMAT: - case CMD_RESET: - case CMD_ISREADY: - case CMD_VERIFY: - case CMD_SEEK: - return DISK_RET_SUCCESS; default: - dprintf(1, "AHCI: unknown disk command %d\n", op->command); - return DISK_RET_EPARAM; + return default_process_op(op); } } diff --git a/src/hw/ata.c b/src/hw/ata.c index d805706d..d674f614 100644 --- a/src/hw/ata.c +++ b/src/hw/ata.c @@ -569,12 +569,8 @@ process_ata_op(struct disk_op_s *op) return DISK_RET_SUCCESS; case CMD_ISREADY: return isready(adrive_gf); - case CMD_FORMAT: - case CMD_VERIFY: - case CMD_SEEK: - return DISK_RET_SUCCESS; default: - return DISK_RET_EPARAM; + return default_process_op(op); } } diff --git a/src/hw/blockcmd.c b/src/hw/blockcmd.c index 3128f0a5..ecfeb5d8 100644 --- a/src/hw/blockcmd.c +++ b/src/hw/blockcmd.c @@ -174,14 +174,8 @@ scsi_process_op(struct disk_op_s *op) return cdb_read(op); case CMD_WRITE: return cdb_write(op); - case CMD_FORMAT: - case CMD_RESET: - case CMD_ISREADY: - case CMD_VERIFY: - case CMD_SEEK: - return DISK_RET_SUCCESS; default: - return DISK_RET_EPARAM; + return default_process_op(op); } } diff --git a/src/hw/ramdisk.c b/src/hw/ramdisk.c index 6b44c837..67ba59c1 100644 --- a/src/hw/ramdisk.c +++ b/src/hw/ramdisk.c @@ -101,11 +101,7 @@ process_ramdisk_op(struct disk_op_s *op) return ramdisk_copy(op, 0); case CMD_WRITE: return ramdisk_copy(op, 1); - case CMD_VERIFY: - case CMD_FORMAT: - case CMD_RESET: - return DISK_RET_SUCCESS; default: - return DISK_RET_EPARAM; + return default_process_op(op); } } diff --git a/src/hw/sdcard.c b/src/hw/sdcard.c index 626f0426..965543c5 100644 --- a/src/hw/sdcard.c +++ b/src/hw/sdcard.c @@ -218,14 +218,8 @@ process_sdcard_op(struct disk_op_s *op) return sdcard_readwrite(op, 0); case CMD_WRITE: return sdcard_readwrite(op, 1); - case CMD_FORMAT: - case CMD_RESET: - case CMD_ISREADY: - case CMD_VERIFY: - case CMD_SEEK: - return DISK_RET_SUCCESS; default: - return DISK_RET_EPARAM; + return default_process_op(op); } } diff --git a/src/hw/virtio-blk.c b/src/hw/virtio-blk.c index 0a02a03b..92a5546b 100644 --- a/src/hw/virtio-blk.c +++ b/src/hw/virtio-blk.c @@ -87,14 +87,8 @@ process_virtio_blk_op(struct disk_op_s *op) return virtio_blk_op(op, 0); case CMD_WRITE: return virtio_blk_op(op, 1); - case CMD_FORMAT: - case CMD_RESET: - case CMD_ISREADY: - case CMD_VERIFY: - case CMD_SEEK: - return DISK_RET_SUCCESS; default: - return DISK_RET_EPARAM; + return default_process_op(op); } } |