qdev: get_child_bus(): Use QOM lookup if available
qbus_realize() adds busses as a QOM child of the device in addition to adding it to the qdev bus list. Change get_child_bus() to use the QOM child if it is available. This takes priority over the bus-list, but the child object is checked for type correctness. This prepares support for aliasing of buses. The use case is SoCs, where a SoC container needs to present buses to the board level, but the buses are implemented by controller IP we already model as self contained qbus-containing devices. Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> Acked-by: Alistair Francis <alistair.francis@xilinx.com> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
3c9331c47f
commit
f698c8ba48
|
@ -580,6 +580,12 @@ void qdev_pass_gpios(DeviceState *dev, DeviceState *container,
|
||||||
BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
|
BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
|
||||||
{
|
{
|
||||||
BusState *bus;
|
BusState *bus;
|
||||||
|
Object *child = object_resolve_path_component(OBJECT(dev), name);
|
||||||
|
|
||||||
|
bus = (BusState *)object_dynamic_cast(child, TYPE_BUS);
|
||||||
|
if (bus) {
|
||||||
|
return bus;
|
||||||
|
}
|
||||||
|
|
||||||
QLIST_FOREACH(bus, &dev->child_bus, sibling) {
|
QLIST_FOREACH(bus, &dev->child_bus, sibling) {
|
||||||
if (strcmp(name, bus->name) == 0) {
|
if (strcmp(name, bus->name) == 0) {
|
||||||
|
|
Loading…
Reference in a new issue