Revision 2e15e23b hw/isa-bus.c
b/hw/isa-bus.c | ||
---|---|---|
57 | 57 |
isabus->irqs = irqs; |
58 | 58 |
} |
59 | 59 |
|
60 |
void isa_connect_irq(ISADevice *dev, int devnr, int isairq) |
|
61 |
{ |
|
62 |
assert(devnr >= 0 && devnr < dev->nirqs); |
|
63 |
if (isabus->assigned & (1 << isairq)) { |
|
64 |
fprintf(stderr, "isa irq %d already assigned\n", isairq); |
|
65 |
exit(1); |
|
66 |
} |
|
67 |
if (dev->irqs[devnr]) { |
|
68 |
isabus->assigned |= (1 << isairq); |
|
69 |
dev->isairq[devnr] = isairq; |
|
70 |
*dev->irqs[devnr] = isabus->irqs[isairq]; |
|
71 |
} |
|
72 |
} |
|
73 |
|
|
74 | 60 |
/* |
75 | 61 |
* isa_reserve_irq() reserves the ISA irq and returns the corresponding |
76 | 62 |
* qemu_irq entry for the i8259. |
... | ... | |
92 | 78 |
return isabus->irqs[isairq]; |
93 | 79 |
} |
94 | 80 |
|
95 |
void isa_init_irq(ISADevice *dev, qemu_irq *p) |
|
81 |
void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq)
|
|
96 | 82 |
{ |
97 |
assert(dev->nirqs < ARRAY_SIZE(dev->irqs)); |
|
98 |
dev->irqs[dev->nirqs] = p; |
|
83 |
assert(dev->nirqs < ARRAY_SIZE(dev->isairq)); |
|
84 |
if (isabus->assigned & (1 << isairq)) { |
|
85 |
fprintf(stderr, "isa irq %d already assigned\n", isairq); |
|
86 |
exit(1); |
|
87 |
} |
|
88 |
isabus->assigned |= (1 << isairq); |
|
89 |
dev->isairq[dev->nirqs] = isairq; |
|
90 |
*p = isabus->irqs[isairq]; |
|
99 | 91 |
dev->nirqs++; |
100 | 92 |
} |
101 | 93 |
|
... | ... | |
117 | 109 |
qdev_register(&info->qdev); |
118 | 110 |
} |
119 | 111 |
|
120 |
ISADevice *isa_create_simple(const char *name, uint32_t irq, uint32 irq2)
|
|
112 |
ISADevice *isa_create_simple(const char *name) |
|
121 | 113 |
{ |
122 | 114 |
DeviceState *dev; |
123 |
ISADevice *isa; |
|
124 | 115 |
|
125 | 116 |
if (!isabus) { |
126 | 117 |
fprintf(stderr, "Tried to create isa device %s with no isa bus present.\n", name); |
127 | 118 |
return NULL; |
128 | 119 |
} |
129 | 120 |
dev = qdev_create(&isabus->qbus, name); |
130 |
isa = DO_UPCAST(ISADevice, qdev, dev); |
|
131 | 121 |
qdev_init(dev); |
132 |
if (irq != -1) { |
|
133 |
isa_connect_irq(isa, 0, irq); |
|
134 |
} |
|
135 |
if (irq2 != -1) { |
|
136 |
isa_connect_irq(isa, 1, irq2); |
|
137 |
} |
|
138 |
return isa; |
|
122 |
return DO_UPCAST(ISADevice, qdev, dev); |
|
139 | 123 |
} |
140 | 124 |
|
141 | 125 |
static void isabus_dev_print(Monitor *mon, DeviceState *dev, int indent) |
Also available in: Unified diff