intc/slavio_intctl: implement InterruptStatsProvider interface
Acked-by: Artyom Tarasenko <atar4qemu@gmail.com> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org> Message-Id: <1474921408-24710-4-git-send-email-hpoussin@reactos.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
4f2e39e103
commit
148fbe9504
@ -26,6 +26,7 @@
|
|||||||
#include "hw/sparc/sun4m.h"
|
#include "hw/sparc/sun4m.h"
|
||||||
#include "monitor/monitor.h"
|
#include "monitor/monitor.h"
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
|
#include "hw/intc/intc.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
||||||
//#define DEBUG_IRQ_COUNT
|
//#define DEBUG_IRQ_COUNT
|
||||||
@ -418,6 +419,31 @@ static void slavio_intctl_reset(DeviceState *d)
|
|||||||
slavio_check_interrupts(s, 0);
|
slavio_check_interrupts(s, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_IRQ_COUNT
|
||||||
|
static bool slavio_intctl_get_statistics(InterruptStatsProvider *obj,
|
||||||
|
uint64_t **irq_counts,
|
||||||
|
unsigned int *nb_irqs)
|
||||||
|
{
|
||||||
|
SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
|
||||||
|
*irq_counts = s->irq_count;
|
||||||
|
*nb_irqs = ARRAY_SIZE(s->irq_count);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void slavio_intctl_print_info(InterruptStatsProvider *obj, Monitor *mon)
|
||||||
|
{
|
||||||
|
SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_CPUS; i++) {
|
||||||
|
monitor_printf(mon, "per-cpu %d: pending 0x%08x\n", i,
|
||||||
|
s->slaves[i].intreg_pending);
|
||||||
|
}
|
||||||
|
monitor_printf(mon, "master: pending 0x%08x, disabled 0x%08x\n",
|
||||||
|
s->intregm_pending, s->intregm_disabled);
|
||||||
|
}
|
||||||
|
|
||||||
static void slavio_intctl_init(Object *obj)
|
static void slavio_intctl_init(Object *obj)
|
||||||
{
|
{
|
||||||
DeviceState *dev = DEVICE(obj);
|
DeviceState *dev = DEVICE(obj);
|
||||||
@ -449,9 +475,14 @@ static void slavio_intctl_init(Object *obj)
|
|||||||
static void slavio_intctl_class_init(ObjectClass *klass, void *data)
|
static void slavio_intctl_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
InterruptStatsProviderClass *ic = INTERRUPT_STATS_PROVIDER_CLASS(klass);
|
||||||
|
|
||||||
dc->reset = slavio_intctl_reset;
|
dc->reset = slavio_intctl_reset;
|
||||||
dc->vmsd = &vmstate_intctl;
|
dc->vmsd = &vmstate_intctl;
|
||||||
|
#ifdef DEBUG_IRQ_COUNT
|
||||||
|
ic->get_statistics = slavio_intctl_get_statistics;
|
||||||
|
#endif
|
||||||
|
ic->print_info = slavio_intctl_print_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo slavio_intctl_info = {
|
static const TypeInfo slavio_intctl_info = {
|
||||||
@ -460,6 +491,10 @@ static const TypeInfo slavio_intctl_info = {
|
|||||||
.instance_size = sizeof(SLAVIO_INTCTLState),
|
.instance_size = sizeof(SLAVIO_INTCTLState),
|
||||||
.instance_init = slavio_intctl_init,
|
.instance_init = slavio_intctl_init,
|
||||||
.class_init = slavio_intctl_class_init,
|
.class_init = slavio_intctl_class_init,
|
||||||
|
.interfaces = (InterfaceInfo[]) {
|
||||||
|
{ TYPE_INTERRUPT_STATS_PROVIDER },
|
||||||
|
{ }
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static void slavio_intctl_register_types(void)
|
static void slavio_intctl_register_types(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user