mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
hw/intc/loongarch_pch: Inherit from loongarch_pic_common
Set TYPE_LOONGARCH_PIC inherit from TYPE_LOONGARCH_PIC_COMMON object, it shares vmsate and property of TYPE_LOONGARCH_PIC_COMMON, and has its own realize() function. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Song Gao <gaosong@loongson.cn>
This commit is contained in:
parent
b7563779f9
commit
8bf26a9ea3
5 changed files with 77 additions and 26 deletions
|
@ -379,14 +379,14 @@ static void loongarch_pch_pic_reset(DeviceState *d)
|
|||
s->int_polarity = 0x0;
|
||||
}
|
||||
|
||||
#include "loongarch_pic_common.c"
|
||||
static void loongarch_pch_pic_realize(DeviceState *dev, Error **errp)
|
||||
static void loongarch_pic_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
LoongArchPCHPIC *s = LOONGARCH_PCH_PIC(dev);
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
||||
LoongArchPICCommonState *s = LOONGARCH_PIC_COMMON(dev);
|
||||
LoongarchPICClass *lpc = LOONGARCH_PIC_GET_CLASS(dev);
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
||||
Error *local_err = NULL;
|
||||
|
||||
loongarch_pic_common_realize(dev, &local_err);
|
||||
lpc->parent_realize(dev, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
|
@ -408,26 +408,24 @@ static void loongarch_pch_pic_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
}
|
||||
|
||||
static void loongarch_pch_pic_class_init(ObjectClass *klass, void *data)
|
||||
static void loongarch_pic_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
LoongarchPICClass *lpc = LOONGARCH_PIC_CLASS(klass);
|
||||
|
||||
dc->realize = loongarch_pch_pic_realize;
|
||||
device_class_set_legacy_reset(dc, loongarch_pch_pic_reset);
|
||||
dc->vmsd = &vmstate_loongarch_pic_common;
|
||||
device_class_set_props(dc, loongarch_pic_common_properties);
|
||||
device_class_set_parent_realize(dc, loongarch_pic_realize,
|
||||
&lpc->parent_realize);
|
||||
}
|
||||
|
||||
static const TypeInfo loongarch_pch_pic_info = {
|
||||
.name = TYPE_LOONGARCH_PCH_PIC,
|
||||
.parent = TYPE_SYS_BUS_DEVICE,
|
||||
.instance_size = sizeof(LoongArchPCHPIC),
|
||||
.class_init = loongarch_pch_pic_class_init,
|
||||
static const TypeInfo loongarch_pic_types[] = {
|
||||
{
|
||||
.name = TYPE_LOONGARCH_PIC,
|
||||
.parent = TYPE_LOONGARCH_PIC_COMMON,
|
||||
.instance_size = sizeof(LoongarchPICState),
|
||||
.class_size = sizeof(LoongarchPICClass),
|
||||
.class_init = loongarch_pic_class_init,
|
||||
}
|
||||
};
|
||||
|
||||
static void loongarch_pch_pic_register_types(void)
|
||||
{
|
||||
type_register_static(&loongarch_pch_pic_info);
|
||||
}
|
||||
|
||||
type_init(loongarch_pch_pic_register_types)
|
||||
DEFINE_TYPES(loongarch_pic_types)
|
||||
|
|
|
@ -4,9 +4,15 @@
|
|||
* Copyright (C) 2024 Loongson Technology Corporation Limited
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/intc/loongarch_pic_common.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
||||
static void loongarch_pic_common_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
LoongArchPICCommonState *s = LOONGARCH_PCH_PIC(dev);
|
||||
LoongArchPICCommonState *s = LOONGARCH_PIC_COMMON(dev);
|
||||
|
||||
if (!s->irq_num || s->irq_num > VIRT_PCH_PIC_IRQ_NUM) {
|
||||
error_setg(errp, "Invalid 'pic_irq_num'");
|
||||
|
@ -39,3 +45,27 @@ static const VMStateDescription vmstate_loongarch_pic_common = {
|
|||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
|
||||
static void loongarch_pic_common_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
LoongArchPICCommonClass *lpcc = LOONGARCH_PIC_COMMON_CLASS(klass);
|
||||
|
||||
device_class_set_parent_realize(dc, loongarch_pic_common_realize,
|
||||
&lpcc->parent_realize);
|
||||
device_class_set_props(dc, loongarch_pic_common_properties);
|
||||
dc->vmsd = &vmstate_loongarch_pic_common;
|
||||
}
|
||||
|
||||
static const TypeInfo loongarch_pic_common_types[] = {
|
||||
{
|
||||
.name = TYPE_LOONGARCH_PIC_COMMON,
|
||||
.parent = TYPE_SYS_BUS_DEVICE,
|
||||
.instance_size = sizeof(LoongArchPICCommonState),
|
||||
.class_size = sizeof(LoongArchPICCommonClass),
|
||||
.class_init = loongarch_pic_common_class_init,
|
||||
.abstract = true,
|
||||
}
|
||||
};
|
||||
|
||||
DEFINE_TYPES(loongarch_pic_common_types)
|
||||
|
|
|
@ -71,6 +71,6 @@ specific_ss.add(when: 'CONFIG_M68K_IRQC', if_true: files('m68k_irqc.c'))
|
|||
specific_ss.add(when: 'CONFIG_LOONGSON_IPI_COMMON', if_true: files('loongson_ipi_common.c'))
|
||||
specific_ss.add(when: 'CONFIG_LOONGSON_IPI', if_true: files('loongson_ipi.c'))
|
||||
specific_ss.add(when: 'CONFIG_LOONGARCH_IPI', if_true: files('loongarch_ipi.c'))
|
||||
specific_ss.add(when: 'CONFIG_LOONGARCH_PCH_PIC', if_true: files('loongarch_pch_pic.c'))
|
||||
specific_ss.add(when: 'CONFIG_LOONGARCH_PCH_PIC', if_true: files('loongarch_pch_pic.c', 'loongarch_pic_common.c'))
|
||||
specific_ss.add(when: 'CONFIG_LOONGARCH_PCH_MSI', if_true: files('loongarch_pch_msi.c'))
|
||||
specific_ss.add(when: 'CONFIG_LOONGARCH_EXTIOI', if_true: files('loongarch_extioi.c'))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue