74 auto id() const ->
u8 {
return m_id; }
81 return (
static_cast<u64>(high) << 32) | low;
90 return di::bit_cast<IoApicRedirectionTableEntry>(
direct_read64(offset_for_redirection_entry(offset)));
93 direct_write64(offset_for_redirection_entry(offset), di::bit_cast<u64>(entry));
109 u32 volatile* m_access {
nullptr };
110 u8 m_global_offset { 0 };
112 u8 m_max_redirection_entry { 0 };
#define ASSERT_LT_EQ
Definition assert_binary.h:88
Definition bit_struct.h:11
Definition tuple_forward_declaration.h:5
auto read_redirection_entry(u8 offset) -> IoApicRedirectionTableEntry
Definition io_apic.h:89
void write_redirection_entry(u8 offset, IoApicRedirectionTableEntry entry)
Definition io_apic.h:92
void direct_write64(IoApicOffset offset, u64 value)
Definition io_apic.h:84
auto max_redirection_entry() const -> u8
Definition io_apic.h:75
void direct_write(IoApicOffset, u32)
Definition io_apic.cpp:34
IoApic(mm::PhysicalAddress access_base, u8 global_offset)
Definition io_apic.cpp:12
friend void tag_invoke(di::Tag< send_eoi >, IoApic &, IrqLine irq_line)
Definition io_apic.cpp:39
auto id() const -> u8
Definition io_apic.h:74
auto direct_read64(IoApicOffset offset) -> u64
Definition io_apic.h:78
auto direct_read(IoApicOffset) -> u32
Definition io_apic.cpp:29
__UINT64_TYPE__ u64
Definition integers.h:12
__UINT8_TYPE__ u8
Definition integers.h:9
__UINT32_TYPE__ u32
Definition integers.h:11
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto to_underlying
Definition to_underlying.h:15
di::StrongInt< PhysicalAddressTag > PhysicalAddress
Definition physical_address.h:12
di::BitStruct< 4, IoApicVersion, IoApicMaxRedirectionEntry > IoApicVersionRegister
Definition io_apic.h:41
void init_io_apic()
Definition io_apic.cpp:121
IoApicOffset
IO APIC Register Offsets.
Definition io_apic.h:29
@ ArbitrationId
Definition io_apic.h:32
@ Version
Definition io_apic.h:31
@ Id
Definition io_apic.h:30
@ RedirectionTable
Definition io_apic.h:33
IoApicDestinationMode
IO APIC Destination Mode.
Definition io_apic.h:46
@ Physical
Send to a single processor.
Definition io_apic.h:47
@ Logical
Send to a bit mask of processors.
Definition io_apic.h:48
di::BitStruct< 8, IoApicRedirectionTableEntryVector, IoApicRedirectionTableEntryDeliveryMode, IoApicRedirectionTableEntryDestinationMode, IoApicRedirectionTableEntryDeliveryStatus, IoApicRedirectionTableEntryPolarity, IoApicRedirectionTableEntryRemoteIrr, IoApicRedirectionTableEntryTriggerMode, IoApicRedirectionTableEntryMask, IoApicRedirectionTableEntryDestination > IoApicRedirectionTableEntry
Definition io_apic.h:63
IoApicAccessOffset
IO APIC Access Register Offsets.
Definition io_apic.h:21
@ RegisterSelect
Definition io_apic.h:22
@ Window
Definition io_apic.h:23
di::StrongInt< IrqLineTag > IrqLine
Definition irq_controller.h:18
Definition irq_controller.h:20
IO APIC Redirection Table Entry.
Definition io_apic.h:54
IO APIC Version Register.
Definition io_apic.h:39