Signed-off-by: Kevin O'Connor kevin@koconnor.net --- src/block.c | 3 ++- src/hw/blockcmd.c | 3 --- src/hw/megasas.c | 12 +++++++----- src/hw/megasas.h | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/block.c b/src/block.c index b76c6e2..d4bf029 100644 --- a/src/block.c +++ b/src/block.c @@ -12,6 +12,7 @@ #include "hw/blockcmd.h" // cdb_* #include "hw/esp-scsi.h" // esp_scsi_process_op #include "hw/lsi-scsi.h" // lsi_scsi_process_op +#include "hw/megasas.h" // megasas_process_op #include "hw/pci.h" // pci_bdf_to_bus #include "hw/rtc.h" // rtc_read #include "hw/usb-msc.h" // usb_process_op @@ -504,7 +505,7 @@ process_op_both(struct disk_op_s *op) case DTYPE_ESP_SCSI: return esp_scsi_process_op(op); case DTYPE_MEGASAS: - return scsi_process_op(op); + return megasas_process_op(op); default: if (!MODESEGMENT) return DISK_RET_EPARAM; diff --git a/src/hw/blockcmd.c b/src/hw/blockcmd.c index 8b6c122..b0a512b 100644 --- a/src/hw/blockcmd.c +++ b/src/hw/blockcmd.c @@ -9,7 +9,6 @@ #include "block.h" // struct disk_op_s #include "blockcmd.h" // struct cdb_request_sense #include "byteorder.h" // be32_to_cpu -#include "megasas.h" // megasas_cmd_data #include "pvscsi.h" // pvscsi_cmd_data #include "output.h" // dprintf #include "std/disk.h" // DISK_RET_EPARAM @@ -23,8 +22,6 @@ cdb_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize) { u8 type = GET_GLOBALFLAT(op->drive_gf->type); switch (type) { - case DTYPE_MEGASAS: - return megasas_cmd_data(op, cdbcmd, blocksize); case DTYPE_VIRTIO_SCSI: if (!MODESEGMENT) return virtio_scsi_cmd_data(op, cdbcmd, blocksize); diff --git a/src/hw/megasas.c b/src/hw/megasas.c index 6677977..5a07ab3 100644 --- a/src/hw/megasas.c +++ b/src/hw/megasas.c @@ -157,18 +157,20 @@ static int megasas_fire_cmd(u16 pci_id, u32 ioaddr, }
int -megasas_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize) +megasas_process_op(struct disk_op_s *op) { + if (!CONFIG_MEGASAS) + return DISK_RET_EBADTRACK; + u8 cdb[16]; + int blocksize = scsi_fill_cmd(op, cdb, sizeof(cdb)); + if (blocksize < 0) + return default_process_op(op); struct megasas_lun_s *mlun_gf = container_of(op->drive_gf, struct megasas_lun_s, drive); - u8 *cdb = cdbcmd; struct megasas_cmd_frame *frame = GET_GLOBALFLAT(mlun_gf->frame); u16 pci_id = GET_GLOBALFLAT(mlun_gf->pci_id); int i;
- if (!CONFIG_MEGASAS) - return DISK_RET_EBADTRACK; - memset_fl(frame, 0, sizeof(*frame)); SET_LOWFLAT(frame->cmd, MFI_CMD_LD_SCSI_IO); SET_LOWFLAT(frame->cmd_status, 0xFF); diff --git a/src/hw/megasas.h b/src/hw/megasas.h index 124042e..ed0e4f0 100644 --- a/src/hw/megasas.h +++ b/src/hw/megasas.h @@ -2,7 +2,7 @@ #define __MEGASAS_H
struct disk_op_s; -int megasas_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize); +int megasas_process_op(struct disk_op_s *op); void megasas_setup(void);
#endif /* __MEGASAS_H */