Re: [PATCH 03/12] UefiPayloadPkg: Add a separate PlatformHookLib for Universal Payload


Guo Dong
 

Reviewed-by: Guo Dong <guo.dong@...>

-----Original Message-----
From: Liu, Zhiguang <zhiguang.liu@...>
Sent: Sunday, June 20, 2021 8:47 AM
To: devel@edk2.groups.io
Cc: Ma, Maurice <maurice.ma@...>; Dong, Guo
<guo.dong@...>; You, Benjamin <benjamin.you@...>
Subject: [PATCH 03/12] UefiPayloadPkg: Add a separate PlatformHookLib for
Universal Payload

Add a new separate PlatformHookLib for Universal Payload to consume Guid
Hob gUniversalPayloadSerialPortInfoGuid to get serial port information

Cc: Maurice Ma <maurice.ma@...>
Cc: Guo Dong <guo.dong@...>
Cc: Benjamin You <benjamin.you@...>
Signed-off-by: Zhiguang Liu <zhiguang.liu@...>
---

UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.
c | 82
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++

UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.
inf | 41 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 123 insertions(+)

diff --git
a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLi
b.c
b/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLi
b.c
new file mode 100644
index 0000000000..6705f29505
--- /dev/null
+++
b/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLi
b.c
@@ -0,0 +1,82 @@
+/** @file

+ Platform Hook Library instance for UART device.

+

+ Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>

+ SPDX-License-Identifier: BSD-2-Clause-Patent

+

+**/

+

+#include <Base.h>

+#include <PiDxe.h>

+#include <UniversalPayload/SerialPortInfo.h>

+#include <Library/PlatformHookLib.h>

+#include <Library/PcdLib.h>

+#include <Library/HobLib.h>

+

+/**

+ Performs platform specific initialization required for the CPU to access

+ the hardware associated with a SerialPortLib instance. This function does

+ not initialize the serial port hardware itself. Instead, it initializes

+ hardware devices that are required for the CPU to access the serial port

+ hardware. This function may be called more than once.

+

+ @retval RETURN_SUCCESS The platform specific initialization succeeded.

+ @retval RETURN_DEVICE_ERROR The platform specific initialization could
not be completed.

+

+**/

+RETURN_STATUS

+EFIAPI

+PlatformHookSerialPortInitialize (

+ VOID

+ )

+{

+ RETURN_STATUS Status;

+ UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *SerialPortInfo;

+ UINT8 *GuidHob;

+ UNIVERSAL_PAYLOAD_GENERIC_HEADER *GenericHeader;

+

+ GuidHob = GetFirstGuidHob (&gUniversalPayloadSerialPortInfoGuid);

+ if (GuidHob == NULL) {

+ return EFI_NOT_FOUND;

+ }

+

+ GenericHeader = (UNIVERSAL_PAYLOAD_GENERIC_HEADER *)
GET_GUID_HOB_DATA (GuidHob);

+ if ((sizeof (UNIVERSAL_PAYLOAD_GENERIC_HEADER) >
GET_GUID_HOB_DATA_SIZE (GuidHob)) || (GenericHeader->Length >
GET_GUID_HOB_DATA_SIZE (GuidHob))) {

+ return EFI_NOT_FOUND;

+ }

+

+ if (GenericHeader->Revision ==
UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO_REVISION) {

+ SerialPortInfo = (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *)
GET_GUID_HOB_DATA (GuidHob);

+ if (GenericHeader->Length <
UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD
(UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO, RegisterBase)) {

+ //

+ // Return if can't find the Serial Port Info Hob with enough length

+ //

+ return EFI_NOT_FOUND;

+ }

+

+ Status = PcdSetBoolS (PcdSerialUseMmio, SerialPortInfo->UseMmio);

+ if (RETURN_ERROR (Status)) {

+ return Status;

+ }

+ Status = PcdSet64S (PcdSerialRegisterBase, SerialPortInfo->RegisterBase);

+ if (RETURN_ERROR (Status)) {

+ return Status;

+ }

+ Status = PcdSet32S (PcdSerialRegisterStride, SerialPortInfo-
RegisterStride);
+ if (RETURN_ERROR (Status)) {

+ return Status;

+ }

+ Status = PcdSet32S (PcdSerialBaudRate, SerialPortInfo->BaudRate);

+ if (RETURN_ERROR (Status)) {

+ return Status;

+ }

+ Status = PcdSet64S (PcdUartDefaultBaudRate, SerialPortInfo->BaudRate);

+ if (RETURN_ERROR (Status)) {

+ return Status;

+ }

+

+ return RETURN_SUCCESS;

+ }

+

+ return EFI_NOT_FOUND;

+}

diff --git
a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLi
b.inf
b/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLi
b.inf
new file mode 100644
index 0000000000..41e05ddf54
--- /dev/null
+++
b/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLi
b.inf
@@ -0,0 +1,41 @@
+## @file

+# Platform Hook Library instance for UART device for Universal Payload.

+#

+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>

+#

+# SPDX-License-Identifier: BSD-2-Clause-Patent

+#

+##

+

+[Defines]

+ INF_VERSION = 0x00010005

+ BASE_NAME = PlatformHookLib

+ FILE_GUID = 807E05AB-9411-429F-97F0-FE425BF6B094

+ MODULE_TYPE = BASE

+ VERSION_STRING = 1.0

+ LIBRARY_CLASS = PlatformHookLib

+ CONSTRUCTOR = PlatformHookSerialPortInitialize

+

+[Sources]

+ PlatformHookLib.c

+

+[LibraryClasses]

+ PcdLib

+ BaseLib

+ HobLib

+ DxeHobListLib

+

+[Packages]

+ MdePkg/MdePkg.dec

+ MdeModulePkg/MdeModulePkg.dec

+ UefiPayloadPkg/UefiPayloadPkg.dec

+

+[Guids]

+ gUniversalPayloadSerialPortInfoGuid

+

+[Pcd]

+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio ## PRODUCES

+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase ##
PRODUCES

+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate ## PRODUCES

+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride ##
PRODUCES

+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate ## PRODUCES

--
2.16.2.windows.1

Join devel@edk2.groups.io to automatically receive all group messages.