[SeaBIOS] [PATCH 02/17] block: Introduce default_process_op() with common command handling codes
Kevin O'Connor
kevin at koconnor.net
Tue Jul 7 21:26:06 CEST 2015
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 at koconnor.net>
---
src/block.c | 17 +++++++++++++++++
src/block.h | 1 +
src/cdrom.c | 7 +------
src/hw/ahci.c | 9 +--------
src/hw/ata.c | 6 +-----
src/hw/blockcmd.c | 8 +-------
src/hw/ramdisk.c | 6 +-----
src/hw/sdcard.c | 8 +-------
src/hw/virtio-blk.c | 8 +-------
9 files changed, 25 insertions(+), 45 deletions(-)
diff --git a/src/block.c b/src/block.c
index e534319..1d628f9 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 8182288..2fa52bd 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 ba02340..bf1d2a6 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 82fce42..ad813ce 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 d805706..d674f61 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 3128f0a..ecfeb5d 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 6b44c83..67ba59c 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 626f042..965543c 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 0a02a03..92a5546 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);
}
}
--
1.9.3
More information about the SeaBIOS
mailing list