Commit 9be5dafe488088bcff8f8365bc7dd35d3dac5186
1 parent
86394e96
LSI SCSI qdev conversion
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
6 changed files
with
26 additions
and
52 deletions
hw/lsi53c895a.c
@@ -1939,9 +1939,9 @@ static void lsi_mmio_mapfunc(PCIDevice *pci_dev, int region_num, | @@ -1939,9 +1939,9 @@ static void lsi_mmio_mapfunc(PCIDevice *pci_dev, int region_num, | ||
1939 | cpu_register_physical_memory(addr + 0, 0x400, s->mmio_io_addr); | 1939 | cpu_register_physical_memory(addr + 0, 0x400, s->mmio_io_addr); |
1940 | } | 1940 | } |
1941 | 1941 | ||
1942 | -void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id) | 1942 | +void lsi_scsi_attach(DeviceState *host, BlockDriverState *bd, int id) |
1943 | { | 1943 | { |
1944 | - LSIState *s = (LSIState *)opaque; | 1944 | + LSIState *s = (LSIState *)host; |
1945 | 1945 | ||
1946 | if (id < 0) { | 1946 | if (id < 0) { |
1947 | for (id = 0; id < LSI_MAX_DEVS; id++) { | 1947 | for (id = 0; id < LSI_MAX_DEVS; id++) { |
@@ -1976,18 +1976,11 @@ static int lsi_scsi_uninit(PCIDevice *d) | @@ -1976,18 +1976,11 @@ static int lsi_scsi_uninit(PCIDevice *d) | ||
1976 | return 0; | 1976 | return 0; |
1977 | } | 1977 | } |
1978 | 1978 | ||
1979 | -void *lsi_scsi_init(PCIBus *bus, int devfn) | 1979 | +static void lsi_scsi_init(PCIDevice *dev) |
1980 | { | 1980 | { |
1981 | - LSIState *s; | 1981 | + LSIState *s = (LSIState *)dev; |
1982 | uint8_t *pci_conf; | 1982 | uint8_t *pci_conf; |
1983 | 1983 | ||
1984 | - s = (LSIState *)pci_register_device(bus, "LSI53C895A SCSI HBA", | ||
1985 | - sizeof(*s), devfn, NULL, NULL); | ||
1986 | - if (s == NULL) { | ||
1987 | - fprintf(stderr, "lsi-scsi: Failed to register PCI device\n"); | ||
1988 | - return NULL; | ||
1989 | - } | ||
1990 | - | ||
1991 | pci_conf = s->pci_dev.config; | 1984 | pci_conf = s->pci_dev.config; |
1992 | 1985 | ||
1993 | /* PCI Vendor ID (word) */ | 1986 | /* PCI Vendor ID (word) */ |
@@ -2022,5 +2015,12 @@ void *lsi_scsi_init(PCIBus *bus, int devfn) | @@ -2022,5 +2015,12 @@ void *lsi_scsi_init(PCIBus *bus, int devfn) | ||
2022 | 2015 | ||
2023 | lsi_soft_reset(s); | 2016 | lsi_soft_reset(s); |
2024 | 2017 | ||
2025 | - return s; | 2018 | + scsi_bus_new(&dev->qdev, lsi_scsi_attach); |
2026 | } | 2019 | } |
2020 | + | ||
2021 | +static void lsi53c895a_register_devices(void) | ||
2022 | +{ | ||
2023 | + pci_qdev_register("lsi53c895a", sizeof(LSIState), lsi_scsi_init); | ||
2024 | +} | ||
2025 | + | ||
2026 | +device_init(lsi53c895a_register_devices); |
hw/pc.c
@@ -1122,19 +1122,11 @@ static void pc_init1(ram_addr_t ram_size, | @@ -1122,19 +1122,11 @@ static void pc_init1(ram_addr_t ram_size, | ||
1122 | 1122 | ||
1123 | if (pci_enabled) { | 1123 | if (pci_enabled) { |
1124 | int max_bus; | 1124 | int max_bus; |
1125 | - int bus, unit; | ||
1126 | - void *scsi; | 1125 | + int bus; |
1127 | 1126 | ||
1128 | max_bus = drive_get_max_bus(IF_SCSI); | 1127 | max_bus = drive_get_max_bus(IF_SCSI); |
1129 | - | ||
1130 | for (bus = 0; bus <= max_bus; bus++) { | 1128 | for (bus = 0; bus <= max_bus; bus++) { |
1131 | - scsi = lsi_scsi_init(pci_bus, -1); | ||
1132 | - for (unit = 0; unit < LSI_MAX_DEVS; unit++) { | ||
1133 | - index = drive_get_index(IF_SCSI, bus, unit); | ||
1134 | - if (index == -1) | ||
1135 | - continue; | ||
1136 | - lsi_scsi_attach(scsi, drives_table[index].bdrv, unit); | ||
1137 | - } | 1129 | + pci_create_simple(pci_bus, -1, "lsi53c895a"); |
1138 | } | 1130 | } |
1139 | } | 1131 | } |
1140 | 1132 |
hw/pci-hotplug.c
@@ -71,8 +71,8 @@ void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts) | @@ -71,8 +71,8 @@ void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts) | ||
71 | switch (type) { | 71 | switch (type) { |
72 | case IF_SCSI: | 72 | case IF_SCSI: |
73 | success = 1; | 73 | success = 1; |
74 | - lsi_scsi_attach (dev, drives_table[drive_idx].bdrv, | ||
75 | - drives_table[drive_idx].unit); | 74 | + lsi_scsi_attach(&dev->qdev, drives_table[drive_idx].bdrv, |
75 | + drives_table[drive_idx].unit); | ||
76 | break; | 76 | break; |
77 | default: | 77 | default: |
78 | monitor_printf(mon, "Can't hot-add drive to type %d\n", type); | 78 | monitor_printf(mon, "Can't hot-add drive to type %d\n", type); |
@@ -117,10 +117,7 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon, PCIBus *pci_bus, | @@ -117,10 +117,7 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon, PCIBus *pci_bus, | ||
117 | 117 | ||
118 | switch (type) { | 118 | switch (type) { |
119 | case IF_SCSI: | 119 | case IF_SCSI: |
120 | - opaque = lsi_scsi_init (pci_bus, -1); | ||
121 | - if (opaque && drive_idx >= 0) | ||
122 | - lsi_scsi_attach (opaque, drives_table[drive_idx].bdrv, | ||
123 | - drives_table[drive_idx].unit); | 120 | + opaque = pci_create_simple(pci_bus, -1, "lsi53c895a"); |
124 | break; | 121 | break; |
125 | case IF_VIRTIO: | 122 | case IF_VIRTIO: |
126 | opaque = virtio_blk_init (pci_bus, drives_table[drive_idx].bdrv); | 123 | opaque = virtio_blk_init (pci_bus, drives_table[drive_idx].bdrv); |
hw/pci.h
@@ -227,8 +227,7 @@ PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name); | @@ -227,8 +227,7 @@ PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name); | ||
227 | 227 | ||
228 | /* lsi53c895a.c */ | 228 | /* lsi53c895a.c */ |
229 | #define LSI_MAX_DEVS 7 | 229 | #define LSI_MAX_DEVS 7 |
230 | -void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id); | ||
231 | -void *lsi_scsi_init(PCIBus *bus, int devfn); | 230 | +void lsi_scsi_attach(DeviceState *host, BlockDriverState *bd, int id); |
232 | 231 | ||
233 | /* vmware_vga.c */ | 232 | /* vmware_vga.c */ |
234 | void pci_vmsvga_init(PCIBus *bus); | 233 | void pci_vmsvga_init(PCIBus *bus); |
hw/realview.c
@@ -32,7 +32,6 @@ static void realview_init(ram_addr_t ram_size, | @@ -32,7 +32,6 @@ static void realview_init(ram_addr_t ram_size, | ||
32 | CPUState *env; | 32 | CPUState *env; |
33 | ram_addr_t ram_offset; | 33 | ram_addr_t ram_offset; |
34 | qemu_irq *pic; | 34 | qemu_irq *pic; |
35 | - void *scsi_hba; | ||
36 | PCIBus *pci_bus; | 35 | PCIBus *pci_bus; |
37 | NICInfo *nd; | 36 | NICInfo *nd; |
38 | int n; | 37 | int n; |
@@ -111,16 +110,10 @@ static void realview_init(ram_addr_t ram_size, | @@ -111,16 +110,10 @@ static void realview_init(ram_addr_t ram_size, | ||
111 | if (usb_enabled) { | 110 | if (usb_enabled) { |
112 | usb_ohci_init_pci(pci_bus, 3, -1); | 111 | usb_ohci_init_pci(pci_bus, 3, -1); |
113 | } | 112 | } |
114 | - if (drive_get_max_bus(IF_SCSI) > 0) { | ||
115 | - fprintf(stderr, "qemu: too many SCSI bus\n"); | ||
116 | - exit(1); | ||
117 | - } | ||
118 | - scsi_hba = lsi_scsi_init(pci_bus, -1); | ||
119 | - for (n = 0; n < LSI_MAX_DEVS; n++) { | ||
120 | - index = drive_get_index(IF_SCSI, 0, n); | ||
121 | - if (index == -1) | ||
122 | - continue; | ||
123 | - lsi_scsi_attach(scsi_hba, drives_table[index].bdrv, n); | 113 | + n = drive_get_max_bus(IF_SCSI); |
114 | + while (n >= 0) { | ||
115 | + pci_create_simple(pci_bus, -1, "lsi53c895a"); | ||
116 | + n--; | ||
124 | } | 117 | } |
125 | for(n = 0; n < nb_nics; n++) { | 118 | for(n = 0; n < nb_nics; n++) { |
126 | nd = &nd_table[n]; | 119 | nd = &nd_table[n]; |
hw/versatilepb.c
@@ -163,7 +163,6 @@ static void versatile_init(ram_addr_t ram_size, | @@ -163,7 +163,6 @@ static void versatile_init(ram_addr_t ram_size, | ||
163 | ram_addr_t ram_offset; | 163 | ram_addr_t ram_offset; |
164 | qemu_irq *pic; | 164 | qemu_irq *pic; |
165 | qemu_irq *sic; | 165 | qemu_irq *sic; |
166 | - void *scsi_hba; | ||
167 | PCIBus *pci_bus; | 166 | PCIBus *pci_bus; |
168 | NICInfo *nd; | 167 | NICInfo *nd; |
169 | int n; | 168 | int n; |
@@ -206,16 +205,10 @@ static void versatile_init(ram_addr_t ram_size, | @@ -206,16 +205,10 @@ static void versatile_init(ram_addr_t ram_size, | ||
206 | if (usb_enabled) { | 205 | if (usb_enabled) { |
207 | usb_ohci_init_pci(pci_bus, 3, -1); | 206 | usb_ohci_init_pci(pci_bus, 3, -1); |
208 | } | 207 | } |
209 | - if (drive_get_max_bus(IF_SCSI) > 0) { | ||
210 | - fprintf(stderr, "qemu: too many SCSI bus\n"); | ||
211 | - exit(1); | ||
212 | - } | ||
213 | - scsi_hba = lsi_scsi_init(pci_bus, -1); | ||
214 | - for (n = 0; n < LSI_MAX_DEVS; n++) { | ||
215 | - index = drive_get_index(IF_SCSI, 0, n); | ||
216 | - if (index == -1) | ||
217 | - continue; | ||
218 | - lsi_scsi_attach(scsi_hba, drives_table[index].bdrv, n); | 208 | + n = drive_get_max_bus(IF_SCSI); |
209 | + while (n >= 0) { | ||
210 | + pci_create_simple(pci_bus, -1, "lsi53c895a"); | ||
211 | + n--; | ||
219 | } | 212 | } |
220 | 213 | ||
221 | sysbus_create_simple("pl011", 0x101f1000, pic[12]); | 214 | sysbus_create_simple("pl011", 0x101f1000, pic[12]); |