]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/AcpiTables/Madt.aslc
Fix compile error
[mirror_edk2.git] / OvmfPkg / AcpiTables / Madt.aslc
1 /** @file
2 MADT Table
3
4 This file contains a structure definition for the ACPI 1.0 Multiple APIC
5 Description Table (MADT).
6
7 Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>
8 This program and the accompanying materials are
9 licensed and made available under the terms and conditions of the BSD License
10 which accompanies this distribution. The full text of the license may be found at
11 http://opensource.org/licenses/bsd-license.php
12
13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15
16 **/
17
18 #include <IndustryStandard/Acpi.h>
19 #include <Platform.h>
20
21 //
22 // Local APIC address
23 //
24 #define EFI_ACPI_LOCAL_APIC_ADDRESS 0xFEE00000 // TBD
25
26 //
27 // Multiple APIC Flags are defined in AcpiX.0.h
28 //
29 #define EFI_ACPI_1_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_1_0_PCAT_COMPAT)
30
31 //
32 // Define the number of each table type.
33 // This is where the table layout is modified.
34 //
35 #define EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT 1
36 #define EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT 2
37 #define EFI_ACPI_IO_APIC_COUNT 1
38
39 //
40 // Ensure proper structure formats
41 //
42 #pragma pack (1)
43
44 //
45 // ACPI 1.0 MADT structure
46 //
47 typedef struct {
48 EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
49
50 #if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0
51 EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];
52 #endif
53
54 #if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0
55 EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];
56 #endif
57
58 #if EFI_ACPI_IO_APIC_COUNT > 0
59 EFI_ACPI_1_0_IO_APIC_STRUCTURE IoApic[EFI_ACPI_IO_APIC_COUNT];
60 #endif
61
62 } EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
63
64 #pragma pack ()
65
66 //
67 // Multiple APIC Description Table
68 //
69 EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {
70 EFI_ACPI_1_0_APIC_SIGNATURE,
71 sizeof (EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE),
72 EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
73 0x00, // Checksum will be updated at runtime
74 EFI_ACPI_OEM_ID,
75 EFI_ACPI_OEM_TABLE_ID,
76 EFI_ACPI_OEM_REVISION,
77 EFI_ACPI_CREATOR_ID,
78 EFI_ACPI_CREATOR_REVISION,
79
80 //
81 // MADT specific fields
82 //
83 EFI_ACPI_LOCAL_APIC_ADDRESS,
84 EFI_ACPI_1_0_MULTIPLE_APIC_FLAGS,
85
86 //
87 // Processor Local APIC Structure
88 //
89
90 EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC, // Type
91 sizeof (EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE), // Length
92 0x00, // Processor ID
93 0x00, // Local APIC ID
94 0x00000001, // Flags - Enabled by default
95
96 //
97 // Interrupt Source Override Structure
98 //
99
100 //
101 // IRQ0=>IRQ2 Interrupt Source Override Structure
102 //
103 EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE, // Type
104 sizeof (EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE),// Length
105 0x00, // Bus - ISA
106 0x00, // Source - IRQ0
107 0x00000002, // Global System Interrupt - IRQ2
108 0x0000, // Flags - Conforms to specifications of the bus
109
110 //
111 // ISO (SCI Active High) Interrupt Source Override Structure
112 //
113 EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE, // Type
114 sizeof (EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE),// Length
115 0x00, // Bus - ISA
116 0x09, // Source - IRQ0
117 0x00000009, // Global System Interrupt - IRQ2
118 0x000D, // Flags - Level-tiggered, Active High
119
120 //
121 // IO APIC Structure
122 //
123 EFI_ACPI_1_0_IO_APIC, // Type
124 sizeof (EFI_ACPI_1_0_IO_APIC_STRUCTURE), // Length
125 0x02, // IO APIC ID
126 EFI_ACPI_RESERVED_BYTE, // Reserved
127 0xFEC00000, // IO APIC Address (physical)
128 0x00000000 // Global System Interrupt Base
129 };
130
131
132 VOID*
133 ReferenceAcpiTable (
134 VOID
135 )
136 {
137 //
138 // Reference the table being generated to prevent the optimizer from removing the
139 // data structure from the exeutable
140 //
141 return (VOID*)&Madt;
142 }