]> git.proxmox.com Git - mirror_edk2.git/blob - PcAtChipsetPkg/Include/Register/IoApic.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / PcAtChipsetPkg / Include / Register / IoApic.h
1 /** @file
2 I/O APIC Register Definitions from 82093AA I/O Advanced Programmable Interrupt
3 Controller (IOAPIC), 1996.
4
5 Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef __IO_APIC_H__
11 #define __IO_APIC_H__
12
13 ///
14 /// I/O APIC Register Offsets
15 ///
16 #define IOAPIC_INDEX_OFFSET 0x00
17 #define IOAPIC_DATA_OFFSET 0x10
18
19 ///
20 /// I/O APIC Indirect Register Indexes
21 ///
22 #define IO_APIC_IDENTIFICATION_REGISTER_INDEX 0x00
23 #define IO_APIC_VERSION_REGISTER_INDEX 0x01
24 #define IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX 0x10
25
26 ///
27 /// I/O APIC Interrupt Deliver Modes
28 ///
29 #define IO_APIC_DELIVERY_MODE_FIXED 0
30 #define IO_APIC_DELIVERY_MODE_LOWEST_PRIORITY 1
31 #define IO_APIC_DELIVERY_MODE_SMI 2
32 #define IO_APIC_DELIVERY_MODE_NMI 4
33 #define IO_APIC_DELIVERY_MODE_INIT 5
34 #define IO_APIC_DELIVERY_MODE_EXTINT 7
35
36 #pragma pack(1)
37
38 typedef union {
39 struct {
40 UINT32 Reserved0 : 24;
41 UINT32 Identification : 4;
42 UINT32 Reserved1 : 4;
43 } Bits;
44 UINT32 Uint32;
45 } IO_APIC_IDENTIFICATION_REGISTER;
46
47 typedef union {
48 struct {
49 UINT32 Version : 8;
50 UINT32 Reserved0 : 8;
51 UINT32 MaximumRedirectionEntry : 8;
52 UINT32 Reserved1 : 8;
53 } Bits;
54 UINT32 Uint32;
55 } IO_APIC_VERSION_REGISTER;
56
57 typedef union {
58 struct {
59 UINT32 Vector : 8;
60 UINT32 DeliveryMode : 3;
61 UINT32 DestinationMode : 1;
62 UINT32 DeliveryStatus : 1;
63 UINT32 Polarity : 1;
64 UINT32 RemoteIRR : 1;
65 UINT32 TriggerMode : 1;
66 UINT32 Mask : 1;
67 UINT32 Reserved0 : 15;
68 UINT32 Reserved1 : 24;
69 UINT32 DestinationID : 8;
70 } Bits;
71 struct {
72 UINT32 Low;
73 UINT32 High;
74 } Uint32;
75 UINT64 Uint64;
76 } IO_APIC_REDIRECTION_TABLE_ENTRY;
77
78 #pragma pack()
79
80 #endif