mirror of https://github.com/xqemu/xqemu.git
ppc/xics: export the XICS init routines
There is nothing left related to the XICS object in the realize functions of the KVMXICSState and XICSState class. So adapt the interfaces to call these routines directly from the sPAPR machine init sequence. Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
852ad27e14
commit
2192a9303d
|
@ -363,7 +363,7 @@ static void rtas_dummy(PowerPCCPU *cpu, sPAPRMachineState *spapr,
|
|||
__func__);
|
||||
}
|
||||
|
||||
static void xics_kvm_realize(DeviceState *dev, Error **errp)
|
||||
int xics_kvm_init(sPAPRMachineState *spapr, Error **errp)
|
||||
{
|
||||
int rc;
|
||||
struct kvm_create_device xics_create_device = {
|
||||
|
@ -419,27 +419,20 @@ static void xics_kvm_realize(DeviceState *dev, Error **errp)
|
|||
kvm_msi_via_irqfd_allowed = true;
|
||||
kvm_gsi_direct_mapping = true;
|
||||
|
||||
return;
|
||||
return rc;
|
||||
|
||||
fail:
|
||||
kvmppc_define_rtas_kernel_token(0, "ibm,set-xive");
|
||||
kvmppc_define_rtas_kernel_token(0, "ibm,get-xive");
|
||||
kvmppc_define_rtas_kernel_token(0, "ibm,int-on");
|
||||
kvmppc_define_rtas_kernel_token(0, "ibm,int-off");
|
||||
}
|
||||
|
||||
static void xics_kvm_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
dc->realize = xics_kvm_realize;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static const TypeInfo xics_spapr_kvm_info = {
|
||||
.name = TYPE_XICS_SPAPR_KVM,
|
||||
.parent = TYPE_XICS_COMMON,
|
||||
.instance_size = sizeof(KVMXICSState),
|
||||
.class_init = xics_kvm_class_init,
|
||||
};
|
||||
|
||||
static void xics_kvm_register_types(void)
|
||||
|
|
|
@ -240,7 +240,7 @@ static void rtas_int_on(PowerPCCPU *cpu, sPAPRMachineState *spapr,
|
|||
rtas_st(rets, 0, RTAS_OUT_SUCCESS);
|
||||
}
|
||||
|
||||
static void xics_spapr_realize(DeviceState *dev, Error **errp)
|
||||
int xics_spapr_init(sPAPRMachineState *spapr, Error **errp)
|
||||
{
|
||||
/* Registration of global state belongs into realize */
|
||||
spapr_rtas_register(RTAS_IBM_SET_XIVE, "ibm,set-xive", rtas_set_xive);
|
||||
|
@ -254,13 +254,7 @@ static void xics_spapr_realize(DeviceState *dev, Error **errp)
|
|||
spapr_register_hypercall(H_XIRR_X, h_xirr_x);
|
||||
spapr_register_hypercall(H_EOI, h_eoi);
|
||||
spapr_register_hypercall(H_IPOLL, h_ipoll);
|
||||
}
|
||||
|
||||
static void xics_spapr_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
dc->realize = xics_spapr_realize;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const TypeInfo xics_spapr_info = {
|
||||
|
@ -268,7 +262,6 @@ static const TypeInfo xics_spapr_info = {
|
|||
.parent = TYPE_XICS_COMMON,
|
||||
.instance_size = sizeof(XICSState),
|
||||
.class_size = sizeof(XICSStateClass),
|
||||
.class_init = xics_spapr_class_init,
|
||||
};
|
||||
|
||||
#define ICS_IRQ_FREE(ics, srcno) \
|
||||
|
|
|
@ -161,7 +161,8 @@ static XICSState *xics_system_init(MachineState *machine,
|
|||
if (kvm_enabled()) {
|
||||
Error *err = NULL;
|
||||
|
||||
if (machine_kernel_irqchip_allowed(machine)) {
|
||||
if (machine_kernel_irqchip_allowed(machine) &&
|
||||
!xics_kvm_init(SPAPR_MACHINE(machine), errp)) {
|
||||
xics = try_create_xics(SPAPR_MACHINE(machine),
|
||||
TYPE_XICS_SPAPR_KVM, TYPE_ICS_KVM,
|
||||
TYPE_KVM_ICP, nr_servers, nr_irqs, &err);
|
||||
|
@ -175,6 +176,7 @@ static XICSState *xics_system_init(MachineState *machine,
|
|||
}
|
||||
|
||||
if (!xics) {
|
||||
xics_spapr_init(SPAPR_MACHINE(machine), errp);
|
||||
xics = try_create_xics(SPAPR_MACHINE(machine),
|
||||
TYPE_XICS_SPAPR, TYPE_ICS_SIMPLE,
|
||||
TYPE_ICP, nr_servers, nr_irqs, errp);
|
||||
|
|
|
@ -224,4 +224,9 @@ void ics_set_irq_type(ICSState *ics, int srcno, bool lsi);
|
|||
void ics_resend(ICSState *ics);
|
||||
void icp_resend(ICPState *ss);
|
||||
|
||||
typedef struct sPAPRMachineState sPAPRMachineState;
|
||||
|
||||
int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);
|
||||
int xics_spapr_init(sPAPRMachineState *spapr, Error **errp);
|
||||
|
||||
#endif /* XICS_H */
|
||||
|
|
Loading…
Reference in New Issue