From: "Leif Lindholm" <leif@nuviainc.com>
To: Laszlo Ersek <lersek@redhat.com>
Cc: Kun Qin <kun.q@outlook.com>,
devel@edk2.groups.io, Eric Dong <eric.dong@intel.com>,
Ray Ni <ray.ni@intel.com>, Rahul Kumar <rahul1.kumar@intel.com>,
Michael Kinney <michael.d.kinney@intel.com>,
"Ard Biesheuvel (ARM address)" <ard.biesheuvel@arm.com>
Subject: Re: [PATCH v2 15/16] UefiCpuPkg: CpuIo2Smm: Support of CpuIo driver under StandaloneMm
Date: Thu, 7 Jan 2021 19:05:43 +0000 [thread overview]
Message-ID: <20210107190543.GH1664@vanye> (raw)
In-Reply-To: <1009ae23-a2ea-cac2-2df6-db9b76c4ef15@redhat.com>
On Wed, Jan 06, 2021 at 16:46:57 +0100, Laszlo Ersek wrote:
> On 01/05/21 19:59, Kun Qin wrote:
> > This change added support of CpuIo driver under StandaloneMm. The core
> > services switched to gMmst based instead of gMmst. It also abstracts
>
> (1) typo: "gMmst based instead of gMmst" -- that's the same thing
>
> (2) renames like this should not be mixed with logic changes /
> refactorings, so this would be two patches minimally
>
> (3) in fact I disagree with renaming gSmst to gMmst (and the resultant
> fallout). I see very little value in this, it only complicates the git
> history, takes up reviewer resources, and risks regressions. Unless
> absolutely necessary for getting the driver build in the new context, I
> would strongly advise against the rename. If the rename is unavoidable,
> then see (2) please -- do it in a separate patch.
>
> (4) If I understand correctly, this is the first time when UefiCpuPkg
> content is consumed in AARCH64 platforms. I wonder if that means that
> the CpuIo2Smm should no longer exist under UefiCpuPkg at all. UefiCpuPkg
> has been traditionally IA32/X64 only, and while the *name* of the
> package certainly does not require or imply that, over time those two
> things *have* become synonymous. For example, the SMM Core lives under
> MdeModulePkg; I wonder if the same should happen to CpuIo2Smm as well.
> Adding Ard, Leif and Mike.
I don't really have an opinion of CpuIo2Smm (but I guess it makes
sense to move it if the SMM core lives in MdeModulePkg).
I do think most of ArmPkg ultimately belongs under UefiCpuPkg, with
the rest under MdeModulePkg.
Best Regards,
Leif
> Thanks
> Laszlo
>
> > standalone and traditional MM driver entrypoints into separate files to
> > allow maximal common implementations.
> >
> > Cc: Eric Dong <eric.dong@intel.com>
> > Cc: Ray Ni <ray.ni@intel.com>
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Cc: Rahul Kumar <rahul1.kumar@intel.com>
> >
> > Signed-off-by: Kun Qin <kun.q@outlook.com>
> > ---
> >
> > Notes:
> > v2:
> > - Removed "EFIAPI" for internal functions.
> >
> > UefiCpuPkg/CpuIo2Smm/{CpuIo2Smm.c => CpuIo2Common.c} | 15 +-
> > UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c | 384 +-------------------
> > UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.c | 31 ++
> > UefiCpuPkg/CpuIo2Smm/{CpuIo2Smm.h => CpuIo2Common.h} | 17 +-
> > UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf | 7 +-
> > UefiCpuPkg/CpuIo2Smm/{CpuIo2Smm.inf => CpuIo2StandaloneMm.inf} | 23 +-
> > UefiCpuPkg/UefiCpuPkg.dsc | 6 +
> > 7 files changed, 75 insertions(+), 408 deletions(-)
> >
> > diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c b/UefiCpuPkg/CpuIo2Smm/CpuIo2Common.c
> > similarity index 94%
> > copy from UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c
> > copy to UefiCpuPkg/CpuIo2Smm/CpuIo2Common.c
> > index b840d3e10cae..fef434795908 100644
> > --- a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c
> > +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2Common.c
> > @@ -6,7 +6,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > **/
> >
> > -#include "CpuIo2Smm.h"
> > +#include "CpuIo2Common.h"
> >
> > //
> > // Handle for the SMM CPU I/O Protocol
> > @@ -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;
> > @@ -390,12 +385,12 @@ SmmCpuIo2Initialize (
> > //
> > // Copy the SMM CPU I/O Protocol instance into the System Management System Table
> > //
> > - CopyMem (&gSmst->SmmIo, &mSmmCpuIo2, sizeof (mSmmCpuIo2));
> > + CopyMem (&gMmst->MmIo, &mSmmCpuIo2, sizeof (mSmmCpuIo2));
> >
> > //
> > // Install the SMM CPU I/O Protocol into the SMM protocol database
> > //
> > - Status = gSmst->SmmInstallProtocolInterface (
> > + Status = gMmst->MmInstallProtocolInterface (
> > &mHandle,
> > &gEfiSmmCpuIo2ProtocolGuid,
> > EFI_NATIVE_INTERFACE,
> > diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c b/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c
> > index b840d3e10cae..062d1a47a09f 100644
> > --- a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c
> > +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.c
> > @@ -6,367 +6,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > **/
> >
> > -#include "CpuIo2Smm.h"
> > +#include <PiSmm.h>
> >
> > -//
> > -// Handle for the SMM CPU I/O Protocol
> > -//
> > -EFI_HANDLE mHandle = NULL;
> > -
> > -//
> > -// SMM CPU I/O Protocol instance
> > -//
> > -EFI_SMM_CPU_IO2_PROTOCOL mSmmCpuIo2 = {
> > - {
> > - CpuMemoryServiceRead,
> > - CpuMemoryServiceWrite
> > - },
> > - {
> > - CpuIoServiceRead,
> > - CpuIoServiceWrite
> > - }
> > -};
> > -
> > -//
> > -// Lookup table for increment values based on transfer widths
> > -//
> > -UINT8 mStride[] = {
> > - 1, // SMM_IO_UINT8
> > - 2, // SMM_IO_UINT16
> > - 4, // SMM_IO_UINT32
> > - 8 // SMM_IO_UINT64
> > -};
> > -
> > -/**
> > - Check parameters to a SMM CPU I/O Protocol service request.
> > -
> > - @param[in] MmioOperation TRUE for an MMIO operation, FALSE for I/O Port operation.
> > - @param[in] Width Signifies the width of the I/O operations.
> > - @param[in] Address The base address of the I/O operations. The caller is
> > - responsible for aligning the Address if required.
> > - @param[in] Count The number of I/O operations to perform.
> > - @param[in] Buffer For read operations, the destination buffer to store
> > - the results. For write operations, the source buffer
> > - from which to write data.
> > -
> > - @retval EFI_SUCCESS The data was read from or written to the device.
> > - @retval EFI_UNSUPPORTED The Address is not valid for this system.
> > - @retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
> > -
> > -**/
> > -EFI_STATUS
> > -CpuIoCheckParameter (
> > - IN BOOLEAN MmioOperation,
> > - IN EFI_SMM_IO_WIDTH Width,
> > - IN UINT64 Address,
> > - IN UINTN Count,
> > - IN VOID *Buffer
> > - )
> > -{
> > - UINT64 MaxCount;
> > - UINT64 Limit;
> > -
> > - //
> > - // Check to see if Buffer is NULL
> > - //
> > - if (Buffer == NULL) {
> > - return EFI_INVALID_PARAMETER;
> > - }
> > -
> > - //
> > - // Check to see if Width is in the valid range
> > - //
> > - if ((UINT32)Width > SMM_IO_UINT64) {
> > - return EFI_INVALID_PARAMETER;
> > - }
> > -
> > - //
> > - // Check to see if Width is in the valid range for I/O Port operations
> > - //
> > - if (!MmioOperation && (Width == SMM_IO_UINT64)) {
> > - return EFI_INVALID_PARAMETER;
> > - }
> > -
> > - //
> > - // Check to see if any address associated with this transfer exceeds the maximum
> > - // allowed address. The maximum address implied by the parameters passed in is
> > - // Address + Size * Count. If the following condition is met, then the transfer
> > - // is not supported.
> > - //
> > - // Address + Size * Count > (MmioOperation ? MAX_ADDRESS : MAX_IO_PORT_ADDRESS) + 1
> > - //
> > - // Since MAX_ADDRESS can be the maximum integer value supported by the CPU and Count
> > - // can also be the maximum integer value supported by the CPU, this range
> > - // check must be adjusted to avoid all overflow conditions.
> > - //
> > - // The following form of the range check is equivalent but assumes that
> > - // MAX_ADDRESS and MAX_IO_PORT_ADDRESS are of the form (2^n - 1).
> > - //
> > - Limit = (MmioOperation ? MAX_ADDRESS : MAX_IO_PORT_ADDRESS);
> > - if (Count == 0) {
> > - if (Address > Limit) {
> > - return EFI_UNSUPPORTED;
> > - }
> > - } else {
> > - MaxCount = RShiftU64 (Limit, Width);
> > - if (MaxCount < (Count - 1)) {
> > - return EFI_UNSUPPORTED;
> > - }
> > - if (Address > LShiftU64 (MaxCount - Count + 1, Width)) {
> > - return EFI_UNSUPPORTED;
> > - }
> > - }
> > -
> > - //
> > - // Check to see if Address is aligned
> > - //
> > - if ((Address & ((UINT64)mStride[Width] - 1)) != 0) {
> > - return EFI_UNSUPPORTED;
> > - }
> > -
> > - return EFI_SUCCESS;
> > -}
> > -
> > -/**
> > - Reads memory-mapped registers.
> > -
> > - The I/O operations are carried out exactly as requested. The caller is
> > - responsible for any alignment and I/O width issues that the bus, device,
> > - platform, or type of I/O might require.
> > -
> > - @param[in] This The EFI_SMM_CPU_IO2_PROTOCOL instance.
> > - @param[in] Width Signifies the width of the I/O operations.
> > - @param[in] Address The base address of the I/O operations. The caller is
> > - responsible for aligning the Address if required.
> > - @param[in] Count The number of I/O operations to perform.
> > - @param[out] Buffer For read operations, the destination buffer to store
> > - the results. For write operations, the source buffer
> > - from which to write data.
> > -
> > - @retval EFI_SUCCESS The data was read from or written to the device.
> > - @retval EFI_UNSUPPORTED The Address is not valid for this system.
> > - @retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
> > - @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
> > - lack of resources
> > -
> > -**/
> > -EFI_STATUS
> > -EFIAPI
> > -CpuMemoryServiceRead (
> > - IN CONST EFI_SMM_CPU_IO2_PROTOCOL *This,
> > - IN EFI_SMM_IO_WIDTH Width,
> > - IN UINT64 Address,
> > - IN UINTN Count,
> > - OUT VOID *Buffer
> > - )
> > -{
> > - EFI_STATUS Status;
> > - UINT8 Stride;
> > - UINT8 *Uint8Buffer;
> > -
> > - Status = CpuIoCheckParameter (TRUE, Width, Address, Count, Buffer);
> > - if (EFI_ERROR (Status)) {
> > - return Status;
> > - }
> > -
> > - //
> > - // Select loop based on the width of the transfer
> > - //
> > - Stride = mStride[Width];
> > - for (Uint8Buffer = Buffer; Count > 0; Address += Stride, Uint8Buffer += Stride, Count--) {
> > - if (Width == SMM_IO_UINT8) {
> > - *Uint8Buffer = MmioRead8 ((UINTN)Address);
> > - } else if (Width == SMM_IO_UINT16) {
> > - *((UINT16 *)Uint8Buffer) = MmioRead16 ((UINTN)Address);
> > - } else if (Width == SMM_IO_UINT32) {
> > - *((UINT32 *)Uint8Buffer) = MmioRead32 ((UINTN)Address);
> > - } else if (Width == SMM_IO_UINT64) {
> > - *((UINT64 *)Uint8Buffer) = MmioRead64 ((UINTN)Address);
> > - }
> > - }
> > - return EFI_SUCCESS;
> > -}
> > -
> > -/**
> > - Writes memory-mapped registers.
> > -
> > - The I/O operations are carried out exactly as requested. The caller is
> > - responsible for any alignment and I/O width issues that the bus, device,
> > - platform, or type of I/O might require.
> > -
> > - @param[in] This The EFI_SMM_CPU_IO2_PROTOCOL instance.
> > - @param[in] Width Signifies the width of the I/O operations.
> > - @param[in] Address The base address of the I/O operations. The caller is
> > - responsible for aligning the Address if required.
> > - @param[in] Count The number of I/O operations to perform.
> > - @param[in] Buffer For read operations, the destination buffer to store
> > - the results. For write operations, the source buffer
> > - from which to write data.
> > -
> > - @retval EFI_SUCCESS The data was read from or written to the device.
> > - @retval EFI_UNSUPPORTED The Address is not valid for this system.
> > - @retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
> > - @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
> > - lack of resources
> > -
> > -**/
> > -EFI_STATUS
> > -EFIAPI
> > -CpuMemoryServiceWrite (
> > - IN CONST EFI_SMM_CPU_IO2_PROTOCOL *This,
> > - IN EFI_SMM_IO_WIDTH Width,
> > - IN UINT64 Address,
> > - IN UINTN Count,
> > - IN VOID *Buffer
> > - )
> > -{
> > - EFI_STATUS Status;
> > - UINT8 Stride;
> > - UINT8 *Uint8Buffer;
> > -
> > - Status = CpuIoCheckParameter (TRUE, Width, Address, Count, Buffer);
> > - if (EFI_ERROR (Status)) {
> > - return Status;
> > - }
> > -
> > - //
> > - // Select loop based on the width of the transfer
> > - //
> > - Stride = mStride[Width];
> > - for (Uint8Buffer = Buffer; Count > 0; Address += Stride, Uint8Buffer += Stride, Count--) {
> > - if (Width == SMM_IO_UINT8) {
> > - MmioWrite8 ((UINTN)Address, *Uint8Buffer);
> > - } else if (Width == SMM_IO_UINT16) {
> > - MmioWrite16 ((UINTN)Address, *((UINT16 *)Uint8Buffer));
> > - } else if (Width == SMM_IO_UINT32) {
> > - MmioWrite32 ((UINTN)Address, *((UINT32 *)Uint8Buffer));
> > - } else if (Width == SMM_IO_UINT64) {
> > - MmioWrite64 ((UINTN)Address, *((UINT64 *)Uint8Buffer));
> > - }
> > - }
> > - return EFI_SUCCESS;
> > -}
> > -
> > -/**
> > - Reads I/O registers.
> > -
> > - The I/O operations are carried out exactly as requested. The caller is
> > - responsible for any alignment and I/O width issues that the bus, device,
> > - platform, or type of I/O might require.
> > -
> > - @param[in] This The EFI_SMM_CPU_IO2_PROTOCOL instance.
> > - @param[in] Width Signifies the width of the I/O operations.
> > - @param[in] Address The base address of the I/O operations. The caller is
> > - responsible for aligning the Address if required.
> > - @param[in] Count The number of I/O operations to perform.
> > - @param[out] Buffer For read operations, the destination buffer to store
> > - the results. For write operations, the source buffer
> > - from which to write data.
> > -
> > - @retval EFI_SUCCESS The data was read from or written to the device.
> > - @retval EFI_UNSUPPORTED The Address is not valid for this system.
> > - @retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
> > - @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
> > - lack of resources
> > -
> > -**/
> > -EFI_STATUS
> > -EFIAPI
> > -CpuIoServiceRead (
> > - IN CONST EFI_SMM_CPU_IO2_PROTOCOL *This,
> > - IN EFI_SMM_IO_WIDTH Width,
> > - IN UINT64 Address,
> > - IN UINTN Count,
> > - OUT VOID *Buffer
> > - )
> > -{
> > - EFI_STATUS Status;
> > - UINT8 Stride;
> > - UINT8 *Uint8Buffer;
> > -
> > - Status = CpuIoCheckParameter (FALSE, Width, Address, Count, Buffer);
> > - if (EFI_ERROR (Status)) {
> > - return Status;
> > - }
> > -
> > - //
> > - // Select loop based on the width of the transfer
> > - //
> > - Stride = mStride[Width];
> > - for (Uint8Buffer = Buffer; Count > 0; Address += Stride, Uint8Buffer += Stride, Count--) {
> > - if (Width == SMM_IO_UINT8) {
> > - *Uint8Buffer = IoRead8 ((UINTN)Address);
> > - } else if (Width == SMM_IO_UINT16) {
> > - *((UINT16 *)Uint8Buffer) = IoRead16 ((UINTN)Address);
> > - } else if (Width == SMM_IO_UINT32) {
> > - *((UINT32 *)Uint8Buffer) = IoRead32 ((UINTN)Address);
> > - }
> > - }
> > -
> > - return EFI_SUCCESS;
> > -}
> > -
> > -/**
> > - Write I/O registers.
> > -
> > - The I/O operations are carried out exactly as requested. The caller is
> > - responsible for any alignment and I/O width issues that the bus, device,
> > - platform, or type of I/O might require.
> > -
> > - @param[in] This The EFI_SMM_CPU_IO2_PROTOCOL instance.
> > - @param[in] Width Signifies the width of the I/O operations.
> > - @param[in] Address The base address of the I/O operations. The caller is
> > - responsible for aligning the Address if required.
> > - @param[in] Count The number of I/O operations to perform.
> > - @param[in] Buffer For read operations, the destination buffer to store
> > - the results. For write operations, the source buffer
> > - from which to write data.
> > -
> > - @retval EFI_SUCCESS The data was read from or written to the device.
> > - @retval EFI_UNSUPPORTED The Address is not valid for this system.
> > - @retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
> > - @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
> > - lack of resources
> > -
> > -**/
> > -EFI_STATUS
> > -EFIAPI
> > -CpuIoServiceWrite (
> > - IN CONST EFI_SMM_CPU_IO2_PROTOCOL *This,
> > - IN EFI_SMM_IO_WIDTH Width,
> > - IN UINT64 Address,
> > - IN UINTN Count,
> > - IN VOID *Buffer
> > - )
> > -{
> > - EFI_STATUS Status;
> > - UINT8 Stride;
> > - UINT8 *Uint8Buffer;
> > -
> > - //
> > - // Make sure the parameters are valid
> > - //
> > - Status = CpuIoCheckParameter (FALSE, Width, Address, Count, Buffer);
> > - if (EFI_ERROR (Status)) {
> > - return Status;
> > - }
> > -
> > - //
> > - // Select loop based on the width of the transfer
> > - //
> > - Stride = mStride[Width];
> > - for (Uint8Buffer = (UINT8 *)Buffer; Count > 0; Address += Stride, Uint8Buffer += Stride, Count--) {
> > - if (Width == SMM_IO_UINT8) {
> > - IoWrite8 ((UINTN)Address, *Uint8Buffer);
> > - } else if (Width == SMM_IO_UINT16) {
> > - IoWrite16 ((UINTN)Address, *((UINT16 *)Uint8Buffer));
> > - } else if (Width == SMM_IO_UINT32) {
> > - IoWrite32 ((UINTN)Address, *((UINT32 *)Uint8Buffer));
> > - }
> > - }
> > -
> > - return EFI_SUCCESS;
> > -}
> > +#include "CpuIo2Common.h"
> >
> > /**
> > The module Entry Point SmmCpuIoProtocol driver
> > @@ -380,28 +22,10 @@ CpuIoServiceWrite (
> > **/
> > EFI_STATUS
> > EFIAPI
> > -SmmCpuIo2Initialize (
> > +TraditionalMmCpuIo2Initialize (
> > IN EFI_HANDLE ImageHandle,
> > IN EFI_SYSTEM_TABLE *SystemTable
> > )
> > {
> > - EFI_STATUS Status;
> > -
> > - //
> > - // Copy the SMM CPU I/O Protocol instance into the System Management System Table
> > - //
> > - CopyMem (&gSmst->SmmIo, &mSmmCpuIo2, sizeof (mSmmCpuIo2));
> > -
> > - //
> > - // Install the SMM CPU I/O Protocol into the SMM protocol database
> > - //
> > - Status = gSmst->SmmInstallProtocolInterface (
> > - &mHandle,
> > - &gEfiSmmCpuIo2ProtocolGuid,
> > - EFI_NATIVE_INTERFACE,
> > - &mSmmCpuIo2
> > - );
> > - ASSERT_EFI_ERROR (Status);
> > -
> > - return Status;
> > + return CommonCpuIo2Initialize ();
> > }
> > diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.c b/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.c
> > new file mode 100644
> > index 000000000000..2978f82eb815
> > --- /dev/null
> > +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.c
> > @@ -0,0 +1,31 @@
> > +/** @file
> > + Produces the SMM CPU I/O Protocol.
> > +
> > +Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> > +SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#include <PiMm.h>
> > +
> > +#include "CpuIo2Common.h"
> > +
> > +/**
> > + 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
> > +StandaloneMmCpuIo2Initialize (
> > + IN EFI_HANDLE ImageHandle,
> > + IN EFI_MM_SYSTEM_TABLE *SystemTable
> > + )
> > +{
> > + return CommonCpuIo2Initialize ();
> > +}
> > diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.h b/UefiCpuPkg/CpuIo2Smm/CpuIo2Common.h
> > similarity index 92%
> > rename from UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.h
> > rename to UefiCpuPkg/CpuIo2Smm/CpuIo2Common.h
> > index 4c133b58c9f4..6759cc1c8777 100644
> > --- a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.h
> > +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2Common.h
> > @@ -9,14 +9,14 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> > #ifndef _CPU_IO2_SMM_H_
> > #define _CPU_IO2_SMM_H_
> >
> > -#include <PiSmm.h>
> > +#include <PiMm.h>
> >
> > #include <Protocol/SmmCpuIo2.h>
> >
> > #include <Library/BaseLib.h>
> > #include <Library/DebugLib.h>
> > #include <Library/IoLib.h>
> > -#include <Library/SmmServicesTableLib.h>
> > +#include <Library/MmServicesTableLib.h>
> > #include <Library/BaseMemoryLib.h>
> >
> > #define MAX_IO_PORT_ADDRESS 0xFFFF
> > @@ -153,4 +153,17 @@ 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 bc78fa4e42d2..031db1d100b9 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.
> > @@ -24,7 +24,8 @@ [Defines]
> >
> > [Sources]
> > CpuIo2Smm.c
> > - CpuIo2Smm.h
> > + CpuIo2Common.c
> > + CpuIo2Common.h
> >
> > [Packages]
> > MdePkg/MdePkg.dec
> > @@ -34,7 +35,7 @@ [LibraryClasses]
> > BaseLib
> > DebugLib
> > IoLib
> > - SmmServicesTableLib
> > + MmServicesTableLib
> > BaseMemoryLib
> >
> > [Protocols]
> > diff --git a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf b/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf
> > similarity index 56%
> > copy from UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
> > copy to UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf
> > index bc78fa4e42d2..cce7742bee7a 100644
> > --- a/UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
> > +++ b/UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf
> > @@ -8,13 +8,12 @@
> >
> > [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.
> > @@ -23,18 +22,19 @@ [Defines]
> > #
> >
> > [Sources]
> > - CpuIo2Smm.c
> > - CpuIo2Smm.h
> > + CpuIo2StandaloneMm.c
> > + CpuIo2Common.c
> > + CpuIo2Common.h
> >
> > [Packages]
> > MdePkg/MdePkg.dec
> >
> > [LibraryClasses]
> > - UefiDriverEntryPoint
> > + StandaloneMmDriverEntryPoint
> > BaseLib
> > DebugLib
> > IoLib
> > - SmmServicesTableLib
> > + MmServicesTableLib
> > BaseMemoryLib
> >
> > [Protocols]
> > @@ -42,6 +42,3 @@ [Protocols]
> >
> > [Depex]
> > TRUE
> > -
> > -[UserExtensions.TianoCore."ExtraFiles"]
> > - CpuIo2SmmExtra.uni
> > diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc
> > index b2b6d78a71b0..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
> > @@ -89,10 +90,14 @@ [LibraryClasses.common.DXE_DRIVER]
> >
> > [LibraryClasses.common.DXE_SMM_DRIVER]
> > SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.inf
> > + MmServicesTableLib|MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf
> > MemoryAllocationLib|MdePkg/Library/SmmMemoryAllocationLib/SmmMemoryAllocationLib.inf
> > 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
> > @@ -121,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
> >
>
next prev parent reply other threads:[~2021-01-07 19:05 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20210105185935.3769-1-kun.q@outlook.com>
2021-01-05 18:59 ` [PATCH v2 01/16] StandaloneMmPkg: StandaloneMmCoreEntryPoint: Extends support for X64 Kun Qin
2021-01-05 18:59 ` [PATCH v2 02/16] StandaloneMmPkg: StandaloneMmCoreHobLib: Extend support for x64 Mm Core Kun Qin
2021-01-05 18:59 ` [PATCH v2 03/16] StandaloneMmPkg: StandaloneMmCoreMemoryAllocationLib: Fix compiler warning Kun Qin
2021-01-06 3:33 ` Yao, Jiewen
2021-01-05 18:59 ` [PATCH v2 04/16] StandaloneMmPkg: StandaloneMmMemLib: Extends support for X64 architecture Kun Qin
2021-01-06 3:38 ` Yao, Jiewen
2021-01-06 6:37 ` [edk2-devel] " Kun Qin
2021-01-05 18:59 ` [PATCH v2 05/16] MdeModulePkg: SmmLockBoxSmmLib: Support StandaloneMm for SmmLockBoxLib Kun Qin
2021-01-05 18:59 ` [PATCH v2 06/16] MdeModulePkg: SmmReportStatusCodeLib: ReportStatusCodeLib in StandaloneMm Kun Qin
2021-01-06 3:24 ` [edk2-devel] " Wu, Hao A
2021-01-05 18:59 ` [PATCH v2 07/16] MdeModulePkg: StatusCodeHandler: StatusCodeHandler driver " Kun Qin
2021-01-06 3:24 ` Wu, Hao A
2021-01-05 18:59 ` [PATCH v2 08/16] MdeModulePkg: FirmwarePerformanceDataTable: Added StandaloneMm support Kun Qin
2021-01-06 3:24 ` Wu, Hao A
2021-01-05 18:59 ` [PATCH v2 09/16] MdeModulePkg: ReportStatusCodeRouter: Support StandaloneMm RSC Router Kun Qin
2021-01-06 3:24 ` Wu, Hao A
2021-01-05 18:59 ` [PATCH v2 10/16] MdePkg: UefiDevicePathLib: Support UefiDevicePathLib under StandaloneMm Kun Qin
2021-01-05 18:59 ` [PATCH v2 11/16] PcAtChipsetPkg: AcpiTimerLib: Added StandaloneMm instance of AcpiTimerLib Kun Qin
2021-01-13 6:50 ` [edk2-devel] " Ni, Ray
2021-01-13 18:38 ` Kun Qin
2021-01-05 18:59 ` [PATCH v2 12/16] SecurityPkg: Tcg2PhysicalPresenceLib: Introduce StandaloneMm instance Kun Qin
2021-01-05 18:59 ` [PATCH v2 13/16] SecurityPkg: Tcg2PpVendorLibNull: Added support for MM_STANDALONE type Kun Qin
2021-01-05 18:59 ` [PATCH v2 14/16] SecurityPkg: Tpm2DeviceLibDTpm: Introduce StandaloneMm instance Kun Qin
2021-01-05 18:59 ` [PATCH v2 15/16] UefiCpuPkg: CpuIo2Smm: Support of CpuIo driver under StandaloneMm Kun Qin
2021-01-06 15:46 ` Laszlo Ersek
2021-01-06 15:51 ` Laszlo Ersek
2021-01-06 19:02 ` [edk2-devel] " Kun Qin
2021-01-06 19:07 ` Laszlo Ersek
2021-01-07 19:05 ` Leif Lindholm [this message]
2021-01-05 18:59 ` [PATCH v2 16/16] UefiCpuPkg: SmmCpuExceptionHandlerLib: Added StandaloneMm module support Kun Qin
2021-01-06 15:48 ` Laszlo Ersek
[not found] ` <16576B257D31F1E6.24224@groups.io>
2021-01-12 3:24 ` [edk2-devel] [PATCH v2 11/16] PcAtChipsetPkg: AcpiTimerLib: Added StandaloneMm instance of AcpiTimerLib Kun Qin
[not found] ` <16576B256B69BE5C.24224@groups.io>
2021-01-12 3:26 ` [edk2-devel] [PATCH v2 10/16] MdePkg: UefiDevicePathLib: Support UefiDevicePathLib under StandaloneMm Kun Qin
2021-01-13 1:14 ` 回复: " gaoliming
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210107190543.GH1664@vanye \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox