/** @file
  Defives data structures per MultiProcessor Specification Ver 1.4.
  
  The MultiProcessor Specification defines an enhancement to the standard 
  to which PC manufacturers design DOS-compatible systems.

Copyright (c) 2007 - 2011, 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.             

**/

#ifndef _LEGACY_BIOS_MPTABLE_H_
#define _LEGACY_BIOS_MPTABLE_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  SIGNATURE_32 ('_', 'M', 'P', '_')
typedef struct {
  UINT32  Reserved1 : 6;
  UINT32  MutipleClk : 1;
  UINT32  Imcr : 1;
  UINT32  Reserved2 : 24;
} FEATUREBYTE2_5;

typedef struct {
  UINT32  Signature;
  UINT32  PhysicalAddress;
  UINT8   Length;
  UINT8   SpecRev;
  UINT8   Checksum;
  UINT8   FeatureByte1;
  FEATUREBYTE2_5 FeatureByte2_5;
} EFI_LEGACY_MP_TABLE_FLOATING_POINTER;

#define EFI_LEGACY_MP_TABLE_HEADER_SIGNATURE  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 Enabled : 1;
  UINT8 Bsp : 1;
  UINT8 Reserved : 6;
} EFI_LEGACY_MP_TABLE_ENTRY_PROCESSOR_FLAGS;

typedef struct {
  UINT32  Stepping : 4;
  UINT32  Model : 4;
  UINT32  Family : 4;
  UINT32  Reserved : 20;
} EFI_LEGACY_MP_TABLE_ENTRY_PROCESSOR_SIGNATURE;

typedef struct {
  UINT32  Fpu : 1;
  UINT32  Reserved1 : 6;
  UINT32  Mce : 1;
  UINT32  Cx8 : 1;
  UINT32  Apic : 1;
  UINT32  Reserved2 : 22;
} EFI_LEGACY_MP_TABLE_ENTRY_PROCESSOR_FEATURES;

typedef struct {
  UINT8 EntryType;
  UINT8 Id;
  UINT8 Ver;
  EFI_LEGACY_MP_TABLE_ENTRY_PROCESSOR_FLAGS     Flags;
  EFI_LEGACY_MP_TABLE_ENTRY_PROCESSOR_SIGNATURE Signature;
  EFI_LEGACY_MP_TABLE_ENTRY_PROCESSOR_FEATURES  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 Enabled : 1;
  UINT8 Reserved : 7;
} EFI_LEGACY_MP_TABLE_ENTRY_IOAPIC_FLAGS;

typedef struct {
  UINT8 EntryType;
  UINT8 Id;
  UINT8 Ver;
  EFI_LEGACY_MP_TABLE_ENTRY_IOAPIC_FLAGS 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 {
  UINT16  Polarity : 2;
  UINT16  Trigger : 2;
  UINT16  Reserved : 12;
} EFI_LEGACY_MP_TABLE_ENTRY_INT_FLAGS;

typedef struct {
  UINT8 IntNo : 2;
  UINT8 Dev : 5;
  UINT8 Reserved : 1;
} EFI_LEGACY_MP_TABLE_ENTRY_INT_FIELDS;

typedef union {
  EFI_LEGACY_MP_TABLE_ENTRY_INT_FIELDS fields;
  UINT8 byte;
} EFI_LEGACY_MP_TABLE_ENTRY_INT_SOURCE_BUS_IRQ;

typedef struct {
  UINT8 EntryType;
  UINT8 IntType;
  EFI_LEGACY_MP_TABLE_ENTRY_INT_FLAGS Flags;
  UINT8 SourceBusId;
  EFI_LEGACY_MP_TABLE_ENTRY_INT_SOURCE_BUS_IRQ 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;
  EFI_LEGACY_MP_TABLE_ENTRY_INT_FLAGS Flags;
  UINT8 SourceBusId;
  EFI_LEGACY_MP_TABLE_ENTRY_INT_SOURCE_BUS_IRQ 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 SubtractiveDecode : 1;
  UINT8 Reserved : 7;
} EFI_LEGACY_MP_TABLE_ENTRY_EXT_BUS_HIERARCHY_BUSINFO;

typedef struct {
  UINT8 EntryType;
  UINT8 Length;
  UINT8 BusId;
  EFI_LEGACY_MP_TABLE_ENTRY_EXT_BUS_HIERARCHY_BUSINFO 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 RangeMode : 1;
  UINT8 Reserved : 7;
} EFI_LEGACY_MP_TABLE_ENTRY_EXT_COMPAT_BUS_ADDR_SPACE_MODIFIER_ADDR_MODE;

typedef struct {
  UINT8 EntryType;
  UINT8 Length;
  UINT8 BusId;
  EFI_LEGACY_MP_TABLE_ENTRY_EXT_COMPAT_BUS_ADDR_SPACE_MODIFIER_ADDR_MODE AddrMode;
  UINT32  PredefinedRangeList;
} EFI_LEGACY_MP_TABLE_ENTRY_EXT_COMPAT_BUS_ADDR_SPACE_MODIFIER;

#pragma pack()

#endif
