aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--src/block.c8
-rw-r--r--src/hw/blockcmd.c5
-rw-r--r--src/hw/virtio-blk.c2
4 files changed, 10 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index f97b1bd..e287530 100644
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,6 @@ SRCBOTH=misc.c stacks.c output.c string.c block.c cdrom.c disk.c mouse.c kbd.c \
hw/usb.c hw/usb-uhci.c hw/usb-ohci.c hw/usb-ehci.c \
hw/usb-hid.c hw/usb-msc.c hw/usb-uas.c \
hw/blockcmd.c hw/floppy.c hw/ata.c hw/ramdisk.c \
- hw/virtio-ring.c hw/virtio-pci.c hw/virtio-blk.c hw/virtio-scsi.c \
hw/lsi-scsi.c hw/esp-scsi.c hw/megasas.c
SRC16=$(SRCBOTH)
SRC32FLAT=$(SRCBOTH) post.c memmap.c malloc.c romfile.c x86.c optionroms.c \
@@ -43,6 +42,7 @@ SRC32FLAT=$(SRCBOTH) post.c memmap.c malloc.c romfile.c x86.c optionroms.c \
fw/coreboot.c fw/lzmadecode.c fw/multiboot.c fw/csm.c fw/biostables.c \
fw/paravirt.c fw/shadow.c fw/pciinit.c fw/smm.c fw/smp.c fw/mtrr.c fw/xen.c \
fw/acpi.c fw/mptable.c fw/pirtable.c fw/smbios.c fw/romfile_loader.c \
+ hw/virtio-ring.c hw/virtio-pci.c hw/virtio-blk.c hw/virtio-scsi.c \
hw/tpm_drivers.c
SRC32SEG=string.c output.c pcibios.c apm.c stacks.c hw/pci.c hw/serialio.c
DIRS=src src/hw src/fw vgasrc
diff --git a/src/block.c b/src/block.c
index 3f7ecb1..a9b9851 100644
--- a/src/block.c
+++ b/src/block.c
@@ -503,8 +503,10 @@ process_op(struct disk_op_s *op)
case DTYPE_CDEMU:
ret = process_cdemu_op(op);
break;
- case DTYPE_VIRTIO_BLK:
- ret = process_virtio_blk_op(op);
+ case DTYPE_VIRTIO_BLK: ;
+ extern void _cfunc32flat_process_virtio_blk_op(void);
+ ret = call32(_cfunc32flat_process_virtio_blk_op
+ , (u32)MAKE_FLATPTR(GET_SEG(SS), op), DISK_RET_EPARAM);
break;
case DTYPE_AHCI: ;
extern void _cfunc32flat_process_ahci_op(void);
@@ -526,7 +528,6 @@ process_op(struct disk_op_s *op)
break;
case DTYPE_USB:
case DTYPE_UAS:
- case DTYPE_VIRTIO_SCSI:
case DTYPE_LSI_SCSI:
case DTYPE_ESP_SCSI:
case DTYPE_MEGASAS:
@@ -534,6 +535,7 @@ process_op(struct disk_op_s *op)
break;
case DTYPE_USB_32:
case DTYPE_UAS_32:
+ case DTYPE_VIRTIO_SCSI:
case DTYPE_PVSCSI: ;
extern void _cfunc32flat_scsi_process_op(void);
ret = call32(_cfunc32flat_scsi_process_op
diff --git a/src/hw/blockcmd.c b/src/hw/blockcmd.c
index 78c0e65..4440201 100644
--- a/src/hw/blockcmd.c
+++ b/src/hw/blockcmd.c
@@ -35,14 +35,15 @@ cdb_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize)
return usb_cmd_data(op, cdbcmd, blocksize);
case DTYPE_UAS:
return uas_cmd_data(op, cdbcmd, blocksize);
- case DTYPE_VIRTIO_SCSI:
- return virtio_scsi_cmd_data(op, cdbcmd, blocksize);
case DTYPE_LSI_SCSI:
return lsi_scsi_cmd_data(op, cdbcmd, blocksize);
case DTYPE_ESP_SCSI:
return esp_scsi_cmd_data(op, cdbcmd, blocksize);
case DTYPE_MEGASAS:
return megasas_cmd_data(op, cdbcmd, blocksize);
+ case DTYPE_VIRTIO_SCSI:
+ if (!MODESEGMENT)
+ return virtio_scsi_cmd_data(op, cdbcmd, blocksize);
case DTYPE_USB_32:
if (!MODESEGMENT)
return usb_cmd_data(op, cdbcmd, blocksize);
diff --git a/src/hw/virtio-blk.c b/src/hw/virtio-blk.c
index e2dbd3c..15ac171 100644
--- a/src/hw/virtio-blk.c
+++ b/src/hw/virtio-blk.c
@@ -77,7 +77,7 @@ virtio_blk_op(struct disk_op_s *op, int write)
return status == VIRTIO_BLK_S_OK ? DISK_RET_SUCCESS : DISK_RET_EBADTRACK;
}
-int
+int VISIBLE32FLAT
process_virtio_blk_op(struct disk_op_s *op)
{
if (! CONFIG_VIRTIO_BLK)