blob: 7a01d6487f98727b934c51ac1bf2937fe3c3deb4 [file] [log] [blame]
Vishal Bhoj82c80712015-12-15 21:13:33 +05301/*++
2
3Copyright (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
14Module Name:
15
16 Madt.h
17
18Abstract:
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//
76typedef 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//
108typedef 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//
152typedef 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