]>
Commit | Line | Data |
---|---|---|
b303605e MK |
1 | /** @file\r |
2 | This file describes the contents of the ACPI Multiple APIC Description\r | |
3 | Table (MADT). Some additional ACPI values are defined in Acpi10.h and\r | |
4 | Acpi20.h.\r | |
5 | To make changes to the MADT, it is necessary to update the count for the\r | |
6 | APIC structure being updated, and to modify table found in Madt.c.\r | |
7 | \r | |
8 | Copyright (c) 2013-2015 Intel Corporation.\r | |
9 | \r | |
0eb3de2e | 10 | SPDX-License-Identifier: BSD-2-Clause-Patent\r |
b303605e MK |
11 | \r |
12 | \r | |
13 | **/\r | |
14 | \r | |
15 | #ifndef _MADT_H\r | |
16 | #define _MADT_H\r | |
17 | \r | |
18 | \r | |
19 | //\r | |
20 | // Statements that include other files\r | |
21 | //\r | |
22 | \r | |
23 | #include <IndustryStandard/Acpi.h>\r | |
24 | #include <Library/PcdLib.h>\r | |
25 | \r | |
26 | //\r | |
27 | // MADT Definitions\r | |
28 | //\r | |
29 | \r | |
30 | #define EFI_ACPI_OEM_MADT_REVISION 0x00000001\r | |
31 | \r | |
32 | //\r | |
33 | // Local APIC address\r | |
34 | //\r | |
35 | \r | |
36 | #define EFI_ACPI_LOCAL_APIC_ADDRESS 0xFEE00000\r | |
37 | \r | |
38 | //\r | |
39 | // Multiple APIC Flags are defined in AcpiX.0.h\r | |
40 | //\r | |
41 | #define EFI_ACPI_1_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_1_0_PCAT_COMPAT)\r | |
42 | #define EFI_ACPI_2_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_2_0_PCAT_COMPAT)\r | |
43 | \r | |
44 | //\r | |
45 | // Define the number of each table type.\r | |
46 | // This is where the table layout is modified.\r | |
47 | //\r | |
48 | \r | |
49 | #define EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT 2\r | |
50 | #define EFI_ACPI_IO_APIC_COUNT 1\r | |
51 | #define EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT 2\r | |
52 | #define EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT 0\r | |
53 | #define EFI_ACPI_LOCAL_APIC_NMI_COUNT 2\r | |
54 | #define EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT 0\r | |
55 | #define EFI_ACPI_IO_SAPIC_COUNT 0\r | |
56 | #define EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT 0\r | |
57 | #define EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT 0\r | |
58 | \r | |
59 | #define EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT_MAX 16\r | |
60 | \r | |
61 | //\r | |
62 | // MADT structure\r | |
63 | //\r | |
64 | \r | |
65 | //\r | |
66 | // Ensure proper structure formats\r | |
67 | //\r | |
68 | #pragma pack (1)\r | |
69 | \r | |
70 | //\r | |
71 | // ACPI 1.0 Table structure\r | |
72 | //\r | |
73 | typedef struct {\r | |
74 | EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;\r | |
75 | \r | |
76 | #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0\r | |
77 | EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];\r | |
78 | #endif\r | |
79 | \r | |
80 | #if EFI_ACPI_IO_APIC_COUNT > 0\r | |
81 | EFI_ACPI_1_0_IO_APIC_STRUCTURE IoApic[EFI_ACPI_IO_APIC_COUNT];\r | |
82 | #endif\r | |
83 | \r | |
84 | #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0\r | |
85 | EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];\r | |
86 | #endif\r | |
87 | \r | |
88 | #if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0\r | |
89 | EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE NmiSource[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT];\r | |
90 | #endif\r | |
91 | \r | |
92 | #if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0\r | |
93 | EFI_ACPI_1_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi[EFI_ACPI_LOCAL_APIC_NMI_COUNT];\r | |
94 | #endif\r | |
95 | \r | |
96 | #if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0\r | |
97 | EFI_ACPI_1_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalApicOverride[EFI_ACPI_LOCAL_APIC_OVERRIDE_COUNT];\r | |
98 | #endif\r | |
99 | \r | |
100 | } EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;\r | |
101 | \r | |
102 | //\r | |
103 | // ACPI 2.0 Table structure\r | |
104 | //\r | |
105 | typedef struct {\r | |
106 | EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;\r | |
107 | \r | |
108 | #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0\r | |
109 | EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];\r | |
110 | #endif\r | |
111 | \r | |
112 | #if EFI_ACPI_IO_APIC_COUNT > 0\r | |
113 | EFI_ACPI_2_0_IO_APIC_STRUCTURE IoApic[EFI_ACPI_IO_APIC_COUNT];\r | |
114 | #endif\r | |
115 | \r | |
116 | #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0\r | |
117 | EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];\r | |
118 | #endif\r | |
119 | \r | |
120 | #if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0\r | |
121 | EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE NmiSource[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT];\r | |
122 | #endif\r | |
123 | \r | |
124 | #if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0\r | |
125 | EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi[EFI_ACPI_LOCAL_APIC_NMI_COUNT];\r | |
126 | #endif\r | |
127 | \r | |
128 | #if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0\r | |
129 | EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalApicOverride[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT];\r | |
130 | #endif\r | |
131 | \r | |
132 | #if EFI_ACPI_IO_SAPIC_COUNT > 0\r | |
133 | EFI_ACPI_2_0_IO_SAPIC_STRUCTURE IoSapic[EFI_ACPI_IO_SAPIC_COUNT];\r | |
134 | #endif\r | |
135 | \r | |
136 | #if EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT > 0\r | |
137 | EFI_ACPI_2_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE LocalSapic[EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT];\r | |
138 | #endif\r | |
139 | \r | |
140 | #if EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT > 0\r | |
141 | EFI_ACPI_2_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE PlatformInterruptSources[EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT];\r | |
142 | #endif\r | |
143 | \r | |
144 | } EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE;\r | |
145 | \r | |
146 | #define _PcdIntSettingTblEnable(x) PcdGet8 (PcdInterruptOverrideSettingTable##x##Enable)\r | |
147 | #define PcdIntSettingTblEnable(x) _PcdIntSettingTblEnable(x)\r | |
148 | \r | |
149 | #define _PcdIntSettingTblSourceIrq(x) PcdGet8 (PcdInterruptOverrideSettingTable##x##Enable)\r | |
150 | #define PcdIntSettingTblSourceIrq(x) _PcdIntSettingTblSourceIrq(x)\r | |
151 | \r | |
152 | #define _PcdIntSettingTblPolarity(x) PcdGet8 (PcdInterruptOverrideSettingTable##x##Polarity)\r | |
153 | #define PcdIntSettingTblPolarity(x) _PcdIntSettingTblPolarity(x)\r | |
154 | \r | |
155 | #define _PcdIntSettingTableTrigerMode(x) PcdGet8 (PcdInterruptOverrideSettingTable##x##TrigerMode)\r | |
156 | #define PcdIntSettingTableTrigerMode(x) _PcdIntSettingTableTrigerMode(x)\r | |
157 | \r | |
158 | #define _PcdIntSettingTableGlobalIrq(x) PcdGet32 (PcdInterruptOverrideSettingTable##x##GlobalIrq)\r | |
159 | #define PcdIntSettingTableGlobalIrq(x) _PcdIntSettingTableGlobalIrq(x)\r | |
160 | \r | |
161 | typedef struct {\r | |
162 | UINT8 Enable;\r | |
163 | UINT8 SourceIrq;\r | |
164 | UINT8 Polarity;\r | |
165 | UINT8 TrigerMode;\r | |
166 | UINT32 GlobalIrq;\r | |
167 | } INTERRUPT_OVERRIDE_SETTING;\r | |
168 | \r | |
169 | \r | |
170 | typedef struct {\r | |
171 | UINT32 IoApicAddress;\r | |
172 | UINT32 GlobalInterruptBase;\r | |
173 | UINT8 IoApicId;\r | |
174 | UINT8 NmiEnable;\r | |
175 | UINT8 NmiSource;\r | |
176 | UINT8 Polarity;\r | |
177 | UINT8 TrigerMode;\r | |
178 | } IO_APIC_SETTING;\r | |
179 | \r | |
180 | typedef struct {\r | |
181 | UINT8 NmiEnabelApicIdMask;\r | |
182 | UINT8 AddressOverrideEnable;\r | |
183 | UINT8 Polarity;\r | |
184 | UINT8 TrigerMode;\r | |
185 | UINT8 LocalApicLint;\r | |
186 | UINT8 Reserve[3];\r | |
187 | UINT32 LocalApicAddress;\r | |
188 | UINT64 LocalApicAddressOverride;\r | |
189 | } LOCAL_APIC_SETTING;\r | |
190 | \r | |
191 | typedef struct _MADT_CONFIG_DATA {\r | |
192 | INTERRUPT_OVERRIDE_SETTING MadtInterruptSetting[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT_MAX];\r | |
193 | IO_APIC_SETTING MadtIoApicSetting;\r | |
194 | LOCAL_APIC_SETTING MadtLocalApicSetting;\r | |
195 | }MADT_CONFIG_DATA;\r | |
196 | \r | |
197 | #pragma pack ()\r | |
198 | \r | |
199 | EFI_STATUS\r | |
200 | EFIAPI\r | |
201 | MadtTableInitialize (\r | |
202 | OUT EFI_ACPI_COMMON_HEADER **MadtTable,\r | |
203 | OUT UINTN *Size\r | |
204 | );\r | |
205 | \r | |
206 | \r | |
207 | #endif\r |