3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
14 This file describes the contents of the ACPI Multiple APIC Description
15 Table (MADT). Some additional ACPI values are defined in Acpi1_0.h and
17 To make changes to the MADT, it is necessary to update the count for the
18 APIC structure being updated, and to modify table found in Madt.c.
26 // Statements that include other files
28 #include "AcpiTablePlatform.h"
29 #include <IndustryStandard/Acpi10.h>
30 #include <IndustryStandard/Acpi20.h>
31 #include <IndustryStandard/Acpi30.h>
37 #define EFI_ACPI_OEM_MADT_REVISION 0x00000000
39 // Multiple APIC Flags are defined in AcpiX.0.h
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 #define EFI_ACPI_3_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_3_0_PCAT_COMPAT)
44 #define EFI_ACPI_4_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_4_0_PCAT_COMPAT)
47 // Define the number of each table type.
48 // This is where the table layout is modified.
50 #define EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT MAX_CPU_NUM
51 #define EFI_ACPI_LOCAL_APIC_NMI_COUNT MAX_CPU_NUM
52 #define EFI_ACPI_IO_APIC_COUNT 1
53 #define EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT 2
54 #define EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT 0
55 #define EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT 0
56 #define EFI_ACPI_IO_SAPIC_COUNT 0
57 #define EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT 0
58 #define EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT 0
64 // Ensure proper structure formats
68 // ACPI 1.0 Table structure
71 EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header
;
73 #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0
74 EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic
[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT
];
77 #if EFI_ACPI_IO_APIC_COUNT > 0
78 EFI_ACPI_1_0_IO_APIC_STRUCTURE IoApic
[EFI_ACPI_IO_APIC_COUNT
];
81 #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0
82 EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso
[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT
];
85 #if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0
86 EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE NmiSource
[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT
];
89 #if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0
90 EFI_ACPI_1_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi
[EFI_ACPI_LOCAL_APIC_NMI_COUNT
];
93 #if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0
94 EFI_ACPI_1_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalApicOverride
[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT
];
97 } EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE
;
100 // ACPI 2.0 Table structure
103 EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header
;
105 #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0
106 EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic
[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT
];
109 #if EFI_ACPI_IO_APIC_COUNT > 0
110 EFI_ACPI_2_0_IO_APIC_STRUCTURE IoApic
[EFI_ACPI_IO_APIC_COUNT
];
113 #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0
114 EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso
[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT
];
117 #if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0
118 EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE NmiSource
[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT
];
121 #if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0
122 EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi
[EFI_ACPI_LOCAL_APIC_NMI_COUNT
];
125 #if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0
126 EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalApicOverride
[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT
];
129 #if EFI_ACPI_IO_SAPIC_COUNT > 0
130 EFI_ACPI_2_0_IO_SAPIC_STRUCTURE IoSapic
[EFI_ACPI_IO_SAPIC_COUNT
];
133 #if EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT > 0
134 EFI_ACPI_2_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE LocalSapic
[EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT
];
137 #if EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT > 0
138 EFI_ACPI_2_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE PlatformInterruptSources
[EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT
];
141 } EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE
;
144 // ACPI 3.0 Table structure
147 EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header
;
149 #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0 // Type 0x00
150 EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic
[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT
];
153 #if EFI_ACPI_IO_APIC_COUNT > 0 // Type 0x01
154 EFI_ACPI_3_0_IO_APIC_STRUCTURE IoApic
[EFI_ACPI_IO_APIC_COUNT
];
157 #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0 // Type 0x02
158 EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso
[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT
];
161 #if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0 // Type 0x03
162 EFI_ACPI_3_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE NmiSource
[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT
];
165 #if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0 // Type 0x04
166 EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE LocalApicNmi
[EFI_ACPI_LOCAL_APIC_NMI_COUNT
];
169 #if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0 // Type 0x05
170 EFI_ACPI_3_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE LocalApicOverride
[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT
];
173 #if EFI_ACPI_IO_SAPIC_COUNT > 0 // Type 0x06
174 EFI_ACPI_3_0_IO_SAPIC_STRUCTURE IoSapic
[EFI_ACPI_IO_SAPIC_COUNT
];
177 #if EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT > 0 // Type 0x07 : This table changes in madt 2.0
178 EFI_ACPI_3_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE LocalSapic
[EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT
];
181 #if EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT > 0 // Type 0x08
182 EFI_ACPI_3_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE PlatformInterruptSources
[EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT
];
185 } EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE
;