5export module zxfoundation.sys.irq.consts;
6import zxfoundation.base.types;
10namespace zxfoundation::sys::irq {
12 constexpr u16 IRQ_NR_MAX = 0x0400;
13 constexpr u16 IRQ_BASE_PGM = 0x0000;
14 constexpr u16 IRQ_BASE_EXT = 0x0100;
15 constexpr u16 IRQ_BASE_IO = 0x0200;
16 constexpr u16 IRQ_BASE_MCCK = 0x0300;
18 constexpr u32 IRQF_SHARED = 1U << 0;
19 constexpr u32 IRQF_DISABLED = 1U << 1;
20 constexpr u32 IRQF_NOAUTOEN = 1U << 2;
21 constexpr u32 IRQF_FAST = 1U << 3;
26 enum class ext_irq_slot : u16 {
27 EMERGENCY_SIGNAL = 0x01,
29 SERVICE_SIGNAL = 0x03,
32 CLOCK_COMPARATOR = 0x06,
34 MALFUNCTION_ALERT = 0x08,
36 MEASUREMENT_ALERT = 0x0A,
42 constexpr u16 EXT_IRQ_EMERGENCY_SIGNAL =
static_cast<u16>(ext_irq_slot::EMERGENCY_SIGNAL);
43 constexpr u16 EXT_IRQ_EXTERNAL_CALL =
static_cast<u16>(ext_irq_slot::EXTERNAL_CALL);
44 constexpr u16 EXT_IRQ_SERVICE_SIGNAL =
static_cast<u16>(ext_irq_slot::SERVICE_SIGNAL);
45 constexpr u16 EXT_IRQ_CP_SERVICE =
static_cast<u16>(ext_irq_slot::CP_SERVICE);
46 constexpr u16 EXT_IRQ_CPU_TIMER =
static_cast<u16>(ext_irq_slot::CPU_TIMER);
47 constexpr u16 EXT_IRQ_CLOCK_COMPARATOR =
static_cast<u16>(ext_irq_slot::CLOCK_COMPARATOR);
48 constexpr u16 EXT_IRQ_TIMING_ALERT =
static_cast<u16>(ext_irq_slot::TIMING_ALERT);
49 constexpr u16 EXT_IRQ_MALFUNCTION_ALERT =
static_cast<u16>(ext_irq_slot::MALFUNCTION_ALERT);
50 constexpr u16 EXT_IRQ_WARNING_TRACK =
static_cast<u16>(ext_irq_slot::WARNING_TRACK);
51 constexpr u16 EXT_IRQ_MEASUREMENT_ALERT=
static_cast<u16>(ext_irq_slot::MEASUREMENT_ALERT);
52 constexpr u16 EXT_IRQ_INTERRUPT_KEY =
static_cast<u16>(ext_irq_slot::INTERRUPT_KEY);
57 [[nodiscard]]
constexpr auto ext_code_to_irq(u16 ext_code)
noexcept -> u16 {
59 case 0x1201:
return IRQ_BASE_EXT + EXT_IRQ_EMERGENCY_SIGNAL;
60 case 0x1202:
return IRQ_BASE_EXT + EXT_IRQ_EXTERNAL_CALL;
61 case 0x2401:
return IRQ_BASE_EXT + EXT_IRQ_SERVICE_SIGNAL;
62 case 0x2603:
return IRQ_BASE_EXT + EXT_IRQ_CP_SERVICE;
63 case 0x1005:
return IRQ_BASE_EXT + EXT_IRQ_CPU_TIMER;
64 case 0x1004:
return IRQ_BASE_EXT + EXT_IRQ_CLOCK_COMPARATOR;
65 case 0x1406:
return IRQ_BASE_EXT + EXT_IRQ_TIMING_ALERT;
66 case 0x1200:
return IRQ_BASE_EXT + EXT_IRQ_MALFUNCTION_ALERT;
67 case 0x1007:
return IRQ_BASE_EXT + EXT_IRQ_WARNING_TRACK;
68 case 0x1407:
return IRQ_BASE_EXT + EXT_IRQ_MEASUREMENT_ALERT;
69 case 0x0040:
return IRQ_BASE_EXT + EXT_IRQ_INTERRUPT_KEY;
70 default:
return IRQ_NR_MAX;
77 constexpr u32 DEFERRED_IRQ_WORK = 0;
78 constexpr u32 DEFERRED_CALL_FUNCTION = 1;
79 constexpr u32 DEFERRED_MCCK_PENDING = 2;
80 constexpr u32 DEFERRED_RESCHED = 3;
81 constexpr u32 DEFERRED_STOP_CPU = 4;
83 constexpr u32 DEFERRED_IRQ_WORK_BIT = 1U << DEFERRED_IRQ_WORK;
84 constexpr u32 DEFERRED_CALL_FUNCTION_BIT = 1U << DEFERRED_CALL_FUNCTION;
85 constexpr u32 DEFERRED_MCCK_PENDING_BIT = 1U << DEFERRED_MCCK_PENDING;
86 constexpr u32 DEFERRED_RESCHED_BIT = 1U << DEFERRED_RESCHED;
87 constexpr u32 DEFERRED_STOP_CPU_BIT = 1U << DEFERRED_STOP_CPU;