[edk2-devel] [PATCH v3 17/18] UefiCpuPkg: CpuIo2Smm: Support of CpuIo driver under StandaloneMm

Laszlo Ersek lersek at redhat.com
Fri Jan 15 07:16:32 UTC 2021


On 01/14/21 23:36, Kun Qin wrote:
> This change abstracts standalone and traditional MM driver entrypoints
> into separate files to match corresponding driver entrypoint interfaces.
> 
> Cc: Eric Dong <eric.dong at intel.com>
> Cc: Ray Ni <ray.ni at intel.com>
> Cc: Laszlo Ersek <lersek at redhat.com>
> Cc: Rahul Kumar <rahul1.kumar at intel.com>
> 
> Signed-off-by: Kun Qin <kun.q at outlook.com>
> ---
> 
> Notes:
>     v3:
>     - Revert file name change of "CpuIo2Smm" for review and git history
>     concern [Laszlo]
>     - Break driver entrypoint into separate patch [Laszlo]
>     
>     v2:
>     - Removed "EFIAPI" for internal functions.
> 
>  UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c                               |  9 ++----
>  UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.c                      | 32 ++++++++++++++++++++
>  UefiCpuPkg/CpuIo2Smm/CpuIo2TraditionalMm.c                     | 32 ++++++++++++++++++++
>  UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.h                               | 12 ++++++++
>  UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf                             |  3 +-
>  UefiCpuPkg/CpuIo2Smm/{CpuIo2Smm.inf => CpuIo2StandaloneMm.inf} | 18 +++++------
>  UefiCpuPkg/UefiCpuPkg.dsc                                      |  5 +++
>  7 files changed, 93 insertions(+), 18 deletions(-)
> 
> diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c b/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c
> index c0a2baecee03..cc99fd59a184 100644
> --- a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c
> +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c
> @@ -371,18 +371,13 @@ CpuIoServiceWrite (
>  /**
>    The module Entry Point SmmCpuIoProtocol driver
>  
> -  @param[in] ImageHandle  The firmware allocated handle for the EFI image.
> -  @param[in] SystemTable  A pointer to the EFI System Table.
> -
>    @retval EFI_SUCCESS  The entry point is executed successfully.
>    @retval Other        Some error occurs when executing this entry point.
>  
>  **/
>  EFI_STATUS
> -EFIAPI
> -SmmCpuIo2Initialize (
> -  IN EFI_HANDLE        ImageHandle,
> -  IN EFI_SYSTEM_TABLE  *SystemTable
> +CommonCpuIo2Initialize (
> +  VOID
>    )
>  {
>    EFI_STATUS  Status;
> diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.c b/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.c
> new file mode 100644
> index 000000000000..d6707d7bc8bc
> --- /dev/null
> +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.c
> @@ -0,0 +1,32 @@
> +/** @file
> +  Produces the SMM CPU I/O Protocol.
> +
> +Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) Microsoft Corporation.
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <PiMm.h>
> +
> +#include "CpuIo2Smm.h"
> +
> +/**
> +  The module Entry Point for Standalone MM CpuIoProtocol driver
> +
> +  @param[in] ImageHandle  The firmware allocated handle for the EFI image.
> +  @param[in] SystemTable  A pointer to the EFI System Table.
> +
> +  @retval EFI_SUCCESS  The entry point is executed successfully.
> +  @retval Other        Some error occurs when executing this entry point.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +StandaloneMmCpuIo2Initialize (
> +  IN EFI_HANDLE           ImageHandle,
> +  IN EFI_MM_SYSTEM_TABLE  *SystemTable
> +  )
> +{
> +  return CommonCpuIo2Initialize ();
> +}
> diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2TraditionalMm.c b/UefiCpuPkg/CpuIo2Smm/CpuIo2TraditionalMm.c
> new file mode 100644
> index 000000000000..5a4f41b160a4
> --- /dev/null
> +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2TraditionalMm.c
> @@ -0,0 +1,32 @@
> +/** @file
> +  Produces the SMM CPU I/O Protocol.
> +
> +Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) Microsoft Corporation.
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <PiSmm.h>
> +
> +#include "CpuIo2Smm.h"
> +
> +/**
> +  The module Entry Point for Traditional MM CpuIoProtocol driver
> +
> +  @param[in] ImageHandle  The firmware allocated handle for the EFI image.
> +  @param[in] SystemTable  A pointer to the EFI System Table.
> +
> +  @retval EFI_SUCCESS  The entry point is executed successfully.
> +  @retval Other        Some error occurs when executing this entry point.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +TraditionalMmCpuIo2Initialize (
> +  IN EFI_HANDLE        ImageHandle,
> +  IN EFI_SYSTEM_TABLE  *SystemTable
> +  )
> +{
> +  return CommonCpuIo2Initialize ();
> +}
> diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.h b/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.h
> index c80261945f71..eda9fbb090cd 100644
> --- a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.h
> +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.h
> @@ -153,4 +153,16 @@ CpuIoServiceWrite (
>    IN VOID                            *Buffer
>    );
>  
> +/**
> +  The module Entry Point SmmCpuIoProtocol driver
> +
> +  @retval EFI_SUCCESS  The entry point is executed successfully.
> +  @retval Other        Some error occurs when executing this entry point.
> +
> +**/
> +EFI_STATUS
> +CommonCpuIo2Initialize (
> +  VOID
> +  );
> +
>  #endif
> diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf b/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
> index b743a5e0e316..8c5d0542e3da 100644
> --- a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
> +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
> @@ -14,7 +14,7 @@ [Defines]
>    MODULE_TYPE                    = DXE_SMM_DRIVER
>    VERSION_STRING                 = 1.0
>    PI_SPECIFICATION_VERSION       = 0x0001000A
> -  ENTRY_POINT                    = SmmCpuIo2Initialize
> +  ENTRY_POINT                    = TraditionalMmCpuIo2Initialize
>  
>  #
>  # The following information is for reference only and not required by the build tools.
> @@ -25,6 +25,7 @@ [Defines]
>  [Sources]
>    CpuIo2Smm.c
>    CpuIo2Smm.h
> +  CpuIo2TraditionalMm.c
>  
>  [Packages]
>    MdePkg/MdePkg.dec
> diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf b/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf
> similarity index 60%
> copy from UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
> copy to UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf
> index b743a5e0e316..c9fd3068cec4 100644
> --- a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
> +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf
> @@ -2,19 +2,19 @@
>  #  Produces the SMM CPU I/O 2 Protocol by using the services of the I/O Library.
>  #
>  #  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> +#  Copyright (c) Microsoft Corporation.
>  #  SPDX-License-Identifier: BSD-2-Clause-Patent
>  #
>  ##
>  
>  [Defines]
>    INF_VERSION                    = 0x00010005
> -  BASE_NAME                      = CpuIo2Smm
> -  MODULE_UNI_FILE                = CpuIo2Smm.uni
> -  FILE_GUID                      = A47EE2D8-F60E-42fd-8E58-7BD65EE4C29B
> -  MODULE_TYPE                    = DXE_SMM_DRIVER
> +  BASE_NAME                      = CpuIo2StandaloneMm
> +  FILE_GUID                      = E3121A26-BB1C-4A18-8E23-2EA3F0412248
> +  MODULE_TYPE                    = MM_STANDALONE
>    VERSION_STRING                 = 1.0
> -  PI_SPECIFICATION_VERSION       = 0x0001000A
> -  ENTRY_POINT                    = SmmCpuIo2Initialize
> +  PI_SPECIFICATION_VERSION       = 0x00010032
> +  ENTRY_POINT                    = StandaloneMmCpuIo2Initialize
>  
>  #
>  # The following information is for reference only and not required by the build tools.
> @@ -25,12 +25,13 @@ [Defines]
>  [Sources]
>    CpuIo2Smm.c
>    CpuIo2Smm.h
> +  CpuIo2StandaloneMm.c
>  
>  [Packages]
>    MdePkg/MdePkg.dec
>  
>  [LibraryClasses]
> -  UefiDriverEntryPoint
> +  StandaloneMmDriverEntryPoint
>    BaseLib
>    DebugLib
>    IoLib
> @@ -42,6 +43,3 @@ [Protocols]
>  
>  [Depex]
>    TRUE
> -
> -[UserExtensions.TianoCore."ExtraFiles"]
> -  CpuIo2SmmExtra.uni

I'm unsure whether this section in the new INF file should be re-created
instead, with a customized UNI file. I think it may only matter for UPT
(the packaging tool); I'll let the other reviewers comment on that.

The patch looks OK to me.

Reviewed-by: Laszlo Ersek <lersek at redhat.com>

Thanks
Laszlo

> diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc
> index 9b56bcaabebe..4e46c600788f 100644
> --- a/UefiCpuPkg/UefiCpuPkg.dsc
> +++ b/UefiCpuPkg/UefiCpuPkg.dsc
> @@ -38,6 +38,7 @@ [LibraryClasses]
>    UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
>    UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
>    UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
> +  StandaloneMmDriverEntryPoint|MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf
>    DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
>    PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf
>    PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
> @@ -94,6 +95,9 @@ [LibraryClasses.common.DXE_SMM_DRIVER]
>    HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
>    CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuExceptionHandlerLib.inf
>  
> +[LibraryClasses.common.MM_STANDALONE]
> +  MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf
> +
>  [LibraryClasses.common.UEFI_APPLICATION]
>    UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
>    MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
> @@ -122,6 +126,7 @@ [Components.IA32, Components.X64]
>        NULL|UefiCpuPkg/Library/CpuCommonFeaturesLib/CpuCommonFeaturesLib.inf
>    }
>    UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
> +  UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf
>    UefiCpuPkg/CpuMpPei/CpuMpPei.inf
>    UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
>    UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib.inf
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#70373): https://edk2.groups.io/g/devel/message/70373
Mute This Topic: https://groups.io/mt/79688598/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