5export module arch.s390x.cpu.smp;
6import arch.s390x.init.zxfl.protocol;
7import zxfoundation.base.types;
8import zxfoundation.sys.irq.consts;
12namespace arch::s390x::cpu::smp {
16 constexpr u16 IPI_IRQ_EMERGENCY =
17 static_cast<u16>(zxfoundation::sys::irq::IRQ_BASE_EXT + zxfoundation::sys::irq::EXT_IRQ_EMERGENCY_SIGNAL);
18 constexpr u16 IPI_IRQ_EXTCALL =
19 static_cast<u16>(zxfoundation::sys::irq::IRQ_BASE_EXT +
20 zxfoundation::sys::irq::EXT_IRQ_EXTERNAL_CALL);
25 constexpr u64 EC_SCHEDULE = 0;
26 constexpr u64 EC_CALL_FUNCTION = 1;
27 constexpr u64 EC_CALL_FUNCTION_SINGLE = 2;
28 constexpr u64 EC_STOP_CPU = 3;
29 constexpr u64 EC_MCCK_PENDING = 4;
30 constexpr u64 EC_IRQ_WORK = 5;
31 constexpr u64 EC_HALT = 6;
35 constexpr u64 EC_SCHEDULE_BIT = 1ULL << EC_SCHEDULE;
36 constexpr u64 EC_HALT_BIT = 1ULL << 1;
37 constexpr u64 EC_CALL_FUNCTION_BIT = 1ULL << EC_CALL_FUNCTION;
38 constexpr u64 EC_CALL_FUNCTION_SINGLE_BIT= 1ULL << EC_CALL_FUNCTION_SINGLE;
39 constexpr u64 EC_STOP_CPU_BIT = 1ULL << EC_STOP_CPU;
40 constexpr u64 EC_MCCK_PENDING_BIT = 1ULL << EC_MCCK_PENDING;
41 constexpr u64 EC_IRQ_WORK_BIT = 1ULL << EC_IRQ_WORK;
42 constexpr u64 EC_HALT_BIT_OFFSET = 1ULL << EC_HALT;
46 constexpr u8 CR0_SC_EXTERNAL_CALL = 13;
47 constexpr u8 CR0_SC_EMERGENCY_SIGNAL = 14;
48 constexpr u8 CR0_SC_SERVICE_SIGNAL = 15;
49 constexpr u8 CR0_SC_CPU_TIMER = 23;
50 constexpr u8 CR0_SC_CLOCK_COMPARATOR = 24;
51 constexpr u8 CR0_SC_TIMING_ALERT = 30;
54 auto launch(
const init::zxfl::protocol& protocol)
noexcept ->
void;