12fde99eeSLaurent Vivier /* 265b4c8c7SPhilippe Mathieu-Daudé * SPDX-License-Identifier: GPL-2.0-or-later 32fde99eeSLaurent Vivier * 42fde99eeSLaurent Vivier * QEMU Motorola 680x0 IRQ Controller 52fde99eeSLaurent Vivier * 62fde99eeSLaurent Vivier * (c) 2020 Laurent Vivier <laurent@vivier.eu> 72fde99eeSLaurent Vivier * 82fde99eeSLaurent Vivier */ 92fde99eeSLaurent Vivier 102fde99eeSLaurent Vivier #ifndef M68K_IRQC_H 112fde99eeSLaurent Vivier #define M68K_IRQC_H 122fde99eeSLaurent Vivier 132fde99eeSLaurent Vivier #include "hw/sysbus.h" 142fde99eeSLaurent Vivier 152fde99eeSLaurent Vivier #define TYPE_M68K_IRQC "m68k-irq-controller" 162fde99eeSLaurent Vivier #define M68K_IRQC(obj) OBJECT_CHECK(M68KIRQCState, (obj), \ 172fde99eeSLaurent Vivier TYPE_M68K_IRQC) 182fde99eeSLaurent Vivier 192fde99eeSLaurent Vivier #define M68K_IRQC_AUTOVECTOR_BASE 25 202fde99eeSLaurent Vivier 212fde99eeSLaurent Vivier enum { 222fde99eeSLaurent Vivier M68K_IRQC_LEVEL_1 = 0, 232fde99eeSLaurent Vivier M68K_IRQC_LEVEL_2, 242fde99eeSLaurent Vivier M68K_IRQC_LEVEL_3, 252fde99eeSLaurent Vivier M68K_IRQC_LEVEL_4, 262fde99eeSLaurent Vivier M68K_IRQC_LEVEL_5, 272fde99eeSLaurent Vivier M68K_IRQC_LEVEL_6, 282fde99eeSLaurent Vivier M68K_IRQC_LEVEL_7, 292fde99eeSLaurent Vivier }; 302fde99eeSLaurent Vivier #define M68K_IRQC_LEVEL_NUM (M68K_IRQC_LEVEL_7 - M68K_IRQC_LEVEL_1 + 1) 312fde99eeSLaurent Vivier 322fde99eeSLaurent Vivier typedef struct M68KIRQCState { 332fde99eeSLaurent Vivier SysBusDevice parent_obj; 342fde99eeSLaurent Vivier 352fde99eeSLaurent Vivier uint8_t ipr; 36*b8fc6195SPhilippe Mathieu-Daudé ArchCPU *cpu; 372fde99eeSLaurent Vivier 382fde99eeSLaurent Vivier /* statistics */ 392fde99eeSLaurent Vivier uint64_t stats_irq_count[M68K_IRQC_LEVEL_NUM]; 402fde99eeSLaurent Vivier } M68KIRQCState; 412fde99eeSLaurent Vivier 422fde99eeSLaurent Vivier #endif 43