From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=fail (domain: intel.com, ip: , mailfrom: michael.a.kubacki@intel.com) Received: from mga04.intel.com (mga04.intel.com []) by groups.io with SMTP; Fri, 16 Aug 2019 17:16:55 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Aug 2019 17:16:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,395,1559545200"; d="scan'208";a="182319301" Received: from makuback-desk1.amr.corp.intel.com ([10.7.159.162]) by orsmga006.jf.intel.com with ESMTP; 16 Aug 2019 17:16:53 -0700 From: "Kubacki, Michael A" To: devel@edk2.groups.io Cc: Sai Chaganty , Chasel Chiu , Nate DeSimone , Liming Gao , Michael D Kinney , Ankit Sinha Subject: [edk2-platforms][PATCH V1 22/37] CoffeelakeSiliconPkg/Pch: Add DXE private library instances Date: Fri, 16 Aug 2019 17:15:48 -0700 Message-Id: <20190817001603.30632-23-michael.a.kubacki@intel.com> X-Mailer: git-send-email 2.16.2.windows.1 In-Reply-To: <20190817001603.30632-1-michael.a.kubacki@intel.com> References: <20190817001603.30632-1-michael.a.kubacki@intel.com> REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2082 Adds PCH DXE private library class instances. * DxeGpioNameBufferLib * DxePchHdaLib Cc: Sai Chaganty Cc: Chasel Chiu Cc: Nate DeSimone Cc: Liming Gao Cc: Michael D Kinney Cc: Ankit Sinha Signed-off-by: Michael Kubacki --- Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxeGpioNameBufferLib/DxeGpioNameBufferLib.inf | 32 + Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/DxePchHdaLib.inf | 43 + Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxeGpioNameBufferLib/GpioNameBufferDxe.c | 20 + Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaEndpoints.c | 333 ++++++++ Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaLib.c | 886 ++++++++++++++++++++ Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaNhltConfig.c | 439 ++++++++++ 6 files changed, 1753 insertions(+) diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxeGpioNameBufferLib/DxeGpioNameBufferLib.inf b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxeGpioNameBufferLib/DxeGpioNameBufferLib.inf new file mode 100644 index 0000000000..0dc8f9749d --- /dev/null +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxeGpioNameBufferLib/DxeGpioNameBufferLib.inf @@ -0,0 +1,32 @@ +## @file +# Component description file for the DxeGpioMemLib +# +# Copyright (c) 2019 Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] +INF_VERSION = 0x00010017 +BASE_NAME = DxeGpioNameBufferLib +FILE_GUID = 16EC6AA8-81D5-4847-B6CB-662CDAB863F2 +VERSION_STRING = 1.0 +MODULE_TYPE = DXE_DRIVER +LIBRARY_CLASS = GpioNameBufferLib +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[LibraryClasses] +BaseLib + +[Packages] +MdePkg/MdePkg.dec +CoffeelakeSiliconPkg/SiPkg.dec + +[Sources] +GpioNameBufferDxe.c + diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/DxePchHdaLib.inf b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/DxePchHdaLib.inf new file mode 100644 index 0000000000..a8a3f60b53 --- /dev/null +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/DxePchHdaLib.inf @@ -0,0 +1,43 @@ +## @file +# Component information file for PCH HD Audio Library +# +# Copyright (c) 2019 Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] +INF_VERSION = 0x00010017 +BASE_NAME = DxePchHdaLib +FILE_GUID = DA915B7F-EE08-4C1D-B3D0-DE7C52AB155A +VERSION_STRING = 1.0 +MODULE_TYPE = BASE +LIBRARY_CLASS = PchHdaLib + + +[LibraryClasses] +BaseLib +DebugLib +MemoryAllocationLib +BaseMemoryLib +PchInfoLib + + +[Packages] +MdePkg/MdePkg.dec +CoffeelakeSiliconPkg/SiPkg.dec + + +[Pcd] + gSiPkgTokenSpaceGuid.PcdAcpiDefaultOemId + gSiPkgTokenSpaceGuid.PcdAcpiDefaultOemTableId + gSiPkgTokenSpaceGuid.PcdAcpiDefaultOemRevision + gSiPkgTokenSpaceGuid.PcdAcpiDefaultCreatorId + gSiPkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision + + +[Sources] +PchHdaLib.c +PchHdaEndpoints.c +PchHdaNhltConfig.c diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxeGpioNameBufferLib/GpioNameBufferDxe.c b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxeGpioNameBufferLib/GpioNameBufferDxe.c new file mode 100644 index 0000000000..af53387faf --- /dev/null +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxeGpioNameBufferLib/GpioNameBufferDxe.c @@ -0,0 +1,20 @@ +/** @file + This file contains implementation of the GpioMemLib for DXE phase + + Copyright (c) 2019 Intel Corporation. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include + +STATIC CHAR8 mGpioNameBuffer[GPIO_NAME_LENGTH_MAX]; + +CHAR8* +GpioGetStaticNameBuffer ( + VOID + ) +{ + return mGpioNameBuffer; +} + diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaEndpoints.c b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaEndpoints.c new file mode 100644 index 0000000000..ea04512501 --- /dev/null +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaEndpoints.c @@ -0,0 +1,333 @@ +/** @file + This file contains HD Audio NHLT Endpoints definitions + + Copyright (c) 2019 Intel Corporation. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE Ch1_48kHz16bitFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 1, + 48000, + 96000, + 2, + 16, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {16}, + KSAUDIO_SPEAKER_MONO, + KSDATAFORMAT_SUBTYPE_PCM +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE Ch2_48kHz16bitFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 2, + 48000, + 192000, + 4, + 16, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {16}, + KSAUDIO_SPEAKER_STEREO, + KSDATAFORMAT_SUBTYPE_PCM +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE Ch2_48kHz24bitFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 2, + 48000, + 384000, + 8, + 32, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {24}, + KSAUDIO_SPEAKER_STEREO, + KSDATAFORMAT_SUBTYPE_PCM +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE Ch2_48kHz32bitFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 2, + 48000, + 384000, + 8, + 32, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {32}, + KSAUDIO_SPEAKER_STEREO, + KSDATAFORMAT_SUBTYPE_PCM +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE Ch4_48kHz16bitFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 4, + 48000, + 384000, + 8, + 16, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {16}, + KSAUDIO_SPEAKER_QUAD, + KSDATAFORMAT_SUBTYPE_PCM +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE Ch4_48kHz32bitFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 4, + 48000, + 384000, + 8, + 32, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {32}, + KSAUDIO_SPEAKER_QUAD, + KSDATAFORMAT_SUBTYPE_PCM +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE NarrowbandFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 1, + 8000, + 16000, + 2, + 16, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {16}, + KSAUDIO_SPEAKER_MONO, + KSDATAFORMAT_SUBTYPE_PCM +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE WidebandFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 1, + 16000, + 32000, + 2, + 16, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {16}, + KSAUDIO_SPEAKER_MONO, + KSDATAFORMAT_SUBTYPE_PCM +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST WAVEFORMATEXTENSIBLE A2dpFormat = +{ + { + WAVE_FORMAT_EXTENSIBLE, + 2, + 48000, + 384000, + 8, + 32, + sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) + }, + {24}, + KSAUDIO_SPEAKER_STEREO, + KSDATAFORMAT_SUBTYPE_PCM +}; +GLOBAL_REMOVE_IF_UNREFERENCED +ENDPOINT_DESCRIPTOR HdaEndpointDmicX1 = { + 0, // EndpointDescriptorLength + HdaNhltLinkDmic, // LinkType + 0, // InstanceId + 0x8086, // HwVendorId + 0xae20, // HwDeviceId + 1, // HwRevisionId + 1, // HwSubsystemId + HdaNhltDeviceDmic, // DeviceType + 1, // Direction + 0, // VirtualBusId + { 0 }, // EndpointConfig + { 0 }, // FormatsConfig + { 0 } // DevicesInformation +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +ENDPOINT_DESCRIPTOR HdaEndpointDmicX2 = { + 0, // EndpointDescriptorLength + HdaNhltLinkDmic, // LinkType + 0, // InstanceId + 0x8086, // HwVendorId + 0xae20, // HwDeviceId + 1, // HwRevisionId + 1, // HwSubsystemId + HdaNhltDeviceDmic, // DeviceType + 1, // Direction + 0, // VirtualBusId + { 0 }, // EndpointConfig + { 0 }, // FormatsConfig + { 0 } // DevicesInformation +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +ENDPOINT_DESCRIPTOR HdaEndpointDmicX4 = { + 0, // EndpointDescriptorLength + HdaNhltLinkDmic, // LinkType + 0, // InstanceId + 0x8086, // HwVendorId + 0xae20, // HwDeviceId + 1, // HwRevisionId + 1, // HwSubsystemId + HdaNhltDeviceDmic, // DeviceType + 1, // Direction + 0, // VirtualBusId + { 0 }, // EndpointConfig + { 0 }, // FormatsConfig + { 0 } // DevicesInformation +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +ENDPOINT_DESCRIPTOR HdaEndpointBtRender = { + 0, // EndpointDescriptorLength + HdaNhltLinkSsp, // LinkType + 0, // InstanceId + 0x8086, // HwVendorId + 0xae30, // HwDeviceId + 1, // HwRevisionId + 1, // HwSubsystemId + HdaNhltDeviceBt, // DeviceType + 0, // Direction + 2, // VirtualBusId + { 0 }, // EndpointConfig + { 0 }, // FormatsConfig + { 0 } // DevicesInformation +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +ENDPOINT_DESCRIPTOR HdaEndpointBtCapture = { + 0, // EndpointDescriptorLength + HdaNhltLinkSsp, // LinkType + 0, // InstanceId + 0x8086, // HwVendorId + 0xae30, // HwDeviceId + 1, // HwRevisionId + 1, // HwSubsystemId + HdaNhltDeviceBt, // DeviceType + 1, // Direction + 2, // VirtualBusId + { 0 }, // EndpointConfig + { 0 }, // FormatsConfig + { 0 } // DevicesInformation +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +ENDPOINT_DESCRIPTOR HdaEndpointI2sRender = { + 0, // EndpointDescriptorLength + HdaNhltLinkSsp, // LinkType + 1, // InstanceId + 0x8086, // HwVendorId + 0xae34, // HwDeviceId + 1, // HwRevisionId + 1, // HwSubsystemId + HdaNhltDeviceI2s, // DeviceType + 0, // Direction + 0, // VirtualBusId + { 0 }, // EndpointConfig + { 0 }, // FormatsConfig + { 0 } // DevicesInformation +}; + +GLOBAL_REMOVE_IF_UNREFERENCED +ENDPOINT_DESCRIPTOR HdaEndpointI2sCapture = { + 0, // EndpointDescriptorLength + HdaNhltLinkSsp, // LinkType + 1, // InstanceId + 0x8086, // HwVendorId + 0xae34, // HwDeviceId + 1, // HwRevisionId + 1, // HwSubsystemId + HdaNhltDeviceI2s, // DeviceType + 1, // Direction + 0, // VirtualBusId + { 0 }, // EndpointConfig + { 0 }, // FormatsConfig + { 0 } // DevicesInformation +}; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DmicX1Config[] = +{ + 0x00, // VirtualSlot + 0x00, // eIntcConfigTypeMicArray = 1 , eIntcConfigTypeGeneric = 0 +}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 DmicX1ConfigSize = sizeof (DmicX1Config); + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DmicX2Config[] = +{ + 0x00, // VirtualSlot + 0x01, // eIntcConfigTypeMicArray = 1 , eIntcConfigTypeGeneric = 0 + 0x0A // ArrayType +}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 DmicX2ConfigSize = sizeof (DmicX2Config); + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DmicX4Config[] = +{ + 0x00, // VirtualSlot + 0x01, // eIntcConfigTypeMicArray = 1 , eIntcConfigTypeGeneric = 0 + 0x0D // ArrayType +}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 DmicX4ConfigSize = sizeof (DmicX4Config); + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 BtConfig[] = {0}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 BtConfigSize = 0; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 I2sRender1Config[] = {0}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 I2sRender1ConfigSize = 0; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 I2sRender2Config[] = {0x01}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 I2sRender2ConfigSize = sizeof (I2sRender2Config); + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 I2sCaptureConfig[] = {0}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 I2sCaptureConfigSize = 0; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST DEVICE_INFO I2sRenderDeviceInfo = +{ + "INT34C2", // DeviceId + 0x00, // DeviceInstanceId + 0x01 // DevicePortId +}; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST DEVICE_INFO I2sCaptureDeviceInfo = +{ + "INT34C2", // DeviceId + 0x00, // DeviceInstanceId + 0x01 // DevicePortId +}; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 NhltConfiguration[] = { 0xEFBEADDE }; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 NhltConfigurationSize = sizeof (NhltConfiguration); + diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaLib.c b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaLib.c new file mode 100644 index 0000000000..a87509de1b --- /dev/null +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaLib.c @@ -0,0 +1,886 @@ +/** @file + PCH HD Audio Library implementation. + + Copyright (c) 2019 Intel Corporation. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include +#include +#include +#include +#include + +/** + 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 i; + ENDPOINT_DESCRIPTOR *Endpoint; + Endpoint = (ENDPOINT_DESCRIPTOR*) (NhltTable->EndpointDescriptors); + + if (EndpointIndex > NhltTable->EndpointCount) { + return NULL; + } + + for (i = 0; i < EndpointIndex; i++) { + 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 i; + UINT32 Length; + FORMATS_CONFIG *FormatsConfig; + FORMAT_CONFIG *Format; + + Length = 0; + FormatsConfig = GetNhltEndpointFormatsConfig (Endpoint); + Format = FormatsConfig->FormatsConfiguration; + + if (FormatIndex > FormatsConfig->FormatsCount) { + return NULL; + } + + for (i = 0; i < FormatIndex; i++) { + 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) { + return NULL; + } + + if (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 i; + + 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 (i = 0; i < ( Format->FormatConfiguration.CapabilitiesSize ) ; i++) { + if (i % 16 == 0) { + DEBUG ((DEBUG_VERBOSE, "\n")); + } + DEBUG ((DEBUG_VERBOSE, "0x%02x, ", Format->FormatConfiguration.Capabilities[i])); + } + 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 i; + 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 (i = 0; i < (Endpoint->EndpointConfig.CapabilitiesSize ) ; i++) { + if (i % 16 == 0) DEBUG ((DEBUG_VERBOSE, "\n")); + DEBUG ((DEBUG_VERBOSE, "0x%02x, ", Endpoint->EndpointConfig.Capabilities[i])); + } + + FormatsConfigs = GetNhltEndpointFormatsConfig (Endpoint); + + DEBUG ((DEBUG_INFO, "\n")); + DEBUG ((DEBUG_INFO, " Endpoint->FormatsConfig.FormatsCount = %d\n", FormatsConfigs->FormatsCount)); + for (i = 0; i < FormatsConfigs->FormatsCount; i++) { + Format = GetNhltEndpointFormat (Endpoint, i); + 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 (i = 0; i < DevicesInfo->DeviceInfoCount; i++) { + DeviceInfo = GetNhltEndpointDeviceInfo (Endpoint, i); + 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 i; + + DEBUG ((DEBUG_INFO, "-------------------------- OED CONFIGURATION -------------------------\n")); + DEBUG ((DEBUG_INFO, " OedConfig->CapabilitiesSize = %d B\n", OedConfig->CapabilitiesSize)); + DEBUG ((DEBUG_VERBOSE, " OedConfig->Capabilities:")); + for (i = 0; i < (OedConfig->CapabilitiesSize) ; i++) { + if (i % 16 == 0) DEBUG ((DEBUG_VERBOSE, "\n")); + DEBUG ((DEBUG_VERBOSE, "0x%02x, ", OedConfig->Capabilities[i])); + } + + 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 i; + + 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 (i = 0; i < NhltTable->EndpointCount; i++) { + NhltEndpointDump (GetNhltEndpoint (NhltTable, i)); + } + + NhltOedConfigDump (GetNhltOedConfig (NhltTable)); + DEBUG ((DEBUG_INFO, "----------------------------------------------------------------------\n")); + + DEBUG_CODE_END (); +} + +/** + Constructs FORMATS_CONFIGS structure based on given formats list. + + @param[in][out] *Endpoint Endpoint for which format structures are created + @param[in] FormatBitmask Bitmask of formats supported for given endpoint + + @retval Size of created FORMATS_CONFIGS structure +**/ +UINT32 +NhltFormatsConstructor ( + IN OUT ENDPOINT_DESCRIPTOR *Endpoint, + IN CONST UINT32 FormatsBitmask + ) +{ + FORMATS_CONFIG *FormatsConfig; + FORMAT_CONFIG *Format; + UINT8 FormatIndex; + UINT32 FormatsConfigLength; + + DEBUG ((DEBUG_INFO, "NhltFormatsConstructor() Start, FormatsBitmask = 0x%08x\n", FormatsBitmask)); + + FormatsConfig = NULL; + FormatIndex = 0; + FormatsConfigLength = 0; + + if (!FormatsBitmask) { + DEBUG ((DEBUG_WARN, "No supported format found!\n")); + return 0; + } + + FormatsConfig = GetNhltEndpointFormatsConfig (Endpoint); + FormatsConfig->FormatsCount = 0; + + if (FormatsBitmask & B_HDA_DMIC_2CH_48KHZ_16BIT_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_DMIC_2CH_48KHZ_16BIT_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &Ch2_48kHz16bitFormat, sizeof (WAVEFORMATEXTENSIBLE)); + Format->FormatConfiguration.CapabilitiesSize = DmicStereo16BitFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, DmicStereo16BitFormatConfig, DmicStereo16BitFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_DMIC_2CH_48KHZ_32BIT_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_DMIC_2CH_48KHZ_32BIT_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &Ch2_48kHz32bitFormat, sizeof (WAVEFORMATEXTENSIBLE)); + + Format->FormatConfiguration.CapabilitiesSize = DmicStereo32BitFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, DmicStereo32BitFormatConfig, DmicStereo32BitFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_DMIC_4CH_48KHZ_16BIT_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_DMIC_4CH_48KHZ_16BIT_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &Ch4_48kHz16bitFormat, sizeof (WAVEFORMATEXTENSIBLE)); + Format->FormatConfiguration.CapabilitiesSize = DmicQuad16BitFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, DmicQuad16BitFormatConfig, DmicQuad16BitFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_DMIC_4CH_48KHZ_32BIT_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_DMIC_4CH_48KHZ_32BIT_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &Ch4_48kHz32bitFormat, sizeof (WAVEFORMATEXTENSIBLE)); + + Format->FormatConfiguration.CapabilitiesSize = DmicQuad32BitFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, DmicQuad32BitFormatConfig, DmicQuad32BitFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_DMIC_1CH_48KHZ_16BIT_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_DMIC_1CH_48KHZ_16BIT_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &Ch1_48kHz16bitFormat, sizeof (WAVEFORMATEXTENSIBLE)); + + Format->FormatConfiguration.CapabilitiesSize = DmicMono16BitFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, DmicMono16BitFormatConfig, DmicMono16BitFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_BT_NARROWBAND_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_BT_NARROWBAND_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &NarrowbandFormat, sizeof (WAVEFORMATEXTENSIBLE)); + + Format->FormatConfiguration.CapabilitiesSize = BtFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, BtFormatConfig, BtFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_BT_WIDEBAND_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_BT_WIDEBAND_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &WidebandFormat, sizeof (WAVEFORMATEXTENSIBLE)); + + Format->FormatConfiguration.CapabilitiesSize = BtFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, BtFormatConfig, BtFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_BT_A2DP_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_BT_A2DP_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &A2dpFormat, sizeof (WAVEFORMATEXTENSIBLE)); + + Format->FormatConfiguration.CapabilitiesSize = BtFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, BtFormatConfig, BtFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_I2S_RTK274_RENDER_4CH_48KHZ_24BIT_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_I2S_RTK274_RENDER_4CH_48KHZ_24BIT_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &Ch2_48kHz24bitFormat, sizeof (WAVEFORMATEXTENSIBLE)); + + Format->FormatConfiguration.CapabilitiesSize = I2sRtk274Render4ch48kHz24bitFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, I2sRtk274Render4ch48kHz24bitFormatConfig, I2sRtk274Render4ch48kHz24bitFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + if (FormatsBitmask & B_HDA_I2S_RTK274_CAPTURE_4CH_48KHZ_24BIT_FORMAT) { + DEBUG ((DEBUG_INFO, "Format: B_HDA_I2S_RTK274_CAPTURE_4CH_48KHZ_24BIT_FORMAT\n")); + + Format = GetNhltEndpointFormat (Endpoint, FormatIndex++); + if (Format != NULL) { + CopyMem (&(Format->Format), &Ch2_48kHz24bitFormat, sizeof (WAVEFORMATEXTENSIBLE)); + + Format->FormatConfiguration.CapabilitiesSize = I2sRtk274Capture4ch48kHz24bitFormatConfigSize; + CopyMem (Format->FormatConfiguration.Capabilities, I2sRtk274Capture4ch48kHz24bitFormatConfig, I2sRtk274Capture4ch48kHz24bitFormatConfigSize); + + FormatsConfigLength += sizeof (*Format) + - sizeof (Format->FormatConfiguration.Capabilities) + + Format->FormatConfiguration.CapabilitiesSize; + FormatsConfig->FormatsCount++; + } + } + + DEBUG ((DEBUG_INFO, "NhltFormatsConstructor() End, FormatsCount = %d, FormatsConfigLength = %d B\n", FormatsConfig->FormatsCount, FormatsConfigLength)); + return FormatsConfigLength; +} + +/** + Constructs DEVICES_INFO structure based on given device info list. + + @param[in][out] *Endpoint Endpoint for which device info structures are created + @param[in] DevicesBitmask Bitmask of devices supported for given endpoint + + @retval Size of created DEVICES_INFO structure +**/ +UINT32 +NhltDevicesInfoConstructor ( + IN OUT ENDPOINT_DESCRIPTOR *Endpoint, + IN CONST UINT32 DevicesBitmask + ) +{ + DEVICES_INFO *DevicesInfo; + DEVICE_INFO *DeviceInfo; + UINT8 DeviceIndex; + UINT32 DevicesInfoLength; + + DEBUG ((DEBUG_INFO, "NhltDevicesInfoConstructor() Start, DevicesBitmask = 0x%08x\n", DevicesBitmask)); + + DevicesInfo = NULL; + DeviceIndex = 0; + DevicesInfoLength = 0; + + if (!DevicesBitmask) { + return 0; + } + + DevicesInfo = GetNhltEndpointDevicesInfo (Endpoint); + if (DevicesInfo == NULL) { + return 0; + } + DevicesInfo->DeviceInfoCount = 0; + + if (DevicesBitmask & B_HDA_I2S_RENDER_DEVICE_INFO) { + DEBUG ((DEBUG_INFO, "DeviceInfo: B_HDA_I2S_RENDER_DEVICE_INFO\n")); + + DeviceInfo = GetNhltEndpointDeviceInfo (Endpoint, DeviceIndex++); + if (DeviceInfo != NULL) { + CopyMem (DeviceInfo, &I2sRenderDeviceInfo, sizeof (DEVICE_INFO)); + DevicesInfo->DeviceInfoCount++; + } + } else if (DevicesBitmask & B_HDA_I2S_CAPTURE_DEVICE_INFO) { + DEBUG ((DEBUG_INFO, "DeviceInfo: B_HDA_I2S_CAPTURE_DEVICE_INFO\n")); + + DeviceInfo = GetNhltEndpointDeviceInfo (Endpoint, DeviceIndex++); + if (DeviceInfo != NULL) { + CopyMem (DeviceInfo, &I2sCaptureDeviceInfo, sizeof (DEVICE_INFO)); + DevicesInfo->DeviceInfoCount++; + } + } + + DevicesInfoLength = DevicesInfo->DeviceInfoCount * sizeof (DEVICE_INFO); + + DEBUG ((DEBUG_INFO, "NhltDevicesInfoConstructor() End, DevicesCount = %d, DevicesInfoLength = %d B\n", DevicesInfo->DeviceInfoCount, DevicesInfoLength)); + return DevicesInfoLength; +} + +/** + Constructs NHLT_ENDPOINT structure based on given endpoint type. + + @param[in][out] *NhltTable NHLT table for which endpoint is created + @param[in] EndpointType Type of endpoint to be created + @param[in] EndpointFormatsBitmask Bitmask of formats supported by endpoint + @param[in] EndpointDevicesBitmask Bitmask of device info for endpoint + @param[in] EndpointIndex Endpoint index in NHLT table + + @retval Size of created NHLT_ENDPOINT structure +**/ +UINT32 +NhltEndpointConstructor ( + IN OUT NHLT_ACPI_TABLE *NhltTable, + IN NHLT_ENDPOINT EndpointType, + IN UINT32 EndpointFormatsBitmask, + IN UINT32 EndpointDevicesBitmask, + IN UINT8 EndpointIndex + ) +{ + + ENDPOINT_DESCRIPTOR *Endpoint; + SPECIFIC_CONFIG *EndpointConfig; + CONST UINT8 *EndpointConfigBuffer; + UINT32 EndpointConfigBufferSize; + UINT32 EndpointDescriptorLength; + + DEBUG ((DEBUG_INFO, "NhltEndpointConstructor() Start, EndpointIndex = %d\n", EndpointIndex)); + + EndpointDescriptorLength = 0; + Endpoint = GetNhltEndpoint (NhltTable, EndpointIndex); + if (Endpoint == NULL) { + return 0; + } + EndpointDescriptorLength = sizeof (ENDPOINT_DESCRIPTOR) + - sizeof (SPECIFIC_CONFIG) + - sizeof (FORMAT_CONFIG) + - sizeof (DEVICE_INFO); + + switch (EndpointType) { + case HdaDmicX1: + DEBUG ((DEBUG_INFO, "Endpoint: HdaDmicX1\n")); + CopyMem (Endpoint, &HdaEndpointDmicX1, sizeof (ENDPOINT_DESCRIPTOR)); + EndpointConfigBuffer = DmicX1Config; + EndpointConfigBufferSize = DmicX1ConfigSize; + break; + case HdaDmicX2: + DEBUG ((DEBUG_INFO, "Endpoint: HdaDmicX2\n")); + CopyMem (Endpoint, &HdaEndpointDmicX2, sizeof (ENDPOINT_DESCRIPTOR)); + EndpointConfigBuffer = DmicX2Config; + EndpointConfigBufferSize = DmicX2ConfigSize; + break; + case HdaDmicX4: + DEBUG ((DEBUG_INFO, "Endpoint: HdaDmicX4\n")); + CopyMem (Endpoint, &HdaEndpointDmicX4, sizeof (ENDPOINT_DESCRIPTOR)); + EndpointConfigBuffer = DmicX4Config; + EndpointConfigBufferSize = DmicX4ConfigSize; + break; + case HdaBtRender: + DEBUG ((DEBUG_INFO, "Endpoint: HdaBtRender\n")); + CopyMem (Endpoint, &HdaEndpointBtRender, sizeof (ENDPOINT_DESCRIPTOR)); + if (IsPchH ()) { + Endpoint->VirtualBusId = 0; + } + + EndpointConfigBuffer = BtConfig; + EndpointConfigBufferSize = BtConfigSize; + break; + case HdaBtCapture: + DEBUG ((DEBUG_INFO, "Endpoint: HdaBtCapture\n")); + CopyMem (Endpoint, &HdaEndpointBtCapture, sizeof (ENDPOINT_DESCRIPTOR)); + if (IsPchH ()) { + Endpoint->VirtualBusId = 0; + } + + EndpointConfigBuffer = BtConfig; + EndpointConfigBufferSize = BtConfigSize; + break; + case HdaI2sRender1: + DEBUG ((DEBUG_INFO, "Endpoint: HdaI2sRender1\n")); + CopyMem (Endpoint, &HdaEndpointI2sRender, sizeof (ENDPOINT_DESCRIPTOR)); + EndpointConfigBuffer = I2sRender1Config; + EndpointConfigBufferSize = I2sRender1ConfigSize; + break; + case HdaI2sRender2: + DEBUG ((DEBUG_INFO, "Endpoint: HdaI2sRender2\n")); + CopyMem (Endpoint, &HdaEndpointI2sRender, sizeof (ENDPOINT_DESCRIPTOR)); + EndpointConfigBuffer = I2sRender2Config; + EndpointConfigBufferSize = I2sRender2ConfigSize; + break; + case HdaI2sCapture: + DEBUG ((DEBUG_INFO, "Endpoint: HdaI2sCapture\n")); + CopyMem (Endpoint, &HdaEndpointI2sCapture, sizeof (ENDPOINT_DESCRIPTOR)); + EndpointConfigBuffer = I2sCaptureConfig; + EndpointConfigBufferSize = I2sCaptureConfigSize; + break; + default: + DEBUG ((DEBUG_WARN, "Unknown endpoint!\n")); + return 0; + } + + EndpointConfig = GetNhltEndpointDeviceCapabilities (Endpoint); + EndpointConfig->CapabilitiesSize = EndpointConfigBufferSize; + CopyMem (EndpointConfig->Capabilities, EndpointConfigBuffer, EndpointConfig->CapabilitiesSize); + EndpointDescriptorLength += sizeof (*EndpointConfig) + - sizeof (EndpointConfig->Capabilities) + + EndpointConfig->CapabilitiesSize; + + EndpointDescriptorLength += NhltFormatsConstructor (Endpoint, EndpointFormatsBitmask); + EndpointDescriptorLength += NhltDevicesInfoConstructor (Endpoint, EndpointDevicesBitmask); + + Endpoint->EndpointDescriptorLength = EndpointDescriptorLength; + + DEBUG ((DEBUG_INFO, "NhltEndpointConstructor() End, EndpointDescriptorLength = %d B\n", Endpoint->EndpointDescriptorLength)); + return Endpoint->EndpointDescriptorLength; +} + +/** + Constructs SPECIFIC_CONFIG structure for OED configuration. + + @param[in][out] *NhltTable NHLT table for which OED config is created + + @retval Size of created SPECIFIC_CONFIG structure +**/ +UINT32 +NhltOedConfigConstructor ( + IN OUT NHLT_ACPI_TABLE *NhltTable + ) +{ + SPECIFIC_CONFIG *OedConfig; + UINT32 OedConfigLength; + + OedConfigLength = 0; + OedConfig = GetNhltOedConfig (NhltTable); + + OedConfig->CapabilitiesSize = NhltConfigurationSize; + CopyMem (OedConfig->Capabilities, (UINT8*) NhltConfiguration, NhltConfigurationSize); + + OedConfigLength = sizeof (*OedConfig) + - sizeof (OedConfig->Capabilities) + + OedConfig->CapabilitiesSize; + + return OedConfigLength; +} + +/** + Constructs NHLT_ACPI_TABLE structure based on given Endpoints list. + + @param[in] *EndpointTable List of endpoints for NHLT + @param[in][out] **NhltTable NHLT table to be created + @param[in][out] *NhltTableSize Size of created NHLT table + + @retval EFI_SUCCESS NHLT created successfully + @retval EFI_BAD_BUFFER_SIZE Not enough resources to allocate NHLT +**/ +EFI_STATUS +NhltConstructor ( + IN PCH_HDA_NHLT_ENDPOINTS *EndpointTable, + IN OUT NHLT_ACPI_TABLE **NhltTable, + IN OUT UINT32 *NhltTableSize + ) +{ + EFI_STATUS Status; + UINT8 Index; + UINT32 TableSize; + UINT32 EndpointDescriptorsLength; + UINT32 OedConfigLength; + NHLT_ACPI_TABLE *Table; + + + Status = EFI_SUCCESS; + TableSize = PCH_HDA_NHLT_TABLE_SIZE; + EndpointDescriptorsLength = 0; + OedConfigLength = 0; + + Table = AllocateZeroPool (TableSize); + + if (Table == NULL) { + return EFI_BAD_BUFFER_SIZE; + } + + Table->EndpointCount = 0; + + for (Index = 0; Index < HdaEndpointMax; Index++) { + if (EndpointTable[Index].Enable == TRUE) { + EndpointDescriptorsLength += NhltEndpointConstructor (Table, + EndpointTable[Index].EndpointType, + EndpointTable[Index].EndpointFormatsBitmask, + EndpointTable[Index].EndpointDevicesBitmask, + Table->EndpointCount++); + } + } + DEBUG ((DEBUG_INFO, "NhltConstructor: EndpointCount = %d, All EndpointDescriptorsLength = %d B\n", Table->EndpointCount, EndpointDescriptorsLength)); + + OedConfigLength = NhltOedConfigConstructor (Table); + DEBUG ((DEBUG_INFO, "NhltConstructor: OedConfigLength = %d B\n", OedConfigLength)); + + TableSize = EndpointDescriptorsLength + OedConfigLength; + + *NhltTableSize = TableSize; + *NhltTable = Table; + + return Status; +} + +/** + Constructs EFI_ACPI_DESCRIPTION_HEADER structure for NHLT table. + + @param[in][out] *NhltTable NHLT table for which header will be created + @param[in] NhltTableSize Size of NHLT table + + @retval None +**/ +VOID +NhltAcpiHeaderConstructor ( + IN OUT NHLT_ACPI_TABLE *NhltTable, + IN UINT32 NhltTableSize + ) +{ + DEBUG ((DEBUG_INFO, "NhltAcpiHeaderConstructor() Start\n")); + + // Header + NhltTable->Header.Signature = NHLT_ACPI_TABLE_SIGNATURE; + NhltTable->Header.Length = (UINT32) (NhltTableSize + sizeof (NHLT_ACPI_TABLE) - sizeof (ENDPOINT_DESCRIPTOR) - sizeof (SPECIFIC_CONFIG)); + NhltTable->Header.Revision = 0x0; + NhltTable->Header.Checksum = 0x0; + + CopyMem (NhltTable->Header.OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (NhltTable->Header.OemId)); + NhltTable->Header.OemTableId = PcdGet64 (PcdAcpiDefaultOemTableId); + NhltTable->Header.OemRevision = PcdGet32 (PcdAcpiDefaultOemRevision); + NhltTable->Header.CreatorId = PcdGet32 (PcdAcpiDefaultCreatorId); + NhltTable->Header.CreatorRevision = PcdGet32 (PcdAcpiDefaultCreatorRevision); + + DEBUG ((DEBUG_INFO, "NhltAcpiHeaderConstructor(), NhltAcpiTable->Header.Length = %d B\n", NhltTable->Header.Length)); +} + diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaNhltConfig.c b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaNhltConfig.c new file mode 100644 index 0000000000..301b1f8d10 --- /dev/null +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/Library/Private/DxePchHdaLib/PchHdaNhltConfig.c @@ -0,0 +1,439 @@ +/** @file + This file contains HD Audio NHLT Configuration BLOBs + + Copyright (c) 2019 Intel Corporation. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +// +// CFL NHLT Configuration BLOBs +// + +// +// DMIC Configuration BLOBs +// +// DMIC Config 2 channels, 16 bits, 2.4Mhz BCLK +GLOBAL_REMOVE_IF_UNREFERENCED +CONST UINT32 DmicStereo16BitFormatConfig[] = +{ + 0x00000001,0xffff3210,0xffffff10,0xffffff32,0xffffffff, + 3, + 3, + 0x00300003, + 0x00300003, + 0x3, + 0x1, 0x09001303, 0x0, 0x0303, 0, 0, 0, 0, + 0x11, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x11, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e, + 0x1, 0x09001303, 0x0, 0x0303, 0, 0, 0, 0, + 0x11, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x11, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e +}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 DmicStereo16BitFormatConfigSize = sizeof (DmicStereo16BitFormatConfig); + +// DMIC Config 2 channels, 32 bits, 2.4Mhz BCLK +GLOBAL_REMOVE_IF_UNREFERENCED +CONST UINT32 DmicStereo32BitFormatConfig[] = +{ + 0x00000001,0xffff3210,0xffffff10,0xffffff32,0xffffffff, + 3, + 3, + 0x00380003, + 0x00380003, + 0x3, + 0x1, 0x09001303, 0x0, 0x0303, 0, 0, 0, 0, + 0x11, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x11, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e, + 0x1, 0x09001303, 0x0, 0x0303, 0, 0, 0, 0, + 0x11, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x11, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e +}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 DmicStereo32BitFormatConfigSize = sizeof (DmicStereo32BitFormatConfig); + +// DMIC Config 4 channels, 16 bits, 2.4Mhz BCLK +GLOBAL_REMOVE_IF_UNREFERENCED +CONST UINT32 DmicQuad16BitFormatConfig[] = +{ + 0x00000001,0xffff3210,0xffffff10,0xffffff32,0xffffffff, + 3, + 3, + 0x00320003, + 0x00320003, + 0x3, + 0x1, 0x09001303, 0x0, 0x0303, 0, 0, 0, 0, + 0x11, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x11, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e, + 0x1, 0x09001303, 0x0, 0x0303, 0, 0, 0, 0, + 0x11, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x11, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e +}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 DmicQuad16BitFormatConfigSize = sizeof (DmicQuad16BitFormatConfig); + +// DMIC Config 4 channels, 32 bits, 2.4Mhz BCLK +GLOBAL_REMOVE_IF_UNREFERENCED +CONST UINT32 DmicQuad32BitFormatConfig[] = +{ + 0x00000001,0xffff3210,0xffffff10,0xffffff32,0xffffffff, + 3, + 3, + 0x003A0003, + 0x003A0003, + 0x3, + 0x1, 0x09001303, 0x0, 0x0303, 0, 0, 0, 0, + 0x11, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x11, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e, + 0x1, 0x09001303, 0x0, 0x0303, 0, 0, 0, 0, + 0x11, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x11, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e +}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 DmicQuad32BitFormatConfigSize = sizeof (DmicQuad32BitFormatConfig); + + +// DMIC Config 1 channel, 16 bits +GLOBAL_REMOVE_IF_UNREFERENCED +CONST UINT32 DmicMono16BitFormatConfig[] = +{ + 0x00000000, + 0xfffffff0,0xfffffff0,0xfffffff0,0xfffffff0, + 3, + 3, + 0x00300003, + 0x00300003, + 0x3, + 0x0, 0x09001303, 0x0, 0x0301, 0, 0, 0, 0, + 0x10, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x10, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e, + 0x0, 0x09001303, 0x0, 0x0301, 0, 0, 0, 0, + 0x10, 0x402a0, 0, 0, 0, 0, 0, 0, + 0x10, 0xe03ae, 0, 0, 0, 0, 0, 0, + 0x00008, 0xfffae, 0xfff12, 0xffdfb, 0xffc61, 0xffa5a, 0xff82b, 0xff641, 0xff520, 0xff544, 0xff6f4, 0xffa25, 0xffe65, + 0x002e0, 0x0068f, 0x00876, 0x007f1, 0x004f5, 0x0002a, 0xffad4, 0xff68a, 0xff4bf, 0xff64f, 0xffb20, + 0x0020f, 0x00929, 0x00e2d, 0x00f40, 0x00b92, 0x003bf, 0xff9cd, 0xff0b0, 0xfeb6e, 0xfec2a, 0xff351, + 0xfff4f, 0x00ccd, 0x0179d, 0x01bfc, 0x017d7, 0x00ba3, 0xffa7e, 0xfe96f, 0xfddf5, 0xfdc4d, 0xfe5ee, + 0xff8ce, 0x00fb7, 0x023a8, 0x02df5, 0x02a74, 0x01910, 0xffe2c, 0xfe19c, 0xfcc64, 0xfc5ee, 0xfd17e, + 0xfecd4, 0x01071, 0x03198, 0x0457e, 0x044c9, 0x02e24, 0x00728, 0xfdb0e, 0xfb781, 0xfa86b, 0xfb408, + 0xfd884, 0x00c02, 0x03f37, 0x061e8, 0x06807, 0x04dc5, 0x01954, 0xfd98c, 0xfa1c8, 0xf840f, 0xf8b52, + 0xfb78c, 0xffd23, 0x047db, 0x080b1, 0x094e3, 0x07c08, 0x03b41, 0xfe45e, 0xf9101, 0xf5b1e, 0xf54f4, + 0xf8307, 0xfda0b, 0x0418f, 0x09ad0, 0x0c9d6, 0x0be16, 0x0780b, 0x009dd, 0xf92ba, 0xf3606, 0xf10ed, + 0xf315e, 0xf9135, 0x0172c, 0x09d83, 0x0fc9e, 0x11695, 0x0e05b, 0x065bf, 0xfc6ed, 0xf2ff4, 0xecc96, + 0xebbc9, 0xf0668, 0xf9be7, 0x05601, 0x1029e, 0x17140, 0x18065, 0x12728, 0x07874, 0xf9edb, 0xed202, + 0xe486c, 0xe294d, 0xe820f, 0xf424a, 0x03f29, 0x13d68, 0x1ff61, 0x253b2, 0x220fa, 0x16be1, 0x05638, + 0xf1798, 0xdf165, 0xd211a, 0xcd3f9, 0xd1eb5, 0xdfa89, 0xf4802, 0x0d656, 0x26d63, 0x3d808, 0x4ecc3, + 0x59315, 0x5c520, 0x58db6, 0x503d6, 0x444dd, 0x36ecb, 0x29b9a, 0x1de5d, 0x14234, 0x0cae0, 0x07669, + 0x03f40, 0x01e4e, 0x00c95, 0x0043b, 0x000f9,0xff961, 0x00823, 0x0084f, 0x00a39, 0x00d21, 0x010a8, 0x0149a, 0x018cc, 0x01d15, 0x0214d, 0x02543, 0x028c8, 0x02baa, + 0x02db8, 0x02ec6, 0x02eac, 0x02d4c, 0x02a90, 0x02672, 0x020f9, 0x01a3b, 0x0125c, 0x00994, 0x00025, + 0xff662, 0xfeca3, 0xfe34c, 0xfdabe, 0xfd364, 0xfcd94, 0xfc9a4, 0xfc7dd, 0xfc86b, 0xfcb6e, 0xfd0e6, + 0xfd8bb, 0xfe2b9, 0xfee8f, 0xffbd5, 0x00a0c, 0x018a3, 0x026fc, 0x03474, 0x04065, 0x04a36, 0x0515a, + 0x0555a, 0x055df, 0x052b2, 0x04bc3, 0x0412c, 0x03332, 0x02242, 0x00ef3, 0xff9fb, 0xfe430, 0xfce78, + 0xfb9c6, 0xfa70f, 0xf973a, 0xf8b1e, 0xf836e, 0xf80b7, 0xf8355, 0xf8b6e, 0xf98ea, 0xfab78, 0xfc288, + 0xfdd52, 0xffadf, 0x01a0a, 0x03992, 0x05823, 0x07465, 0x08d0c, 0x0a0e3, 0x0aedc, 0x0b61f, 0x0b614, + 0x0ae6b, 0x09f23, 0x0888d, 0x06b4c, 0x04850, 0x020d3, 0xff647, 0xfca4f, 0xf9eae, 0xf7533, 0xf4fa8, + 0xf2fc0, 0xf1702, 0xf06ba, 0xeffe6, 0xf032d, 0xf10d3, 0xf28b4, 0xf4a42, 0xf7486, 0xfa62a, 0xfdd81, + 0x01896, 0x0553d, 0x09128, 0x0c9fe, 0x0fd6f, 0x1294e, 0x14ba5, 0x162cb, 0x16d75, 0x16ac4, 0x15a52, + 0x13c38, 0x1110d, 0x0d9e9, 0x09856, 0x04e4a, 0xffe17, 0xfaa51, 0xf55c4, 0xf0350, 0xeb5d6, 0xe7020, + 0xe34c8, 0xe0620, 0xde61c, 0xdd64b, 0xdd7bd, 0xdeb03, 0xe102a, 0xe46b5, 0xe8dab, 0xee397, 0xf4699, + 0xfb479, 0x02ab3, 0x0a691, 0x1253c, 0x1a3d9, 0x21f98, 0x295cc, 0x30400, 0x36803, 0x3bff8, 0x40a63, + 0x44628, 0x4729b, 0x48f76, 0x49cd2, 0x49b35, 0x48b71, 0x46ea5, 0x44632, 0x413a6, 0x3d8b3, 0x3971b, + 0x350a6, 0x30716, 0x2bc15, 0x27131, 0x227cb, 0x1e11d, 0x19e2a, 0x15fc1, 0x1267c, 0x0f2c0, 0x0c4c2, + 0x09c8b, 0x079fb, 0x05cd2, 0x044b2, 0x0312d, 0x021c5, 0x015f4, 0x0135e +}; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 DmicMono16BitFormatConfigSize = sizeof (DmicMono16BitFormatConfig); + +// +// I2S/SSP Configuration BLOBs +// Audio Format and Configuration details +// +// Frequency: 48kHz, PCM resolution: 24 bits +// TDM slots: 4 +// Codec: Realtek ALC274, mode: slave +GLOBAL_REMOVE_IF_UNREFERENCED +CONST UINT32 I2sRtk274Render4ch48kHz24bitFormatConfig[] = {0x0, 0xffffff10, 0xffffff32, 0xffff3210, 0xffff3210, 0xffff3210, 0xffff3210, 0xffff3210, 0xffff3210, 0x83d00437, 0xc0700000, 0x0, 0x02010004, 0xf, 0xf, 0x4002, 0x4, 0x7070f00, 0x20, 0x00000001, 0x00000fff}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 I2sRtk274Render4ch48kHz24bitFormatConfigSize = sizeof (I2sRtk274Render4ch48kHz24bitFormatConfig); + +GLOBAL_REMOVE_IF_UNREFERENCED +CONST UINT32 I2sRtk274Capture4ch48kHz24bitFormatConfig[] = {0x0, 0xffffff10, 0xffffff10, 0xffffff10, 0xffffff10, 0xffffff10, 0xffffff10, 0xffffff10, 0xffffff10, 0x83d00437, 0xc0700000, 0x0, 0x02010004, 0xf, 0xf, 0x4002, 0x4, 0x7070f00, 0x20, 0x00000001, 0x00000fff}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 I2sRtk274Capture4ch48kHz24bitFormatConfigSize = sizeof (I2sRtk274Capture4ch48kHz24bitFormatConfig); + +// +// BlueTooth Configuration BLOBs +// +GLOBAL_REMOVE_IF_UNREFERENCED +CONST UINT32 BtFormatConfig[] = +{ + 0x0, 0xfffffff0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x80c0003f, 0xd3400000, 0x0, 0x02000005, 0x01, 0x01, 0x4002, + 0x0, 0x07020000, 0x0, 0x01, 0x0 +}; +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 BtFormatConfigSize = sizeof (BtFormatConfig); -- 2.16.2.windows.1