alder_lake_bios/Board/Oem/L05AlderLakePMultiBoardPkg/Library/DxeOemSvcKernelLib/OemSvcPrepareInstallMpTable.c

358 lines
18 KiB
C

/** @file
Returns platform specific MP Table information to the caller.
;******************************************************************************
;* Copyright (c) 2018, Insyde Software Corp. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#include <Library/DxeOemSvcKernelLib.h>
//
// module variables
//
CHAR8 mOemIdString[8] = {
'I','n','s','y','d','e',' ',' '
};
//
// Please modify the ProductIdString according to the platform you are porting.
//
CHAR8 mProductIdString[12] = {
'S','h','a','r','k','B','a','y',' ',' ',' ',' '
};
EFI_LEGACY_MP_TABLE_ENTRY_IOAPIC mIoApicDefault[] = {
//
// IO APIC of ICH first, then IOH, ordering is important!
//
// {EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IOAPIC, IO APIC ID, IO APIC Version, {Enable, Reserved}, Address of IO APIC}
// Please Modify this table according to your platform.
//
// If there is no any device, just use a NULL_ENTRY.
//
// NULL_ENTRY
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IOAPIC, 0x00, 0x20, {1, 0}, 0xFEC00000},
};
EFI_LEGACY_MP_TABLE_ENTRY_IO_INT mIoApicIntLegacy[] = {
//
// IRQ 0~15 for Legacy Bus, don't assign the Bus number.
// The Bus number will be auto-assigned.
//
// {EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, INT type, {Polarity, Trigger, 0}, Bus Number, {INT#, Dev, 0}, IO ApicId, Apic INT#}
// Please modify the IO ApicId number.
//
// If there is no any device, just use a NULL_ENTRY.
//
// NULL_ENTRY
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {0, 0x0, 0} , 0x0, 0x0},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {1, 0x0, 0} , 0x0, 0x1},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {1, 1, 0}, 0, {0, 0x0, 0} , 0x0, 0x2},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {3, 0x0, 0} , 0x0, 0x3},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {0, 0x1, 0} , 0x0, 0x4},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {1, 0x1, 0} , 0x0, 0x5},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {2, 0x1, 0} , 0x0, 0x6},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {3, 0x1, 0} , 0x0, 0x7},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {0, 0x2, 0} , 0x0, 0x8},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {1, 0x2, 0} , 0x0, 0x9},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {2, 0x2, 0} , 0x0, 0xA},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {3, 0x2, 0} , 0x0, 0xB},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {0, 0x3, 0} , 0x0, 0xC},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {1, 0x3, 0} , 0x0, 0xD},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {2, 0x3, 0} , 0x0, 0xE},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {0, 0, 0}, 0, {3, 0x3, 0} , 0x0, 0xF}
};
EFI_LEGACY_MP_TABLE_ENTRY_IO_INT mIoApicIntDefault[] = {
//
// IRQ for device on host bus (bus 0)
//
// {EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, INT type, {Polarity, Trigger, 0}, Bus Number, {INT#, Dev, 0}, IO Apic ID, Apic INT#}
// Please fill in the Dev, IO Apic ID, Apic INT#.
// Dev, Apic INT# are modified according to ASL code.
// IO Apic ID is modified according to the corresponding Apic INT#, and refer to mIoApicIntLegacy table to see what IO Apic ID is the Apic INT# connected to.
//
// If there is no any device, just use a NULL_ENTRY.
//
// NULL_ENTRY
//
// AR00
//
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x14, 0} , 0x0, 0x15},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x16, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x16, 0} , 0x0, 0x11},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x16, 0} , 0x0, 0x12},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x16, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x19, 0} , 0x0, 0x14},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x1a, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x1a, 0} , 0x0, 0x15},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x1a, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x1a, 0} , 0x0, 0x12},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x1b, 0} , 0x0, 0x16},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x1c, 0} , 0x0, 0x11},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x1c, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x1c, 0} , 0x0, 0x12},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x1c, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x1d, 0} , 0x0, 0x17},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x1d, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x1d, 0} , 0x0, 0x12},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x1d, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x1f, 0} , 0x0, 0x15},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x1f, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x1f, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x1f, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x01, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x01, 0} , 0x0, 0x11},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x01, 0} , 0x0, 0x12},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x01, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x02, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x04, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x04, 0} , 0x0, 0x11},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x04, 0} , 0x0, 0x12},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x04, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x06, 0} , 0x0, 0x13},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x06, 0} , 0x0, 0x10},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x06, 0} , 0x0, 0x11},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x06, 0} , 0x0, 0x12},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x18, 0} , 0x0, 0x14}
};
MP_TABLE_ENTRY_IO_INT_SLOT mIoApicIntSlotDefault[] = {
//
// The Bus ID will be auto-assigned specified by bridge.
//
// {Bridge Bus#, Bridge Dev#, Bridge Func#,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, INT type, {Polarity, Trigger, 0}, Bus ID, {INT#, Dev#, 0}, IO Apic ID, Apic INT#}}
// Please modify bridge Bus/Dev/Func number which the device is connect to.
// Dev, Apic INT# are modified according to ASL code.
// IO Apic ID is modified according to the corresponding Apic INT#, and refer to mIoApicIntLegacy table to see what IO Apic ID is the Apic INT# connected to.
//
// If there is no any device, just use a NULL_ENTRY.
//
// NULL_ENTRY
//
// AR0A
//
{0x0, 0x1, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x10}},
{0x0, 0x1, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x1, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x13}},
//
// AR04
//
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x15}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x16}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x17}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x14}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x01, 0} , 0x0, 0x16}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x01, 0} , 0x0, 0x15}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x01, 0} , 0x0, 0x14}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x01, 0} , 0x0, 0x17}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x05, 0} , 0x0, 0x12}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x05, 0} , 0x0, 0x14}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x05, 0} , 0x0, 0x16}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x05, 0} , 0x0, 0x15}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x03, 0} , 0x0, 0x14}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x03, 0} , 0x0, 0x12}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x03, 0} , 0x0, 0x15}},
{0x0, 0x1e, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x03, 0} , 0x0, 0x16}},
//
// AR05
//
{0x0, 0x1c, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x10}},
{0x0, 0x1c, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x1c, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1c, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x13}},
//
// AR06
//
{0x0, 0x1c, 0x1,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x1c, 0x1,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1c, 0x1,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x1c, 0x1,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x10}},
//
// AR07
//
{0x0, 0x1c, 0x2,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1c, 0x2,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x1c, 0x2,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x10}},
{0x0, 0x1c, 0x2,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x11}},
//
// AR08
//
{0x0, 0x1c, 0x3,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x1c, 0x3,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x10}},
{0x0, 0x1c, 0x3,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x1c, 0x3,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x12}},
//
// AR09
//
{0x0, 0x1c, 0x4,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x10}},
{0x0, 0x1c, 0x4,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x1c, 0x4,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1c, 0x4,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x13}},
//
// AR0C
//
{0x0, 0x1c, 0x5,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x1c, 0x5,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1c, 0x5,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x1c, 0x5,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x10}},
//
// AR0D
//
{0x0, 0x1c, 0x6,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1c, 0x6,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x1c, 0x6,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x14}},
{0x0, 0x1c, 0x6,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x15}},
//
// AR0E
//
{0x0, 0x1c, 0x7,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x1c, 0x7,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x10}},
{0x0, 0x1c, 0x7,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x1c, 0x7,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x12}},
//
// AR02
//
{0x0, 0x1, 0x1,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x1, 0x1,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1, 0x1,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x1, 0x1,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x10}},
//
// AR03
//
{0x0, 0x1, 0x2,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x12}},
{0x0, 0x1, 0x2,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x1, 0x2,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x10}},
{0x0, 0x1, 0x2,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x11}},
//
// AR0B
//
{0x0, 0x6, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {0, 0x00, 0} , 0x0, 0x13}},
{0x0, 0x6, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {1, 0x00, 0} , 0x0, 0x10}},
{0x0, 0x6, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {2, 0x00, 0} , 0x0, 0x11}},
{0x0, 0x6, 0x0,{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_IO_INT, 0, {3, 3, 0}, 0, {3, 0x00, 0} , 0x0, 0x12}}
};
EFI_LEGACY_MP_TABLE_ENTRY_LOCAL_INT mLocalApicIntDefault[] = {
//{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_LOCAL_INT, INT type, {Polarity, Trigger, Reserved}, Src Bus ID, Src Bus Irq, Local Apic ID, Local Apic INT#}
//
// If there is no any device, just use a NULL_ENTRY.
//
// NULL_ENTRY
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_LOCAL_INT, 3, {0, 0, 0}, 0, 0, 0xFF, 0},
{EFI_LEGACY_MP_TABLE_ENTRY_TYPE_LOCAL_INT, 1, {0, 0, 0}, 0, 0, 0xFF, 1}
};
/**
Returns platform specific MP Table information to the caller.
@param[out] *CharNumOfOemIdString The characters number of OEM ID string.
@param[out] **pOemIdStringEntry The address of mOemIdString[].
@param[out] *CharNumOfProductIdString The characters number of Product ID string
@param[out] **pProductIdStringEntry The address of mProductIdString[].
@param[out] *NumOfIoApic Total entry number of mIoApicDefault[].
@param[out] **pIoApicEntry The address of mIoApicDefault[].
@param[out] *NumOfIoApicIntLegacy Total entry number of mIoApicIntLegacy[].
@param[out] **pIoApicIntLegacyEntry The address of mIoApicIntLegacy[].
@param[out] *NumOfIoApicInt Total entry number of mIoApicIntDefault[].
@param[out] **pIoApicIntEntry The address of mIoApicIntDefault[].
@param[out] *NumOfIoApicIntSlot Total entry number of mIoApicIntSlotDefault[].
@param[out] **pIoApicIntSlotEntry The address of mIoApicIntSlotDefault[].
@param[out] *NumOfLocalApicInt Total entry number of mLocalApicIntDefault[].
@param[out] **pLocalApicIntEntry The address of mLocalApicIntDefault[].
@retval EFI_MEDIA_CHANGED MP Table is supported.
@retval Others Depends on customization.
**/
EFI_STATUS
OemSvcPrepareInstallMpTable (
OUT UINTN *CharNumOfOemIdString,
OUT CHAR8 **pOemIdStringEntry,
OUT UINTN *CharNumOfProductIdString,
OUT CHAR8 **pProductIdStringEntry,
OUT UINTN *NumOfIoApic,
OUT EFI_LEGACY_MP_TABLE_ENTRY_IOAPIC **pIoApicEntry,
OUT UINTN *NumOfIoApicIntLegacy,
OUT EFI_LEGACY_MP_TABLE_ENTRY_IO_INT **pIoApicIntLegacyEntry,
OUT UINTN *NumOfIoApicInt,
OUT EFI_LEGACY_MP_TABLE_ENTRY_IO_INT **pIoApicIntEntry,
OUT UINTN *NumOfIoApicIntSlot,
OUT MP_TABLE_ENTRY_IO_INT_SLOT **pIoApicIntSlotEntry,
OUT UINTN *NumOfLocalApicInt,
OUT EFI_LEGACY_MP_TABLE_ENTRY_LOCAL_INT **pLocalApicIntEntry
)
{
(*CharNumOfOemIdString) = sizeof(mOemIdString) / sizeof(mOemIdString[0]);
(*pOemIdStringEntry) = &mOemIdString[0];
(*CharNumOfProductIdString) = sizeof(mProductIdString) / sizeof(mProductIdString[0]);
(*pProductIdStringEntry) = &mProductIdString[0];
if (mIoApicDefault[0].EntryType != NULL_ENTRY) {
(*NumOfIoApic) = sizeof(mIoApicDefault) / sizeof(mIoApicDefault[0]);
(*pIoApicEntry) = &mIoApicDefault[0];
}
if (mIoApicIntLegacy[0].EntryType != NULL_ENTRY) {
(*NumOfIoApicIntLegacy) = sizeof(mIoApicIntLegacy) / sizeof(mIoApicIntLegacy[0]);
(*pIoApicIntLegacyEntry) = &mIoApicIntLegacy[0];
}
if (mIoApicIntDefault[0].EntryType != NULL_ENTRY) {
(*NumOfIoApicInt) = sizeof(mIoApicIntDefault) / sizeof(mIoApicIntDefault[0]);
(*pIoApicIntEntry) = &mIoApicIntDefault[0];
}
if (mIoApicIntSlotDefault[0].BridgeBus != NULL_ENTRY) {
(*NumOfIoApicIntSlot) = sizeof(mIoApicIntSlotDefault) / sizeof(mIoApicIntSlotDefault[0]);
(*pIoApicIntSlotEntry) = &mIoApicIntSlotDefault[0];
}
if (mLocalApicIntDefault[0].EntryType != NULL_ENTRY) {
(*NumOfLocalApicInt) = sizeof(mLocalApicIntDefault) / sizeof(mLocalApicIntDefault[0]);
(*pLocalApicIntEntry) = &mLocalApicIntDefault[0];
}
return EFI_MEDIA_CHANGED;
}