/** @file I/O APIC Register Definitions from 82093AA I/O Advanced Programmable Interrupt Controller (IOAPIC), 1996. Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __IO_APIC_H__ #define __IO_APIC_H__ /// /// I/O APIC Register Offsets /// #define IOAPIC_INDEX_OFFSET 0x00 #define IOAPIC_DATA_OFFSET 0x10 /// /// I/O APIC Indirect Register Indexes /// #define IO_APIC_IDENTIFICATION_REGISTER_INDEX 0x00 #define IO_APIC_VERSION_REGISTER_INDEX 0x01 #define IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX 0x10 /// /// I/O APIC Interrupt Deliver Modes /// #define IO_APIC_DELIVERY_MODE_FIXED 0 #define IO_APIC_DELIVERY_MODE_LOWEST_PRIORITY 1 #define IO_APIC_DELIVERY_MODE_SMI 2 #define IO_APIC_DELIVERY_MODE_NMI 4 #define IO_APIC_DELIVERY_MODE_INIT 5 #define IO_APIC_DELIVERY_MODE_EXTINT 7 #pragma pack(1) typedef union { struct { UINT32 Reserved0 : 24; UINT32 Identification : 4; UINT32 Reserved1 : 4; } Bits; UINT32 Uint32; } IO_APIC_IDENTIFICATION_REGISTER; typedef union { struct { UINT32 Version : 8; UINT32 Reserved0 : 8; UINT32 MaximumRedirectionEntry : 8; UINT32 Reserved1 : 8; } Bits; UINT32 Uint32; } IO_APIC_VERSION_REGISTER; typedef union { struct { UINT32 Vector : 8; UINT32 DeliveryMode : 3; UINT32 DestinationMode : 1; UINT32 DeliveryStatus : 1; UINT32 Polarity : 1; UINT32 RemoteIRR : 1; UINT32 TriggerMode : 1; UINT32 Mask : 1; UINT32 Reserved0 : 15; UINT32 Reserved1 : 24; UINT32 DestinationID : 8; } Bits; struct { UINT32 Low; UINT32 High; } Uint32; UINT64 Uint64; } IO_APIC_REDIRECTION_TABLE_ENTRY; #pragma pack() #endif