xref: /qemu/include/hw/intc/m68k_irqc.h (revision 2fde99ee3120416251922282c364833473135765)
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