[edk2-devel] [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs

Chiu, Chasel chasel.chiu at intel.com
Thu Apr 30 02:56:50 UTC 2020


Reviewed-by: Chasel Chiu <chasel.chiu at intel.com>

> -----Original Message-----
> From: Shindo, Miki <miki.shindo at intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel at edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty at intel.com>; Chiu, Chasel
> <chasel.chiu at intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone at intel.com>; Agyeman, Prince
> <prince.agyeman at intel.com>; Ni, Ray <ray.ni at intel.com>
> Subject: [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib:
> Cleans up APIs
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
> 
> Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib() but the
> library itself runs it internally. This commit makes it an internal call.
> LocateAcpiTableByOemTableId() is unreferenced externally so this commit
> makes it an internal call.
> PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both
> unreferenced so they are removed.
> AslUpdateLib.h is cleaned up accordingly.
> 
> Signed-off-by: Miki Shindo <miki.shindo at intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty at intel.com>
> Cc: Chasel Chiu <chasel.chiu at intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone at intel.com>
> Cc: Prince Agyeman <prince.agyeman at intel.com>
> Cc: Ray Ni <ray.ni at intel.com>
> ---
> 
> Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdate
> Lib.c | 209
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++-----------------------------------
> -------------------------------------------------------------------
>  Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> | 131
> ++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
> -----------------------------------------------------------
>  2 files changed, 159 insertions(+), 181 deletions(-)
> 
> diff --git
> a/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpda
> teLib.c
> b/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpda
> teLib.c
> index e6ab43db6d..1ba51a7c55 100644
> ---
> a/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpda
> teLib.c
> +++ b/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslU
> +++ pdateLib.c
> @@ -6,7 +6,7 @@
> 
>    This library uses the ACPI Support protocol.
> 
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> @@ -50,6 +50,62 @@ InitializeAslUpdateLib (
>    return Status;
>  }
> 
> +/**
> +  This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> +
> +  @param[in] TableId           - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> +  @param[in] TableIdSize       - Length of the TableId to match.  Table
> ID are 8 bytes long, this function
> +                                 will consider it a match if the first
> TableIdSize bytes match
> +  @param[in, out] Table        - Updated with a pointer to the table
> +  @param[in, out] Handle       - AcpiSupport protocol table handle for
> the table found
> +
> +  @retval EFI_SUCCESS          - The function completed successfully.
> +  @retval EFI_NOT_FOUND        - Failed to locate AcpiTable.
> +  @retval EFI_NOT_READY        - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +LocateAcpiTableByOemTableId (
> +  IN      UINT8                         *TableId,
> +  IN      UINT8                         TableIdSize,
> +  IN OUT  EFI_ACPI_DESCRIPTION_HEADER   **Table,
> +  IN OUT  UINTN                         *Handle
> +  )
> +{
> +  EFI_STATUS                  Status;
> +  INTN                        Index;
> +  EFI_ACPI_TABLE_VERSION      Version;
> +  EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> +
> +  if (mAcpiSdt == NULL) {
> +    InitializeAslUpdateLib ();
> +    if (mAcpiSdt == NULL) {
> +      return EFI_NOT_READY;
> +    }
> +  }
> +  ///
> +  /// Locate table with matching ID
> +  ///
> +  Version = 0;
> +  Index = 0;
> +  do {
> +    Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> +    if (Status == EFI_NOT_FOUND) {
> +      break;
> +    }
> +    ASSERT_EFI_ERROR (Status);
> +    Index++;
> +  } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> +
> +  if (Status != EFI_NOT_FOUND) {
> +    *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> +    ASSERT (*Table);
> +  }
> +
> +  ///
> +  /// If we found the table, there will be no error.
> +  ///
> +  return Status;
> +}
> 
>  /**
>    This procedure will update immediate value assigned to a Name @@
> -59,8 +115,11 @@ InitializeAslUpdateLib (
>    @param[in] Length            - length of data to be overwritten
> 
>    @retval EFI_SUCCESS          - The function completed successfully.
> +  @retval EFI_NOT_FOUND        - Failed to locate AcpiTable.
> +  @retval EFI_NOT_READY        - Not ready to locate AcpiTable.
>  **/
>  EFI_STATUS
> +EFIAPI
>  UpdateNameAslCode (
>    IN     UINT32                        AslSignature,
>    IN     VOID                          *Buffer,
> @@ -149,6 +208,50 @@ UpdateNameAslCode (
>    return EFI_NOT_FOUND;
>  }
> 
> +/**
> +  This procedure will update the name of ASL Method
> +
> +  @param[in] TableId           - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> +  @param[in] TableIdSize       - Length of the TableId to match.  Table
> ID are 8 bytes long, this function
> +                                 will consider it a match if the first
> TableIdSize bytes match
> +  @param[in] AslSignature      - The signature of Operation Region that
> we want to update.
> +  @param[in] Buffer            - source of data to be written over
> original aml
> +  @param[in] Length            - length of data to be overwritten
> +
> +  @retval EFI_UNSUPPORTED      - The function is not supported in this
> library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateSsdtNameAslCode (
> +  IN     UINT8                         *TableId,
> +  IN     UINT8                         TableIdSize,
> +  IN     UINT32                        AslSignature,
> +  IN     VOID                          *Buffer,
> +  IN     UINTN                         Length
> +  )
> +{
> +  return EFI_UNSUPPORTED;
> +}
> +
> +/**
> +  This procedure will update the name of ASL Method
> +
> +  @param[in] AslSignature      - The signature of Operation Region that
> we want to update.
> +  @param[in] Buffer            - source of data to be written over
> original aml
> +  @param[in] Length            - length of data to be overwritten
> +
> +  @retval EFI_UNSUPPORTED      - The function is not supported in this
> library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateMethodAslCode (
> +  IN     UINT32                        AslSignature,
> +  IN     VOID                          *Buffer,
> +  IN     UINTN                         Length
> +  )
> +{
> +  return EFI_UNSUPPORTED;
> +}
> 
>  /**
>    This function uses the ACPI SDT protocol to locate an ACPI table.
> @@ -161,8 +264,11 @@ UpdateNameAslCode (
>    @param[in, out] Version        - The version of the table desired
> 
>    @retval EFI_SUCCESS            - The function completed
> successfully.
> +  @retval EFI_NOT_FOUND          - Failed to locate AcpiTable.
> +  @retval EFI_NOT_READY          - Not ready to locate AcpiTable.
>  **/
>  EFI_STATUS
> +EFIAPI
>  LocateAcpiTableBySignature (
>    IN      UINT32                        Signature,
>    IN OUT  EFI_ACPI_DESCRIPTION_HEADER   **Table,
> @@ -205,104 +311,3 @@ LocateAcpiTableBySignature (
>    ///
>    return Status;
>  }
> -
> -/**
> -  This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> -
> -  @param[in] TableId           - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> -  @param[in] TableIdSize       - Length of the TableId to match.  Table
> ID are 8 bytes long, this function
> -                                 will consider it a match if the first
> TableIdSize bytes match
> -  @param[in, out] Table        - Updated with a pointer to the table
> -  @param[in, out] Handle       - AcpiSupport protocol table handle for
> the table found
> -  @param[in, out] Version      - See AcpiSupport protocol, GetAcpiTable
> function for use
> -
> -  @retval EFI_SUCCESS          - The function completed successfully.
> -**/
> -EFI_STATUS
> -LocateAcpiTableByOemTableId (
> -  IN      UINT8                         *TableId,
> -  IN      UINT8                         TableIdSize,
> -  IN OUT  EFI_ACPI_DESCRIPTION_HEADER   **Table,
> -  IN OUT  UINTN                         *Handle
> -  )
> -{
> -  EFI_STATUS                  Status;
> -  INTN                        Index;
> -  EFI_ACPI_TABLE_VERSION      Version;
> -  EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> -
> -  if (mAcpiSdt == NULL) {
> -    InitializeAslUpdateLib ();
> -    if (mAcpiSdt == NULL) {
> -      return EFI_NOT_READY;
> -    }
> -  }
> -  ///
> -  /// Locate table with matching ID
> -  ///
> -  Version = 0;
> -  Index = 0;
> -  do {
> -    Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> -    if (Status == EFI_NOT_FOUND) {
> -      break;
> -    }
> -    ASSERT_EFI_ERROR (Status);
> -    Index++;
> -  } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> -
> -  if (Status != EFI_NOT_FOUND) {
> -    *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> -    ASSERT (*Table);
> -  }
> -
> -  ///
> -  /// If we found the table, there will be no error.
> -  ///
> -  return Status;
> -}
> -
> -/**
> -  This function calculates and updates an UINT8 checksum.
> -
> -  @param[in] Buffer          Pointer to buffer to checksum
> -  @param[in] Size            Number of bytes to checksum
> -  @param[in] ChecksumOffset  Offset to place the checksum result in
> -
> -  @retval EFI_SUCCESS        The function completed successfully.
> -**/
> -EFI_STATUS
> -AcpiChecksum (
> -  IN VOID       *Buffer,
> -  IN UINTN      Size,
> -  IN UINTN      ChecksumOffset
> -  )
> -{
> -  UINT8 Sum;
> -  UINT8 *Ptr;
> -
> -  Sum = 0;
> -  ///
> -  /// Initialize pointer
> -  ///
> -  Ptr = Buffer;
> -
> -  ///
> -  /// set checksum to 0 first
> -  ///
> -  Ptr[ChecksumOffset] = 0;
> -
> -  ///
> -  /// add all content of buffer
> -  ///
> -  while (Size--) {
> -    Sum = (UINT8) (Sum + (*Ptr++));
> -  }
> -  ///
> -  /// set checksum
> -  ///
> -  Ptr                 = Buffer;
> -  Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
> -
> -  return EFI_SUCCESS;
> -}
> diff --git a/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> b/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> index d58b6d6458..0be8df6469 100644
> --- a/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> +++ b/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> @@ -5,7 +5,7 @@
>    Make sure you meet the requirements for the library (protocol
> dependencies, use
>    restrictions, etc).
> 
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> @@ -16,61 +16,70 @@ SPDX-License-Identifier: BSD-2-Clause-Patent  //  //
> Include files  //
> +#include <Uefi/UefiBaseType.h>
>  #include <IndustryStandard/Acpi.h>
>  #include <Protocol/AcpiTable.h>
>  #include <Protocol/AcpiSystemDescriptionTable.h>
> 
> -//
> -// AML parsing definitions
> -//
> -#define AML_RESRC_TEMP_END_TAG  0x0079
> -
> -//
> -// ASL PSS package structure layout
> -//
> -#pragma pack (1)
> -typedef struct {
> -  UINT8     NameOp;           // 12h ;First opcode is a NameOp.
> -  UINT8     PackageLead;      // 20h ;First opcode is a NameOp.
> -  UINT8     NumEntries;       // 06h ;First opcode is a NameOp.
> -  UINT8     DwordPrefix1;     // 0Ch
> -  UINT32    CoreFrequency;    // 00h
> -  UINT8     DwordPrefix2;     // 0Ch
> -  UINT32    Power;            // 00h
> -  UINT8     DwordPrefix3;     // 0Ch
> -  UINT32    TransLatency;     // 00h
> -  UINT8     DwordPrefix4;     // 0Ch
> -  UINT32    BmLatency;        // 00h
> -  UINT8     DwordPrefix5;     // 0Ch
> -  UINT32    Control;          // 00h
> -  UINT8     DwordPrefix6;     // 0Ch
> -  UINT32    Status;           // 00h
> -} PSS_PACKAGE_LAYOUT;
> -#pragma pack()
> -
>  /**
> -  Initialize the ASL update library state.
> -  This must be called prior to invoking other library functions.
> +  This procedure will update immediate value assigned to a Name
> 
> +  @param[in] AslSignature               The signature of Operation
> Region that we want to update.
> +  @param[in] Buffer                     source of data to be written
> over original aml
> +  @param[in] Length                     length of data to be
> overwritten
> 
>    @retval EFI_SUCCESS                   The function completed
> successfully.
> +  @retval EFI_NOT_FOUND                 Failed to locate AcpiTable.
> +  @retval EFI_NOT_READY                 Not ready to locate
> AcpiTable.
> +  @retval EFI_UNSUPPORTED               The function is not
> supported in this library
>  **/
>  EFI_STATUS
> -InitializeAslUpdateLib (
> -  VOID
> +EFIAPI
> +UpdateNameAslCode(
> +  IN     UINT32                        AslSignature,
> +  IN     VOID                          *Buffer,
> +  IN     UINTN                         Length
>    );
> 
>  /**
> -  This procedure will update immediate value assigned to a Name
> +  This procedure will update the name of ASL Method
> +
> +  @param[in] TableId           - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> +  @param[in] TableIdSize       - Length of the TableId to match.  Table
> ID are 8 bytes long, this function
> +  @param[in] AslSignature      - The signature of Operation Region that
> we want to update.
> +  @param[in] Buffer            - source of data to be written over
> original aml
> +  @param[in] Length            - length of data to be overwritten
> +
> +  @retval EFI_SUCCESS          - The function completed successfully.
> +  @retval EFI_NOT_FOUND        - Failed to locate AcpiTable.
> +  @retval EFI_NOT_READY        - Not ready to locate AcpiTable.
> +  @retval EFI_UNSUPPORTED      - The function is not supported in this
> library
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateSsdtNameAslCode (
> +  IN     UINT8                         *TableId,
> +  IN     UINT8                         TableIdSize,
> +  IN     UINT32                        AslSignature,
> +  IN     VOID                          *Buffer,
> +  IN     UINTN                         Length
> +  );
> 
> -  @param[in] AslSignature               The signature of Operation
> Region that we want to update.
> -  @param[in] Buffer                     source of data to be written
> over original aml
> -  @param[in] Length                     length of data to be
> overwritten
> +/**
> +  This procedure will update the name of ASL Method
> 
> -  @retval EFI_SUCCESS                   The function completed
> successfully.
> +  @param[in] AslSignature      - The signature of Operation Region that
> we want to update.
> +  @param[in] Buffer            - source of data to be written over
> original aml
> +  @param[in] Length            - length of data to be overwritten
> +
> +  @retval EFI_SUCCESS          - The function completed successfully.
> +  @retval EFI_NOT_FOUND        - Failed to locate AcpiTable.
> +  @retval EFI_NOT_READY        - Not ready to locate AcpiTable.
> +  @retval EFI_UNSUPPORTED      - The function is not supported in this
> library
>  **/
>  EFI_STATUS
> -UpdateNameAslCode(
> +EFIAPI
> +UpdateMethodAslCode (
>    IN     UINT32                        AslSignature,
>    IN     VOID                          *Buffer,
>    IN     UINTN                         Length
> @@ -86,55 +95,19 @@ UpdateNameAslCode(
>    @param[in] Signature                  Pointer to an ASCII string
> containing the Signature to match
>    @param[in, out] Table                 Updated with a pointer to the
> table
>    @param[in, out] Handle                AcpiSupport protocol table
> handle for the table found
> -  @param[in, out] Version               On input, the version of the
> table desired,
> -                                        on output, the versions the
> table belongs to
>                                          @see AcpiSupport protocol
> for details
> 
>    @retval EFI_SUCCESS                   The function completed
> successfully.
> +  @retval EFI_NOT_FOUND                 Failed to locate AcpiTable.
> +  @retval EFI_NOT_READY                 Not ready to locate
> AcpiTable.
> +  @retval EFI_UNSUPPORTED               The function is not
> supported in this library
>  **/
>  EFI_STATUS
> +EFIAPI
>  LocateAcpiTableBySignature (
>    IN      UINT32                        Signature,
>    IN OUT  EFI_ACPI_DESCRIPTION_HEADER   **Table,
>    IN OUT  UINTN                         *Handle
>    );
> 
> -/**
> -  This function uses the ACPI support protocol to locate an ACPI SSDT table.
> -  The table is located by searching for a matching OEM Table ID field.
> -  Partial match searches are supported via the TableIdSize parameter.
> -
> -  @param[in] TableId                    Pointer to an ASCII string
> containing the OEM Table ID from the ACPI table header
> -  @param[in] TableIdSize                Length of the TableId to match.
> Table ID are 8 bytes long, this function
> -                                        will consider it a match if
> the first TableIdSize bytes match
> -  @param[in, out] Table                 Updated with a pointer to the
> table
> -  @param[in, out] Handle                AcpiSupport protocol table
> handle for the table found
> -  @param[in, out] Version               See AcpiSupport protocol,
> GetAcpiTable function for use
> -
> -  @retval EFI_SUCCESS                   The function completed
> successfully.
> -**/
> -EFI_STATUS
> -LocateAcpiTableByOemTableId (
> -  IN      UINT8                         *TableId,
> -  IN      UINT8                         TableIdSize,
> -  IN OUT  EFI_ACPI_DESCRIPTION_HEADER   **Table,
> -  IN OUT  UINTN                         *Handle
> -  );
> -
> -/**
> -  This function calculates and updates an UINT8 checksum.
> -
> -  @param[in] Buffer                     Pointer to buffer to checksum
> -  @param[in] Size                       Number of bytes to checksum
> -  @param[in] ChecksumOffset             Offset to place the checksum
> result in
> -
> -  @retval EFI_SUCCESS                   The function completed
> successfully.
> -**/
> -EFI_STATUS
> -AcpiChecksum (
> -  IN VOID       *Buffer,
> -  IN UINTN      Size,
> -  IN UINTN      ChecksumOffset
> -  );
> -
>  #endif
> --
> 2.16.2.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#58360): https://edk2.groups.io/g/devel/message/58360
Mute This Topic: https://groups.io/mt/73345587/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