|
@@ -39,6 +39,7 @@ static const TypeInfo ap_bus_info = {
|
|
|
void s390_init_ap(void)
|
|
|
{
|
|
|
DeviceState *dev;
|
|
|
+ BusState *bus;
|
|
|
|
|
|
/* If no AP instructions then no need for AP bridge */
|
|
|
if (!s390_has_feat(S390_FEAT_AP)) {
|
|
@@ -52,13 +53,18 @@ void s390_init_ap(void)
|
|
|
qdev_init_nofail(dev);
|
|
|
|
|
|
/* Create bus on bridge device */
|
|
|
- qbus_create(TYPE_AP_BUS, dev, TYPE_AP_BUS);
|
|
|
+ bus = qbus_create(TYPE_AP_BUS, dev, TYPE_AP_BUS);
|
|
|
+
|
|
|
+ /* Enable hotplugging */
|
|
|
+ qbus_set_hotplug_handler(bus, OBJECT(dev), &error_abort);
|
|
|
}
|
|
|
|
|
|
static void ap_bridge_class_init(ObjectClass *oc, void *data)
|
|
|
{
|
|
|
DeviceClass *dc = DEVICE_CLASS(oc);
|
|
|
+ HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc);
|
|
|
|
|
|
+ hc->unplug = qdev_simple_device_unplug_cb;
|
|
|
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
|
|
|
}
|
|
|
|
|
@@ -67,6 +73,10 @@ static const TypeInfo ap_bridge_info = {
|
|
|
.parent = TYPE_SYS_BUS_DEVICE,
|
|
|
.instance_size = 0,
|
|
|
.class_init = ap_bridge_class_init,
|
|
|
+ .interfaces = (InterfaceInfo[]) {
|
|
|
+ { TYPE_HOTPLUG_HANDLER },
|
|
|
+ { }
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
static void ap_register(void)
|