VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/AcpiTables/Madt.aslc@ 61380

最後變更 在這個檔案從61380是 58466,由 vboxsync 提交於 9 年 前

EFI/Firmware: Merged in the svn:eol-style, svn:mime-type and trailing whitespace cleanup that was done after the initial UDK2014.SP1 import: svn merge /vendor/edk2/UDK2014.SP1 /vendor/edk2/current .

  • 屬性 svn:eol-style 設為 native
檔案大小: 4.8 KB
 
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//
47typedef 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//
69EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {
70 {
71 {
72 EFI_ACPI_1_0_APIC_SIGNATURE,
73 sizeof (EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE),
74 EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
75 0x00, // Checksum will be updated at runtime
76 {EFI_ACPI_OEM_ID},
77 EFI_ACPI_OEM_TABLE_ID,
78 EFI_ACPI_OEM_REVISION,
79 EFI_ACPI_CREATOR_ID,
80 EFI_ACPI_CREATOR_REVISION
81 },
82
83 //
84 // MADT specific fields
85 //
86 EFI_ACPI_LOCAL_APIC_ADDRESS,
87 EFI_ACPI_1_0_MULTIPLE_APIC_FLAGS,
88 },
89
90 //
91 // Processor Local APIC Structure
92 //
93 {
94 {
95 EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC, // Type
96 sizeof (EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE), // Length
97 0x00, // Processor ID
98 0x00, // Local APIC ID
99 0x00000001 // Flags - Enabled by default
100 }
101 },
102
103 //
104 // Interrupt Source Override Structure
105 //
106
107 {
108 {
109 //
110 // IRQ0=>IRQ2 Interrupt Source Override Structure
111 //
112 EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE, // Type
113 sizeof (EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE),// Length
114 0x00, // Bus - ISA
115 0x00, // Source - IRQ0
116 0x00000002, // Global System Interrupt - IRQ2
117 0x0000 // Flags - Conforms to specifications of the bus
118 },
119
120 {
121 //
122 // ISO (SCI Active High) Interrupt Source Override Structure
123 //
124 EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE, // Type
125 sizeof (EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE),// Length
126 0x00, // Bus - ISA
127 0x09, // Source - IRQ0
128 0x00000009, // Global System Interrupt - IRQ2
129 0x000D // Flags - Level-tiggered, Active High
130 }
131 },
132
133 //
134 // IO APIC Structure
135 //
136 {
137 {
138 EFI_ACPI_1_0_IO_APIC, // Type
139 sizeof (EFI_ACPI_1_0_IO_APIC_STRUCTURE), // Length
140 0x02, // IO APIC ID
141 EFI_ACPI_RESERVED_BYTE, // Reserved
142 0xFEC00000, // IO APIC Address (physical)
143 0x00000000 // Global System Interrupt Base
144 }
145 },
146};
147
148
149VOID*
150ReferenceAcpiTable (
151 VOID
152 )
153{
154 //
155 // Reference the table being generated to prevent the optimizer from removing the
156 // data structure from the exeutable
157 //
158 return (VOID*)&Madt;
159}
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette