public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Laszlo Ersek" <lersek@redhat.com>
To: Kun Qin <kun.q@outlook.com>, devel@edk2.groups.io
Cc: 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>,
	"Leif Lindholm (Nuvia address)" <leif@nuviainc.com>,
	"Ard Biesheuvel (ARM address)" <ard.biesheuvel@arm.com>
Subject: Re: [PATCH v2 15/16] UefiCpuPkg: CpuIo2Smm: Support of CpuIo driver under StandaloneMm
Date: Wed, 6 Jan 2021 16:51:36 +0100	[thread overview]
Message-ID: <93505c34-3161-26eb-5feb-f916988f5f1b@redhat.com> (raw)
In-Reply-To: <1009ae23-a2ea-cac2-2df6-db9b76c4ef15@redhat.com>

On 01/06/21 16:46, 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.

You messed up the threading between the blurb

  [edk2-devel] [PATCH v2 00/16]
  Extends Support of MM_STANDALONE Type Modules to X64

and this patch, and so I missed that the context was strictly X64.

Therefore, please ignore point (4) above.

In turn, I feel this only strengthens my point (3). If Ray or Eric can
review these renames (as a separate patch!), then I guess I'm OK with
them; otherwise I'd just drop them.

Laszlo

> 
> 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
>>
> 


  reply	other threads:[~2021-01-06 15:51 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 [this message]
2021-01-06 19:02       ` [edk2-devel] " Kun Qin
2021-01-06 19:07         ` Laszlo Ersek
2021-01-07 19:05     ` Leif Lindholm
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=93505c34-3161-26eb-5feb-f916988f5f1b@redhat.com \
    --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