[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 02/25] virtio: run drivers in 32bit mode
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH v3 02/25] virtio: run drivers in 32bit mode |
Date: |
Wed, 1 Jul 2015 16:40:47 +0200 |
virtio version 1.0 registers can (and actually do in the qemu
implementation) live in mmio space. So we must run the blk and
scsi virtio drivers in 32bit mode, otherwise we can't access them.
This also allows to drop a bunch of GET_LOWFLAT calls from the virtio
code in the following patches.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
Makefile | 2 +-
src/block.c | 8 +++++---
src/hw/blockcmd.c | 5 +++--
src/hw/virtio-blk.c | 2 +-
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)
--
1.8.3.1
- [Qemu-devel] [PATCH v3 00/25] virtio: add version 1.0 support, move to 32bit, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 04/25] virtio: pass struct pci_device to vp_init_simple, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 01/25] pci: allow to loop over capabilities, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 06/25] virtio: add version 0.9.5 struct, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 08/25] virtio: create vp_cap struct for legacy bar, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 02/25] virtio: run drivers in 32bit mode,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH v3 10/25] virtio: make features 64bit, support version 1.0 features, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 03/25] virtio: add struct vp_device, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 09/25] virtio: add read/write functions and macros, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 05/25] virtio: add version 1.0 structs and #defines, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 15/25] virtio: remove unused vp_del_vq, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 19/25] virtio: use version 1.0 if available (flip the big switch), Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 12/25] virtio: add version 1.0 support to vp_get_isr, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 11/25] virtio: add version 1.0 support to vp_{get, set}_status, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 23/25] virtio-scsi: 32bit cleanup, Gerd Hoffmann, 2015/07/01
- [Qemu-devel] [PATCH v3 13/25] virtio: add version 1.0 support to vp_reset, Gerd Hoffmann, 2015/07/01