[edk2-devel] [PATCH 19/40] TigerlakeSiliconPkg/IpBlock: Add Hda component

Nate DeSimone nathaniel.l.desimone at intel.com
Thu Feb 4 03:54:33 UTC 2021


Reviewed-by: Nate DeSimone <nathaniel.l.desimone at intel.com>

> -----Original Message-----
> From: Luo, Heng <heng.luo at intel.com>
> Sent: Sunday, January 31, 2021 5:37 PM
> To: devel at edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty at intel.com>; Desimone,
> Nathaniel L <nathaniel.l.desimone at intel.com>
> Subject: [PATCH 19/40] TigerlakeSiliconPkg/IpBlock: Add Hda component
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3171
> 
> Adds the following files:
>   * IpBlock/Hda/IncludePrivate
>   * IpBlock/Hda/Library
>   * IpBlock/Hda/LibraryPrivate
> 
> Cc: Sai Chaganty <rangasai.v.chaganty at intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone at intel.com>
> Signed-off-by: Heng Luo <heng.luo at intel.com>
> ---
> 
> Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/IncludePrivate/Library/DxeHda
> PolicyLib.h           |  55
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/IncludePrivate/Register/HdaRe
> gs.h                  |  46
> ++++++++++++++++++++++++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/Library/DxeHdaNhltLib/DxeHd
> aNhltLib.c              | 383
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/Library/DxeHdaNhltLib/DxeHd
> aNhltLib.inf            |  31 +++++++++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/LibraryPrivate/DxeHdaPolicyLib
> /DxeHdaPolicyLib.c   |  92
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/LibraryPrivate/DxeHdaPolicyLib
> /DxeHdaPolicyLib.inf |  31 +++++++++++++++++++++++++++++++
>  6 files changed, 638 insertions(+)
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/IncludePrivate/Library/DxeH
> daPolicyLib.h
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/IncludePrivate/Library/DxeH
> daPolicyLib.h
> new file mode 100644
> index 0000000000..9c42bf5611
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/IncludePrivate/Library/DxeH
> daPolicyLib.h
> @@ -0,0 +1,55 @@
> +/** @file
> 
> +  DXE Hda policy library.
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _DXE_HDA_POLICY_LIB_H_
> 
> +#define _DXE_HDA_POLICY_LIB_H_
> 
> +
> 
> +#include <Protocol/PchPolicy.h>
> 
> +
> 
> +/**
> 
> +  Print HDAUDIO_DXE_CONFIG and serial out.
> 
> +
> 
> +  @param[in] PchPolicy            Pointer to a PCH_POLICY_PROTOCOL
> 
> +**/
> 
> +VOID
> 
> +HdaDxePrintConfig (
> 
> +  IN PCH_POLICY_PROTOCOL    *PchPolicy
> 
> +  );
> 
> +
> 
> +/**
> 
> +  Load Config block default
> 
> +
> 
> +  @param[in] ConfigBlockPointer         Pointer to config block
> 
> +**/
> 
> +VOID
> 
> +HdaDxeLoadConfigDefault (
> 
> +  IN VOID          *ConfigBlockPointer
> 
> +  );
> 
> +
> 
> +/**
> 
> +  Get Hda config block table size.
> 
> +
> 
> +  @retval      Size of config block
> 
> +**/
> 
> +UINT16
> 
> +HdaDxeGetConfigBlockTotalSize (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +/**
> 
> +  Add Hda ConfigBlock.
> 
> +
> 
> +  @param[in] ConfigBlockTableAddress    The pointer to config block table
> 
> +
> 
> +  @retval EFI_SUCCESS                   The policy default is initialized.
> 
> +  @retval EFI_OUT_OF_RESOURCES          Insufficient resources to create
> buffer
> 
> +**/
> 
> +EFI_STATUS
> 
> +HdaDxeAddConfigBlock (
> 
> +  IN VOID           *ConfigBlockTableAddress
> 
> +  );
> 
> +
> 
> +#endif // _DXE_HDA_POLICY_LIB_H_
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/IncludePrivate/Register/Hda
> Regs.h
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/IncludePrivate/Register/Hda
> Regs.h
> new file mode 100644
> index 0000000000..b165e7bb22
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/IncludePrivate/Register/Hda
> Regs.h
> @@ -0,0 +1,46 @@
> +/** @file
> 
> +  Register names for High Definition Audio device.
> 
> +
> 
> +  Conventions:
> 
> +
> 
> +  - Register definition format:
> 
> +
> Prefix_[GenerationName]_[ComponentName]_SubsystemName_RegisterS
> pace_RegisterName
> 
> +  - Prefix:
> 
> +    Definitions beginning with "R_" are registers
> 
> +    Definitions beginning with "B_" are bits within registers
> 
> +    Definitions beginning with "V_" are meaningful values within the bits
> 
> +    Definitions beginning with "S_" are register size
> 
> +    Definitions beginning with "N_" are the bit position
> 
> +  - [GenerationName]:
> 
> +    Three letter acronym of the generation is used (e.g. SKL,KBL,CNL etc.).
> 
> +    Register name without GenerationName applies to all generations.
> 
> +  - [ComponentName]:
> 
> +    This field indicates the component name that the register belongs to (e.g.
> PCH, SA etc.)
> 
> +    Register name without ComponentName applies to all components.
> 
> +    Register that is specific to -LP denoted by "_PCH_LP_" in component
> name.
> 
> +  - SubsystemName:
> 
> +    This field indicates the subsystem name of the component that the
> register belongs to
> 
> +    (e.g. PCIE, USB, SATA, GPIO, PMC etc.).
> 
> +  - RegisterSpace:
> 
> +    MEM - MMIO space register of subsystem.
> 
> +    IO  - IO space register of subsystem.
> 
> +    PCR - Private configuration register of subsystem.
> 
> +    CFG - PCI configuration space register of subsystem.
> 
> +  - RegisterName:
> 
> +    Full register name.
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _HDA_REGS_H_
> 
> +#define _HDA_REGS_H_
> 
> +
> 
> +//
> 
> +// HD-A Controller Registers
> 
> +//
> 
> +// PCI Configuration Space Registers
> 
> +//
> 
> +#define R_HDA_CFG_PCS                           0x54
> 
> +#define B_HDA_CFG_PCS_PMEE                      BIT8
> 
> +
> 
> +#endif
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/Library/DxeHdaNhltLib/DxeH
> daNhltLib.c
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/Library/DxeHdaNhltLib/DxeH
> daNhltLib.c
> new file mode 100644
> index 0000000000..71388934e6
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/Library/DxeHdaNhltLib/DxeH
> daNhltLib.c
> @@ -0,0 +1,383 @@
> +/** @file
> 
> +  HD Audio NHLT Library implementation.
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <Uefi/UefiBaseType.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/MemoryAllocationLib.h>
> 
> +#include <Library/BaseMemoryLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <ConfigBlock.h>
> 
> +#include <Library/ConfigBlockLib.h>
> 
> +#include <Library/PchInfoLib.h>
> 
> +#include <DxeHdaNhlt.h>
> 
> +
> 
> +/**
> 
> +  Returns pointer to Endpoint ENDPOINT_DESCRIPTOR structure.
> 
> +
> 
> +  @param[in] *NhltTable    Endpoint for which Format address is retrieved
> 
> +  @param[in] FormatIndex   Index of Format to be retrieved
> 
> +
> 
> +  @retval                  Pointer to ENDPOINT_DESCRIPTOR structure with given
> index
> 
> +**/
> 
> +ENDPOINT_DESCRIPTOR *
> 
> +GetNhltEndpoint (
> 
> +  IN CONST NHLT_ACPI_TABLE      *NhltTable,
> 
> +  IN CONST UINT8                EndpointIndex
> 
> +  )
> 
> +{
> 
> +  UINT8               Index;
> 
> +  ENDPOINT_DESCRIPTOR *Endpoint;
> 
> +  Endpoint = (ENDPOINT_DESCRIPTOR*) (NhltTable->EndpointDescriptors);
> 
> +
> 
> +  if (EndpointIndex > NhltTable->EndpointCount) {
> 
> +    return NULL;
> 
> +  }
> 
> +
> 
> +  for (Index = 0; Index < EndpointIndex; Index++) {
> 
> +    Endpoint = (ENDPOINT_DESCRIPTOR*) ((UINT8*) (Endpoint) + Endpoint-
> >EndpointDescriptorLength);
> 
> +  }
> 
> +
> 
> +  return Endpoint;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Returns pointer to Endpoint Specific Configuration SPECIFIC_CONFIG
> structure.
> 
> +
> 
> +  @param[in] *Endpoint     Endpoint for which config address is retrieved
> 
> +
> 
> +  @retval                  Pointer to SPECIFIC_CONFIG structure with endpoint's
> capabilities
> 
> +**/
> 
> +SPECIFIC_CONFIG *
> 
> +GetNhltEndpointDeviceCapabilities (
> 
> +  IN CONST ENDPOINT_DESCRIPTOR  *Endpoint
> 
> +  )
> 
> +{
> 
> +  return (SPECIFIC_CONFIG*) (&Endpoint->EndpointConfig);
> 
> +}
> 
> +
> 
> +/**
> 
> +  Returns pointer to all Formats Configuration FORMATS_CONFIG structure.
> 
> +
> 
> +  @param[in] *Endpoint     Endpoint for which Formats address is retrieved
> 
> +
> 
> +  @retval                  Pointer to FORMATS_CONFIG structure
> 
> +**/
> 
> +FORMATS_CONFIG *
> 
> +GetNhltEndpointFormatsConfig (
> 
> +  IN CONST ENDPOINT_DESCRIPTOR  *Endpoint
> 
> +  )
> 
> +{
> 
> +  FORMATS_CONFIG *FormatsConfig;
> 
> +  FormatsConfig = (FORMATS_CONFIG*) ((UINT8*) (&Endpoint-
> >EndpointConfig)
> 
> +                                     + sizeof (Endpoint->EndpointConfig.CapabilitiesSize)
> 
> +                                     + Endpoint->EndpointConfig.CapabilitiesSize);
> 
> +
> 
> +  return FormatsConfig;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Returns pointer to Format Configuration FORMAT_CONFIG structure.
> 
> +
> 
> +  @param[in] *Endpoint     Endpoint for which Format address is retrieved
> 
> +  @param[in] FormatIndex   Index of Format to be retrieved
> 
> +
> 
> +  @retval                  Pointer to FORMAT_CONFIG structure with given index
> 
> +**/
> 
> +FORMAT_CONFIG *
> 
> +GetNhltEndpointFormat (
> 
> +  IN CONST ENDPOINT_DESCRIPTOR  *Endpoint,
> 
> +  IN CONST UINT8                FormatIndex
> 
> +  )
> 
> +{
> 
> +  UINT8          Index;
> 
> +  UINT32         Length;
> 
> +  FORMATS_CONFIG *FormatsConfig;
> 
> +  FORMAT_CONFIG  *Format;
> 
> +
> 
> +  Length = 0;
> 
> +  FormatsConfig = GetNhltEndpointFormatsConfig (Endpoint);
> 
> +  Format = FormatsConfig->FormatsConfiguration;
> 
> +
> 
> +  if (FormatIndex > FormatsConfig->FormatsCount) {
> 
> +    return NULL;
> 
> +  }
> 
> +
> 
> +  for (Index = 0; Index < FormatIndex; Index++) {
> 
> +    Length = sizeof (Format->Format) + Format-
> >FormatConfiguration.CapabilitiesSize
> 
> +      + sizeof (Format->FormatConfiguration.CapabilitiesSize);
> 
> +    Format = (FORMAT_CONFIG*) ((UINT8*) (Format) + Length);
> 
> +  }
> 
> +
> 
> +  return Format;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Returns pointer to all Device Information DEVICES_INFO structure.
> 
> +
> 
> +  @param[in] *Endpoint     Endpoint for which DevicesInfo address is
> retrieved
> 
> +
> 
> +  @retval                  Pointer to DEVICES_INFO structure
> 
> +**/
> 
> +DEVICES_INFO *
> 
> +GetNhltEndpointDevicesInfo (
> 
> +  IN CONST ENDPOINT_DESCRIPTOR  *Endpoint
> 
> +  )
> 
> +{
> 
> +  DEVICES_INFO   *DevicesInfo;
> 
> +  FORMATS_CONFIG *FormatsConfig;
> 
> +  FORMAT_CONFIG  *Format;
> 
> +
> 
> +  FormatsConfig = GetNhltEndpointFormatsConfig (Endpoint);
> 
> +  Format = GetNhltEndpointFormat (Endpoint, FormatsConfig-
> >FormatsCount);
> 
> +  DevicesInfo = (DEVICES_INFO*) ((UINT8*) Format);
> 
> +
> 
> +  return DevicesInfo;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Returns pointer to Device Information DEVICES_INFO structure.
> 
> +
> 
> +  @param[in] *Endpoint       Endpoint for which Device Info address is
> retrieved
> 
> +  @param[in] DeviceInfoIndex Index of Device Info to be retrieved
> 
> +
> 
> +  @retval                    Pointer to DEVICE_INFO structure with given index
> 
> +**/
> 
> +DEVICE_INFO *
> 
> +GetNhltEndpointDeviceInfo (
> 
> +  IN CONST ENDPOINT_DESCRIPTOR  *Endpoint,
> 
> +  IN CONST UINT8                DeviceInfoIndex
> 
> +  )
> 
> +{
> 
> +  DEVICES_INFO  *DevicesInfo;
> 
> +  DEVICE_INFO   *DeviceInfo;
> 
> +
> 
> +  DevicesInfo = GetNhltEndpointDevicesInfo (Endpoint);
> 
> +  DeviceInfo = DevicesInfo->DeviceInformation;
> 
> +
> 
> +  if (DevicesInfo == NULL || DeviceInfoIndex >= DevicesInfo-
> >DeviceInfoCount) {
> 
> +    return NULL;
> 
> +  }
> 
> +
> 
> +  DeviceInfo = (DEVICE_INFO*) ((UINT8*) (DeviceInfo) + sizeof
> (*DeviceInfo) * DeviceInfoIndex);
> 
> +
> 
> +  return DeviceInfo;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Returns pointer to OED Configuration SPECIFIC_CONFIG structure.
> 
> +
> 
> +  @param[in] *NhltTable    NHLT table for which OED address is retrieved
> 
> +
> 
> +  @retval                  Pointer to SPECIFIC_CONFIG structure with NHLT
> capabilities
> 
> +**/
> 
> +SPECIFIC_CONFIG *
> 
> +GetNhltOedConfig (
> 
> +  IN CONST NHLT_ACPI_TABLE      *NhltTable
> 
> +  )
> 
> +{
> 
> +  ENDPOINT_DESCRIPTOR *Endpoint;
> 
> +  SPECIFIC_CONFIG     *OedConfig;
> 
> +
> 
> +  Endpoint = GetNhltEndpoint (NhltTable, (NhltTable->EndpointCount));
> 
> +  OedConfig = (SPECIFIC_CONFIG*) ((UINT8*) (Endpoint));
> 
> +
> 
> +  return OedConfig;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Prints Format configuration.
> 
> +
> 
> +  @param[in] *Format       Format to be printed
> 
> +
> 
> +  @retval None
> 
> +**/
> 
> +VOID
> 
> +NhltFormatDump (
> 
> +  IN CONST FORMAT_CONFIG        *Format
> 
> +  )
> 
> +{
> 
> +  UINT32 Index;
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "------------------------------- FORMAT -----------------
> --------------\n"));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.Format.wFormatTag      =
> 0x%x\n", Format->Format.Format.wFormatTag));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.Format.nChannels       = %d\n",
> Format->Format.Format.nChannels));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.Format.nSamplesPerSec  =
> %d\n", Format->Format.Format.nSamplesPerSec));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.Format.nAvgBytesPerSec =
> %d\n", Format->Format.Format.nAvgBytesPerSec));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.Format.nBlockAlign     = %d\n",
> Format->Format.Format.nBlockAlign));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.Format.wBitsPerSample  =
> %d\n", Format->Format.Format.wBitsPerSample));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.Format.cbSize          = %d\n",
> Format->Format.Format.cbSize));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.Samples                = %d\n",
> Format->Format.Samples));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.dwChannelMask          =
> 0x%x\n", Format->Format.dwChannelMask));
> 
> +  DEBUG ((DEBUG_INFO, " Format->Format.SubFormat              = %g\n",
> Format->Format.SubFormat));
> 
> +
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, " Format->FormatConfiguration.CapabilitiesSize =
> %d B\n", Format->FormatConfiguration.CapabilitiesSize));
> 
> +  DEBUG ((DEBUG_VERBOSE, " Format-
> >FormatConfiguration.Capabilities:"));
> 
> +  for (Index = 0; Index < (  Format->FormatConfiguration.CapabilitiesSize ) ;
> Index++) {
> 
> +    if (Index % 16 == 0) {
> 
> +      DEBUG ((DEBUG_VERBOSE, "\n"));
> 
> +    }
> 
> +    DEBUG ((DEBUG_VERBOSE, "0x%02x, ", Format-
> >FormatConfiguration.Capabilities[Index]));
> 
> +  }
> 
> +  DEBUG ((DEBUG_VERBOSE, "\n"));
> 
> +}
> 
> +
> 
> +/**
> 
> +  Prints Device Information.
> 
> +
> 
> +  @param[in] *DeviceInfo       DeviceInfo to be printed
> 
> +
> 
> +  @retval None
> 
> +**/
> 
> +VOID
> 
> +NhltDeviceInfoDump (
> 
> +  IN CONST DEVICE_INFO          *DeviceInfo
> 
> +  )
> 
> +{
> 
> +  DEBUG ((DEBUG_INFO, "----------------------------- DEVICE INFO --------------
> --------------\n"));
> 
> +  DEBUG ((DEBUG_INFO, " DeviceInfo->DeviceId         = %a\n",   DeviceInfo-
> >DeviceId));
> 
> +  DEBUG ((DEBUG_INFO, " DeviceInfo->DeviceInstanceId = 0x%x\n",
> DeviceInfo->DeviceInstanceId));
> 
> +  DEBUG ((DEBUG_INFO, " DeviceInfo->DevicePortId     = 0x%x\n",
> DeviceInfo->DevicePortId));
> 
> +}
> 
> +
> 
> +/**
> 
> +  Prints Endpoint configuration.
> 
> +
> 
> +  @param[in] *Endpoint     Endpoint to be printed
> 
> +
> 
> +  @retval None
> 
> +**/
> 
> +VOID
> 
> +NhltEndpointDump (
> 
> +  IN CONST ENDPOINT_DESCRIPTOR  *Endpoint
> 
> +  )
> 
> +{
> 
> +  UINT8 Index;
> 
> +  FORMATS_CONFIG *FormatsConfigs;
> 
> +  FORMAT_CONFIG  *Format;
> 
> +  DEVICES_INFO   *DevicesInfo;
> 
> +  DEVICE_INFO    *DeviceInfo;
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "------------------------------ ENDPOINT ----------------
> --------------\n"));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->DeviceDescriptorLength = %d B\n",
> Endpoint->EndpointDescriptorLength));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->LinkType               = 0x%x\n", Endpoint-
> >LinkType));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->InstanceId             = 0x%x\n",
> Endpoint->InstanceId));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->HwVendorId             = 0x%x\n",
> Endpoint->HwVendorId));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->HwDeviceId             = 0x%x\n",
> Endpoint->HwDeviceId));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->HwRevisionId           = 0x%x\n",
> Endpoint->HwRevisionId));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->HwSubsystemId          = 0x%x\n",
> Endpoint->HwSubsystemId));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->DeviceType             = 0x%x\n",
> Endpoint->DeviceType));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->Direction              = 0x%x\n", Endpoint-
> >Direction));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->VirtualBusId           = 0x%x\n",
> Endpoint->VirtualBusId));
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->EndpointConfig.CapabilitiesSize = %d
> B\n", Endpoint->EndpointConfig.CapabilitiesSize));
> 
> +  DEBUG ((DEBUG_VERBOSE, " Endpoint->EndpointConfig.Capabilities:"));
> 
> +  for (Index = 0; Index < (Endpoint->EndpointConfig.CapabilitiesSize ) ;
> Index++) {
> 
> +    if (Index % 16 == 0) DEBUG ((DEBUG_VERBOSE, "\n"));
> 
> +    DEBUG ((DEBUG_VERBOSE, "0x%02x, ", Endpoint-
> >EndpointConfig.Capabilities[Index]));
> 
> +  }
> 
> +
> 
> +  FormatsConfigs = GetNhltEndpointFormatsConfig (Endpoint);
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "\n"));
> 
> +  DEBUG ((DEBUG_INFO, " Endpoint->FormatsConfig.FormatsCount =
> %d\n", FormatsConfigs->FormatsCount));
> 
> +  for (Index = 0; Index < FormatsConfigs->FormatsCount; Index++) {
> 
> +    Format = GetNhltEndpointFormat (Endpoint, Index);
> 
> +    if (Format != NULL) {
> 
> +      NhltFormatDump (Format);
> 
> +    }
> 
> +  }
> 
> +
> 
> +  DevicesInfo = GetNhltEndpointDevicesInfo (Endpoint);
> 
> +  if (DevicesInfo != NULL) {
> 
> +    DEBUG ((DEBUG_INFO, "\n"));
> 
> +    DEBUG ((DEBUG_INFO, " Endpoint->DevicesInfo.DeviceInfoCount =
> %d\n", DevicesInfo->DeviceInfoCount));
> 
> +    for (Index = 0; Index < DevicesInfo->DeviceInfoCount; Index++) {
> 
> +      DeviceInfo = GetNhltEndpointDeviceInfo (Endpoint, Index);
> 
> +      if (DeviceInfo != NULL) {
> 
> +        NhltDeviceInfoDump (DeviceInfo);
> 
> +      }
> 
> +    }
> 
> +  }
> 
> +  DEBUG ((DEBUG_VERBOSE, "\n"));
> 
> +}
> 
> +
> 
> +/**
> 
> +  Prints OED (Offload Engine Driver) configuration.
> 
> +
> 
> +  @param[in] *OedConfig   OED to be printed
> 
> +
> 
> +  @retval None
> 
> +**/
> 
> +VOID
> 
> +NhltOedConfigDump (
> 
> +  IN CONST SPECIFIC_CONFIG      *OedConfig
> 
> +  )
> 
> +{
> 
> +  UINT8 Index;
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "-------------------------- OED CONFIGURATION ------
> -------------------\n"));
> 
> +  DEBUG ((DEBUG_INFO, " OedConfig->CapabilitiesSize = %d B\n",
> OedConfig->CapabilitiesSize));
> 
> +  DEBUG ((DEBUG_VERBOSE, " OedConfig->Capabilities:"));
> 
> +  for (Index = 0; Index < (OedConfig->CapabilitiesSize) ; Index++) {
> 
> +    if (Index % 16 == 0) DEBUG ((DEBUG_VERBOSE, "\n"));
> 
> +    DEBUG ((DEBUG_VERBOSE, "0x%02x, ", OedConfig->Capabilities[Index]));
> 
> +  }
> 
> +
> 
> +  DEBUG ((DEBUG_VERBOSE, "\n"));
> 
> +}
> 
> +
> 
> +/**
> 
> +  Prints NHLT (Non HDA-Link Table) to be exposed via ACPI (aka. OED
> (Offload Engine Driver) Configuration Table).
> 
> +
> 
> +  @param[in] *NhltTable    The NHLT table to print
> 
> +
> 
> +  @retval None
> 
> +**/
> 
> +VOID
> 
> +NhltAcpiTableDump (
> 
> +  IN NHLT_ACPI_TABLE            *NhltTable
> 
> +  )
> 
> +{
> 
> +  DEBUG_CODE_BEGIN ();
> 
> +  UINT8 Index;
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "\n"));
> 
> +  DEBUG ((DEBUG_INFO, "--- NHLT ACPI Table Dump [OED (Offload Engine
> Driver) Configuration] ---\n"));
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "sizeof NHLT_ACPI_TABLE = %d B\n", sizeof
> (NHLT_ACPI_TABLE)));
> 
> +  DEBUG ((DEBUG_INFO, "sizeof EFI_ACPI_DESCRIPTION_HEADER = %d
> B\n", sizeof (EFI_ACPI_DESCRIPTION_HEADER)));
> 
> +  DEBUG ((DEBUG_INFO, "sizeof ENDPOINT_DESCRIPTOR = %d B\n", sizeof
> (ENDPOINT_DESCRIPTOR)));
> 
> +  DEBUG ((DEBUG_INFO, "sizeof SPECIFIC_CONFIG = %d B\n", sizeof
> (SPECIFIC_CONFIG)));
> 
> +  DEBUG ((DEBUG_INFO, "sizeof FORMATS_CONFIG = %d B\n", sizeof
> (FORMATS_CONFIG)));
> 
> +  DEBUG ((DEBUG_INFO, "sizeof FORMAT_CONFIG = %d B\n", sizeof
> (FORMAT_CONFIG)));
> 
> +  DEBUG ((DEBUG_INFO, "sizeof WAVEFORMATEXTENSIBLE = %d B\n",
> sizeof (WAVEFORMATEXTENSIBLE)));
> 
> +  DEBUG ((DEBUG_INFO, "sizeof DEVICES_INFO = %d B\n", sizeof
> (DEVICES_INFO)));
> 
> +  DEBUG ((DEBUG_INFO, "sizeof DEVICE_INFO = %d B\n", sizeof
> (DEVICE_INFO)));
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.Signature       =
> 0x%08x\n", NhltTable->Header.Signature));
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.Length          =
> 0x%08x\n", NhltTable->Header.Length));
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.Revision        =
> 0x%02x\n", NhltTable->Header.Revision));
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.Checksum        =
> 0x%02x\n", NhltTable->Header.Checksum));
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.OemId           = %a\n",
> NhltTable->Header.OemId));
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.OemTableId      =
> 0x%lx\n",  NhltTable->Header.OemTableId));
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.OemRevision     =
> 0x%08x\n", NhltTable->Header.OemRevision));
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.CreatorId       =
> 0x%08x\n", NhltTable->Header.CreatorId));
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE Header.CreatorRevision =
> 0x%08x\n", NhltTable->Header.CreatorRevision));
> 
> +  DEBUG ((DEBUG_INFO, "\n"));
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, " NHLT_ACPI_TABLE EndpointCount = %d\n",
> NhltTable->EndpointCount));
> 
> +  for (Index = 0; Index < NhltTable->EndpointCount; Index++) {
> 
> +    NhltEndpointDump (GetNhltEndpoint (NhltTable, Index));
> 
> +  }
> 
> +
> 
> +  NhltOedConfigDump (GetNhltOedConfig (NhltTable));
> 
> +  DEBUG ((DEBUG_INFO, "------------------------------------------------------------
> ----------\n"));
> 
> +
> 
> +  DEBUG_CODE_END ();
> 
> +}
> 
> +
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/Library/DxeHdaNhltLib/DxeH
> daNhltLib.inf
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/Library/DxeHdaNhltLib/DxeH
> daNhltLib.inf
> new file mode 100644
> index 0000000000..a1574c3ab1
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/Library/DxeHdaNhltLib/DxeH
> daNhltLib.inf
> @@ -0,0 +1,31 @@
> +## @file
> 
> +# Component information file for HD Audio NHLT Library
> 
> +#
> 
> +#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +INF_VERSION = 0x00010017
> 
> +BASE_NAME = DxeHdaNhltLib
> 
> +FILE_GUID = DA915B7F-EE08-4C1D-B3D0-DE7C52AB155A
> 
> +VERSION_STRING = 1.0
> 
> +MODULE_TYPE = BASE
> 
> +LIBRARY_CLASS = DxeHdaNhltLib
> 
> +
> 
> +[LibraryClasses]
> 
> +BaseLib
> 
> +DebugLib
> 
> +MemoryAllocationLib
> 
> +BaseMemoryLib
> 
> +PchInfoLib
> 
> +ConfigBlockLib
> 
> +
> 
> +[Packages]
> 
> +MdePkg/MdePkg.dec
> 
> +TigerlakeSiliconPkg/SiPkg.dec
> 
> +
> 
> +[Sources]
> 
> +DxeHdaNhltLib.c
> 
> +
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/LibraryPrivate/DxeHdaPolicy
> Lib/DxeHdaPolicyLib.c
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/LibraryPrivate/DxeHdaPolicy
> Lib/DxeHdaPolicyLib.c
> new file mode 100644
> index 0000000000..30843fab39
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/LibraryPrivate/DxeHdaPolicy
> Lib/DxeHdaPolicyLib.c
> @@ -0,0 +1,92 @@
> +/** @file
> 
> +  This file provides services for Hda policy function
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#include <Uefi.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/SiConfigBlockLib.h>
> 
> +#include <Library/ConfigBlockLib.h>
> 
> +#include <Protocol/PchPolicy.h>
> 
> +#include <HdAudioConfig.h>
> 
> +
> 
> +/**
> 
> +  Print HDAUDIO_DXE_CONFIG and serial out.
> 
> +
> 
> +  @param[in] PchPolicy            Pointer to a PCH_POLICY_PROTOCOL
> 
> +**/
> 
> +VOID
> 
> +HdaDxePrintConfig (
> 
> +  IN PCH_POLICY_PROTOCOL    *PchPolicy
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS            Status;
> 
> +  HDAUDIO_DXE_CONFIG    *HdaDxeConfig;
> 
> +  UINT32                Index;
> 
> +
> 
> +  Status = GetConfigBlock ((VOID *) PchPolicy, &gHdAudioDxeConfigGuid,
> (VOID *) &HdaDxeConfig);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "------------------ HD-Audio DXE Config ---------------
> ---\n"));
> 
> +
> 
> +  for (Index = 0; Index < PCH_MAX_HDA_SNDW_LINK_NUM; Index++) {
> 
> +    DEBUG ((DEBUG_INFO, " SNDW%d AutonomousClockStop  : %d\n",
> Index, HdaDxeConfig->SndwConfig[Index].AutonomousClockStop));
> 
> +    DEBUG ((DEBUG_INFO, " SNDW%d DODS                 : %d\n", Index,
> HdaDxeConfig->SndwConfig[Index].DataOnDelaySelect));
> 
> +    DEBUG ((DEBUG_INFO, " SNDW%d DOAS                 : %d\n", Index,
> HdaDxeConfig->SndwConfig[Index].DataOnActiveIntervalSelect));
> 
> +  }
> 
> +  DEBUG ((DEBUG_INFO, " DSP Feature Mask              : 0x%x\n",
> HdaDxeConfig->DspFeatureMask));
> 
> +}
> 
> +
> 
> +/**
> 
> +  Load Config block default
> 
> +
> 
> +  @param[in] ConfigBlockPointer         Pointer to config block
> 
> +**/
> 
> +VOID
> 
> +HdaDxeLoadConfigDefault (
> 
> +  IN VOID          *ConfigBlockPointer
> 
> +  )
> 
> +{
> 
> +  HDAUDIO_DXE_CONFIG  *HdAudioDxeConfig;
> 
> +  HdAudioDxeConfig = ConfigBlockPointer;
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "HdaDxeConfig->Header.GuidHob.Name = %g\n",
> &HdAudioDxeConfig->Header.GuidHob.Name));
> 
> +  DEBUG ((DEBUG_INFO, "HdaDxeConfig-
> >Header.GuidHob.Header.HobLength = 0x%x\n", HdAudioDxeConfig-
> >Header.GuidHob.Header.HobLength));
> 
> +}
> 
> +
> 
> +STATIC COMPONENT_BLOCK_ENTRY  mHdaBlocks = {
> 
> +  &gHdAudioDxeConfigGuid,
> 
> +  sizeof (HDAUDIO_DXE_CONFIG),
> 
> +  HDAUDIO_DXE_CONFIG_REVISION,
> 
> +  HdaDxeLoadConfigDefault
> 
> +};
> 
> +
> 
> +/**
> 
> +  Get Hda config block table size.
> 
> +
> 
> +  @retval      Size of config block
> 
> +**/
> 
> +UINT16
> 
> +HdaDxeGetConfigBlockTotalSize (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  return mHdaBlocks.Size;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Add Hda ConfigBlock.
> 
> +
> 
> +  @param[in] ConfigBlockTableAddress    The pointer to config block table
> 
> +
> 
> +  @retval EFI_SUCCESS                   The policy default is initialized.
> 
> +  @retval EFI_OUT_OF_RESOURCES          Insufficient resources to create
> buffer
> 
> +**/
> 
> +EFI_STATUS
> 
> +HdaDxeAddConfigBlock (
> 
> +  IN VOID           *ConfigBlockTableAddress
> 
> +  )
> 
> +{
> 
> +  return AddComponentConfigBlocks (ConfigBlockTableAddress,
> &mHdaBlocks, 1);
> 
> +}
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/LibraryPrivate/DxeHdaPolicy
> Lib/DxeHdaPolicyLib.inf
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/LibraryPrivate/DxeHdaPolicy
> Lib/DxeHdaPolicyLib.inf
> new file mode 100644
> index 0000000000..758499b95e
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/IpBlock/Hda/LibraryPrivate/DxeHdaPolicy
> Lib/DxeHdaPolicyLib.inf
> @@ -0,0 +1,31 @@
> +## @file
> 
> +# Component description file for the Hda policy library
> 
> +#
> 
> +#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +
> 
> +[Defines]
> 
> +INF_VERSION = 0x00010017
> 
> +BASE_NAME = DxeHdaPolicyLib
> 
> +FILE_GUID = B053EFE4-0868-4510-A71D-96A85CD16C77
> 
> +VERSION_STRING = 1.0
> 
> +MODULE_TYPE = BASE
> 
> +LIBRARY_CLASS = DxeHdaPolicyLib
> 
> +
> 
> +[LibraryClasses]
> 
> +DebugLib
> 
> +ConfigBlockLib
> 
> +SiConfigBlockLib
> 
> +
> 
> +[Packages]
> 
> +MdePkg/MdePkg.dec
> 
> +TigerlakeSiliconPkg/SiPkg.dec
> 
> +
> 
> +[Sources]
> 
> +DxeHdaPolicyLib.c
> 
> +
> 
> +[Guids]
> 
> +gHdAudioDxeConfigGuid  ## CONSUMES
> 
> --
> 2.24.0.windows.2



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