Re: [edk2-devel] [PATCH v1 1/5] UefiCpuPkg/SmmCpuFeaturesLib: Restructure arch-dependent code

2022-12-07 Thread Chang, Abner via groups.io
[AMD Official Use Only - General]

Reviewed-by: Abner Chang 

> -Original Message-
> From: Abdul Lateef Attar 
> Sent: Tuesday, December 6, 2022 9:23 PM
> To: devel@edk2.groups.io
> Cc: Attar, AbdulLateef (Abdul Lateef) ; Chang,
> Abner ; Kirkendall, Garrett
> ; Grimes, Paul ; Eric
> Dong ; Ray Ni ; Rahul Kumar
> 
> Subject: [PATCH v1 1/5] UefiCpuPkg/SmmCpuFeaturesLib: Restructure arch-
> dependent code
> 
> From: Abdul Lateef Attar 
> 
> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4182
> 
> moves Intel-specific code to the arch-dependent file.
> Other processor families might have different implementation of these
> functions.
> Hence, moving out of the common file.
> 
> Cc: Abner Chang 
> Cc: Garrett Kirkendall 
> Cc: Paul Grimes 
> Cc: Eric Dong 
> Cc: Ray Ni 
> Cc: Rahul Kumar 
> Signed-off-by: Abdul Lateef Attar 
> ---
>  .../IntelSmmCpuFeaturesLib.c  | 140 ++
>  .../SmmCpuFeaturesLibCommon.c | 140 --
>  2 files changed, 140 insertions(+), 140 deletions(-)
> 
> diff --git
> a/UefiCpuPkg/Library/SmmCpuFeaturesLib/IntelSmmCpuFeaturesLib.c
> b/UefiCpuPkg/Library/SmmCpuFeaturesLib/IntelSmmCpuFeaturesLib.c
> index d5eaaa7a991e..994267f393b3 100644
> --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/IntelSmmCpuFeaturesLib.c
> +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/IntelSmmCpuFeaturesLib.c
> @@ -400,3 +400,143 @@ SmmCpuFeaturesSetSmmRegister (
>  AsmWriteMsr64 (SMM_FEATURES_LIB_SMM_FEATURE_CONTROL,
> Value);   } }++/**+  This function updates the SMRAM save state on the
> currently executing CPU+  to resume execution at a specific address after an
> RSM instruction.  This+  function must evaluate the SMRAM save state to
> determine the execution mode+  the RSM instruction resumes and update
> the resume execution address with+  either NewInstructionPointer32 or
> NewInstructionPoint.  The auto HALT restart+  flag in the SMRAM save state
> must always be cleared.  This function returns+  the value of the instruction
> pointer from the SMRAM save state that was+  replaced.  If this function
> returns 0, then the SMRAM save state was not+  modified.++  This function is
> called during the very first SMI on each CPU after+
> SmmCpuFeaturesInitializeProcessor() to set a flag in normal execution
> mode+  to signal that the SMBASE of each CPU has been updated before the
> default+  SMBASE address is used for the first SMI to the next CPU.++
> @param[in] CpuIndex The index of the CPU to hook.  The value+
> must be between 0 and the NumberOfCpus+  
> field in the
> System Management System Table+  (SMST).+ 
>  @param[in]
> CpuState Pointer to SMRAM Save State Map for the+
> currently executing CPU.+  @param[in] NewInstructionPointer32  Instruction
> pointer to use if resuming to+  32-bit 
> execution mode from
> 64-bit SMM.+  @param[in] NewInstructionPointerInstruction pointer to
> use if resuming to+  same execution mode 
> as SMM.++
> @retval 0This function did modify the SMRAM save state.+  @retval > 0
> The original instruction pointer value from the SMRAM save state+
> before it was
> replaced.+**/+UINT64+EFIAPI+SmmCpuFeaturesHookReturnFromSmm (+
> IN UINTN CpuIndex,+  IN SMRAM_SAVE_STATE_MAP  *CpuState,+
> IN UINT64NewInstructionPointer32,+  IN UINT64
> NewInstructionPointer+  )+{+  return 0;+}++/**+  Read an SMM Save State
> register on the target processor.  If this function+  returns
> EFI_UNSUPPORTED, then the caller is responsible for reading the+  SMM
> Save Sate register.++  @param[in]  CpuIndex  The index of the CPU to read
> the SMM Save State.  The+value must be between 0 and 
> the
> NumberOfCpus field in+the System Management System 
> Table
> (SMST).+  @param[in]  Register  The SMM Save State register to read.+
> @param[in]  Width The number of bytes to read from the CPU save state.+
> @param[out] BufferUpon return, this holds the CPU register value read+
> from the save state.++  @retval EFI_SUCCESS   The register was read
> from Save State.+  @retval EFI_INVALID_PARAMETER  Buffer is NULL.+
> @retval EFI_UNSUPPORTED   This function does not support reading
> Register.++**/+EFI_STATUS+EFIAPI+SmmCpuFeaturesReadSaveStateRegist
> er (+  IN  UINTNCpuIndex,+  IN
> EFI_SMM_SAVE_STATE_REGISTER  Register,+  IN  UINTN
> Width,+
> OUT VOID *Buffer+  )+{+  return 
> EFI_UNSUPPORTED;+}++/**+
> Writes an SMM Save State register on the target processor.  If this function+
> returns EFI_UNSUPPORTED, then the caller is responsible for writing the+
> SMM Save Sate register.++  @param[in] CpuIndex  The index of the CPU to
> write the SMM Save State.  The+   value must 

[edk2-devel] [PATCH v1 1/5] UefiCpuPkg/SmmCpuFeaturesLib: Restructure arch-dependent code

2022-12-06 Thread Abdul Lateef Attar via groups.io
From: Abdul Lateef Attar 

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4182

moves Intel-specific code to the arch-dependent file.
Other processor families might have different
implementation of these functions.
Hence, moving out of the common file.

Cc: Abner Chang 
Cc: Garrett Kirkendall 
Cc: Paul Grimes 
Cc: Eric Dong 
Cc: Ray Ni 
Cc: Rahul Kumar 
Signed-off-by: Abdul Lateef Attar 
---
 .../IntelSmmCpuFeaturesLib.c  | 140 ++
 .../SmmCpuFeaturesLibCommon.c | 140 --
 2 files changed, 140 insertions(+), 140 deletions(-)

diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/IntelSmmCpuFeaturesLib.c 
b/UefiCpuPkg/Library/SmmCpuFeaturesLib/IntelSmmCpuFeaturesLib.c
index d5eaaa7a991e..994267f393b3 100644
--- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/IntelSmmCpuFeaturesLib.c
+++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/IntelSmmCpuFeaturesLib.c
@@ -400,3 +400,143 @@ SmmCpuFeaturesSetSmmRegister (
 AsmWriteMsr64 (SMM_FEATURES_LIB_SMM_FEATURE_CONTROL, Value);

   }

 }

+

+/**

+  This function updates the SMRAM save state on the currently executing CPU

+  to resume execution at a specific address after an RSM instruction.  This

+  function must evaluate the SMRAM save state to determine the execution mode

+  the RSM instruction resumes and update the resume execution address with

+  either NewInstructionPointer32 or NewInstructionPoint.  The auto HALT restart

+  flag in the SMRAM save state must always be cleared.  This function returns

+  the value of the instruction pointer from the SMRAM save state that was

+  replaced.  If this function returns 0, then the SMRAM save state was not

+  modified.

+

+  This function is called during the very first SMI on each CPU after

+  SmmCpuFeaturesInitializeProcessor() to set a flag in normal execution mode

+  to signal that the SMBASE of each CPU has been updated before the default

+  SMBASE address is used for the first SMI to the next CPU.

+

+  @param[in] CpuIndex The index of the CPU to hook.  The value

+  must be between 0 and the NumberOfCpus

+  field in the System Management System 
Table

+  (SMST).

+  @param[in] CpuState Pointer to SMRAM Save State Map for the

+  currently executing CPU.

+  @param[in] NewInstructionPointer32  Instruction pointer to use if resuming to

+  32-bit execution mode from 64-bit SMM.

+  @param[in] NewInstructionPointerInstruction pointer to use if resuming to

+  same execution mode as SMM.

+

+  @retval 0This function did modify the SMRAM save state.

+  @retval > 0  The original instruction pointer value from the SMRAM save state

+   before it was replaced.

+**/

+UINT64

+EFIAPI

+SmmCpuFeaturesHookReturnFromSmm (

+  IN UINTN CpuIndex,

+  IN SMRAM_SAVE_STATE_MAP  *CpuState,

+  IN UINT64NewInstructionPointer32,

+  IN UINT64NewInstructionPointer

+  )

+{

+  return 0;

+}

+

+/**

+  Read an SMM Save State register on the target processor.  If this function

+  returns EFI_UNSUPPORTED, then the caller is responsible for reading the

+  SMM Save Sate register.

+

+  @param[in]  CpuIndex  The index of the CPU to read the SMM Save State.  The

+value must be between 0 and the NumberOfCpus field in

+the System Management System Table (SMST).

+  @param[in]  Register  The SMM Save State register to read.

+  @param[in]  Width The number of bytes to read from the CPU save state.

+  @param[out] BufferUpon return, this holds the CPU register value read

+from the save state.

+

+  @retval EFI_SUCCESS   The register was read from Save State.

+  @retval EFI_INVALID_PARAMETER  Buffer is NULL.

+  @retval EFI_UNSUPPORTED   This function does not support reading 
Register.

+

+**/

+EFI_STATUS

+EFIAPI

+SmmCpuFeaturesReadSaveStateRegister (

+  IN  UINTNCpuIndex,

+  IN  EFI_SMM_SAVE_STATE_REGISTER  Register,

+  IN  UINTNWidth,

+  OUT VOID *Buffer

+  )

+{

+  return EFI_UNSUPPORTED;

+}

+

+/**

+  Writes an SMM Save State register on the target processor.  If this function

+  returns EFI_UNSUPPORTED, then the caller is responsible for writing the

+  SMM Save Sate register.

+

+  @param[in] CpuIndex  The index of the CPU to write the SMM Save State.  The

+   value must be between 0 and the NumberOfCpus field in

+   the System Management System Table (SMST).

+  @param[in] Register  The SMM Save State register to write.

+  @param[in] Width The number of bytes to write to the CPU save state.

+  @param[in] BufferUpon entry