Revision dea21e97

b/hw/ide.h
4 4
#include "qdev.h"
5 5

  
6 6
/* ide-isa.c */
7
void isa_ide_init(int iobase, int iobase2, qemu_irq irq,
8
                  DriveInfo *hd0, DriveInfo *hd1);
7
int isa_ide_init(int iobase, int iobase2, int isairq,
8
                 DriveInfo *hd0, DriveInfo *hd1);
9 9

  
10 10
/* ide-pci.c */
11 11
void pci_cmd646_ide_init(PCIBus *bus, DriveInfo **hd_table,
b/hw/ide/isa.c
24 24
 */
25 25
#include <hw/hw.h>
26 26
#include <hw/pc.h>
27
#include <hw/isa.h>
27 28
#include "block.h"
28 29
#include "block_int.h"
29 30
#include "sysemu.h"
......
35 36
/* ISA IDE definitions */
36 37

  
37 38
typedef struct ISAIDEState {
38
    IDEBus *bus;
39
    ISADevice dev;
40
    IDEBus    *bus;
41
    uint32_t  iobase;
42
    uint32_t  iobase2;
43
    uint32_t  isairq;
44
    qemu_irq  irq;
39 45
} ISAIDEState;
40 46

  
41 47
static void isa_ide_save(QEMUFile* f, void *opaque)
......
57 63
    return 0;
58 64
}
59 65

  
60
void isa_ide_init(int iobase, int iobase2, qemu_irq irq,
61
                  DriveInfo *hd0, DriveInfo *hd1)
66
static int isa_ide_initfn(ISADevice *dev)
62 67
{
68
    ISAIDEState *s = DO_UPCAST(ISAIDEState, dev, dev);
69

  
70
    s->bus = ide_bus_new(&s->dev.qdev);
71
    ide_init_ioport(s->bus, s->iobase, s->iobase2);
72
    isa_init_irq(dev, &s->irq, s->isairq);
73
    ide_init2(s->bus, NULL, NULL, s->irq);
74
    register_savevm("isa-ide", 0, 3, isa_ide_save, isa_ide_load, s);
75
    return 0;
76
};
77

  
78
int isa_ide_init(int iobase, int iobase2, int isairq,
79
                 DriveInfo *hd0, DriveInfo *hd1)
80
{
81
    ISADevice *dev;
63 82
    ISAIDEState *s;
64 83

  
65
    s = qemu_mallocz(sizeof(*s));
66
    s->bus = qemu_mallocz(sizeof(IDEBus));
84
    dev = isa_create("isa-ide");
85
    qdev_prop_set_uint32(&dev->qdev, "iobase",  iobase);
86
    qdev_prop_set_uint32(&dev->qdev, "iobase2", iobase2);
87
    qdev_prop_set_uint32(&dev->qdev, "irq",     isairq);
88
    if (qdev_init(&dev->qdev) != 0)
89
        return -1;
67 90

  
68
    ide_init2(s->bus, hd0, hd1, irq);
69
    ide_init_ioport(s->bus, iobase, iobase2);
70
    register_savevm("isa-ide", 0, 3, isa_ide_save, isa_ide_load, s);
91
    s = DO_UPCAST(ISAIDEState, dev, dev);
92
    if (hd0)
93
        ide_create_drive(s->bus, 0, hd0);
94
    if (hd1)
95
        ide_create_drive(s->bus, 1, hd1);
96
    return 0;
97
}
98

  
99
static ISADeviceInfo isa_ide_info = {
100
    .qdev.name  = "isa-ide",
101
    .qdev.size  = sizeof(ISAIDEState),
102
    .init       = isa_ide_initfn,
103
    .qdev.props = (Property[]) {
104
        DEFINE_PROP_HEX32("iobase",  ISAIDEState, iobase,  0x1f0),
105
        DEFINE_PROP_HEX32("iobase2", ISAIDEState, iobase2, 0x3f6),
106
        DEFINE_PROP_UINT32("irq",    ISAIDEState, isairq,  14),
107
        DEFINE_PROP_END_OF_LIST(),
108
    },
109
};
110

  
111
static void isa_ide_register_devices(void)
112
{
113
    isa_qdev_register(&isa_ide_info);
71 114
}
115

  
116
device_init(isa_ide_register_devices)
b/hw/mips_r4k.c
274 274
    }
275 275

  
276 276
    for(i = 0; i < MAX_IDE_BUS; i++)
277
        isa_ide_init(ide_iobase[i], ide_iobase2[i], i8259[ide_irq[i]],
277
        isa_ide_init(ide_iobase[i], ide_iobase2[i], ide_irq[i],
278 278
                     hd[MAX_IDE_DEVS * i],
279 279
		     hd[MAX_IDE_DEVS * i + 1]);
280 280

  
b/hw/pc.c
1366 1366
        pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1);
1367 1367
    } else {
1368 1368
        for(i = 0; i < MAX_IDE_BUS; i++) {
1369
            isa_ide_init(ide_iobase[i], ide_iobase2[i],
1370
                         isa_reserve_irq(ide_irq[i]),
1369
            isa_ide_init(ide_iobase[i], ide_iobase2[i], ide_irq[i],
1371 1370
	                 hd[MAX_IDE_DEVS * i], hd[MAX_IDE_DEVS * i + 1]);
1372 1371
        }
1373 1372
    }
b/hw/ppc_prep.c
710 710
    }
711 711

  
712 712
    for(i = 0; i < MAX_IDE_BUS; i++) {
713
        isa_ide_init(ide_iobase[i], ide_iobase2[i], i8259[ide_irq[i]],
713
        isa_ide_init(ide_iobase[i], ide_iobase2[i], ide_irq[i],
714 714
                     hd[2 * i],
715 715
		     hd[2 * i + 1]);
716 716
    }

Also available in: Unified diff