• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
196