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