2 This file contains Madt Talbe initialized work.
4 Copyright (c) 2013-2015 Intel Corporation.
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 // Statements that include other files
21 #include "AcpiPlatform.h"
24 InitMadtConfigData (MADT_CONFIG_DATA
*mConfigData
)
26 mConfigData
->MadtInterruptSetting
[0].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable0Enable
);
27 mConfigData
->MadtInterruptSetting
[0].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable0SourceIrq
);
28 mConfigData
->MadtInterruptSetting
[0].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable0Polarity
);
29 mConfigData
->MadtInterruptSetting
[0].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable0TrigerMode
);
30 mConfigData
->MadtInterruptSetting
[0].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable0GlobalIrq
);
32 mConfigData
->MadtInterruptSetting
[1].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable1Enable
);
33 mConfigData
->MadtInterruptSetting
[1].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable1SourceIrq
);
34 mConfigData
->MadtInterruptSetting
[1].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable1Polarity
);
35 mConfigData
->MadtInterruptSetting
[1].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable1TrigerMode
);
36 mConfigData
->MadtInterruptSetting
[1].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable1GlobalIrq
);
38 mConfigData
->MadtInterruptSetting
[2].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable2Enable
);
39 mConfigData
->MadtInterruptSetting
[2].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable2SourceIrq
);
40 mConfigData
->MadtInterruptSetting
[2].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable2Polarity
);
41 mConfigData
->MadtInterruptSetting
[2].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable2TrigerMode
);
42 mConfigData
->MadtInterruptSetting
[2].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable2GlobalIrq
);
44 mConfigData
->MadtInterruptSetting
[3].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable3Enable
);
45 mConfigData
->MadtInterruptSetting
[3].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable3SourceIrq
);
46 mConfigData
->MadtInterruptSetting
[3].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable3Polarity
);
47 mConfigData
->MadtInterruptSetting
[3].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable3TrigerMode
);
48 mConfigData
->MadtInterruptSetting
[3].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable3GlobalIrq
);
50 mConfigData
->MadtInterruptSetting
[4].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable4Enable
);
51 mConfigData
->MadtInterruptSetting
[4].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable4SourceIrq
);
52 mConfigData
->MadtInterruptSetting
[4].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable4Polarity
);
53 mConfigData
->MadtInterruptSetting
[4].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable4TrigerMode
);
54 mConfigData
->MadtInterruptSetting
[4].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable4GlobalIrq
);
56 mConfigData
->MadtInterruptSetting
[5].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable5Enable
);
57 mConfigData
->MadtInterruptSetting
[5].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable5SourceIrq
);
58 mConfigData
->MadtInterruptSetting
[5].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable5Polarity
);
59 mConfigData
->MadtInterruptSetting
[5].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable5TrigerMode
);
60 mConfigData
->MadtInterruptSetting
[5].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable5GlobalIrq
);
62 mConfigData
->MadtInterruptSetting
[6].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable6Enable
);
63 mConfigData
->MadtInterruptSetting
[6].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable6SourceIrq
);
64 mConfigData
->MadtInterruptSetting
[6].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable6Polarity
);
65 mConfigData
->MadtInterruptSetting
[6].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable6TrigerMode
);
66 mConfigData
->MadtInterruptSetting
[6].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable6GlobalIrq
);
68 mConfigData
->MadtInterruptSetting
[7].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable7Enable
);
69 mConfigData
->MadtInterruptSetting
[7].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable7SourceIrq
);
70 mConfigData
->MadtInterruptSetting
[7].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable7Polarity
);
71 mConfigData
->MadtInterruptSetting
[7].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable7TrigerMode
);
72 mConfigData
->MadtInterruptSetting
[7].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable7GlobalIrq
);
74 mConfigData
->MadtInterruptSetting
[8].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable8Enable
);
75 mConfigData
->MadtInterruptSetting
[8].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable8SourceIrq
);
76 mConfigData
->MadtInterruptSetting
[8].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable8Polarity
);
77 mConfigData
->MadtInterruptSetting
[8].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable8TrigerMode
);
78 mConfigData
->MadtInterruptSetting
[8].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable8GlobalIrq
);
80 mConfigData
->MadtInterruptSetting
[9].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable9Enable
);
81 mConfigData
->MadtInterruptSetting
[9].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable9SourceIrq
);
82 mConfigData
->MadtInterruptSetting
[9].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable9Polarity
);
83 mConfigData
->MadtInterruptSetting
[9].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable9TrigerMode
);
84 mConfigData
->MadtInterruptSetting
[9].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable9GlobalIrq
);
86 mConfigData
->MadtInterruptSetting
[10].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable10Enable
);
87 mConfigData
->MadtInterruptSetting
[10].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable10SourceIrq
);
88 mConfigData
->MadtInterruptSetting
[10].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable10Polarity
);
89 mConfigData
->MadtInterruptSetting
[10].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable10TrigerMode
);
90 mConfigData
->MadtInterruptSetting
[10].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable10GlobalIrq
);
92 mConfigData
->MadtInterruptSetting
[11].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable11Enable
);
93 mConfigData
->MadtInterruptSetting
[11].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable11SourceIrq
);
94 mConfigData
->MadtInterruptSetting
[11].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable11Polarity
);
95 mConfigData
->MadtInterruptSetting
[11].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable11TrigerMode
);
96 mConfigData
->MadtInterruptSetting
[11].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable11GlobalIrq
);
98 mConfigData
->MadtInterruptSetting
[12].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable12Enable
);
99 mConfigData
->MadtInterruptSetting
[12].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable12SourceIrq
);
100 mConfigData
->MadtInterruptSetting
[12].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable12Polarity
);
101 mConfigData
->MadtInterruptSetting
[12].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable12TrigerMode
);
102 mConfigData
->MadtInterruptSetting
[12].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable12GlobalIrq
);
104 mConfigData
->MadtInterruptSetting
[13].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable13Enable
);
105 mConfigData
->MadtInterruptSetting
[13].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable13SourceIrq
);
106 mConfigData
->MadtInterruptSetting
[13].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable13Polarity
);
107 mConfigData
->MadtInterruptSetting
[13].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable13TrigerMode
);
108 mConfigData
->MadtInterruptSetting
[13].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable13GlobalIrq
);
110 mConfigData
->MadtInterruptSetting
[14].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable14Enable
);
111 mConfigData
->MadtInterruptSetting
[14].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable14SourceIrq
);
112 mConfigData
->MadtInterruptSetting
[14].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable14Polarity
);
113 mConfigData
->MadtInterruptSetting
[14].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable14TrigerMode
);
114 mConfigData
->MadtInterruptSetting
[14].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable14GlobalIrq
);
116 mConfigData
->MadtInterruptSetting
[15].Enable
= PcdGet8 (PcdInterruptOverrideSettingTable15Enable
);
117 mConfigData
->MadtInterruptSetting
[15].SourceIrq
= PcdGet8 (PcdInterruptOverrideSettingTable15SourceIrq
);
118 mConfigData
->MadtInterruptSetting
[15].Polarity
= PcdGet8 (PcdInterruptOverrideSettingTable15Polarity
);
119 mConfigData
->MadtInterruptSetting
[15].TrigerMode
= PcdGet8 (PcdInterruptOverrideSettingTable15TrigerMode
);
120 mConfigData
->MadtInterruptSetting
[15].GlobalIrq
= PcdGet32 (PcdInterruptOverrideSettingTable15GlobalIrq
);
122 mConfigData
->MadtIoApicSetting
.IoApicAddress
= (UINT32
)PcdGet64(PcdIoApicBaseAddress
);
123 mConfigData
->MadtIoApicSetting
.GlobalInterruptBase
= PcdGet32 (PcdIoApicSettingGlobalInterruptBase
);
124 mConfigData
->MadtIoApicSetting
.IoApicId
= PcdGet8 (PcdIoApicSettingIoApicId
);
125 mConfigData
->MadtIoApicSetting
.NmiEnable
= PcdGet8 (PcdIoApicSettingNmiEnable
);
126 mConfigData
->MadtIoApicSetting
.NmiSource
= PcdGet8 (PcdIoApicSettingNmiSource
);
127 mConfigData
->MadtIoApicSetting
.Polarity
= PcdGet8 (PcdIoApicSettingPolarity
);
128 mConfigData
->MadtIoApicSetting
.TrigerMode
= PcdGet8 (PcdIoApicSettingTrigerMode
);
130 mConfigData
->MadtLocalApicSetting
.NmiEnabelApicIdMask
= PcdGet8 (PcdLocalApicSettingNmiEnabelApicIdMask
);
131 mConfigData
->MadtLocalApicSetting
.AddressOverrideEnable
= PcdGet8 (PcdLocalApicSettingAddressOverrideEnable
);
132 mConfigData
->MadtLocalApicSetting
.Polarity
= PcdGet8 (PcdLocalApicSettingPolarity
);
133 mConfigData
->MadtLocalApicSetting
.TrigerMode
= PcdGet8 (PcdLocalApicSettingTrigerMode
);
134 mConfigData
->MadtLocalApicSetting
.LocalApicLint
= PcdGet8 (PcdLocalApicSettingLocalApicLint
);
135 mConfigData
->MadtLocalApicSetting
.LocalApicAddressOverride
= PcdGet64 (PcdLocalApicAddressOverride
);
136 mConfigData
->MadtLocalApicSetting
.LocalApicAddress
= PcdGet32 (PcdCpuLocalApicBaseAddress
);
139 GetAcutalMadtTableSize (
140 IN MADT_CONFIG_DATA
* MadtConfigData
,
146 MadtSize
= (UINT32
)(sizeof (EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER
) +
147 sizeof (EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
) * NumberOfCPUs
+
148 sizeof (EFI_ACPI_2_0_IO_APIC_STRUCTURE
) +
149 sizeof (EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
) * (MadtConfigData
->MadtLocalApicSetting
.AddressOverrideEnable
!= 0?1:0)
151 for (Index
= 0; Index
< EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT_MAX
; Index
++ ) {
152 if (MadtConfigData
->MadtInterruptSetting
[Index
].Enable
!= 0) {
153 MadtSize
+= sizeof (EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
);
156 for (Index
= 0; Index
< NumberOfCPUs
; Index
++ ) {
157 if (0 != (MadtConfigData
->MadtLocalApicSetting
.NmiEnabelApicIdMask
& (1 << Index
))) {
158 MadtSize
+= sizeof (EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
);
161 if (0 != MadtConfigData
->MadtIoApicSetting
.NmiEnable
) {
162 MadtSize
+= sizeof (EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
);
168 // Init Multiple APIC Description Table
171 MadtTableInitialize (
172 OUT EFI_ACPI_COMMON_HEADER
**MadtTable
,
176 EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER
*Madt
;
177 EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
*ProcLocalApic
;
178 EFI_ACPI_2_0_IO_APIC_STRUCTURE
*IoApic
;
179 EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
*InterruptSourceOverride
;
180 EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
*IoApicNmiSource
;
181 EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
*LocalApicNmiSource
;
182 EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
*LocalApicAddressOverride
;
184 EFI_MP_SERVICES_PROTOCOL
*MpService
;
186 UINTN NumberOfEnabledCPUs
;
187 MADT_CONFIG_DATA MadtConfigData
;
194 ASSERT (NULL
!= MadtTable
);
195 ASSERT (NULL
!= Size
);
197 // Init Madt table data
199 InitMadtConfigData (&MadtConfigData
);
201 // Find the MP Protocol. This is an MP platform, so MP protocol must be
204 Status
= gBS
->LocateProtocol (
205 &gEfiMpServiceProtocolGuid
,
209 ASSERT_EFI_ERROR (Status
);
211 // Determine the number of processors
213 MpService
->GetNumberOfProcessors (
218 //ASSERT (NumberOfCPUs <= 2 && NumberOfCPUs > 0);
219 MadtSize
= GetAcutalMadtTableSize (&MadtConfigData
, NumberOfCPUs
);
220 Madt
= (EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER
*)AllocateZeroPool (MadtSize
);
221 ASSERT_EFI_ERROR (Madt
);
223 // Initialize MADT Header information
225 Madt
->Header
.Signature
= EFI_ACPI_2_0_MULTIPLE_SAPIC_DESCRIPTION_TABLE_SIGNATURE
;
226 Madt
->Header
.Length
= MadtSize
;
227 Madt
->Header
.Revision
= EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION
;
228 Madt
->Header
.OemTableId
= EFI_ACPI_OEM_TABLE_ID
;
229 Madt
->Header
.OemRevision
= EFI_ACPI_OEM_MADT_REVISION
;
230 Madt
->Header
.CreatorId
= EFI_ACPI_CREATOR_ID
;
231 Madt
->LocalApicAddress
= MadtConfigData
.MadtLocalApicSetting
.LocalApicAddress
;
232 Madt
->Flags
= EFI_ACPI_2_0_MULTIPLE_APIC_FLAGS
;
233 CopyMem (Madt
->Header
.OemId
, EFI_ACPI_OEM_ID
, 6);
235 ProcLocalApic
= (EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
*) (Madt
+ 1);
237 // Initialization of Processor's local APICs
239 for (Index
= 0;Index
< NumberOfCPUs
; Index
++) {
240 ProcLocalApic
[Index
].Type
= EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC
;
241 ProcLocalApic
[Index
].Length
= sizeof (EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
);
242 ProcLocalApic
[Index
].AcpiProcessorId
= (UINT8
)(Index
+ 1);
243 ProcLocalApic
[Index
].ApicId
= 0xff;
244 ProcLocalApic
[Index
].Flags
= 0;
247 // Initialization of IO APIC.
248 // Note: Here assumes that there must be one and only one IO APIC in platform.
250 IoApic
= (EFI_ACPI_2_0_IO_APIC_STRUCTURE
*) (&ProcLocalApic
[Index
]);
251 IoApic
->Type
= EFI_ACPI_2_0_IO_APIC
;
252 IoApic
->Length
= sizeof (EFI_ACPI_2_0_IO_APIC_STRUCTURE
);
253 IoApic
->IoApicId
= MadtConfigData
.MadtIoApicSetting
.IoApicId
;
254 IoApic
->IoApicAddress
= MadtConfigData
.MadtIoApicSetting
.IoApicAddress
;
255 IoApic
->GlobalSystemInterruptBase
= MadtConfigData
.MadtIoApicSetting
.GlobalInterruptBase
;
257 InterruptSourceOverride
= (EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
*) (IoApic
+ 1);
258 for (Index
= 0;Index
< EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT_MAX
; Index
++ ){
259 if (MadtConfigData
.MadtInterruptSetting
[Index
].Enable
) {
260 InterruptSourceOverride
->Type
= EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE
;
261 InterruptSourceOverride
->Length
= sizeof (EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
);
262 InterruptSourceOverride
->Bus
= 0;
263 InterruptSourceOverride
->Source
= MadtConfigData
.MadtInterruptSetting
[Index
].SourceIrq
;
264 InterruptSourceOverride
->Flags
= ((MadtConfigData
.MadtInterruptSetting
[Index
].TrigerMode
& 0x03) << 2) | (MadtConfigData
.MadtInterruptSetting
[Index
].Polarity
& 0x03);
265 InterruptSourceOverride
->GlobalSystemInterrupt
= MadtConfigData
.MadtInterruptSetting
[Index
].GlobalIrq
;
266 InterruptSourceOverride
++;
270 // support NMI source configuration.
272 IoApicNmiSource
= (EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
*) InterruptSourceOverride
;
273 if ((BOOLEAN
) MadtConfigData
.MadtIoApicSetting
.NmiEnable
) {
274 IoApicNmiSource
->Type
= EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE
;
275 IoApicNmiSource
->Length
= sizeof (EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
);
276 IoApicNmiSource
->Flags
= ((MadtConfigData
.MadtIoApicSetting
.TrigerMode
& 0x03) << 2) | (MadtConfigData
.MadtIoApicSetting
.Polarity
& 0x03);
277 IoApicNmiSource
->GlobalSystemInterrupt
= MadtConfigData
.MadtIoApicSetting
.NmiSource
;
281 // Assume each processor has same NMI interrupt source.
283 LocalApicNmiSource
= (EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
*) IoApicNmiSource
;
284 for (Index
= 0;Index
< NumberOfCPUs
; Index
++) {
285 if (0 != (MadtConfigData
.MadtLocalApicSetting
.NmiEnabelApicIdMask
& (1 << Index
))){
286 LocalApicNmiSource
->Type
= EFI_ACPI_2_0_LOCAL_APIC_NMI
;
287 LocalApicNmiSource
->Length
= sizeof (EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
);
288 LocalApicNmiSource
->LocalApicLint
= MadtConfigData
.MadtLocalApicSetting
.LocalApicLint
;
289 LocalApicNmiSource
->Flags
= ((MadtConfigData
.MadtLocalApicSetting
.TrigerMode
& 0x03) << 2) | (MadtConfigData
.MadtLocalApicSetting
.Polarity
& 0x03);
290 LocalApicNmiSource
->AcpiProcessorId
= (UINT8
)(Index
+ 1);
291 LocalApicNmiSource
++;
295 LocalApicAddressOverride
= (EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
*) LocalApicNmiSource
;
296 if ((BOOLEAN
) MadtConfigData
.MadtLocalApicSetting
.AddressOverrideEnable
) {
297 LocalApicAddressOverride
->Type
= EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE
;
298 LocalApicAddressOverride
->Length
= sizeof (EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
);
299 LocalApicAddressOverride
->LocalApicAddress
= MadtConfigData
.MadtLocalApicSetting
.LocalApicAddressOverride
;
300 LocalApicAddressOverride
++;
303 *MadtTable
= (EFI_ACPI_COMMON_HEADER
*) Madt
;