[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