]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt.h
Upload BSD-licensed Vlv2TbltDevicePkg and Vlv2DeviceRefCodePkg to
[mirror_edk2.git] / Vlv2DeviceRefCodePkg / AcpiTablesPCAT / Madt / Madt.h
1 /*++
2
3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
4
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13
14 Module Name:
15
16 Madt.h
17
18 Abstract:
19
20 This file describes the contents of the ACPI Multiple APIC Description
21 Table (MADT). Some additional ACPI values are defined in Acpi1_0.h and
22 Acpi2_0.h.
23 To make changes to the MADT, it is necessary to update the count for the
24 APIC structure being updated, and to modify table found in Madt.c.
25
26 --*/
27
28 #ifndef _MADT_H
29 #define _MADT_H
30
31 //
32 // Statements that include other files
33 //
34 #include "AcpiTablePlatform.h"
35 #include <IndustryStandard/Acpi10.h>
36 #include <IndustryStandard/Acpi20.h>
37 #include <IndustryStandard/Acpi30.h>
38 #include "Platform.h"
39
40 //
41 // MADT Definitions
42 //
43 #define EFI_ACPI_OEM_MADT_REVISION 0x00000000
44 //
45 // Multiple APIC Flags are defined in AcpiX.0.h
46 //
47 #define EFI_ACPI_1_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_1_0_PCAT_COMPAT)
48 #define EFI_ACPI_2_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_2_0_PCAT_COMPAT)
49 #define EFI_ACPI_3_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_3_0_PCAT_COMPAT)
50 #define EFI_ACPI_4_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_4_0_PCAT_COMPAT)
51
52 //
53 // Define the number of each table type.
54 // This is where the table layout is modified.
55 //
56 #define EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT MAX_CPU_NUM
57 #define EFI_ACPI_LOCAL_APIC_NMI_COUNT MAX_CPU_NUM
58 #define EFI_ACPI_IO_APIC_COUNT 1
59 #define EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT 2
60 #define EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT 0
61 #define EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT 0
62 #define EFI_ACPI_IO_SAPIC_COUNT 0
63 #define EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT 0
64 #define EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT 0
65
66 //
67 // MADT structure
68 //
69 //
70 // Ensure proper structure formats
71 //
72 #pragma pack(1)
73 //
74 // ACPI 1.0 Table structure
75 //
76 typedef struct {
77 EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
78
79 #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0
80 EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];
81 #endif
82
83 #if EFI_ACPI_IO_APIC_COUNT > 0
84 EFI_ACPI_1_0_IO_APIC_STRUCTURE IoApic[EFI_ACPI_IO_APIC_COUNT];
85 #endif
86
87 #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0
88 EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];
89 #endif
90
91 #if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0
92 EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE NmiSource[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT];
93 #endif
94
95 #if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0
96 EFI_ACPI_1_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi[EFI_ACPI_LOCAL_APIC_NMI_COUNT];
97 #endif
98
99 #if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0
100 EFI_ACPI_1_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalApicOverride[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT];
101 #endif
102
103 } EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
104
105 //
106 // ACPI 2.0 Table structure
107 //
108 typedef struct {
109 EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
110
111 #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0
112 EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];
113 #endif
114
115 #if EFI_ACPI_IO_APIC_COUNT > 0
116 EFI_ACPI_2_0_IO_APIC_STRUCTURE IoApic[EFI_ACPI_IO_APIC_COUNT];
117 #endif
118
119 #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0
120 EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];
121 #endif
122
123 #if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0
124 EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE NmiSource[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT];
125 #endif
126
127 #if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0
128 EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi[EFI_ACPI_LOCAL_APIC_NMI_COUNT];
129 #endif
130
131 #if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0
132 EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalApicOverride[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT];
133 #endif
134
135 #if EFI_ACPI_IO_SAPIC_COUNT > 0
136 EFI_ACPI_2_0_IO_SAPIC_STRUCTURE IoSapic[EFI_ACPI_IO_SAPIC_COUNT];
137 #endif
138
139 #if EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT > 0
140 EFI_ACPI_2_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE LocalSapic[EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT];
141 #endif
142
143 #if EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT > 0
144 EFI_ACPI_2_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE PlatformInterruptSources[EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT];
145 #endif
146
147 } EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
148
149 //
150 // ACPI 3.0 Table structure
151 //
152 typedef struct {
153 EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
154
155 #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0 // Type 0x00
156 EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];
157 #endif
158
159 #if EFI_ACPI_IO_APIC_COUNT > 0 // Type 0x01
160 EFI_ACPI_3_0_IO_APIC_STRUCTURE IoApic[EFI_ACPI_IO_APIC_COUNT];
161 #endif
162
163 #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0 // Type 0x02
164 EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];
165 #endif
166
167 #if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0 // Type 0x03
168 EFI_ACPI_3_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE NmiSource[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT];
169 #endif
170
171 #if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0 // Type 0x04
172 EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi[EFI_ACPI_LOCAL_APIC_NMI_COUNT];
173 #endif
174
175 #if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0 // Type 0x05
176 EFI_ACPI_3_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalApicOverride[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT];
177 #endif
178
179 #if EFI_ACPI_IO_SAPIC_COUNT > 0 // Type 0x06
180 EFI_ACPI_3_0_IO_SAPIC_STRUCTURE IoSapic[EFI_ACPI_IO_SAPIC_COUNT];
181 #endif
182
183 #if EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT > 0 // Type 0x07 : This table changes in madt 2.0
184 EFI_ACPI_3_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE LocalSapic[EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT];
185 #endif
186
187 #if EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT > 0 // Type 0x08
188 EFI_ACPI_3_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE PlatformInterruptSources[EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT];
189 #endif
190
191 } EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
192
193 #pragma pack()
194
195 #endif