[edk2-devel] [PATCH 03/12] UefiPayloadPkg: Add a separate PlatformHookLib for Universal Payload
Guo Dong
guo.dong at intel.com
Tue Jun 22 22:48:37 UTC 2021
Reviewed-by: Guo Dong <guo.dong at intel.com>
> -----Original Message-----
> From: Liu, Zhiguang <zhiguang.liu at intel.com>
> Sent: Sunday, June 20, 2021 8:47 AM
> To: devel at edk2.groups.io
> Cc: Ma, Maurice <maurice.ma at intel.com>; Dong, Guo
> <guo.dong at intel.com>; You, Benjamin <benjamin.you at intel.com>
> 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 at intel.com>
> Cc: Guo Dong <guo.dong at intel.com>
> Cc: Benjamin You <benjamin.you at intel.com>
> Signed-off-by: Zhiguang Liu <zhiguang.liu at intel.com>
> ---
>
> 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
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76864): https://edk2.groups.io/g/devel/message/76864
Mute This Topic: https://groups.io/mt/83669557/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list