| /*++ | |
| Copyright (c) 2007, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials | |
| are 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. | |
| Module Name: | |
| LegacyBiosMpTable.h | |
| Abstract: | |
| Defives data structures per Multi Processor Specification Ver 1.4. | |
| --*/ | |
| #ifndef LEGACY_BIOS_MPTABLE_H_ | |
| #define LEGACY_BIOS_MPTABLE_H_ | |
| #include "Tiano.h" | |
| #define EFI_LEGACY_MP_TABLE_REV_1_4 0x04 | |
| // | |
| // Define MP table structures. All are packed. | |
| // | |
| #pragma pack(1) | |
| #define EFI_LEGACY_MP_TABLE_FLOATING_POINTER_SIGNATURE EFI_SIGNATURE_32 ('_', 'M', 'P', '_') | |
| typedef struct { | |
| UINT32 Signature; | |
| UINT32 PhysicalAddress; | |
| UINT8 Length; | |
| UINT8 SpecRev; | |
| UINT8 Checksum; | |
| UINT8 FeatureByte1; | |
| struct { | |
| UINT32 Reserved1 : 6; | |
| UINT32 MutipleClk : 1; | |
| UINT32 Imcr : 1; | |
| UINT32 Reserved2 : 24; | |
| } FeatureByte2_5; | |
| } EFI_LEGACY_MP_TABLE_FLOATING_POINTER; | |
| #define EFI_LEGACY_MP_TABLE_HEADER_SIGNATURE EFI_SIGNATURE_32 ('P', 'C', 'M', 'P') | |
| typedef struct { | |
| UINT32 Signature; | |
| UINT16 BaseTableLength; | |
| UINT8 SpecRev; | |
| UINT8 Checksum; | |
| CHAR8 OemId[8]; | |
| CHAR8 OemProductId[12]; | |
| UINT32 OemTablePointer; | |
| UINT16 OemTableSize; | |
| UINT16 EntryCount; | |
| UINT32 LocalApicAddress; | |
| UINT16 ExtendedTableLength; | |
| UINT8 ExtendedChecksum; | |
| UINT8 Reserved; | |
| } EFI_LEGACY_MP_TABLE_HEADER; | |
| typedef struct { | |
| UINT8 EntryType; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_TYPE; | |
| // | |
| // Entry Type 0: Processor. | |
| // | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_TYPE_PROCESSOR 0x00 | |
| typedef struct { | |
| UINT8 EntryType; | |
| UINT8 Id; | |
| UINT8 Ver; | |
| struct { | |
| UINT8 Enabled : 1; | |
| UINT8 Bsp : 1; | |
| UINT8 Reserved : 6; | |
| } Flags; | |
| struct { | |
| UINT32 Stepping : 4; | |
| UINT32 Model : 4; | |
| UINT32 Family : 4; | |
| UINT32 Reserved : 20; | |
| } Signature; | |
| struct { | |
| UINT32 Fpu : 1; | |
| UINT32 Reserved1 : 6; | |
| UINT32 Mce : 1; | |
| UINT32 Cx8 : 1; | |
| UINT32 Apic : 1; | |
| UINT32 Reserved2 : 22; | |
| } Features; | |
| UINT32 Reserved1; | |
| UINT32 Reserved2; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_PROCESSOR; | |
| // | |
| // Entry Type 1: Bus. | |
| // | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_TYPE_BUS 0x01 | |
| typedef struct { | |
| UINT8 EntryType; | |
| UINT8 Id; | |
| CHAR8 TypeString[6]; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_BUS; | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_CBUS "CBUS " // Corollary CBus | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_CBUSII "CBUSII" // Corollary CBUS II | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_EISA "EISA " // Extended ISA | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_FUTURE "FUTURE" // IEEE FutureBus | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_INTERN "INTERN" // Internal bus | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_ISA "ISA " // Industry Standard Architecture | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_MBI "MBI " // Multibus I | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_MBII "MBII " // Multibus II | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_MCA "MCA " // Micro Channel Architecture | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_MPI "MPI " // MPI | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_MPSA "MPSA " // MPSA | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_NUBUS "NUBUS " // Apple Macintosh NuBus | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_PCI "PCI " // Peripheral Component Interconnect | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_PCMCIA "PCMCIA" // PC Memory Card International Assoc. | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_TC "TC " // DEC TurboChannel | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_VL "VL " // VESA Local Bus | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_VME "VME " // VMEbus | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_BUS_STRING_XPRESS "XPRESS" // Express System Bus | |
| // | |
| // Entry Type 2: I/O APIC. | |
| // | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IOAPIC 0x02 | |
| typedef struct { | |
| UINT8 EntryType; | |
| UINT8 Id; | |
| UINT8 Ver; | |
| struct { | |
| UINT8 Enabled : 1; | |
| UINT8 Reserved : 7; | |
| } Flags; | |
| UINT32 Address; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_IOAPIC; | |
| // | |
| // Entry Type 3: I/O Interrupt Assignment. | |
| // | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT 0x03 | |
| typedef struct { | |
| UINT8 EntryType; | |
| UINT8 IntType; | |
| struct { | |
| UINT16 Polarity : 2; | |
| UINT16 Trigger : 2; | |
| UINT16 Reserved : 12; | |
| } Flags; | |
| UINT8 SourceBusId; | |
| union { | |
| struct { | |
| UINT8 IntNo : 2; | |
| UINT8 Dev : 5; | |
| UINT8 Reserved : 1; | |
| } fields; | |
| UINT8 byte; | |
| } SourceBusIrq; | |
| UINT8 DestApicId; | |
| UINT8 DestApicIntIn; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_IO_INT; | |
| typedef enum { | |
| EfiLegacyMpTableEntryIoIntTypeInt = 0, | |
| EfiLegacyMpTableEntryIoIntTypeNmi = 1, | |
| EfiLegacyMpTableEntryIoIntTypeSmi = 2, | |
| EfiLegacyMpTableEntryIoIntTypeExtInt= 3, | |
| } EFI_LEGACY_MP_TABLE_ENTRY_IO_INT_TYPE; | |
| typedef enum { | |
| EfiLegacyMpTableEntryIoIntFlagsPolaritySpec = 0x0, | |
| EfiLegacyMpTableEntryIoIntFlagsPolarityActiveHigh = 0x1, | |
| EfiLegacyMpTableEntryIoIntFlagsPolarityReserved = 0x2, | |
| EfiLegacyMpTableEntryIoIntFlagsPolarityActiveLow = 0x3, | |
| } EFI_LEGACY_MP_TABLE_ENTRY_IO_INT_FLAGS_POLARITY; | |
| typedef enum { | |
| EfiLegacyMpTableEntryIoIntFlagsTriggerSpec = 0x0, | |
| EfiLegacyMpTableEntryIoIntFlagsTriggerEdge = 0x1, | |
| EfiLegacyMpTableEntryIoIntFlagsTriggerReserved = 0x2, | |
| EfiLegacyMpTableEntryIoIntFlagsTriggerLevel = 0x3, | |
| } EFI_LEGACY_MP_TABLE_ENTRY_IO_INT_FLAGS_TRIGGER; | |
| // | |
| // Entry Type 4: Local Interrupt Assignment. | |
| // | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_TYPE_LOCAL_INT 0x04 | |
| typedef struct { | |
| UINT8 EntryType; | |
| UINT8 IntType; | |
| struct { | |
| UINT16 Polarity : 2; | |
| UINT16 Trigger : 2; | |
| UINT16 Reserved : 12; | |
| } Flags; | |
| UINT8 SourceBusId; | |
| UINT8 SourceBusIrq; | |
| UINT8 DestApicId; | |
| UINT8 DestApicIntIn; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_LOCAL_INT; | |
| typedef enum { | |
| EfiLegacyMpTableEntryLocalIntTypeInt = 0, | |
| EfiLegacyMpTableEntryLocalIntTypeNmi = 1, | |
| EfiLegacyMpTableEntryLocalIntTypeSmi = 2, | |
| EfiLegacyMpTableEntryLocalIntTypeExtInt = 3, | |
| } EFI_LEGACY_MP_TABLE_ENTRY_LOCAL_INT_TYPE; | |
| typedef enum { | |
| EfiLegacyMpTableEntryLocalIntFlagsPolaritySpec = 0x0, | |
| EfiLegacyMpTableEntryLocalIntFlagsPolarityActiveHigh= 0x1, | |
| EfiLegacyMpTableEntryLocalIntFlagsPolarityReserved = 0x2, | |
| EfiLegacyMpTableEntryLocalIntFlagsPolarityActiveLow = 0x3, | |
| } EFI_LEGACY_MP_TABLE_ENTRY_LOCAL_INT_FLAGS_POLARITY; | |
| typedef enum { | |
| EfiLegacyMpTableEntryLocalIntFlagsTriggerSpec = 0x0, | |
| EfiLegacyMpTableEntryLocalIntFlagsTriggerEdge = 0x1, | |
| EfiLegacyMpTableEntryLocalIntFlagsTriggerReserved = 0x2, | |
| EfiLegacyMpTableEntryLocalIntFlagsTriggerLevel = 0x3, | |
| } EFI_LEGACY_MP_TABLE_ENTRY_LOCAL_INT_FLAGS_TRIGGER; | |
| // | |
| // Entry Type 128: System Address Space Mapping. | |
| // | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_EXT_TYPE_SYS_ADDR_SPACE_MAPPING 0x80 | |
| typedef struct { | |
| UINT8 EntryType; | |
| UINT8 Length; | |
| UINT8 BusId; | |
| UINT8 AddressType; | |
| UINT64 AddressBase; | |
| UINT64 AddressLength; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_EXT_SYS_ADDR_SPACE_MAPPING; | |
| typedef enum { | |
| EfiLegacyMpTableEntryExtSysAddrSpaceMappingIo = 0, | |
| EfiLegacyMpTableEntryExtSysAddrSpaceMappingMemory = 1, | |
| EfiLegacyMpTableEntryExtSysAddrSpaceMappingPrefetch = 2, | |
| } EFI_LEGACY_MP_TABLE_ENTRY_EXT_SYS_ADDR_SPACE_MAPPING_TYPE; | |
| // | |
| // Entry Type 129: Bus Hierarchy. | |
| // | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_EXT_TYPE_BUS_HIERARCHY 0x81 | |
| typedef struct { | |
| UINT8 EntryType; | |
| UINT8 Length; | |
| UINT8 BusId; | |
| struct { | |
| UINT8 SubtractiveDecode : 1; | |
| UINT8 Reserved : 7; | |
| } BusInfo; | |
| UINT8 ParentBus; | |
| UINT8 Reserved1; | |
| UINT8 Reserved2; | |
| UINT8 Reserved3; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_EXT_BUS_HIERARCHY; | |
| // | |
| // Entry Type 130: Compatibility Bus Address Space Modifier. | |
| // | |
| #define EFI_LEGACY_MP_TABLE_ENTRY_EXT_TYPE_COMPAT_BUS_ADDR_SPACE_MODIFIER 0x82 | |
| typedef struct { | |
| UINT8 EntryType; | |
| UINT8 Length; | |
| UINT8 BusId; | |
| struct { | |
| UINT8 RangeMode : 1; | |
| UINT8 Reserved : 7; | |
| } AddrMode; | |
| UINT32 PredefinedRangeList; | |
| } EFI_LEGACY_MP_TABLE_ENTRY_EXT_COMPAT_BUS_ADDR_SPACE_MODIFIER; | |
| #pragma pack() | |
| #endif |