ZXFoundation™ 26h2
Loading...
Searching...
No Matches
smp.cxxm
1/// SPDX-License-Identifier: Apache 2.0
2/// @file smp_types.cxxm
3/// @brief smp types
4
5export module arch.s390x.cpu.smp;
6import arch.s390x.init.zxfl.protocol;
7import zxfoundation.base.types;
8import zxfoundation.sys.irq.consts;
9
10export {
11
12namespace arch::s390x::cpu::smp {
13
14 /// IRQ vector slots for IPI sub-channels, drawn from the IRQ_BASE_EXT
15 /// range defined by the IRQ subsystem.
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);
21
22 /// @brief Soft-IPI bit indices — OR-ed into percpu::ec_bits by the sender
23 /// and atomically drained by the receiver.
24 /// @{
25 constexpr u64 EC_SCHEDULE = 0; ///< Request reschedule.
26 constexpr u64 EC_CALL_FUNCTION = 1; ///< Generic function-call IPI.
27 constexpr u64 EC_CALL_FUNCTION_SINGLE = 2; ///< Single-CPU function-call IPI.
28 constexpr u64 EC_STOP_CPU = 3; ///< Stop this CPU.
29 constexpr u64 EC_MCCK_PENDING = 4; ///< Deferred MCCK work pending.
30 constexpr u64 EC_IRQ_WORK = 5; ///< IRQ work (timer/lists).
31 constexpr u64 EC_HALT = 6; ///< Halt / shutdown ordering.
32 /// @}
33
34 /// @brief 1<<N masks derived from the bit positions above.
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;
43
44 /// @brief CR0 subclass control bit positions (IBM MSB-0 numbering)
45 /// @{
46 constexpr u8 CR0_SC_EXTERNAL_CALL = 13; ///< CR0 bit 13 → ext_call 0x1202.
47 constexpr u8 CR0_SC_EMERGENCY_SIGNAL = 14; ///< CR0 bit 14 → emergency 0x1201.
48 constexpr u8 CR0_SC_SERVICE_SIGNAL = 15; ///< CR0 bit 15 → service 0x2401.
49 constexpr u8 CR0_SC_CPU_TIMER = 23; ///< CR0 bit 23 → CPU timer 0x1005.
50 constexpr u8 CR0_SC_CLOCK_COMPARATOR = 24; ///< CR0 bit 24 → clock comp 0x1004.
51 constexpr u8 CR0_SC_TIMING_ALERT = 30; ///< CR0 bit 30 → timing alert 0x1406.
52 /// @}
53
54 auto launch(const init::zxfl::protocol& protocol) noexcept -> void;
55
56} // namespace arch::s390x::cpu::smp
57
58} // end export