ZXFoundation™ 26h2
Loading...
Searching...
No Matches
io.cxxm
Go to the documentation of this file.
1/// SPDX-License-Identifier: Apache-2.0
2/// @file io.cxxm
3/// @brief Centralized io dispatch.
4
5export module arch.s390x.trap.io;
6import arch.s390x.cpu.lowcore;
7import arch.s390x.io.css.subchannel;
8import arch.s390x.cpu.irq;
9import zxfoundation.sys.irq.core;
10import zxfoundation.sys.irq.consts;
11import zxfoundation.base.types;
12
13export {
14
15namespace arch::s390x::trap::io {
16
17 /// @brief Centralized io dispatcher.
18 auto handle(cpu::irq::irq_frame* frame) noexcept -> void {
19 const auto* lc = cpu::lowcore::get_current();
20 const u16 sch_no = lc->subchannel_nr;
21 const u32 io_int_parm = lc->io_int_parm;
22
23 // Dispatch to the CSS layer for command-RB / TSCH processing.
24 s390x::io::css::io_interrupt(sch_no);
25
26 const u8 isc = static_cast<u8>(io_int_parm & 0x07U);
27 const u16 io_irq = static_cast<u16>(
28 zxfoundation::sys::irq::IRQ_BASE_IO + isc);
29 zxfoundation::sys::irq::irq_dispatch(io_irq, frame, cpu::irq::ZX_IRQ_CLASS_IO);
30 }
31
32} // namespace arch::s390x::trap::io
33
34} // end export