diff options
Diffstat (limited to 'hw')
-rw-r--r-- | hw/cdrom.c | 2 | ||||
-rw-r--r-- | hw/esp.c | 2 | ||||
-rw-r--r-- | hw/ide/core.c | 2 | ||||
-rw-r--r-- | hw/lsi53c895a.c | 2 | ||||
-rw-r--r-- | hw/pci-hotplug.c | 2 | ||||
-rw-r--r-- | hw/scsi-bus.c | 2 | ||||
-rw-r--r-- | hw/scsi-disk.c | 2 | ||||
-rw-r--r-- | hw/scsi-generic.c | 2 | ||||
-rw-r--r-- | hw/scsi.h | 67 | ||||
-rw-r--r-- | hw/usb-msd.c | 2 |
10 files changed, 76 insertions, 9 deletions
diff --git a/hw/cdrom.c b/hw/cdrom.c index 87427a5a21..3b99535dce 100644 --- a/hw/cdrom.c +++ b/hw/cdrom.c @@ -26,7 +26,7 @@ here. */ #include "qemu-common.h" -#include "scsi-disk.h" +#include "scsi.h" static void lba_to_msf(uint8_t *buf, int lba) { @@ -23,7 +23,7 @@ */ #include "sysbus.h" -#include "scsi-disk.h" +#include "scsi.h" #include "esp.h" /* debug ESP card */ diff --git a/hw/ide/core.c b/hw/ide/core.c index eafb510b63..7b1ff8f957 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -25,7 +25,7 @@ #include <hw/hw.h> #include <hw/pc.h> #include <hw/pci.h> -#include <hw/scsi-disk.h> +#include <hw/scsi.h> #include <hw/sh.h> #include "block.h" #include "block_int.h" diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c index 379e1186fd..a0aa406bfa 100644 --- a/hw/lsi53c895a.c +++ b/hw/lsi53c895a.c @@ -14,7 +14,7 @@ #include "hw.h" #include "pci.h" -#include "scsi-disk.h" +#include "scsi.h" #include "block_int.h" //#define DEBUG_LSI diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c index 15a2dfb6d9..cea840993e 100644 --- a/hw/pci-hotplug.c +++ b/hw/pci-hotplug.c @@ -30,7 +30,7 @@ #include "pc.h" #include "monitor.h" #include "block_int.h" -#include "scsi-disk.h" +#include "scsi.h" #include "virtio-blk.h" #include "qemu-config.h" diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index 41992e52df..641db812f8 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -1,6 +1,6 @@ #include "hw.h" #include "sysemu.h" -#include "scsi-disk.h" +#include "scsi.h" #include "block.h" #include "qdev.h" diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 5da573d59e..a92b62f01b 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -29,7 +29,7 @@ do { fprintf(stderr, "scsi-disk: " fmt , ## __VA_ARGS__); } while (0) #include "qemu-common.h" #include "block.h" -#include "scsi-disk.h" +#include "scsi.h" #define SENSE_NO_SENSE 0 #define SENSE_NOT_READY 2 diff --git a/hw/scsi-generic.c b/hw/scsi-generic.c index 6a89989996..92ef7716b7 100644 --- a/hw/scsi-generic.c +++ b/hw/scsi-generic.c @@ -13,7 +13,7 @@ #include "qemu-common.h" #include "block.h" -#include "scsi-disk.h" +#include "scsi.h" #ifdef __linux__ diff --git a/hw/scsi.h b/hw/scsi.h new file mode 100644 index 0000000000..b6b6c12666 --- /dev/null +++ b/hw/scsi.h @@ -0,0 +1,67 @@ +#ifndef SCSI_DISK_H +#define SCSI_DISK_H + +#include "qdev.h" + +/* scsi-disk.c */ +enum scsi_reason { + SCSI_REASON_DONE, /* Command complete. */ + SCSI_REASON_DATA /* Transfer complete, more data required. */ +}; + +typedef struct SCSIBus SCSIBus; +typedef struct SCSIDevice SCSIDevice; +typedef struct SCSIDeviceInfo SCSIDeviceInfo; +typedef void (*scsi_completionfn)(SCSIBus *bus, int reason, uint32_t tag, + uint32_t arg); + +struct SCSIDevice +{ + DeviceState qdev; + uint32_t id; + SCSIDeviceInfo *info; +}; + +/* cdrom.c */ +int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track); +int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num); + +/* scsi-bus.c */ +typedef int (*scsi_qdev_initfn)(SCSIDevice *dev); +struct SCSIDeviceInfo { + DeviceInfo qdev; + scsi_qdev_initfn init; + void (*destroy)(SCSIDevice *s); + int32_t (*send_command)(SCSIDevice *s, uint32_t tag, uint8_t *buf, + int lun); + void (*read_data)(SCSIDevice *s, uint32_t tag); + int (*write_data)(SCSIDevice *s, uint32_t tag); + void (*cancel_io)(SCSIDevice *s, uint32_t tag); + uint8_t *(*get_buf)(SCSIDevice *s, uint32_t tag); +}; + +typedef void (*SCSIAttachFn)(DeviceState *host, BlockDriverState *bdrv, + int unit); +struct SCSIBus { + BusState qbus; + int busnr; + + int tcq, ndev; + scsi_completionfn complete; + + SCSIDevice *devs[8]; +}; + +void scsi_bus_new(SCSIBus *bus, DeviceState *host, int tcq, int ndev, + scsi_completionfn complete); +void scsi_qdev_register(SCSIDeviceInfo *info); + +static inline SCSIBus *scsi_bus_from_device(SCSIDevice *d) +{ + return DO_UPCAST(SCSIBus, qbus, d->qdev.parent_bus); +} + +SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, DriveInfo *dinfo, int unit); +void scsi_bus_legacy_handle_cmdline(SCSIBus *bus); + +#endif diff --git a/hw/usb-msd.c b/hw/usb-msd.c index 8dc494f9b4..bb39b625ad 100644 --- a/hw/usb-msd.c +++ b/hw/usb-msd.c @@ -12,7 +12,7 @@ #include "qemu-config.h" #include "usb.h" #include "block.h" -#include "scsi-disk.h" +#include "scsi.h" #include "console.h" #include "monitor.h" |