5export module zxfoundation.sys.irq.desc;
6import zxfoundation.sys.irq.core;
7import zxfoundation.base.types;
8import zxfoundation.scoms.kobject.base;
9import zxfoundation.sync.qspinlock.core;
10import arch.s390x.cpu.irq;
16namespace zxfoundation::sys::irq {
20 scoms::kobject::bobject ko{};
22 handler_fn handler{
nullptr};
27 std::atomic<u32> count{0};
28 sync::qspinlock::qspinlock lock{};
30 irq_desc()
noexcept =
default;
32 explicit irq_desc(u16 irq)
noexcept
35 [[nodiscard]]
auto registered()
const noexcept ->
bool {
36 return handler !=
nullptr;
39 irq_desc(
const irq_desc&) =
delete;
40 auto operator=(
const irq_desc&) =
delete;
41 irq_desc(irq_desc&&) =
delete;
42 auto operator=(irq_desc&&) =
delete;
45 static_assert(
__builtin_offsetof(irq_desc, ko) == 0,
46 "irq_desc::ko must be at offset 0 for SCOMS scoms_table");
48 [[nodiscard]]
auto irq_get_desc(u16 irq)
noexcept -> irq_desc*;