ppc/pnv: extend the machine with a InterruptStatsProvider interface

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:
Cédric Le Goater 2017-04-03 09:46:02 +02:00 committed by David Gibson
parent 36fc6f0800
commit 47fea43aa3

View File

@ -33,6 +33,8 @@
#include "exec/address-spaces.h" #include "exec/address-spaces.h"
#include "qemu/cutils.h" #include "qemu/cutils.h"
#include "qapi/visitor.h" #include "qapi/visitor.h"
#include "monitor/monitor.h"
#include "hw/intc/intc.h"
#include "hw/ppc/xics.h" #include "hw/ppc/xics.h"
#include "hw/ppc/pnv_xscom.h" #include "hw/ppc/pnv_xscom.h"
@ -762,6 +764,18 @@ static ICPState *pnv_icp_get(XICSFabric *xi, int pir)
return cpu ? ICP(cpu->intc) : NULL; return cpu ? ICP(cpu->intc) : NULL;
} }
static void pnv_pic_print_info(InterruptStatsProvider *obj,
Monitor *mon)
{
CPUState *cs;
CPU_FOREACH(cs) {
PowerPCCPU *cpu = POWERPC_CPU(cs);
icp_pic_print_info(ICP(cpu->intc), mon);
}
}
static void pnv_get_num_chips(Object *obj, Visitor *v, const char *name, static void pnv_get_num_chips(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp) void *opaque, Error **errp)
{ {
@ -813,6 +827,7 @@ static void powernv_machine_class_init(ObjectClass *oc, void *data)
{ {
MachineClass *mc = MACHINE_CLASS(oc); MachineClass *mc = MACHINE_CLASS(oc);
XICSFabricClass *xic = XICS_FABRIC_CLASS(oc); XICSFabricClass *xic = XICS_FABRIC_CLASS(oc);
InterruptStatsProviderClass *ispc = INTERRUPT_STATS_PROVIDER_CLASS(oc);
mc->desc = "IBM PowerNV (Non-Virtualized)"; mc->desc = "IBM PowerNV (Non-Virtualized)";
mc->init = ppc_powernv_init; mc->init = ppc_powernv_init;
@ -824,6 +839,7 @@ static void powernv_machine_class_init(ObjectClass *oc, void *data)
mc->default_boot_order = NULL; mc->default_boot_order = NULL;
mc->default_ram_size = 1 * G_BYTE; mc->default_ram_size = 1 * G_BYTE;
xic->icp_get = pnv_icp_get; xic->icp_get = pnv_icp_get;
ispc->print_info = pnv_pic_print_info;
powernv_machine_class_props_init(oc); powernv_machine_class_props_init(oc);
} }
@ -836,6 +852,7 @@ static const TypeInfo powernv_machine_info = {
.class_init = powernv_machine_class_init, .class_init = powernv_machine_class_init,
.interfaces = (InterfaceInfo[]) { .interfaces = (InterfaceInfo[]) {
{ TYPE_XICS_FABRIC }, { TYPE_XICS_FABRIC },
{ TYPE_INTERRUPT_STATS_PROVIDER },
{ }, { },
}, },
}; };