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