hw/sysbus: Introduce TYPE_DYNAMIC_SYS_BUS_DEVICE

Some TYPE_SYS_BUS_DEVICEs can be optionally dynamically
plugged on the TYPE_PLATFORM_BUS_DEVICE.
Rather than sometimes noting that with comment around
the 'user_creatable = true' line in each DeviceRealize
handler, introduce an abstract TYPE_DYNAMIC_SYS_BUS_DEVICE
class.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alexander Graf <graf@amazon.com>
Reviewed-by: Clément Mathieu--Drif <clement.mathieu--drif@eviden.com>
Message-Id: <20250125181343.59151-4-philmd@linaro.org>
This commit is contained in:
Philippe Mathieu-Daudé 2025-01-25 14:36:42 +01:00
parent 45683d1e7c
commit 47dfd350fb
2 changed files with 16 additions and 0 deletions

View file

@ -320,6 +320,14 @@ BusState *sysbus_get_default(void)
return main_system_bus;
}
static void dynamic_sysbus_device_class_init(ObjectClass *klass, void *data)
{
DeviceClass *k = DEVICE_CLASS(klass);
k->user_creatable = true;
k->hotpluggable = false;
}
static const TypeInfo sysbus_types[] = {
{
.name = TYPE_SYSTEM_BUS,
@ -335,6 +343,12 @@ static const TypeInfo sysbus_types[] = {
.class_size = sizeof(SysBusDeviceClass),
.class_init = sysbus_device_class_init,
},
{
.name = TYPE_DYNAMIC_SYS_BUS_DEVICE,
.parent = TYPE_SYS_BUS_DEVICE,
.class_init = dynamic_sysbus_device_class_init,
.abstract = true,
}
};
DEFINE_TYPES(sysbus_types)

View file

@ -19,6 +19,8 @@ DECLARE_INSTANCE_CHECKER(BusState, SYSTEM_BUS,
OBJECT_DECLARE_TYPE(SysBusDevice, SysBusDeviceClass,
SYS_BUS_DEVICE)
#define TYPE_DYNAMIC_SYS_BUS_DEVICE "dynamic-sysbus-device"
/**
* SysBusDeviceClass:
*