Push use of 'struct pci_device' to bootprio_find_pci_rom().
[seabios.git] / src / blockcmd.c
index 5efbdce51723b500b8f2540232659e85aaca6520..c9c6845ae752540ca35f6887be2b9b3387e45e06 100644 (file)
 #include "disk.h" // struct disk_op_s
 #include "blockcmd.h" // struct cdb_request_sense
 #include "ata.h" // atapi_cmd_data
+#include "ahci.h" // atapi_cmd_data
+#include "usb-msc.h" // usb_cmd_data
 
+// Route command to low-level handler.
 static int
 cdb_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize)
 {
@@ -18,12 +21,28 @@ cdb_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize)
     switch (type) {
     case DTYPE_ATAPI:
         return atapi_cmd_data(op, cdbcmd, blocksize);
+    case DTYPE_USB:
+        return usb_cmd_data(op, cdbcmd, blocksize);
+    case DTYPE_AHCI:
+        return ahci_cmd_data(op, cdbcmd, blocksize);
     default:
         op->count = 0;
         return DISK_RET_EPARAM;
     }
 }
 
+int
+cdb_get_inquiry(struct disk_op_s *op, struct cdbres_inquiry *data)
+{
+    struct cdb_request_sense cmd;
+    memset(&cmd, 0, sizeof(cmd));
+    cmd.command = CDB_CMD_INQUIRY;
+    cmd.length = sizeof(*data);
+    op->count = 1;
+    op->buf_fl = data;
+    return cdb_cmd_data(op, &cmd, sizeof(*data));
+}
+
 // Request SENSE
 int
 cdb_get_sense(struct disk_op_s *op, struct cdbres_request_sense *data)
@@ -58,5 +77,5 @@ cdb_read(struct disk_op_s *op)
     cmd.command = CDB_CMD_READ_10;
     cmd.lba = htonl(op->lba);
     cmd.count = htons(op->count);
-    return cdb_cmd_data(op, &cmd, CDROM_SECTOR_SIZE);
+    return cdb_cmd_data(op, &cmd, GET_GLOBAL(op->drive_g->blksize));
 }