/** @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 // // 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; }