2 This file contains Madt Talbe initialized work.
4 Copyright (c) 2013-2015 Intel Corporation.
6 SPDX-License-Identifier: BSD-2-Clause-Patent
12 // Statements that include other files
15 #include "AcpiPlatform.h"
18 InitMadtConfigData (MADT_CONFIG_DATA
*mConfigData
)
20 mConfigData
->MadtInterruptSetting
[0].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable0Enable
);
21 mConfigData
->MadtInterruptSetting
[0].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable0SourceIrq
);
22 mConfigData
->MadtInterruptSetting
[0].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable0Polarity
);
23 mConfigData
->MadtInterruptSetting
[0].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable0TrigerMode
);
24 mConfigData
->MadtInterruptSetting
[0].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable0GlobalIrq
);
26 mConfigData
->MadtInterruptSetting
[1].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable1Enable
);
27 mConfigData
->MadtInterruptSetting
[1].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable1SourceIrq
);
28 mConfigData
->MadtInterruptSetting
[1].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable1Polarity
);
29 mConfigData
->MadtInterruptSetting
[1].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable1TrigerMode
);
30 mConfigData
->MadtInterruptSetting
[1].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable1GlobalIrq
);
32 mConfigData
->MadtInterruptSetting
[2].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable2Enable
);
33 mConfigData
->MadtInterruptSetting
[2].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable2SourceIrq
);
34 mConfigData
->MadtInterruptSetting
[2].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable2Polarity
);
35 mConfigData
->MadtInterruptSetting
[2].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable2TrigerMode
);
36 mConfigData
->MadtInterruptSetting
[2].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable2GlobalIrq
);
38 mConfigData
->MadtInterruptSetting
[3].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable3Enable
);
39 mConfigData
->MadtInterruptSetting
[3].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable3SourceIrq
);
40 mConfigData
->MadtInterruptSetting
[3].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable3Polarity
);
41 mConfigData
->MadtInterruptSetting
[3].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable3TrigerMode
);
42 mConfigData
->MadtInterruptSetting
[3].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable3GlobalIrq
);
44 mConfigData
->MadtInterruptSetting
[4].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable4Enable
);
45 mConfigData
->MadtInterruptSetting
[4].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable4SourceIrq
);
46 mConfigData
->MadtInterruptSetting
[4].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable4Polarity
);
47 mConfigData
->MadtInterruptSetting
[4].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable4TrigerMode
);
48 mConfigData
->MadtInterruptSetting
[4].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable4GlobalIrq
);
50 mConfigData
->MadtInterruptSetting
[5].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable5Enable
);
51 mConfigData
->MadtInterruptSetting
[5].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable5SourceIrq
);
52 mConfigData
->MadtInterruptSetting
[5].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable5Polarity
);
53 mConfigData
->MadtInterruptSetting
[5].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable5TrigerMode
);
54 mConfigData
->MadtInterruptSetting
[5].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable5GlobalIrq
);
56 mConfigData
->MadtInterruptSetting
[6].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable6Enable
);
57 mConfigData
->MadtInterruptSetting
[6].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable6SourceIrq
);
58 mConfigData
->MadtInterruptSetting
[6].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable6Polarity
);
59 mConfigData
->MadtInterruptSetting
[6].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable6TrigerMode
);
60 mConfigData
->MadtInterruptSetting
[6].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable6GlobalIrq
);
62 mConfigData
->MadtInterruptSetting
[7].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable7Enable
);
63 mConfigData
->MadtInterruptSetting
[7].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable7SourceIrq
);
64 mConfigData
->MadtInterruptSetting
[7].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable7Polarity
);
65 mConfigData
->MadtInterruptSetting
[7].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable7TrigerMode
);
66 mConfigData
->MadtInterruptSetting
[7].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable7GlobalIrq
);
68 mConfigData
->MadtInterruptSetting
[8].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable8Enable
);
69 mConfigData
->MadtInterruptSetting
[8].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable8SourceIrq
);
70 mConfigData
->MadtInterruptSetting
[8].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable8Polarity
);
71 mConfigData
->MadtInterruptSetting
[8].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable8TrigerMode
);
72 mConfigData
->MadtInterruptSetting
[8].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable8GlobalIrq
);
74 mConfigData
->MadtInterruptSetting
[9].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable9Enable
);
75 mConfigData
->MadtInterruptSetting
[9].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable9SourceIrq
);
76 mConfigData
->MadtInterruptSetting
[9].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable9Polarity
);
77 mConfigData
->MadtInterruptSetting
[9].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable9TrigerMode
);
78 mConfigData
->MadtInterruptSetting
[9].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable9GlobalIrq
);
80 mConfigData
->MadtInterruptSetting
[10].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable10Enable
);
81 mConfigData
->MadtInterruptSetting
[10].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable10SourceIrq
);
82 mConfigData
->MadtInterruptSetting
[10].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable10Polarity
);
83 mConfigData
->MadtInterruptSetting
[10].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable10TrigerMode
);
84 mConfigData
->MadtInterruptSetting
[10].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable10GlobalIrq
);
86 mConfigData
->MadtInterruptSetting
[11].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable11Enable
);
87 mConfigData
->MadtInterruptSetting
[11].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable11SourceIrq
);
88 mConfigData
->MadtInterruptSetting
[11].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable11Polarity
);
89 mConfigData
->MadtInterruptSetting
[11].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable11TrigerMode
);
90 mConfigData
->MadtInterruptSetting
[11].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable11GlobalIrq
);
92 mConfigData
->MadtInterruptSetting
[12].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable12Enable
);
93 mConfigData
->MadtInterruptSetting
[12].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable12SourceIrq
);
94 mConfigData
->MadtInterruptSetting
[12].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable12Polarity
);
95 mConfigData
->MadtInterruptSetting
[12].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable12TrigerMode
);
96 mConfigData
->MadtInterruptSetting
[12].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable12GlobalIrq
);
98 mConfigData
->MadtInterruptSetting
[13].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable13Enable
);
99 mConfigData
->MadtInterruptSetting
[13].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable13SourceIrq
);
100 mConfigData
->MadtInterruptSetting
[13].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable13Polarity
);
101 mConfigData
->MadtInterruptSetting
[13].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable13TrigerMode
);
102 mConfigData
->MadtInterruptSetting
[13].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable13GlobalIrq
);
104 mConfigData
->MadtInterruptSetting
[14].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable14Enable
);
105 mConfigData
->MadtInterruptSetting
[14].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable14SourceIrq
);
106 mConfigData
->MadtInterruptSetting
[14].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable14Polarity
);
107 mConfigData
->MadtInterruptSetting
[14].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable14TrigerMode
);
108 mConfigData
->MadtInterruptSetting
[14].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable14GlobalIrq
);
110 mConfigData
->MadtInterruptSetting
[15].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable15Enable
);
111 mConfigData
->MadtInterruptSetting
[15].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable15SourceIrq
);
112 mConfigData
->MadtInterruptSetting
[15].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable15Polarity
);
113 mConfigData
->MadtInterruptSetting
[15].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable15TrigerMode
);
114 mConfigData
->MadtInterruptSetting
[15].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable15GlobalIrq
);
116 mConfigData
->MadtIoApicSetting
.IoApicAddress
= (UINT32
)PcdGet64(PcdIoApicBaseAddress
);
117 mConfigData
->MadtIoApicSetting
.GlobalInterruptBase
= PcdGet32 (PcdIoApicSettingGlobalInterruptBase
);
118 mConfigData
->MadtIoApicSetting
.IoApicId
= PcdGet8 (PcdIoApicSettingIoApicId
);
119 mConfigData
->MadtIoApicSetting
.NmiEnable
= PcdGet8 (PcdIoApicSettingNmiEnable
);
120 mConfigData
->MadtIoApicSetting
.NmiSource
= PcdGet8 (PcdIoApicSettingNmiSource
);
121 mConfigData
->MadtIoApicSetting
.Polarity
= PcdGet8 (PcdIoApicSettingPolarity
);
122 mConfigData
->MadtIoApicSetting
.TrigerMode
= PcdGet8 (PcdIoApicSettingTrigerMode
);
124 mConfigData
->MadtLocalApicSetting
.NmiEnabelApicIdMask
= PcdGet8 (PcdLocalApicSettingNmiEnabelApicIdMask
);
125 mConfigData
->MadtLocalApicSetting
.AddressOverrideEnable
= PcdGet8 (PcdLocalApicSettingAddressOverrideEnable
);
126 mConfigData
->MadtLocalApicSetting
.Polarity
= PcdGet8 (PcdLocalApicSettingPolarity
);
127 mConfigData
->MadtLocalApicSetting
.TrigerMode
= PcdGet8 (PcdLocalApicSettingTrigerMode
);
128 mConfigData
->MadtLocalApicSetting
.LocalApicLint
= PcdGet8 (PcdLocalApicSettingLocalApicLint
);
129 mConfigData
->MadtLocalApicSetting
.LocalApicAddressOverride
= PcdGet64 (PcdLocalApicAddressOverride
);
130 mConfigData
->MadtLocalApicSetting
.LocalApicAddress
= PcdGet32 (PcdCpuLocalApicBaseAddress
);
133 GetAcutalMadtTableSize (
134 IN MADT_CONFIG_DATA
* MadtConfigData
,
140 MadtSize
= (UINT32
)(sizeof (EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER
) +
141 sizeof (EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
) * NumberOfCPUs
+
142 sizeof (EFI_ACPI_2_0_IO_APIC_STRUCTURE
) +
143 sizeof (EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
) * (MadtConfigData
->MadtLocalApicSetting
.AddressOverrideEnable
!= 0?1:0)
145 for (Index
= 0; Index
< EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT_MAX
; Index
++ ) {
146 if (MadtConfigData
->MadtInterruptSetting
[Index
].Enable
!= 0) {
147 MadtSize
+= sizeof (EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
);
150 for (Index
= 0; Index
< NumberOfCPUs
; Index
++ ) {
151 if (0 != (MadtConfigData
->MadtLocalApicSetting
.NmiEnabelApicIdMask
& (1 << Index
))) {
152 MadtSize
+= sizeof (EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
);
155 if (0 != MadtConfigData
->MadtIoApicSetting
.NmiEnable
) {
156 MadtSize
+= sizeof (EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
);
162 // Init Multiple APIC Description Table
165 MadtTableInitialize (
166 OUT EFI_ACPI_COMMON_HEADER
**MadtTable
,
170 EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER
*Madt
;
171 EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
*ProcLocalApic
;
172 EFI_ACPI_2_0_IO_APIC_STRUCTURE
*IoApic
;
173 EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
*InterruptSourceOverride
;
174 EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
*IoApicNmiSource
;
175 EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
*LocalApicNmiSource
;
176 EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
*LocalApicAddressOverride
;
178 EFI_MP_SERVICES_PROTOCOL
*MpService
;
180 UINTN NumberOfEnabledCPUs
;
181 MADT_CONFIG_DATA MadtConfigData
;
188 ASSERT (NULL
!= MadtTable
);
189 ASSERT (NULL
!= Size
);
191 // Init Madt table data
193 InitMadtConfigData (&MadtConfigData
);
195 // Find the MP Protocol. This is an MP platform, so MP protocol must be
198 Status
= gBS
->LocateProtocol (
199 &gEfiMpServiceProtocolGuid
,
203 ASSERT_EFI_ERROR (Status
);
205 // Determine the number of processors
207 MpService
->GetNumberOfProcessors (
212 //ASSERT (NumberOfCPUs <= 2 && NumberOfCPUs > 0);
213 MadtSize
= GetAcutalMadtTableSize (&MadtConfigData
, NumberOfCPUs
);
214 Madt
= (EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER
*)AllocateZeroPool (MadtSize
);
215 ASSERT (Madt
!= NULL
);
217 // Initialize MADT Header information
219 Madt
->Header
.Signature
= EFI_ACPI_2_0_MULTIPLE_SAPIC_DESCRIPTION_TABLE_SIGNATURE
;
220 Madt
->Header
.Length
= MadtSize
;
221 Madt
->Header
.Revision
= EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION
;
222 Madt
->Header
.OemTableId
= EFI_ACPI_OEM_TABLE_ID
;
223 Madt
->Header
.OemRevision
= EFI_ACPI_OEM_MADT_REVISION
;
224 Madt
->Header
.CreatorId
= EFI_ACPI_CREATOR_ID
;
225 Madt
->LocalApicAddress
= MadtConfigData
.MadtLocalApicSetting
.LocalApicAddress
;
226 Madt
->Flags
= EFI_ACPI_2_0_MULTIPLE_APIC_FLAGS
;
227 CopyMem (Madt
->Header
.OemId
, EFI_ACPI_OEM_ID
, 6);
229 ProcLocalApic
= (EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
*) (Madt
+ 1);
231 // Initialization of Processor's local APICs
233 for (Index
= 0;Index
< NumberOfCPUs
; Index
++) {
234 ProcLocalApic
[Index
].Type
= EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC
;
235 ProcLocalApic
[Index
].Length
= sizeof (EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
);
236 ProcLocalApic
[Index
].AcpiProcessorId
= (UINT8
)(Index
+ 1);
237 ProcLocalApic
[Index
].ApicId
= 0xff;
238 ProcLocalApic
[Index
].Flags
= 0;
241 // Initialization of IO APIC.
242 // Note: Here assumes that there must be one and only one IO APIC in platform.
244 IoApic
= (EFI_ACPI_2_0_IO_APIC_STRUCTURE
*) (&ProcLocalApic
[Index
]);
245 IoApic
->Type
= EFI_ACPI_2_0_IO_APIC
;
246 IoApic
->Length
= sizeof (EFI_ACPI_2_0_IO_APIC_STRUCTURE
);
247 IoApic
->IoApicId
= MadtConfigData
.MadtIoApicSetting
.IoApicId
;
248 IoApic
->IoApicAddress
= MadtConfigData
.MadtIoApicSetting
.IoApicAddress
;
249 IoApic
->GlobalSystemInterruptBase
= MadtConfigData
.MadtIoApicSetting
.GlobalInterruptBase
;
251 InterruptSourceOverride
= (EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
*) (IoApic
+ 1);
252 for (Index
= 0;Index
< EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT_MAX
; Index
++ ){
253 if (MadtConfigData
.MadtInterruptSetting
[Index
].Enable
) {
254 InterruptSourceOverride
->Type
= EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE
;
255 InterruptSourceOverride
->Length
= sizeof (EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
);
256 InterruptSourceOverride
->Bus
= 0;
257 InterruptSourceOverride
->Source
= MadtConfigData
.MadtInterruptSetting
[Index
].SourceIrq
;
258 InterruptSourceOverride
->Flags
= ((MadtConfigData
.MadtInterruptSetting
[Index
].TrigerMode
& 0x03) << 2) | (MadtConfigData
.MadtInterruptSetting
[Index
].Polarity
& 0x03);
259 InterruptSourceOverride
->GlobalSystemInterrupt
= MadtConfigData
.MadtInterruptSetting
[Index
].GlobalIrq
;
260 InterruptSourceOverride
++;
264 // support NMI source configuration.
266 IoApicNmiSource
= (EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
*) InterruptSourceOverride
;
267 if ((BOOLEAN
) MadtConfigData
.MadtIoApicSetting
.NmiEnable
) {
268 IoApicNmiSource
->Type
= EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE
;
269 IoApicNmiSource
->Length
= sizeof (EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
);
270 IoApicNmiSource
->Flags
= ((MadtConfigData
.MadtIoApicSetting
.TrigerMode
& 0x03) << 2) | (MadtConfigData
.MadtIoApicSetting
.Polarity
& 0x03);
271 IoApicNmiSource
->GlobalSystemInterrupt
= MadtConfigData
.MadtIoApicSetting
.NmiSource
;
275 // Assume each processor has same NMI interrupt source.
277 LocalApicNmiSource
= (EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
*) IoApicNmiSource
;
278 for (Index
= 0;Index
< NumberOfCPUs
; Index
++) {
279 if (0 != (MadtConfigData
.MadtLocalApicSetting
.NmiEnabelApicIdMask
& (1 << Index
))){
280 LocalApicNmiSource
->Type
= EFI_ACPI_2_0_LOCAL_APIC_NMI
;
281 LocalApicNmiSource
->Length
= sizeof (EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
);
282 LocalApicNmiSource
->LocalApicLint
= MadtConfigData
.MadtLocalApicSetting
.LocalApicLint
;
283 LocalApicNmiSource
->Flags
= ((MadtConfigData
.MadtLocalApicSetting
.TrigerMode
& 0x03) << 2) | (MadtConfigData
.MadtLocalApicSetting
.Polarity
& 0x03);
284 LocalApicNmiSource
->AcpiProcessorId
= (UINT8
)(Index
+ 1);
285 LocalApicNmiSource
++;
289 LocalApicAddressOverride
= (EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
*) LocalApicNmiSource
;
290 if ((BOOLEAN
) MadtConfigData
.MadtLocalApicSetting
.AddressOverrideEnable
) {
291 LocalApicAddressOverride
->Type
= EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE
;
292 LocalApicAddressOverride
->Length
= sizeof (EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
);
293 LocalApicAddressOverride
->LocalApicAddress
= MadtConfigData
.MadtLocalApicSetting
.LocalApicAddressOverride
;
294 LocalApicAddressOverride
++;
297 *MadtTable
= (EFI_ACPI_COMMON_HEADER
*) Madt
;