2009-05-27 23:10:18 +02:00
|
|
|
/** @file
|
|
|
|
MADT Table
|
|
|
|
|
|
|
|
This file contains a structure definition for the ACPI 1.0 Multiple APIC
|
|
|
|
Description Table (MADT).
|
|
|
|
|
2010-04-28 14:43:04 +02:00
|
|
|
Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
|
|
This program and the accompanying materials are
|
2009-05-27 23:10:18 +02:00
|
|
|
licensed and made available under the terms and conditions of the BSD License
|
|
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
#include <IndustryStandard/Acpi.h>
|
|
|
|
|
|
|
|
//
|
|
|
|
// MADT Definitions
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_OEM_MADT_REVISION 0x00000000 // TBD
|
|
|
|
|
|
|
|
//
|
|
|
|
// Local APIC address
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_LOCAL_APIC_ADDRESS 0xFEE00000 // TBD
|
|
|
|
|
|
|
|
//
|
|
|
|
// Multiple APIC Flags are defined in AcpiX.0.h
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_1_0_MULTIPLE_APIC_FLAGS (EFI_ACPI_1_0_PCAT_COMPAT)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Define the number of each table type.
|
|
|
|
// This is where the table layout is modified.
|
|
|
|
//
|
|
|
|
#define EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT 1
|
|
|
|
#define EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT 2
|
|
|
|
#define EFI_ACPI_IO_APIC_COUNT 1
|
|
|
|
|
|
|
|
//
|
|
|
|
// Ensure proper structure formats
|
|
|
|
//
|
|
|
|
#pragma pack (1)
|
|
|
|
|
|
|
|
//
|
|
|
|
// ACPI 1.0 MADT structure
|
|
|
|
//
|
|
|
|
typedef struct {
|
|
|
|
EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
|
|
|
|
|
|
|
|
#if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0
|
|
|
|
EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0
|
|
|
|
EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if EFI_ACPI_IO_APIC_COUNT > 0
|
|
|
|
EFI_ACPI_1_0_IO_APIC_STRUCTURE IoApic[EFI_ACPI_IO_APIC_COUNT];
|
|
|
|
#endif
|
|
|
|
|
|
|
|
} EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
|
|
|
|
|
|
|
|
#pragma pack ()
|
|
|
|
|
|
|
|
//
|
|
|
|
// Multiple APIC Description Table
|
|
|
|
//
|
|
|
|
EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {
|
|
|
|
EFI_ACPI_1_0_APIC_SIGNATURE,
|
|
|
|
sizeof (EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE),
|
|
|
|
EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
|
|
|
|
|
|
|
|
//
|
|
|
|
// Checksum will be updated at runtime
|
|
|
|
//
|
|
|
|
0x00,
|
|
|
|
|
|
|
|
//
|
|
|
|
// It is expected that these values will be programmed at runtime
|
|
|
|
//
|
|
|
|
' ', ' ', ' ', ' ', ' ', ' ',
|
|
|
|
|
|
|
|
0,
|
|
|
|
EFI_ACPI_OEM_MADT_REVISION,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
|
|
|
|
//
|
|
|
|
// MADT specific fields
|
|
|
|
//
|
|
|
|
EFI_ACPI_LOCAL_APIC_ADDRESS,
|
|
|
|
EFI_ACPI_1_0_MULTIPLE_APIC_FLAGS,
|
|
|
|
|
|
|
|
//
|
|
|
|
// Processor Local APIC Structure
|
|
|
|
//
|
|
|
|
|
|
|
|
EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC, // Type
|
|
|
|
sizeof (EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE), // Length
|
|
|
|
0x01, // Processor ID
|
|
|
|
0x00, // Local APIC ID
|
|
|
|
0x00000001, // Flags - Enabled by default
|
|
|
|
|
|
|
|
//
|
|
|
|
// Interrupt Source Override Structure
|
|
|
|
//
|
|
|
|
|
|
|
|
//
|
|
|
|
// IRQ0=>IRQ2 Interrupt Source Override Structure
|
|
|
|
//
|
|
|
|
EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE, // Type
|
|
|
|
sizeof (EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE),// Length
|
|
|
|
0x00, // Bus - ISA
|
|
|
|
0x00, // Source - IRQ0
|
|
|
|
0x00000002, // Global System Interrupt - IRQ2
|
|
|
|
0x0000, // Flags - Conforms to specifications of the bus
|
|
|
|
|
|
|
|
//
|
|
|
|
// ISO (SCI Active High) Interrupt Source Override Structure
|
|
|
|
//
|
|
|
|
EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE, // Type
|
|
|
|
sizeof (EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE),// Length
|
|
|
|
0x00, // Bus - ISA
|
|
|
|
0x09, // Source - IRQ0
|
|
|
|
0x00000009, // Global System Interrupt - IRQ2
|
|
|
|
0x000D, // Flags - Level-tiggered, Active High
|
|
|
|
|
|
|
|
//
|
|
|
|
// IO APIC Structure
|
|
|
|
//
|
|
|
|
EFI_ACPI_1_0_IO_APIC, // Type
|
|
|
|
sizeof (EFI_ACPI_1_0_IO_APIC_STRUCTURE), // Length
|
|
|
|
0x02, // IO APIC ID
|
|
|
|
EFI_ACPI_RESERVED_BYTE, // Reserved
|
|
|
|
0xFEC00000, // IO APIC Address (physical)
|
|
|
|
0x00000000 // Global System Interrupt Base
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
VOID*
|
|
|
|
ReferenceAcpiTable (
|
|
|
|
VOID
|
|
|
|
)
|
|
|
|
{
|
|
|
|
//
|
|
|
|
// Reference the table being generated to prevent the optimizer from removing the
|
|
|
|
// data structure from the exeutable
|
|
|
|
//
|
|
|
|
return (VOID*)&Madt;
|
|
|
|
}
|