1120e512bSHervé Poussineau #ifndef INTC_H 2120e512bSHervé Poussineau #define INTC_H 3120e512bSHervé Poussineau 4120e512bSHervé Poussineau #include "qom/object.h" 5120e512bSHervé Poussineau 6120e512bSHervé Poussineau #define TYPE_INTERRUPT_STATS_PROVIDER "intctrl" 7120e512bSHervé Poussineau 8*db1015e9SEduardo Habkost typedef struct InterruptStatsProviderClass InterruptStatsProviderClass; 9120e512bSHervé Poussineau #define INTERRUPT_STATS_PROVIDER_CLASS(klass) \ 10120e512bSHervé Poussineau OBJECT_CLASS_CHECK(InterruptStatsProviderClass, (klass), \ 11120e512bSHervé Poussineau TYPE_INTERRUPT_STATS_PROVIDER) 12120e512bSHervé Poussineau #define INTERRUPT_STATS_PROVIDER_GET_CLASS(obj) \ 13120e512bSHervé Poussineau OBJECT_GET_CLASS(InterruptStatsProviderClass, (obj), \ 14120e512bSHervé Poussineau TYPE_INTERRUPT_STATS_PROVIDER) 15120e512bSHervé Poussineau #define INTERRUPT_STATS_PROVIDER(obj) \ 16120e512bSHervé Poussineau INTERFACE_CHECK(InterruptStatsProvider, (obj), \ 17120e512bSHervé Poussineau TYPE_INTERRUPT_STATS_PROVIDER) 18120e512bSHervé Poussineau 19aa1b35b9SMarc-André Lureau typedef struct InterruptStatsProvider InterruptStatsProvider; 20120e512bSHervé Poussineau 21*db1015e9SEduardo Habkost struct InterruptStatsProviderClass { 22120e512bSHervé Poussineau InterfaceClass parent; 23120e512bSHervé Poussineau 24120e512bSHervé Poussineau /* The returned pointer and statistics must remain valid until 25120e512bSHervé Poussineau * the BQL is next dropped. 26120e512bSHervé Poussineau */ 27120e512bSHervé Poussineau bool (*get_statistics)(InterruptStatsProvider *obj, uint64_t **irq_counts, 28120e512bSHervé Poussineau unsigned int *nb_irqs); 29120e512bSHervé Poussineau void (*print_info)(InterruptStatsProvider *obj, Monitor *mon); 30*db1015e9SEduardo Habkost }; 31120e512bSHervé Poussineau 32120e512bSHervé Poussineau #endif 33