]> xenbits.xensource.com Git - qemu-xen-4.2-testing.git/commitdiff
ide: pass down DriveInfo instead of BlockDriverState
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 28 Aug 2009 13:47:03 +0000 (15:47 +0200)
committerAnthony Liguori <aliguori@us.ibm.com>
Fri, 4 Sep 2009 14:37:27 +0000 (09:37 -0500)
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
19 files changed:
hw/ide.h
hw/ide/core.c
hw/ide/internal.h
hw/ide/isa.c
hw/ide/macio.c
hw/ide/microdrive.c
hw/ide/mmio.c
hw/ide/pci.c
hw/mips_malta.c
hw/mips_r4k.c
hw/pc.c
hw/pcmcia.h
hw/ppc_newworld.c
hw/ppc_oldworld.c
hw/ppc_prep.c
hw/r2d.c
hw/spitz.c
hw/sun4u.c
hw/tosa.c

index 56cf4ec5e997350afb761f862e8b2323c0c48fde..08bebb4bbd3dccee8709259a4784d59423c78fba 100644 (file)
--- a/hw/ide.h
+++ b/hw/ide.h
@@ -5,23 +5,23 @@
 
 /* ide-isa.c */
 void isa_ide_init(int iobase, int iobase2, qemu_irq irq,
-                  BlockDriverState *hd0, BlockDriverState *hd1);
+                  DriveInfo *hd0, DriveInfo *hd1);
 
 /* ide-pci.c */
-void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
+void pci_cmd646_ide_init(PCIBus *bus, DriveInfo **hd_table,
                          int secondary_ide_enabled);
-void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
+void pci_piix3_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn,
                         qemu_irq *pic);
-void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
+void pci_piix4_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn,
                         qemu_irq *pic);
 
 /* ide-macio.c */
-int pmac_ide_init (BlockDriverState **hd_table, qemu_irq irq,
+int pmac_ide_init (DriveInfo **hd_table, qemu_irq irq,
                   void *dbdma, int channel, qemu_irq dma_irq);
 
 /* ide-mmio.c */
 void mmio_ide_init (target_phys_addr_t membase, target_phys_addr_t membase2,
                     qemu_irq irq, int shift,
-                    BlockDriverState *hd0, BlockDriverState *hd1);
+                    DriveInfo *hd0, DriveInfo *hd1);
 
 #endif /* HW_IDE_H */
index 79a3a9c7adf00613258a3469a4e75bcb74fee80e..572a19dab46bc4ec765b8933ea2c3618f6178dfb 100644 (file)
@@ -2506,7 +2506,7 @@ void ide_reset(IDEState *s)
     s->media_changed = 0;
 }
 
-void ide_init2(IDEBus *bus, BlockDriverState *hd0, BlockDriverState *hd1,
+void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1,
                qemu_irq irq)
 {
     IDEState *s;
@@ -2518,7 +2518,10 @@ void ide_init2(IDEBus *bus, BlockDriverState *hd0, BlockDriverState *hd1,
         s = bus->ifs + i;
         s->bus = bus;
         s->unit = i;
-        s->bs = (i == 0) ? hd0 : hd1;
+        if (i == 0 && hd0)
+            s->bs = hd0->bdrv;
+        if (i == 1 && hd1)
+            s->bs = hd1->bdrv;
         s->io_buffer = qemu_blockalign(s->bs, IDE_DMA_BUF_SECTORS*512 + 4);
         if (s->bs) {
             bdrv_get_geometry(s->bs, &nb_sectors);
index 8766a3ae2c9806cd83471a3dd0c9a58ae1913a03..1420e253aae3a318eb6d87a034cc3369c17b1001 100644 (file)
@@ -528,7 +528,7 @@ uint32_t ide_data_readw(void *opaque, uint32_t addr);
 void ide_data_writel(void *opaque, uint32_t addr, uint32_t val);
 uint32_t ide_data_readl(void *opaque, uint32_t addr);
 
-void ide_init2(IDEBus *bus, BlockDriverState *hd0, BlockDriverState *hd1,
+void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1,
                qemu_irq irq);
 void ide_init_ioport(IDEBus *bus, int iobase, int iobase2);
 
index aa026c7a627bdb5d2b9bedd28f5cc34bc6e9a5cf..ec2d6fbd8703429e5f3594ca7ea0335cf4a5af81 100644 (file)
@@ -58,7 +58,7 @@ static int isa_ide_load(QEMUFile* f, void *opaque, int version_id)
 }
 
 void isa_ide_init(int iobase, int iobase2, qemu_irq irq,
-                  BlockDriverState *hd0, BlockDriverState *hd1)
+                  DriveInfo *hd0, DriveInfo *hd1)
 {
     ISAIDEState *s;
 
index 820cc77be392708342a9c84ff15bea5a75c50050..da2baa0fc11e3509f8902c0c9e5b08250258cb6e 100644 (file)
@@ -334,7 +334,7 @@ static void pmac_ide_reset(void *opaque)
 /* hd_table must contain 4 block drivers */
 /* PowerMac uses memory mapped registers, not I/O. Return the memory
    I/O index to access the ide. */
-int pmac_ide_init (BlockDriverState **hd_table, qemu_irq irq,
+int pmac_ide_init (DriveInfo **hd_table, qemu_irq irq,
                   void *dbdma, int channel, qemu_irq dma_irq)
 {
     MACIOIDEState *d;
index a735452e50b0a55caeb9c47536ee5e83597b286f..887cde3c304137fde52d4f51406f2052b9a04bd3 100644 (file)
@@ -555,7 +555,7 @@ static int dscm1xxxx_detach(void *opaque)
     return 0;
 }
 
-PCMCIACardState *dscm1xxxx_init(BlockDriverState *bdrv)
+PCMCIACardState *dscm1xxxx_init(DriveInfo *bdrv)
 {
     MicroDriveState *md = (MicroDriveState *) qemu_mallocz(sizeof(MicroDriveState));
     md->card.state = md;
index 99ddf9d4d951e92874eb99092bb8f4743c438976..acaa900c89de8122add0b229ea353cca9ca74c7c 100644 (file)
@@ -124,7 +124,7 @@ static int mmio_ide_load(QEMUFile* f, void *opaque, int version_id)
 
 void mmio_ide_init (target_phys_addr_t membase, target_phys_addr_t membase2,
                     qemu_irq irq, int shift,
-                    BlockDriverState *hd0, BlockDriverState *hd1)
+                    DriveInfo *hd0, DriveInfo *hd1)
 {
     MMIOState *s = qemu_mallocz(sizeof(MMIOState));
     IDEBus *bus = qemu_mallocz(sizeof(*bus));
index a3d6bd0dc6bc945e0c3e5e6588dc1576591987bb..0e8583a040e8e85292c938c40ba4aec9f7265bd8 100644 (file)
@@ -375,7 +375,7 @@ static void cmd646_reset(void *opaque)
 }
 
 /* CMD646 PCI IDE controller */
-void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
+void pci_cmd646_ide_init(PCIBus *bus, DriveInfo **hd_table,
                          int secondary_ide_enabled)
 {
     PCIIDEState *d;
@@ -443,12 +443,11 @@ static void piix3_reset(void *opaque)
 
 /* hd_table must contain 4 block drivers */
 /* NOTE: for the PIIX3, the IRQs and IOports are hardcoded */
-void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
+void pci_piix3_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn,
                         qemu_irq *pic)
 {
     PCIIDEState *d;
     uint8_t *pci_conf;
-    int i;
 
     /* register a function 1 of PIIX3 */
     d = (PCIIDEState *)pci_register_device(bus, "PIIX3 IDE",
@@ -475,16 +474,12 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
     ide_init_ioport(&d->bus[0], 0x1f0, 0x3f6);
     ide_init_ioport(&d->bus[1], 0x170, 0x376);
 
-    for (i = 0; i < 4; i++)
-        if (hd_table[i])
-            hd_table[i]->private = &d->dev;
-
     register_savevm("ide", 0, 3, pci_ide_save, pci_ide_load, d);
 }
 
 /* hd_table must contain 4 block drivers */
 /* NOTE: for the PIIX4, the IRQs and IOports are hardcoded */
-void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
+void pci_piix4_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn,
                         qemu_irq *pic)
 {
     PCIIDEState *d;
index a70d79edb833f3e3cea7bf4202fdff9254744986..275f72c65064cb4b26dc488a6ace1499620b4604 100644 (file)
@@ -775,7 +775,7 @@ void mips_malta_init (ram_addr_t ram_size,
     i2c_bus *smbus;
     int i;
     DriveInfo *dinfo;
-    BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
+    DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     BlockDriverState *fd[MAX_FD];
     int fl_idx = 0;
     int fl_sectors = 0;
@@ -899,8 +899,7 @@ void mips_malta_init (ram_addr_t ram_size,
     }
 
     for(i = 0; i < MAX_IDE_BUS * MAX_IDE_DEVS; i++) {
-        dinfo = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
-        hd[i] = dinfo ? dinfo->bdrv : NULL;
+        hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
     }
 
     piix4_devfn = piix4_init(pci_bus, 80);
index 24c188430f1ddcdb895578d051817586c2af2d29..da5ca319c8e6adf12e7acfa3c8c2c576e064bc8a 100644 (file)
@@ -156,7 +156,7 @@ void mips_r4k_init (ram_addr_t ram_size,
     RTCState *rtc_state;
     int i;
     qemu_irq *i8259;
-    BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
+    DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     DriveInfo *dinfo;
 
     /* init CPUs */
@@ -268,8 +268,7 @@ void mips_r4k_init (ram_addr_t ram_size,
     }
 
     for(i = 0; i < MAX_IDE_BUS * MAX_IDE_DEVS; i++) {
-        dinfo = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
-        hd[i] = dinfo ? dinfo->bdrv : NULL;
+        hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
     }
 
     for(i = 0; i < MAX_IDE_BUS; i++)
diff --git a/hw/pc.c b/hw/pc.c
index e771170f81df3aaa316e5c418b5884d73725a4ae..9004393a99da5529d0d814c0f3172ba3ad81e113 100644 (file)
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -264,7 +264,7 @@ static int pc_boot_set(void *opaque, const char *boot_device)
 
 /* hd_table must contain 4 block drivers */
 static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
-                      const char *boot_device, BlockDriverState **hd_table)
+                      const char *boot_device, DriveInfo **hd_table)
 {
     RTCState *s = rtc_state;
     int nbds, bds[3] = { 0, };
@@ -355,9 +355,9 @@ static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
 
     rtc_set_memory(s, 0x12, (hd_table[0] ? 0xf0 : 0) | (hd_table[1] ? 0x0f : 0));
     if (hd_table[0])
-        cmos_init_hd(0x19, 0x1b, hd_table[0]);
+        cmos_init_hd(0x19, 0x1b, hd_table[0]->bdrv);
     if (hd_table[1])
-        cmos_init_hd(0x1a, 0x24, hd_table[1]);
+        cmos_init_hd(0x1a, 0x24, hd_table[1]->bdrv);
 
     val = 0;
     for (i = 0; i < 4; i++) {
@@ -367,9 +367,9 @@ static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
                 geometry.  It is always such that: 1 <= sects <= 63, 1
                 <= heads <= 16, 1 <= cylinders <= 16383. The BIOS
                 geometry can be different if a translation is done. */
-            translation = bdrv_get_translation_hint(hd_table[i]);
+            translation = bdrv_get_translation_hint(hd_table[i]->bdrv);
             if (translation == BIOS_ATA_TRANSLATION_AUTO) {
-                bdrv_get_geometry_hint(hd_table[i], &cylinders, &heads, &sectors);
+                bdrv_get_geometry_hint(hd_table[i]->bdrv, &cylinders, &heads, &sectors);
                 if (cylinders <= 1024 && heads <= 16 && sectors <= 63) {
                     /* No translation. */
                     translation = 0;
@@ -1131,7 +1131,7 @@ static void pc_init1(ram_addr_t ram_size,
     qemu_irq *i8259;
     IsaIrqState *isa_irq_state;
     DriveInfo *dinfo;
-    BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
+    DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     BlockDriverState *fd[MAX_FD];
     int using_vga = cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled;
     void *fw_cfg;
@@ -1359,8 +1359,7 @@ static void pc_init1(ram_addr_t ram_size,
     }
 
     for(i = 0; i < MAX_IDE_BUS * MAX_IDE_DEVS; i++) {
-        dinfo = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
-        hd[i] = dinfo ? dinfo->bdrv : NULL;
+        hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
     }
 
     if (pci_enabled) {
index 7171504fcec10ac45208d4c592702bca6acc02d8..cf2db9d32530e163c2d9e94a11183a9ff55834a4 100644 (file)
@@ -1,6 +1,7 @@
 /* PCMCIA/Cardbus */
 
 #include "qemu-common.h"
+#include "sysemu.h"
 
 typedef struct {
     qemu_irq irq;
@@ -48,4 +49,4 @@ struct PCMCIACardState {
 #define CISTPL_ENDMARK         0xff
 
 /* dscm1xxxx.c */
-PCMCIACardState *dscm1xxxx_init(BlockDriverState *bdrv);
+PCMCIACardState *dscm1xxxx_init(DriveInfo *bdrv);
index 3ad00572e20b0333bcf69ac19f86e943bccc8841..4951ea745cd96698ae59b13f7686367504331112 100644 (file)
@@ -107,8 +107,7 @@ static void ppc_core99_init (ram_addr_t ram_size,
     qemu_irq *dummy_irq;
     int pic_mem_index, dbdma_mem_index, cuda_mem_index, escc_mem_index;
     int ppc_boot_device;
-    DriveInfo *dinfo;
-    BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
+    DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     void *fw_cfg;
     void *dbdma;
     uint8_t *vga_bios_ptr;
@@ -316,8 +315,7 @@ static void ppc_core99_init (ram_addr_t ram_size,
         exit(1);
     }
     for(i = 0; i < MAX_IDE_BUS * MAX_IDE_DEVS; i++) {
-        dinfo = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
-        hd[i] = dinfo ? dinfo->bdrv : NULL;
+        hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
     }
     dbdma = DBDMA_init(&dbdma_mem_index);
     pci_cmd646_ide_init(pci_bus, hd, 0);
index fc0e6f7cfd2a77e993dfa66a87c3c1b22880a5af..25ab19e9f29748eb2e4c9c0e44251aee395a8dd8 100644 (file)
@@ -137,8 +137,7 @@ static void ppc_heathrow_init (ram_addr_t ram_size,
     int pic_mem_index, nvram_mem_index, dbdma_mem_index, cuda_mem_index;
     int escc_mem_index, ide_mem_index[2];
     uint16_t ppc_boot_device;
-    BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
-    DriveInfo *dinfo;
+    DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     void *fw_cfg;
     void *dbdma;
     uint8_t *vga_bios_ptr;
@@ -331,19 +330,15 @@ static void ppc_heathrow_init (ram_addr_t ram_size,
     }
 
     /* First IDE channel is a MAC IDE on the MacIO bus */
-    dinfo = drive_get(IF_IDE, 0, 0);
-    hd[0] = dinfo ? dinfo->bdrv : NULL;
-    dinfo = drive_get(IF_IDE, 0, 1);
-    hd[1] = dinfo ? dinfo->bdrv : NULL;
+    hd[0] = drive_get(IF_IDE, 0, 0);
+    hd[1] = drive_get(IF_IDE, 0, 1);
     dbdma = DBDMA_init(&dbdma_mem_index);
     ide_mem_index[0] = -1;
     ide_mem_index[1] = pmac_ide_init(hd, pic[0x0D], dbdma, 0x16, pic[0x02]);
 
     /* Second IDE channel is a CMD646 on the PCI bus */
-    dinfo = drive_get(IF_IDE, 1, 0);
-    hd[0] = dinfo ? dinfo->bdrv : NULL;
-    dinfo = drive_get(IF_IDE, 1, 1);
-    hd[1] = dinfo ? dinfo->bdrv : NULL;
+    hd[0] = drive_get(IF_IDE, 1, 0);
+    hd[1] = drive_get(IF_IDE, 1, 1);
     hd[3] = hd[2] = NULL;
     pci_cmd646_ide_init(pci_bus, hd, 0);
 
index 1cad17f6f8d8558e1d68b4ad0a0b1a2bd1378158..c081d583516ddd88ed25549f7dd6081eb83a51bb 100644 (file)
@@ -563,7 +563,7 @@ static void ppc_prep_init (ram_addr_t ram_size,
     qemu_irq *i8259;
     int ppc_boot_device;
     DriveInfo *dinfo;
-    BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
+    DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     BlockDriverState *fd[MAX_FD];
 
     sysctrl = qemu_mallocz(sizeof(sysctrl_t));
@@ -703,8 +703,7 @@ static void ppc_prep_init (ram_addr_t ram_size,
     }
 
     for(i = 0; i < MAX_IDE_BUS * MAX_IDE_DEVS; i++) {
-        dinfo = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
-        hd[i] = dinfo ? dinfo->bdrv : NULL;
+        hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
     }
 
     for(i = 0; i < MAX_IDE_BUS; i++) {
index 6ce556e8017daa902ffba06e9e39fbb95a2a65bf..ff514a482f4d46adda7ea32ed45961ba19336836 100644 (file)
--- a/hw/r2d.c
+++ b/hw/r2d.c
@@ -231,7 +231,7 @@ static void r2d_init(ram_addr_t ram_size,
     /* onboard CF (True IDE mode, Master only). */
     if ((dinfo = drive_get(IF_IDE, 0, 0)) != NULL)
        mmio_ide_init(0x14001000, 0x1400080c, irq[CF_IDE], 1,
-                     dinfo->bdrv, NULL);
+                     dinfo, NULL);
 
     /* NIC: rtl8139 on-board, and 2 slots. */
     for (i = 0; i < nb_nics; i++)
index b9b59efc17f98a0eafc207670ba09d68f4b8d912..e19b8a203d34143373fdf4c0de2e62631db04d4d 100644 (file)
@@ -754,7 +754,7 @@ static void spitz_microdrive_attach(PXA2xxState *cpu, int slot)
         return;
     bs = dinfo->bdrv;
     if (bdrv_is_inserted(bs) && !bdrv_is_removable(bs)) {
-        md = dscm1xxxx_init(bs);
+        md = dscm1xxxx_init(dinfo);
         pxa2xx_pcmcia_attach(cpu->pcmcia[slot], md);
     }
 }
index ece83e616392a799730e9f99d5b49b9fc36fc79b..098df9da88cac01fab4556947a7d5a913422a93a 100644 (file)
@@ -566,7 +566,7 @@ static void sun4uv_init(ram_addr_t RAM_size,
     long initrd_size, kernel_size;
     PCIBus *pci_bus, *pci_bus2, *pci_bus3;
     qemu_irq *irq;
-    BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
+    DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     BlockDriverState *fd[MAX_FD];
     void *fw_cfg;
     DriveInfo *dinfo;
@@ -617,9 +617,8 @@ static void sun4uv_init(ram_addr_t RAM_size,
         exit(1);
     }
     for(i = 0; i < MAX_IDE_BUS * MAX_IDE_DEVS; i++) {
-        dinfo = drive_get(IF_IDE, i / MAX_IDE_DEVS,
+        hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS,
                           i % MAX_IDE_DEVS);
-        hd[i] = dinfo ? dinfo->bdrv : NULL;
     }
 
     pci_cmd646_ide_init(pci_bus, hd, 1);
index 4c463e681f2c776cdb550fdfbf2ee361ba9d5c88..bc6591f06614ce140a9c4c5539cdb0bc24c636cc 100644 (file)
--- a/hw/tosa.c
+++ b/hw/tosa.c
@@ -57,7 +57,7 @@ static void tosa_microdrive_attach(PXA2xxState *cpu)
         return;
     bs = dinfo->bdrv;
     if (bdrv_is_inserted(bs) && !bdrv_is_removable(bs)) {
-        md = dscm1xxxx_init(bs);
+        md = dscm1xxxx_init(dinfo);
         pxa2xx_pcmcia_attach(cpu->pcmcia[0], md);
     }
 }