Revision 51a92333
b/hw/pci_bridge.c | ||
---|---|---|
37 | 37 |
return bus->parent_dev; |
38 | 38 |
} |
39 | 39 |
|
40 |
static void pci_register_secondary_bus(PCIBus *parent, |
|
41 |
PCIBus *bus, |
|
42 |
PCIDevice *dev, |
|
43 |
pci_map_irq_fn map_irq, |
|
44 |
const char *name) |
|
45 |
{ |
|
46 |
qbus_create_inplace(&bus->qbus, &pci_bus_info, &dev->qdev, name); |
|
47 |
bus->map_irq = map_irq; |
|
48 |
bus->parent_dev = dev; |
|
49 |
|
|
50 |
QLIST_INIT(&bus->child); |
|
51 |
QLIST_INSERT_HEAD(&parent->child, bus, sibling); |
|
52 |
} |
|
53 |
|
|
54 |
static void pci_unregister_secondary_bus(PCIBus *bus) |
|
55 |
{ |
|
56 |
assert(QLIST_EMPTY(&bus->child)); |
|
57 |
QLIST_REMOVE(bus, sibling); |
|
58 |
} |
|
59 |
|
|
60 | 40 |
static uint32_t pci_config_get_io_base(PCIDevice *d, |
61 | 41 |
uint32_t base, uint32_t base_upper16) |
62 | 42 |
{ |
... | ... | |
163 | 143 |
static int pci_bridge_exitfn(PCIDevice *pci_dev) |
164 | 144 |
{ |
165 | 145 |
PCIBridge *s = DO_UPCAST(PCIBridge, dev, pci_dev); |
166 |
pci_unregister_secondary_bus(&s->sec_bus); |
|
146 |
assert(QLIST_EMPTY(&s->sec_bus.child)); |
|
147 |
QLIST_REMOVE(&s->sec_bus, sibling); |
|
167 | 148 |
return 0; |
168 | 149 |
} |
169 | 150 |
|
... | ... | |
173 | 154 |
{ |
174 | 155 |
PCIDevice *dev; |
175 | 156 |
PCIBridge *s; |
157 |
PCIBus *sec_bus; |
|
176 | 158 |
|
177 | 159 |
dev = pci_create_multifunction(bus, devfn, multifunction, "pci-bridge"); |
178 | 160 |
qdev_prop_set_uint32(&dev->qdev, "vendorid", vid); |
... | ... | |
180 | 162 |
qdev_init_nofail(&dev->qdev); |
181 | 163 |
|
182 | 164 |
s = DO_UPCAST(PCIBridge, dev, dev); |
183 |
pci_register_secondary_bus(bus, &s->sec_bus, &s->dev, map_irq, name); |
|
165 |
sec_bus = &s->sec_bus; |
|
166 |
qbus_create_inplace(&sec_bus->qbus, &pci_bus_info, &dev->qdev, name); |
|
167 |
sec_bus->parent_dev = dev; |
|
168 |
sec_bus->map_irq = map_irq; |
|
169 |
|
|
170 |
QLIST_INIT(&sec_bus->child); |
|
171 |
QLIST_INSERT_HEAD(&bus->child, sec_bus, sibling); |
|
184 | 172 |
return &s->sec_bus; |
185 | 173 |
} |
186 | 174 |
|
Also available in: Unified diff