1*2fde99eeSLaurent Vivier /* 2*2fde99eeSLaurent Vivier * SPDX-License-Identifer: GPL-2.0-or-later 3*2fde99eeSLaurent Vivier * 4*2fde99eeSLaurent Vivier * QEMU Motorola 680x0 IRQ Controller 5*2fde99eeSLaurent Vivier * 6*2fde99eeSLaurent Vivier * (c) 2020 Laurent Vivier <laurent@vivier.eu> 7*2fde99eeSLaurent Vivier * 8*2fde99eeSLaurent Vivier */ 9*2fde99eeSLaurent Vivier 10*2fde99eeSLaurent Vivier #ifndef M68K_IRQC_H 11*2fde99eeSLaurent Vivier #define M68K_IRQC_H 12*2fde99eeSLaurent Vivier 13*2fde99eeSLaurent Vivier #include "hw/sysbus.h" 14*2fde99eeSLaurent Vivier 15*2fde99eeSLaurent Vivier #define TYPE_M68K_IRQC "m68k-irq-controller" 16*2fde99eeSLaurent Vivier #define M68K_IRQC(obj) OBJECT_CHECK(M68KIRQCState, (obj), \ 17*2fde99eeSLaurent Vivier TYPE_M68K_IRQC) 18*2fde99eeSLaurent Vivier 19*2fde99eeSLaurent Vivier #define M68K_IRQC_AUTOVECTOR_BASE 25 20*2fde99eeSLaurent Vivier 21*2fde99eeSLaurent Vivier enum { 22*2fde99eeSLaurent Vivier M68K_IRQC_LEVEL_1 = 0, 23*2fde99eeSLaurent Vivier M68K_IRQC_LEVEL_2, 24*2fde99eeSLaurent Vivier M68K_IRQC_LEVEL_3, 25*2fde99eeSLaurent Vivier M68K_IRQC_LEVEL_4, 26*2fde99eeSLaurent Vivier M68K_IRQC_LEVEL_5, 27*2fde99eeSLaurent Vivier M68K_IRQC_LEVEL_6, 28*2fde99eeSLaurent Vivier M68K_IRQC_LEVEL_7, 29*2fde99eeSLaurent Vivier }; 30*2fde99eeSLaurent Vivier #define M68K_IRQC_LEVEL_NUM (M68K_IRQC_LEVEL_7 - M68K_IRQC_LEVEL_1 + 1) 31*2fde99eeSLaurent Vivier 32*2fde99eeSLaurent Vivier typedef struct M68KIRQCState { 33*2fde99eeSLaurent Vivier SysBusDevice parent_obj; 34*2fde99eeSLaurent Vivier 35*2fde99eeSLaurent Vivier uint8_t ipr; 36*2fde99eeSLaurent Vivier 37*2fde99eeSLaurent Vivier /* statistics */ 38*2fde99eeSLaurent Vivier uint64_t stats_irq_count[M68K_IRQC_LEVEL_NUM]; 39*2fde99eeSLaurent Vivier } M68KIRQCState; 40*2fde99eeSLaurent Vivier 41*2fde99eeSLaurent Vivier #endif 42