mirror of https://github.com/xemu-project/xemu.git
xics: Eliminate reset hook
Currently TYPE_XICS_BASE and TYPE_XICS_SIMPLE have their own reset methods, using the standard technique for having the subtype call the supertype's methods before doing its own thing. But TYPE_XICS_SIMPLE is the only subtype of TYPE_XICS_BASE ever instantiated, so there's no point having the split here. Merge them together into just an ics_reset() function. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Greg Kurz <groug@kaod.org>
This commit is contained in:
parent
28976c99cf
commit
da2ef5b2f2
105
hw/intc/xics.c
105
hw/intc/xics.c
|
@ -547,68 +547,13 @@ static void ics_eoi(ICSState *ics, uint32_t nr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ics_simple_reset(DeviceState *dev)
|
|
||||||
{
|
|
||||||
ICSStateClass *icsc = ICS_BASE_GET_CLASS(dev);
|
|
||||||
|
|
||||||
icsc->parent_reset(dev);
|
|
||||||
|
|
||||||
if (kvm_irqchip_in_kernel()) {
|
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
ics_set_kvm_state(ICS_BASE(dev), &local_err);
|
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ics_simple_reset_handler(void *dev)
|
|
||||||
{
|
|
||||||
ics_simple_reset(dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ics_simple_realize(DeviceState *dev, Error **errp)
|
|
||||||
{
|
|
||||||
ICSState *ics = ICS_SIMPLE(dev);
|
|
||||||
ICSStateClass *icsc = ICS_BASE_GET_CLASS(ics);
|
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
icsc->parent_realize(dev, &local_err);
|
|
||||||
if (local_err) {
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
qemu_register_reset(ics_simple_reset_handler, ics);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ics_simple_class_init(ObjectClass *klass, void *data)
|
|
||||||
{
|
|
||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
|
||||||
ICSStateClass *isc = ICS_BASE_CLASS(klass);
|
|
||||||
|
|
||||||
device_class_set_parent_realize(dc, ics_simple_realize,
|
|
||||||
&isc->parent_realize);
|
|
||||||
device_class_set_parent_reset(dc, ics_simple_reset,
|
|
||||||
&isc->parent_reset);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const TypeInfo ics_simple_info = {
|
|
||||||
.name = TYPE_ICS_SIMPLE,
|
|
||||||
.parent = TYPE_ICS_BASE,
|
|
||||||
.instance_size = sizeof(ICSState),
|
|
||||||
.class_init = ics_simple_class_init,
|
|
||||||
.class_size = sizeof(ICSStateClass),
|
|
||||||
};
|
|
||||||
|
|
||||||
static void ics_reset_irq(ICSIRQState *irq)
|
static void ics_reset_irq(ICSIRQState *irq)
|
||||||
{
|
{
|
||||||
irq->priority = 0xff;
|
irq->priority = 0xff;
|
||||||
irq->saved_priority = 0xff;
|
irq->saved_priority = 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ics_base_reset(DeviceState *dev)
|
static void ics_reset(DeviceState *dev)
|
||||||
{
|
{
|
||||||
ICSState *ics = ICS_BASE(dev);
|
ICSState *ics = ICS_BASE(dev);
|
||||||
int i;
|
int i;
|
||||||
|
@ -624,8 +569,54 @@ static void ics_base_reset(DeviceState *dev)
|
||||||
ics_reset_irq(ics->irqs + i);
|
ics_reset_irq(ics->irqs + i);
|
||||||
ics->irqs[i].flags = flags[i];
|
ics->irqs[i].flags = flags[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (kvm_irqchip_in_kernel()) {
|
||||||
|
Error *local_err = NULL;
|
||||||
|
|
||||||
|
ics_set_kvm_state(ICS_BASE(dev), &local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_report_err(local_err);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ics_reset_handler(void *dev)
|
||||||
|
{
|
||||||
|
ics_reset(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ics_simple_realize(DeviceState *dev, Error **errp)
|
||||||
|
{
|
||||||
|
ICSState *ics = ICS_SIMPLE(dev);
|
||||||
|
ICSStateClass *icsc = ICS_BASE_GET_CLASS(ics);
|
||||||
|
Error *local_err = NULL;
|
||||||
|
|
||||||
|
icsc->parent_realize(dev, &local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_propagate(errp, local_err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qemu_register_reset(ics_reset_handler, ics);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ics_simple_class_init(ObjectClass *klass, void *data)
|
||||||
|
{
|
||||||
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
ICSStateClass *isc = ICS_BASE_CLASS(klass);
|
||||||
|
|
||||||
|
device_class_set_parent_realize(dc, ics_simple_realize,
|
||||||
|
&isc->parent_realize);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const TypeInfo ics_simple_info = {
|
||||||
|
.name = TYPE_ICS_SIMPLE,
|
||||||
|
.parent = TYPE_ICS_BASE,
|
||||||
|
.instance_size = sizeof(ICSState),
|
||||||
|
.class_init = ics_simple_class_init,
|
||||||
|
.class_size = sizeof(ICSStateClass),
|
||||||
|
};
|
||||||
|
|
||||||
static void ics_base_realize(DeviceState *dev, Error **errp)
|
static void ics_base_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
ICSState *ics = ICS_BASE(dev);
|
ICSState *ics = ICS_BASE(dev);
|
||||||
|
@ -726,7 +717,7 @@ static void ics_base_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
||||||
dc->realize = ics_base_realize;
|
dc->realize = ics_base_realize;
|
||||||
dc->props = ics_base_properties;
|
dc->props = ics_base_properties;
|
||||||
dc->reset = ics_base_reset;
|
dc->reset = ics_reset;
|
||||||
dc->vmsd = &vmstate_ics_base;
|
dc->vmsd = &vmstate_ics_base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,6 @@ struct ICSStateClass {
|
||||||
DeviceClass parent_class;
|
DeviceClass parent_class;
|
||||||
|
|
||||||
DeviceRealize parent_realize;
|
DeviceRealize parent_realize;
|
||||||
DeviceReset parent_reset;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ICSState {
|
struct ICSState {
|
||||||
|
|
Loading…
Reference in New Issue