aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2015-07-07 09:01:52 -0400
committerKevin O'Connor <kevin@koconnor.net>2015-07-14 14:40:07 -0400
commit85c72c6febbf7f4654c9ac57a8506dc5e1a5cba1 (patch)
treea15ca0dc8bdff1589f620c5332b424b0a0a8d510 /src
parentc7fa7890200afd86e42813ce1bdbc1b32fcfccc5 (diff)
downloadseabios-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.c17
-rw-r--r--src/block.h1
-rw-r--r--src/cdrom.c7
-rw-r--r--src/hw/ahci.c9
-rw-r--r--src/hw/ata.c6
-rw-r--r--src/hw/blockcmd.c8
-rw-r--r--src/hw/ramdisk.c6
-rw-r--r--src/hw/sdcard.c8
-rw-r--r--src/hw/virtio-blk.c8
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);
}
}