]> xenbits.xensource.com Git - seabios.git/commitdiff
block: Introduce default_process_op() with common command handling codes
authorKevin O'Connor <kevin@koconnor.net>
Tue, 7 Jul 2015 13:01:52 +0000 (09:01 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Tue, 14 Jul 2015 18:40:07 +0000 (14:40 -0400)
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>
src/block.c
src/block.h
src/cdrom.c
src/hw/ahci.c
src/hw/ata.c
src/hw/blockcmd.c
src/hw/ramdisk.c
src/hw/sdcard.c
src/hw/virtio-blk.c

index e534319d7be7c7fd6bae9a49e0f95b144e32fbea..1d628f9c328acdaf483347f050560109aa8521cc 100644 (file)
@@ -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)
 {
index 8182288d4d12e97f1e98caf2ce1efa3a81d1dfd8..2fa52bda809193fa2999162f64e2b31266af9704 100644 (file)
@@ -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);
index ba0234057cfd4ff34efe2ef96df0e29f79cae483..bf1d2a6ea9f863ddce7256d949f1ff92f743072b 100644 (file)
@@ -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);
     }
 }
 
index 82fce429e9628193c6d471ca44f61f7eb4461099..ad813cec96e0be41f06a2b89b81961949506abdc 100644 (file)
@@ -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);
     }
 }
 
index d805706dd0c074191a9730d749fc08b48f32b075..d674f61468c762e8044b197e8dd8ef3f08b439e1 100644 (file)
@@ -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);
     }
 }
 
index 3128f0a5ff6ca3a276cbb3f08b39d59eea9f758f..ecfeb5d8b75f8d173fee1f9c5fb458604be0e8e4 100644 (file)
@@ -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);
     }
 }
 
index 6b44c8378fee9dcba38e876ed567844c082ea59a..67ba59c1c3b3eacc7f4206cdb10e18641b74565c 100644 (file)
@@ -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);
     }
 }
index 626f042634b1d42403fe54d505c9d93be42f9338..965543c56e63224484b7e7c9a92ae89ed6d601dc 100644 (file)
@@ -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);
     }
 }
 
index 0a02a03b7540a8b781eaf68dc52a4d4cd41f517d..92a5546b2aae3ba09fe16b95f32c20446702b2ef 100644 (file)
@@ -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);
     }
 }