**/\r
EFI_STATUS\r
EFIAPI\r
-PayloadEntry (\r
+_ModuleEntryPoint (\r
IN UINTN BootloaderParameter\r
)\r
{\r
UINTN HobMemBase;\r
UINTN HobMemTop;\r
EFI_PEI_HOB_POINTERS Hob;\r
+ SERIAL_PORT_INFO SerialPortInfo;\r
+ UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *UniversalSerialPort;\r
\r
- // Call constructor for all libraries\r
- ProcessLibraryConstructorList ();\r
-\r
- DEBUG ((DEBUG_INFO, "GET_BOOTLOADER_PARAMETER() = 0x%lx\n", GET_BOOTLOADER_PARAMETER()));\r
- DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof(UINTN)));\r
-\r
+ PcdSet64S (PcdBootloaderParameter, BootloaderParameter);\r
// Initialize floating point operating environment to be compliant with UEFI spec.\r
InitializeFloatingPointUnits ();\r
\r
\r
HobConstructor ((VOID *)MemBase, (VOID *)HobMemTop, (VOID *)HobMemBase, (VOID *)HobMemTop);\r
\r
+ //\r
+ // Build serial port info\r
+ //\r
+ Status = ParseSerialInfo (&SerialPortInfo);\r
+ if (!EFI_ERROR (Status)) {\r
+ UniversalSerialPort = BuildGuidHob (&gUniversalPayloadSerialPortInfoGuid, sizeof (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO));\r
+ ASSERT (UniversalSerialPort != NULL);\r
+ UniversalSerialPort->Header.Revision = UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO_REVISION;\r
+ UniversalSerialPort->Header.Length = sizeof (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO);\r
+ UniversalSerialPort->UseMmio = (SerialPortInfo.Type == 1)?FALSE:TRUE;\r
+ UniversalSerialPort->RegisterBase = SerialPortInfo.BaseAddr;\r
+ UniversalSerialPort->BaudRate = SerialPortInfo.Baud;\r
+ UniversalSerialPort->RegisterStride = (UINT8)SerialPortInfo.RegWidth;\r
+ }\r
+\r
+ // The library constructors might depend on serial port, so call it after serial port hob\r
+ ProcessLibraryConstructorList ();\r
+ DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof(UINTN)));\r
+\r
// Build HOB based on information from Bootloader\r
Status = BuildHobFromBl ();\r
if (EFI_ERROR (Status)) {\r