From 6caf35b406185bc2d7df106ed16afffaabdce0ed Mon Sep 17 00:00:00 2001 From: Sergey Isakov Date: Wed, 27 Nov 2019 14:16:02 +0300 Subject: [PATCH] create library for HDA operations Signed-off-by: Sergey Isakov --- Clover.dsc | 1 + CloverPkg.dec | 3 + Drivers/AudioDxe/AudioDxe.inf | 3 +- Drivers/AudioDxe/HdaCodec/HdaCodec.c | 27 +- .../AudioDxe/HdaCodec/HdaCodecComponentName.c | 2 +- .../AudioDxe/HdaController/HdaController.c | 116 ++-- .../AudioDxe/HdaController/HdaController.h | 2 +- Drivers/AudioDxe/HdaModels.c | 24 - Include/IndustryStandard/HdaCodec.h | 4 +- Include/Library/HdaModels.h | 505 +-------------- Library/HdaDevicesLib/HdaDevicesLib.c | 579 ++++++++++++++++++ Library/HdaDevicesLib/HdaDevicesLib.inf | 31 + rEFIt_UEFI/Platform/Platform.h | 21 +- rEFIt_UEFI/Platform/Settings.c | 9 +- rEFIt_UEFI/Platform/hda.c | 39 +- rEFIt_UEFI/refit.inf | 9 +- rEFIt_UEFI/refit/menu.c | 2 +- 17 files changed, 701 insertions(+), 676 deletions(-) delete mode 100644 Drivers/AudioDxe/HdaModels.c create mode 100644 Library/HdaDevicesLib/HdaDevicesLib.c create mode 100644 Library/HdaDevicesLib/HdaDevicesLib.inf diff --git a/Clover.dsc b/Clover.dsc index 9a9e16bf5..249eb89ac 100644 --- a/Clover.dsc +++ b/Clover.dsc @@ -157,6 +157,7 @@ MemLogLib|Library/MemLogLibDefault/MemLogLibDefault.inf VideoBiosPatchLib|Library/VideoBiosPatchLib/VideoBiosPatchLib.inf WaveLib|Library/WaveLib/WaveLib.inf + HdaDevicesLib|Library/HdaDevicesLib/HdaDevicesLib.inf OcGuardLib|Library/OcGuardLib/OcGuardLib.inf MachoLib|Library/MachoLib/MachoLib.inf diff --git a/CloverPkg.dec b/CloverPkg.dec index 69e646e46..dfd0853b2 100644 --- a/CloverPkg.dec +++ b/CloverPkg.dec @@ -35,6 +35,9 @@ ## @libraryclass WaveLib|Include/Library/WaveLib.h + ## @libraryclass + HdaDevicesLib|Include/Library/HdaModels.h + ## @libraryclass DeviceTreeLib|Include/Library/DeviceTreeLib.h diff --git a/Drivers/AudioDxe/AudioDxe.inf b/Drivers/AudioDxe/AudioDxe.inf index 6e3693b95..85712a427 100644 --- a/Drivers/AudioDxe/AudioDxe.inf +++ b/Drivers/AudioDxe/AudioDxe.inf @@ -39,6 +39,7 @@ SynchronizationLib DebugLib DevicePathLib + HdaDevicesLib MemoryAllocationLib PcdLib UefiBootServicesTableLib @@ -67,7 +68,7 @@ HdaController/HdaControllerHdaIo.c HdaController/HdaController.h HdaController/HdaController.c - HdaModels.c +# HdaModels.c AudioDxe.h AudioDxe.c diff --git a/Drivers/AudioDxe/HdaCodec/HdaCodec.c b/Drivers/AudioDxe/HdaCodec/HdaCodec.c index 5dc2456a4..0a3772a69 100644 --- a/Drivers/AudioDxe/HdaCodec/HdaCodec.c +++ b/Drivers/AudioDxe/HdaCodec/HdaCodec.c @@ -25,6 +25,7 @@ //#include "HdaCodec.h" #include "HdaCodecComponentName.h" //#include +#include EFI_STATUS EFIAPI @@ -465,31 +466,7 @@ HdaCodecProbeCodec( if (EFI_ERROR(Status)) return Status; - // Try to match codec name. - HdaCodecDev->Name = NULL; - UINTN CodecIndex = 0; - while (gHdaCodecList[CodecIndex].Id != 0) { - // Check ID and revision against array element. - if ((gHdaCodecList[CodecIndex].Id == HdaCodecDev->VendorId) && (gHdaCodecList[CodecIndex].Rev <= ((UINT16)HdaCodecDev->RevisionId))) - HdaCodecDev->Name = gHdaCodecList[CodecIndex].Name; - CodecIndex++; - } - - // If match wasn't found, try again with a generic device ID. - if (HdaCodecDev->Name == NULL) { - CodecIndex = 0; - while (gHdaCodecList[CodecIndex].Id != 0) { - // Check ID and revision against array element. - if (gHdaCodecList[CodecIndex].Id == GET_CODEC_GENERIC_ID(HdaCodecDev->VendorId)) - HdaCodecDev->Name = gHdaCodecList[CodecIndex].Name; - CodecIndex++; - } - } - - // If match still wasn't found, codec is unknown. - if (HdaCodecDev->Name == NULL) - HdaCodecDev->Name = HDA_CODEC_MODEL_GENERIC; - DEBUG((DEBUG_INFO, "Codec name: %s\n", HdaCodecDev->Name)); + HdaCodecGetName(HdaCodecDev->VendorId, (UINT16)HdaCodecDev->RevisionId, &HdaCodecDev->Name); // Get function group count. Status = HdaIo->SendCommand(HdaIo, HDA_NID_ROOT, diff --git a/Drivers/AudioDxe/HdaCodec/HdaCodecComponentName.c b/Drivers/AudioDxe/HdaCodec/HdaCodecComponentName.c index 5fdb7d443..4235e12fb 100644 --- a/Drivers/AudioDxe/HdaCodec/HdaCodecComponentName.c +++ b/Drivers/AudioDxe/HdaCodec/HdaCodecComponentName.c @@ -23,7 +23,7 @@ */ #include "HdaCodecComponentName.h" -#include +//#include GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE gHdaCodecDriverNameTable[] = { diff --git a/Drivers/AudioDxe/HdaController/HdaController.c b/Drivers/AudioDxe/HdaController/HdaController.c index bc5bea113..7ec9f75b0 100644 --- a/Drivers/AudioDxe/HdaController/HdaController.c +++ b/Drivers/AudioDxe/HdaController/HdaController.c @@ -22,6 +22,7 @@ * SOFTWARE. */ +#include #include "HdaController.h" #include "HdaControllerComponentName.h" @@ -209,39 +210,6 @@ HdaControllerInitPciHw( return EFI_SUCCESS; } -VOID -EFIAPI -HdaControllerGetName( - IN HDA_CONTROLLER_DEV *HdaControllerDev) -{ -// DEBUG((DEBUG_INFO, "HdaControllerGetName(): start\n")); - - // Try to match controller name. - HdaControllerDev->Name = NULL; - UINTN ControllerIndex = 0; - while (gHdaControllerList[ControllerIndex].Id != 0) { - // Check ID and revision against array element. - if (gHdaControllerList[ControllerIndex].Id == HdaControllerDev->VendorId) - HdaControllerDev->Name = gHdaControllerList[ControllerIndex].Name; - ControllerIndex++; - } - - // If match wasn't found, try again with a generic device ID. - if (HdaControllerDev->Name == NULL) { - ControllerIndex = 0; - while (gHdaControllerList[ControllerIndex].Id != 0) { - // Check ID and revision against array element. - if (gHdaControllerList[ControllerIndex].Id == GET_PCI_GENERIC_ID(HdaControllerDev->VendorId)) - HdaControllerDev->Name = gHdaControllerList[ControllerIndex].Name; - ControllerIndex++; - } - } - - // If match still wasn't found, controller is unknown. - if (HdaControllerDev->Name == NULL) - HdaControllerDev->Name = HDA_CONTROLLER_MODEL_GENERIC; -// DEBUG((DEBUG_INFO, "HdaControllerGetName(): controller is %s\n", HdaControllerDev->Name)); -} EFI_STATUS EFIAPI @@ -764,58 +732,60 @@ HdaControllerDriverBindingStart( InitializeSpinLock(&HdaControllerDev->SpinLock); // Setup PCI hardware. - Status = HdaControllerInitPciHw(HdaControllerDev); - if (EFI_ERROR (Status)) - goto FREE_CONTROLLER; + do { + Status = HdaControllerInitPciHw(HdaControllerDev); + if (EFI_ERROR(Status)) + break; - // Get controller name. - HdaControllerGetName(HdaControllerDev); + // Get controller name. + HdaControllerGetName(HdaControllerDev->VendorId, &HdaControllerDev->Name); - // Reset controller. - Status = HdaControllerReset(HdaControllerDev); - if (EFI_ERROR(Status)) - goto FREE_CONTROLLER; + // Reset controller. + Status = HdaControllerReset(HdaControllerDev); + if (EFI_ERROR(Status)) + break; - // Install info protocol. - Status = HdaControllerInstallProtocols(HdaControllerDev); - if (EFI_ERROR(Status)) - goto FREE_CONTROLLER; + // Install info protocol. + Status = HdaControllerInstallProtocols(HdaControllerDev); + if (EFI_ERROR(Status)) + break; - // Initialize CORB and RIRB. - Status = HdaControllerInitCorb(HdaControllerDev); - if (EFI_ERROR(Status)) - goto FREE_CONTROLLER; - Status = HdaControllerInitRirb(HdaControllerDev); - if (EFI_ERROR(Status)) - goto FREE_CONTROLLER; + // Initialize CORB and RIRB. + Status = HdaControllerInitCorb(HdaControllerDev); + if (EFI_ERROR(Status)) + break; + Status = HdaControllerInitRirb(HdaControllerDev); + if (EFI_ERROR(Status)) + break; - // needed for QEMU. + // needed for QEMU. #ifdef QEMU - UINT16 dd = 0xFF; - PciIo->Mem.Write(PciIo, EfiPciIoWidthUint16, PCI_HDA_BAR, HDA_REG_RINTCNT, 1, &dd); + UINT16 dd = 0xFF; + PciIo->Mem.Write(PciIo, EfiPciIoWidthUint16, PCI_HDA_BAR, HDA_REG_RINTCNT, 1, &dd); #endif - // Start CORB and RIRB - Status = HdaControllerSetCorb(HdaControllerDev, TRUE); - if (EFI_ERROR(Status)) - goto FREE_CONTROLLER; - Status = HdaControllerSetRirb(HdaControllerDev, TRUE); - if (EFI_ERROR(Status)) - goto FREE_CONTROLLER; + // Start CORB and RIRB + Status = HdaControllerSetCorb(HdaControllerDev, TRUE); + if (EFI_ERROR(Status)) + break; + Status = HdaControllerSetRirb(HdaControllerDev, TRUE); + if (EFI_ERROR(Status)) + break; - // Init streams. - Status = HdaControllerInitStreams(HdaControllerDev); - if (EFI_ERROR(Status)) - goto FREE_CONTROLLER; + // Init streams. + Status = HdaControllerInitStreams(HdaControllerDev); + if (EFI_ERROR(Status)) + break; - // Scan for codecs. - Status = HdaControllerScanCodecs(HdaControllerDev); - ASSERT_EFI_ERROR(Status); + // Scan for codecs. + Status = HdaControllerScanCodecs(HdaControllerDev); +// ASSERT_EFI_ERROR(Status); -// DEBUG((DEBUG_INFO, "HdaControllerDriverBindingStart(): done\n")); - return Status; + // DEBUG((DEBUG_INFO, "HdaControllerDriverBindingStart(): done\n")); + return Status; + } while (FALSE); -FREE_CONTROLLER: +//FREE_CONTROLLER: // Restore PCI attributes if needed. if (HdaControllerDev->OriginalPciAttributesSaved) PciIo->Attributes(PciIo, EfiPciIoAttributeOperationSet, HdaControllerDev->OriginalPciAttributes, NULL); diff --git a/Drivers/AudioDxe/HdaController/HdaController.h b/Drivers/AudioDxe/HdaController/HdaController.h index 1ba7df161..fdd9b02f5 100644 --- a/Drivers/AudioDxe/HdaController/HdaController.h +++ b/Drivers/AudioDxe/HdaController/HdaController.h @@ -27,7 +27,7 @@ #include "AudioDxe.h" #include -#include +//#include // // Consumed protocols. diff --git a/Drivers/AudioDxe/HdaModels.c b/Drivers/AudioDxe/HdaModels.c deleted file mode 100644 index 7e37667dd..000000000 --- a/Drivers/AudioDxe/HdaModels.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * File: HdaModels.c - * - * Copyright (c) 2018 John Davis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - diff --git a/Include/IndustryStandard/HdaCodec.h b/Include/IndustryStandard/HdaCodec.h index 7450cfaf6..9b467c47e 100644 --- a/Include/IndustryStandard/HdaCodec.h +++ b/Include/IndustryStandard/HdaCodec.h @@ -26,7 +26,7 @@ #define _EFI_HDA_CODEC_H_ //#include "AudioDxe.h" -#include +//#include #include #include #include @@ -121,7 +121,7 @@ struct _HDA_CODEC_DEV { // Codec information. UINT32 VendorId; UINT32 RevisionId; - CHAR16 *Name; + CHAR16 *Name; HDA_FUNC_GROUP *FuncGroups; UINTN FuncGroupsCount; diff --git a/Include/Library/HdaModels.h b/Include/Library/HdaModels.h index 91fae4ef7..2d8ad593b 100644 --- a/Include/Library/HdaModels.h +++ b/Include/Library/HdaModels.h @@ -32,7 +32,7 @@ // Generic names. #define HDA_CONTROLLER_MODEL_GENERIC L"HD Audio Controller" -#define HDA_CODEC_MODEL_GENERIC L"Unknown Codec" +#define HDA_CODEC_MODEL_GENERIC L"Unknown Codec" #define GET_PCI_VENDOR_ID(a) (a & 0xFFFF) #define GET_PCI_DEVICE_ID(a) ((a >> 16) & 0xFFFF) @@ -41,6 +41,13 @@ #define GET_CODEC_DEVICE_ID(a) (a & 0xFFFF) #define GET_CODEC_GENERIC_ID(a) (a | 0xFFFF) +#define HDA_VMIN 0x02 // Minor, Major Version +#define HDA_GCTL 0x08 // Global Control Register +#define HDA_ICO 0x60 // Immediate Command Output Interface +#define HDA_IRI 0x64 // Immediate Response Input Interface +#define HDA_ICS 0x68 // Immediate Command Status + + // Vendor IDs. #define VEN_AMD_ID 0x1002 #define VEN_ANALOGDEVICES_ID 0x11D4 @@ -76,500 +83,28 @@ // Controller name strings. typedef struct { UINT32 Id; - CHAR16 *Name; + CHAR8 *Name; } HDA_CONTROLLER_LIST_ENTRY; // Codec name strings. typedef struct { UINT32 Id; UINT16 Rev; - CHAR16 *Name; + CHAR8 *Name; } HDA_CODEC_LIST_ENTRY; -// -// Controller models. -// -static HDA_CONTROLLER_LIST_ENTRY gHdaControllerList[] = { - //1002 Advanced Micro Devices [AMD] nee ATI Technologies Inc - { HDA_CONTROLLER(AMD, 0x437b), L"AMD SB4x0 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0x4383), L"AMD SB600 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0x780d), L"AMD Hudson HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0x7919), L"AMD RS690 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0x793b), L"AMD RS600 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0x960f), L"AMD RS780 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0x970f), L"AMD RS880 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0x9902), L"AMD Trinity HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa00), L"AMD R600 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa08), L"AMD RV630 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa10), L"AMD RV610 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa18), L"AMD RV670/680 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa20), L"AMD RV635 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa28), L"AMD RV620 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa30), L"AMD RV770 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa38), L"AMD RV730 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa40), L"AMD RV710 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa48), L"AMD RV740 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa50), L"AMD RV870 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa58), L"AMD RV840 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa60), L"AMD RV830 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa68), L"AMD RV810 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa80), L"AMD RV970 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa88), L"AMD RV940 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa90), L"AMD RV930 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaa98), L"AMD RV910 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaaa0), L"AMD R1000 HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaaa8), L"AMD SI HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xaab0), L"AMD Cape Verde HD Audio Controller" }, - { HDA_CONTROLLER(AMD, 0xffff), L"AMD HD Audio Controller" }, +/* get HDA device name */ +VOID +EFIAPI +HdaControllerGetName(IN UINT32 ControllerID, OUT CHAR16 **Name); - //8086 Intel Corporation - { HDA_CONTROLLER(INTEL, 0x080a), L"Intel Oaktrail HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x0a0c), L"Intel Haswell HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x0c0c), L"Intel Ivy Bridge/Haswell HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x0d0c), L"Intel Crystal Well HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x0f04), L"Intel BayTrail HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x160c), L"Intel Broadwell HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x1a98), L"Intel Broxton-T HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x1c20), L"Intel 6 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x1d20), L"Intel X79/C600 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x1e20), L"Intel 7 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x2284), L"Intel Braswell HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x2668), L"Intel ICH6 HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x269a), L"Intel 63XXESB HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x27d8), L"Intel ICH7 HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x284b), L"Intel ICH8 HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x293e), L"Intel ICH9 HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x293f), L"Intel ICH9 HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x3a3e), L"Intel ICH10 HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x3a6e), L"Intel ICH10 HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x3b56), L"Intel 5 Series/3400 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x3b57), L"Intel 5 Series/3400 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x5a98), L"Intel Apollolake HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x811b), L"Intel Poulsbo HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x8c20), L"Intel 8 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x8c21), L"Intel 8 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x8ca0), L"Intel 9 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x8d20), L"Intel X99/C610 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x8d21), L"Intel X99/C610 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x9c20), L"Intel 8 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x9c21), L"Intel 8 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x9ca0), L"Intel 9 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x9d70), L"Intel Sunrise Point-LP HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0x9d71), L"Intel Kabylake-LP HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0xa170), L"Intel 100 Series/C230 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0xa171), L"Intel CM238 HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0xa1f0), L"Intel Lewisburg HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0xa270), L"Intel Lewisburg HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0xa2f0), L"Intel 200 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0xa348), L"Intel 300 Series HD Audio Controller" }, - { HDA_CONTROLLER(INTEL, 0xffff), L"Intel HD Audio Controller" }, +VOID +EFIAPI +HdaCodecGetName(IN UINT32 CodecID, IN UINT16 RevisionId, OUT CHAR16 **Name); - //10de NVIDIA Corporation - { HDA_CONTROLLER(NVIDIA, 0x026c), L"Nvidia MCP51 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0371), L"Nvidia MCP55 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x03e4), L"Nvidia MCP61 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x03f0), L"Nvidia MCP61 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x044a), L"Nvidia MCP65 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x044b), L"Nvidia MCP65 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x055c), L"Nvidia MCP67 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x055d), L"Nvidia MCP67 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0774), L"Nvidia MCP78 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0775), L"Nvidia MCP78 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0776), L"Nvidia MCP78 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0777), L"Nvidia MCP78 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x07fc), L"Nvidia MCP73 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x07fd), L"Nvidia MCP73 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0ac0), L"Nvidia MCP79 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0ac1), L"Nvidia MCP79 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0ac2), L"Nvidia MCP79 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0ac3), L"Nvidia MCP79 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0be2), L"Nvidia GT216 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0be3), L"Nvidia GT218 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0be4), L"Nvidia GT215 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0be5), L"Nvidia GF100 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0be9), L"Nvidia GF106 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0bea), L"Nvidia GF108 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0beb), L"Nvidia GF104 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0bee), L"Nvidia GF116 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0d94), L"Nvidia MCP89 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0d95), L"Nvidia MCP89 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0d96), L"Nvidia MCP89 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0d97), L"Nvidia MCP89 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0e08), L"Nvidia GF119 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0e09), L"Nvidia GF110 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0e0a), L"Nvidia GK104 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0e0b), L"Nvidia GK106 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0e0c), L"Nvidia GF114 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0e0f), L"Nvidia GK208 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0e1a), L"Nvidia GK110 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0e1b), L"Nvidia GK107 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0fb0), L"Nvidia GM200 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0fb8), L"Nvidia GP108 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0fb9), L"Nvidia GP107GL HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0fba), L"Nvidia GM206 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0fbb), L"Nvidia GM204 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x0fbc), L"Nvidia GM107 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x10ef), L"Nvidia GP102 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x10f0), L"Nvidia GP104 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x10f1), L"Nvidia GP106 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x10f2), L"Nvidia GV100 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x10f7), L"Nvidia TU102 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x10f8), L"Nvidia TU104 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x10f9), L"Nvidia TU106 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0x1aeb), L"Nvidia TU116 HD Audio Controller" }, - { HDA_CONTROLLER(NVIDIA, 0xffff), L"Nvidia HD Audio Controller" }, - - //17f3 RDC Semiconductor, Inc. - { HDA_CONTROLLER(RDC, 0x3010), L"RDC M3010 HD Audio Controller" }, - - //1039 Silicon Integrated Systems [SiS] - { HDA_CONTROLLER(SIS, 0x7502), L"SiS 966 HD Audio Controller" }, - { HDA_CONTROLLER(SIS, 0xffff), L"SiS HD Audio Controller" }, - - //10b9 ULi Electronics Inc.(Split off ALi Corporation in 2003) - { HDA_CONTROLLER(ULI, 0x5461), L"ULI M5461 HD Audio Controller"}, - { HDA_CONTROLLER(ULI, 0xffff), L"ULI HD Audio Controller"}, - - //1106 VIA Technologies, Inc. - { HDA_CONTROLLER(VIA, 0x3288), L"VIA VT8251/8237A HD Audio Controller" }, - { HDA_CONTROLLER(VIA, 0xffff), L"VIA HD Audio Controller" }, - - // End. - { 0, NULL } -}; - - -// -// Codec models. -// -static HDA_CODEC_LIST_ENTRY gHdaCodecList[] = { - // AMD. - { HDA_CODEC(AMD, 0xFFFF), 0x0000, L"AMD (Unknown)" }, - - // Analog Devices. - { HDA_CODEC(ANALOGDEVICES, 0x1882), 0x0000, L"Analog Devices AD1882" }, - { HDA_CODEC(ANALOGDEVICES, 0x882A), 0x0000, L"Analog Devices AD1882A" }, - { HDA_CODEC(ANALOGDEVICES, 0x1883), 0x0000, L"Analog Devices AD1883" }, - { HDA_CODEC(ANALOGDEVICES, 0x1884), 0x0000, L"Analog Devices AD1884" }, - { HDA_CODEC(ANALOGDEVICES, 0x184A), 0x0000, L"Analog Devices AD1884A" }, - { HDA_CODEC(ANALOGDEVICES, 0x1981), 0x0000, L"Analog Devices AD1981HD" }, - { HDA_CODEC(ANALOGDEVICES, 0x1983), 0x0000, L"Analog Devices AD1983" }, - { HDA_CODEC(ANALOGDEVICES, 0x1984), 0x0000, L"Analog Devices AD1984" }, - { HDA_CODEC(ANALOGDEVICES, 0x194A), 0x0000, L"Analog Devices AD1984A" }, - { HDA_CODEC(ANALOGDEVICES, 0x194B), 0x0000, L"Analog Devices AD1984B" }, - { HDA_CODEC(ANALOGDEVICES, 0x1986), 0x0000, L"Analog Devices AD1986A" }, - { HDA_CODEC(ANALOGDEVICES, 0x1987), 0x0000, L"Analog Devices AD1987" }, - { HDA_CODEC(ANALOGDEVICES, 0x1988), 0x0000, L"Analog Devices AD1988A" }, - { HDA_CODEC(ANALOGDEVICES, 0x198B), 0x0000, L"Analog Devices AD1988B" }, - { HDA_CODEC(ANALOGDEVICES, 0x989A), 0x0000, L"Analog Devices AD1989A" }, - { HDA_CODEC(ANALOGDEVICES, 0x989B), 0x0000, L"Analog Devices AD2000b" }, - { HDA_CODEC(ANALOGDEVICES, 0xFFFF), 0x0000, L"Analog Devices (Unknown)" }, - - // Cirrus Logic. - { HDA_CODEC(CIRRUSLOGIC, 0x4206), 0x0000, L"Cirrus Logic CS4206" }, - { HDA_CODEC(CIRRUSLOGIC, 0x4207), 0x0000, L"Cirrus Logic CS4207" }, - { HDA_CODEC(CIRRUSLOGIC, 0x4208), 0x0000, L"Cirrus Logic CS4208" }, - { HDA_CODEC(CIRRUSLOGIC, 0x4210), 0x0000, L"Cirrus Logic CS4210" }, - { HDA_CODEC(CIRRUSLOGIC, 0x4213), 0x0000, L"Cirrus Logic CS4213" }, - { HDA_CODEC(CIRRUSLOGIC, 0xFFFF), 0x0000, L"Cirrus Logic (Unknown)" }, - - // Conexant. - { HDA_CODEC(CONEXANT, 0x5045), 0x0000, L"Conexant CX20549 (Venice)" }, - { HDA_CODEC(CONEXANT, 0x5047), 0x0000, L"Conexant CX20551 (Waikiki)" }, - { HDA_CODEC(CONEXANT, 0x5051), 0x0000, L"Conexant CX20561 (Hermosa)" }, - { HDA_CODEC(CONEXANT, 0x5066), 0x0000, L"Conexant CX20582 (Pebble)" }, - { HDA_CODEC(CONEXANT, 0x5067), 0x0000, L"Conexant CX20583 (Pebble HSF)" }, - { HDA_CODEC(CONEXANT, 0x5068), 0x0000, L"Conexant CX20584" }, - { HDA_CODEC(CONEXANT, 0x5069), 0x0000, L"Conexant CX20585" }, - { HDA_CODEC(CONEXANT, 0x506C), 0x0000, L"Conexant CX20588" }, - { HDA_CODEC(CONEXANT, 0x506E), 0x0000, L"Conexant CX20590" }, - { HDA_CODEC(CONEXANT, 0x5097), 0x0000, L"Conexant CX20631" }, - { HDA_CODEC(CONEXANT, 0x5098), 0x0000, L"Conexant CX20632" }, - { HDA_CODEC(CONEXANT, 0x50A1), 0x0000, L"Conexant CX20641" }, - { HDA_CODEC(CONEXANT, 0x50A2), 0x0000, L"Conexant CX20642" }, - { HDA_CODEC(CONEXANT, 0x50AB), 0x0000, L"Conexant CX20651" }, - { HDA_CODEC(CONEXANT, 0x50AC), 0x0000, L"Conexant CX20652" }, - { HDA_CODEC(CONEXANT, 0x50B8), 0x0000, L"Conexant CX20664" }, - { HDA_CODEC(CONEXANT, 0x50B9), 0x0000, L"Conexant CX20665" }, - { HDA_CODEC(CONEXANT, 0xffff), 0x0000, L"Conexant (Unknown)" }, - - // Creative. - { HDA_CODEC(CREATIVE, 0x000A), 0x0000, L"Creative CA0110-IBG" }, - { HDA_CODEC(CREATIVE, 0x000B), 0x0000, L"Creative CA0110-IBG" }, - { HDA_CODEC(CREATIVE, 0x000D), 0x0000, L"Creative SB0880 X-Fi" }, - { HDA_CODEC(CREATIVE, 0x0011), 0x0000, L"Creative CA0132" }, - { HDA_CODEC(CREATIVE, 0xffff), 0x0000, L"Creative (Unknown)" }, - - // CMedia - { HDA_CODEC(CMEDIA, 0xffff), 0x0000, L"C-Media (Unknown)" }, - { HDA_CODEC(CMEDIA2, 0xffff), 0x0000, L"C-Media (Unknown)" }, - - // IDT. - { HDA_CODEC(SIGMATEL, 0x7698), 0x0000, L"IDT 92HD005" }, - { HDA_CODEC(SIGMATEL, 0x7699), 0x0000, L"IDT 92HD005D" }, - { HDA_CODEC(SIGMATEL, 0x7645), 0x0000, L"IDT 92HD206X" }, - { HDA_CODEC(SIGMATEL, 0x7646), 0x0000, L"IDT 92HD206D" }, - { HDA_CODEC(IDT, 0x76E8), 0x0000, L"IDT 92HD66B1X5" }, - { HDA_CODEC(IDT, 0x76E9), 0x0000, L"IDT 92HD66B2X5" }, - { HDA_CODEC(IDT, 0x76EA), 0x0000, L"IDT 92HD66B3X5" }, - { HDA_CODEC(IDT, 0x76EB), 0x0000, L"IDT 92HD66C1X5" }, - { HDA_CODEC(IDT, 0x76EC), 0x0000, L"IDT 92HD66C2X5" }, - { HDA_CODEC(IDT, 0x76ED), 0x0000, L"IDT 92HD66C3X5" }, - { HDA_CODEC(IDT, 0x76EE), 0x0000, L"IDT 92HD66B1X3" }, - { HDA_CODEC(IDT, 0x76EF), 0x0000, L"IDT 92HD66B2X3" }, - { HDA_CODEC(IDT, 0x76F0), 0x0000, L"IDT 92HD66B3X3" }, - { HDA_CODEC(IDT, 0x76F1), 0x0000, L"IDT 92HD66C1X3" }, - { HDA_CODEC(IDT, 0x76F2), 0x0000, L"IDT 92HD66C2X3" }, - { HDA_CODEC(IDT, 0x76F3), 0x0000, L"IDT 92HD66C3_65" }, - { HDA_CODEC(SIGMATEL, 0x7638), 0x0000, L"IDT 92HD700X" }, - { HDA_CODEC(SIGMATEL, 0x7639), 0x0000, L"IDT 92HD700D" }, - { HDA_CODEC(IDT, 0x76B6), 0x0000, L"IDT 92HD71B5" }, - { HDA_CODEC(IDT, 0x76B7), 0x0000, L"IDT 92HD71B5" }, - { HDA_CODEC(IDT, 0x76B4), 0x0000, L"IDT 92HD71B6" }, - { HDA_CODEC(IDT, 0x76B5), 0x0000, L"IDT 92HD71B6" }, - { HDA_CODEC(IDT, 0x76B2), 0x0000, L"IDT 92HD71B7" }, - { HDA_CODEC(IDT, 0x76B3), 0x0000, L"IDT 92HD71B7" }, - { HDA_CODEC(IDT, 0x76B0), 0x0000, L"IDT 92HD71B8" }, - { HDA_CODEC(IDT, 0x76B1), 0x0000, L"IDT 92HD71B8" }, - { HDA_CODEC(IDT, 0x7675), 0x0000, L"IDT 92HD73C1" }, - { HDA_CODEC(IDT, 0x7674), 0x0000, L"IDT 92HD73D1" }, - { HDA_CODEC(IDT, 0x7676), 0x0000, L"IDT 92HD73E1" }, - { HDA_CODEC(IDT, 0x7608), 0x0000, L"IDT 92HD75B3" }, - { HDA_CODEC(IDT, 0x7603), 0x0000, L"IDT 92HD75BX" }, - { HDA_CODEC(IDT, 0x76D5), 0x0000, L"IDT 92HD81B1C" }, - { HDA_CODEC(IDT, 0x7605), 0x0000, L"IDT 92HD81B1X" }, - { HDA_CODEC(IDT, 0x76D4), 0x0000, L"IDT 92HD83C1C" }, - { HDA_CODEC(IDT, 0x7604), 0x0000, L"IDT 92HD83C1X" }, - { HDA_CODEC(IDT, 0x76D1), 0x0000, L"IDT 92HD87B1/3" }, - { HDA_CODEC(IDT, 0x76D9), 0x0000, L"IDT 92HD87B2/4" }, - { HDA_CODEC(IDT, 0x76C0), 0x0000, L"IDT 92HD89C3" }, - { HDA_CODEC(IDT, 0x76C1), 0x0000, L"IDT 92HD89C2" }, - { HDA_CODEC(IDT, 0x76C2), 0x0000, L"IDT 92HD89C1" }, - { HDA_CODEC(IDT, 0x76C3), 0x0000, L"IDT 92HD89B3" }, - { HDA_CODEC(IDT, 0x76C4), 0x0000, L"IDT 92HD89B2" }, - { HDA_CODEC(IDT, 0x76C5), 0x0000, L"IDT 92HD89B1" }, - { HDA_CODEC(IDT, 0x76C6), 0x0000, L"IDT 92HD89E3" }, - { HDA_CODEC(IDT, 0x76C7), 0x0000, L"IDT 92HD89E2" }, - { HDA_CODEC(IDT, 0x76C8), 0x0000, L"IDT 92HD89E1" }, - { HDA_CODEC(IDT, 0x76C9), 0x0000, L"IDT 92HD89D3" }, - { HDA_CODEC(IDT, 0x76CA), 0x0000, L"IDT 92HD89D2" }, - { HDA_CODEC(IDT, 0x76CB), 0x0000, L"IDT 92HD89D1" }, - { HDA_CODEC(IDT, 0x76CC), 0x0000, L"IDT 92HD89F3" }, - { HDA_CODEC(IDT, 0x76CD), 0x0000, L"IDT 92HD89F2" }, - { HDA_CODEC(IDT, 0x76CE), 0x0000, L"IDT 92HD89F1" }, - { HDA_CODEC(IDT, 0x76E7), 0x0000, L"IDT 92HD90BXX" }, - { HDA_CODEC(IDT, 0x76E0), 0x0000, L"IDT 92HD91BXX" }, - { HDA_CODEC(IDT, 0x76Df), 0x0000, L"IDT 92HD93BXX" }, - { HDA_CODEC(IDT, 0x76E3), 0x0000, L"IDT 92HD98BXX" }, - { HDA_CODEC(IDT, 0x76E5), 0x0000, L"IDT 92HD99BXX" }, - { HDA_CODEC(IDT, 0xFFFF), 0x0000, L"IDT (Unknown)" }, - - // Intel. - { HDA_CODEC(INTEL, 0x29FB), 0x0000, L"Intel Crestline HDMI" }, - { HDA_CODEC(INTEL, 0x2801), 0x0000, L"Intel Bearlake HDMI" }, - { HDA_CODEC(INTEL, 0x2802), 0x0000, L"Intel Cantiga HDMI" }, - { HDA_CODEC(INTEL, 0x2803), 0x0000, L"Intel Eaglelake HDMI" }, - { HDA_CODEC(INTEL, 0x2804), 0x0000, L"Intel Ibex Peak HDMI" }, - { HDA_CODEC(INTEL, 0x0054), 0x0000, L"Intel Ibex Peak HDMI" }, - { HDA_CODEC(INTEL, 0x2805), 0x0000, L"Intel Cougar Point HDMI" }, - { HDA_CODEC(INTEL, 0x2806), 0x0000, L"Intel Panther Point HDMI" }, - { HDA_CODEC(INTEL, 0x2807), 0x0000, L"Intel Haswell HDMI" }, - { HDA_CODEC(INTEL, 0x2808), 0x0000, L"Intel Broadwell HDMI" }, - { HDA_CODEC(INTEL, 0x2809), 0x0000, L"Intel Skylake HDMI" }, - { HDA_CODEC(INTEL, 0x280A), 0x0000, L"Intel Broxton HDMI" }, - { HDA_CODEC(INTEL, 0x280B), 0x0000, L"Intel Kaby Lake HDMI" }, - { HDA_CODEC(INTEL, 0x280C), 0x0000, L"Intel Cannon Lake HDMI" }, - { HDA_CODEC(INTEL, 0x280D), 0x0000, L"Intel Gemini Lake HDMI" }, - { HDA_CODEC(INTEL, 0x2800), 0x0000, L"Intel Gemini Lake HDMI" }, - { HDA_CODEC(INTEL, 0xFFFF), 0x0000, L"Intel (Unknown)" }, - - // Motorola. - { HDA_CODEC(MOTO, 0xFFFF), 0x0000, L"Motorola (Unknown)" }, - - // Silicon Image. - { HDA_CODEC(SII, 0xFFFF), 0x0000, L"Silicon Image (Unknown)" }, - - // LSI - Lucent/Agere - { HDA_CODEC(AGERE, 0xFFFF), 0x0000, L"LSI (Unknown)" }, - - // Chrontel - { HDA_CODEC(CHRONTEL, 0xFFFF), 0x0000, L"Chrontel (Unknown)" }, - - // LG - { HDA_CODEC(LG, 0xFFFF), 0x0000, L"LG (Unknown)" }, - - // Wolfson Microelectronics - { HDA_CODEC(WOLFSON, 0xFFFF), 0x0000, L"Wolfson Microelectronics (Unknown)" }, - - // QEMU - { HDA_CODEC(QEMU, 0xFFFF), 0x0000, L"QEMU (Unknown)" }, - - // Nvidia. - { HDA_CODEC(NVIDIA, 0xFFFF), 0x0000, L"Nvidia (Unknown)" }, - - // Realtek. - { HDA_CODEC(REALTEK, 0x0221), 0x0000, L"Realtek ALC221" }, - { HDA_CODEC(REALTEK, 0x0225), 0x0000, L"Realtek ALC225" }, - { HDA_CODEC(REALTEK, 0x0230), 0x0000, L"Realtek ALC230" }, - { HDA_CODEC(REALTEK, 0x0233), 0x0000, L"Realtek ALC233" }, - { HDA_CODEC(REALTEK, 0x0235), 0x0000, L"Realtek ALC235" }, - { HDA_CODEC(REALTEK, 0x0236), 0x0000, L"Realtek ALC236" }, - { HDA_CODEC(REALTEK, 0x0255), 0x0000, L"Realtek ALC255" }, - { HDA_CODEC(REALTEK, 0x0256), 0x0000, L"Realtek ALC256" }, - { HDA_CODEC(REALTEK, 0x0257), 0x0000, L"Realtek ALC257" }, - { HDA_CODEC(REALTEK, 0x0260), 0x0000, L"Realtek ALC260" }, - { HDA_CODEC(REALTEK, 0x0262), 0x0000, L"Realtek ALC262" }, - { HDA_CODEC(REALTEK, 0x0267), 0x0000, L"Realtek ALC267" }, - { HDA_CODEC(REALTEK, 0x0268), 0x0000, L"Realtek ALC268" }, - { HDA_CODEC(REALTEK, 0x0269), 0x0000, L"Realtek ALC269" }, - { HDA_CODEC(REALTEK, 0x0270), 0x0000, L"Realtek ALC270" }, - { HDA_CODEC(REALTEK, 0x0272), 0x0000, L"Realtek ALC272" }, - { HDA_CODEC(REALTEK, 0x0273), 0x0000, L"Realtek ALC273" }, - { HDA_CODEC(REALTEK, 0x0275), 0x0000, L"Realtek ALC275" }, - { HDA_CODEC(REALTEK, 0x0276), 0x0000, L"Realtek ALC276" }, - { HDA_CODEC(REALTEK, 0x0280), 0x0000, L"Realtek ALC280" }, - { HDA_CODEC(REALTEK, 0x0282), 0x0000, L"Realtek ALC282" }, - { HDA_CODEC(REALTEK, 0x0283), 0x0000, L"Realtek ALC283" }, - { HDA_CODEC(REALTEK, 0x0284), 0x0000, L"Realtek ALC284" }, - { HDA_CODEC(REALTEK, 0x0285), 0x0000, L"Realtek ALC285" }, - { HDA_CODEC(REALTEK, 0x0286), 0x0000, L"Realtek ALC286" }, - { HDA_CODEC(REALTEK, 0x0288), 0x0000, L"Realtek ALC288" }, - { HDA_CODEC(REALTEK, 0x0289), 0x0000, L"Realtek ALC289" }, - { HDA_CODEC(REALTEK, 0x0290), 0x0000, L"Realtek ALC290" }, - { HDA_CODEC(REALTEK, 0x0292), 0x0000, L"Realtek ALC292" }, - { HDA_CODEC(REALTEK, 0x0293), 0x0000, L"Realtek ALC293" }, - { HDA_CODEC(REALTEK, 0x0294), 0x0000, L"Realtek ALC294" }, - { HDA_CODEC(REALTEK, 0x0295), 0x0000, L"Realtek ALC295" }, - { HDA_CODEC(REALTEK, 0x0298), 0x0000, L"Realtek ALC298" }, - { HDA_CODEC(REALTEK, 0x0660), 0x0000, L"Realtek ALC660" }, - { HDA_CODEC(REALTEK, 0x0662), 0x0002, L"Realtek ALC662v2" }, - { HDA_CODEC(REALTEK, 0x0662), 0x0000, L"Realtek ALC662" }, - { HDA_CODEC(REALTEK, 0x0663), 0x0000, L"Realtek ALC663" }, - { HDA_CODEC(REALTEK, 0x0665), 0x0000, L"Realtek ALC665" }, - { HDA_CODEC(REALTEK, 0x0668), 0x0000, L"Realtek ALC668" }, - { HDA_CODEC(REALTEK, 0x0670), 0x0000, L"Realtek ALC670" }, - { HDA_CODEC(REALTEK, 0x0671), 0x0000, L"Realtek ALC671" }, - { HDA_CODEC(REALTEK, 0x0680), 0x0000, L"Realtek ALC680" }, - { HDA_CODEC(REALTEK, 0x0861), 0x0000, L"Realtek ALC861" }, - { HDA_CODEC(REALTEK, 0x0862), 0x0000, L"Realtek ALC861-VD" }, - { HDA_CODEC(REALTEK, 0x0880), 0x0000, L"Realtek ALC880" }, - { HDA_CODEC(REALTEK, 0x0882), 0x0000, L"Realtek ALC882" }, - { HDA_CODEC(REALTEK, 0x0883), 0x0000, L"Realtek ALC883" }, - { HDA_CODEC(REALTEK, 0x0885), 0x0103, L"Realtek ALC889A" }, - { HDA_CODEC(REALTEK, 0x0885), 0x0101, L"Realtek ALC889A" }, - { HDA_CODEC(REALTEK, 0x0885), 0x0000, L"Realtek ALC885" }, - { HDA_CODEC(REALTEK, 0x0887), 0x0302, L"Realtek ALC888B" }, - { HDA_CODEC(REALTEK, 0x0887), 0x0002, L"Realtek ALC887-VD2" }, - { HDA_CODEC(REALTEK, 0x0887), 0x0001, L"Realtek ALC887-VD" }, - { HDA_CODEC(REALTEK, 0x0887), 0x0000, L"Realtek ALC887" }, - { HDA_CODEC(REALTEK, 0x0888), 0x0003, L"Realtek ALC888S-VD" }, - { HDA_CODEC(REALTEK, 0x0888), 0x0002, L"Realtek ALC888S-VC" }, - { HDA_CODEC(REALTEK, 0x0888), 0x0001, L"Realtek ALC888S" }, - { HDA_CODEC(REALTEK, 0x0888), 0x0000, L"Realtek ALC888" }, - { HDA_CODEC(REALTEK, 0x0889), 0x0000, L"Realtek ALC889" }, - { HDA_CODEC(REALTEK, 0x0892), 0x0000, L"Realtek ALC892" }, - { HDA_CODEC(REALTEK, 0x0898), 0x0000, L"Realtek ALC898" }, - { HDA_CODEC(REALTEK, 0x0899), 0x0000, L"Realtek ALC899" }, - { HDA_CODEC(REALTEK, 0x0900), 0x0000, L"Realtek ALC1150" }, - { HDA_CODEC(REALTEK, 0x1220), 0x0000, L"Realtek ALC1220" }, - { HDA_CODEC(REALTEK, 0xFFFF), 0x0000, L"Realtek (Unknown)" }, - - // Sigmatel. - { HDA_CODEC(SIGMATEL, 0x7661), 0x0000, L"Sigmatel CXD9872RD/K" }, - { HDA_CODEC(SIGMATEL, 0x7664), 0x0000, L"Sigmatel CXD9872AKD" }, - { HDA_CODEC(SIGMATEL, 0x7691), 0x0000, L"Sigmatel STAC9200D" }, - { HDA_CODEC(SIGMATEL, 0x76A2), 0x0000, L"Sigmatel STAC9204X" }, - { HDA_CODEC(SIGMATEL, 0x76A3), 0x0000, L"Sigmatel STAC9204D" }, - { HDA_CODEC(SIGMATEL, 0x76A0), 0x0000, L"Sigmatel STAC9205X" }, - { HDA_CODEC(SIGMATEL, 0x76A1), 0x0000, L"Sigmatel STAC9205D" }, - { HDA_CODEC(SIGMATEL, 0x7690), 0x0000, L"Sigmatel STAC9220" }, - { HDA_CODEC(SIGMATEL, 0x7882), 0x0000, L"Sigmatel STAC9220_A1" }, - { HDA_CODEC(SIGMATEL, 0x7880), 0x0000, L"Sigmatel STAC9220_A2" }, - { HDA_CODEC(SIGMATEL, 0x7680), 0x0000, L"Sigmatel STAC9221" }, - { HDA_CODEC(SIGMATEL, 0x7682), 0x0000, L"Sigmatel STAC9221_A2" }, - { HDA_CODEC(SIGMATEL, 0x7683), 0x0000, L"Sigmatel STAC9221D" }, - { HDA_CODEC(SIGMATEL, 0x7681), 0x0000, L"Sigmatel STAC9220D/9223D" }, - { HDA_CODEC(SIGMATEL, 0x7618), 0x0000, L"Sigmatel STAC9227X" }, - { HDA_CODEC(SIGMATEL, 0x7619), 0x0000, L"Sigmatel STAC9227D" }, - { HDA_CODEC(SIGMATEL, 0x7616), 0x0000, L"Sigmatel STAC9228X" }, - { HDA_CODEC(SIGMATEL, 0x7617), 0x0000, L"Sigmatel STAC9228D" }, - { HDA_CODEC(SIGMATEL, 0x7614), 0x0000, L"Sigmatel STAC9229X" }, - { HDA_CODEC(SIGMATEL, 0x7615), 0x0000, L"Sigmatel STAC9229D" }, - { HDA_CODEC(SIGMATEL, 0x7612), 0x0000, L"Sigmatel STAC9230X" }, - { HDA_CODEC(SIGMATEL, 0x7613), 0x0000, L"Sigmatel STAC9230D" }, - { HDA_CODEC(SIGMATEL, 0x7634), 0x0000, L"Sigmatel STAC9250" }, - { HDA_CODEC(SIGMATEL, 0x7636), 0x0000, L"Sigmatel STAC9251" }, - { HDA_CODEC(SIGMATEL, 0x76A4), 0x0000, L"Sigmatel STAC9255" }, - { HDA_CODEC(SIGMATEL, 0x76A5), 0x0000, L"Sigmatel STAC9255D" }, - { HDA_CODEC(SIGMATEL, 0x76A6), 0x0000, L"Sigmatel STAC9254" }, - { HDA_CODEC(SIGMATEL, 0x76A7), 0x0000, L"Sigmatel STAC9254D" }, - { HDA_CODEC(SIGMATEL, 0x7626), 0x0000, L"Sigmatel STAC9271X" }, - { HDA_CODEC(SIGMATEL, 0x7627), 0x0000, L"Sigmatel STAC9271D" }, - { HDA_CODEC(SIGMATEL, 0x7624), 0x0000, L"Sigmatel STAC9272X" }, - { HDA_CODEC(SIGMATEL, 0x7625), 0x0000, L"Sigmatel STAC9272D" }, - { HDA_CODEC(SIGMATEL, 0x7622), 0x0000, L"Sigmatel STAC9273X" }, - { HDA_CODEC(SIGMATEL, 0x7623), 0x0000, L"Sigmatel STAC9273D" }, - { HDA_CODEC(SIGMATEL, 0x7620), 0x0000, L"Sigmatel STAC9274" }, - { HDA_CODEC(SIGMATEL, 0x7621), 0x0000, L"Sigmatel STAC9274D" }, - { HDA_CODEC(SIGMATEL, 0x7628), 0x0000, L"Sigmatel STAC9274X5NH" }, - { HDA_CODEC(SIGMATEL, 0x7629), 0x0000, L"Sigmatel STAC9274D5NH" }, - { HDA_CODEC(SIGMATEL, 0x7662), 0x0000, L"Sigmatel STAC9872AK" }, - { HDA_CODEC(SIGMATEL, 0xFFFF), 0x0000, L"Sigmatel (Unknown)" }, - - // VIA. - { HDA_CODEC(VIA, 0x1708), 0x0000, L"VIA VT1708_8" }, - { HDA_CODEC(VIA, 0x1709), 0x0000, L"VIA VT1708_9" }, - { HDA_CODEC(VIA, 0x170A), 0x0000, L"VIA VT1708_A" }, - { HDA_CODEC(VIA, 0x170B), 0x0000, L"VIA VT1708_B" }, - { HDA_CODEC(VIA, 0xe710), 0x0000, L"VIA VT1709_0" }, - { HDA_CODEC(VIA, 0xe711), 0x0000, L"VIA VT1709_1" }, - { HDA_CODEC(VIA, 0xe712), 0x0000, L"VIA VT1709_2" }, - { HDA_CODEC(VIA, 0xe713), 0x0000, L"VIA VT1709_3" }, - { HDA_CODEC(VIA, 0xe714), 0x0000, L"VIA VT1709_4" }, - { HDA_CODEC(VIA, 0xe715), 0x0000, L"VIA VT1709_5" }, - { HDA_CODEC(VIA, 0xe716), 0x0000, L"VIA VT1709_6" }, - { HDA_CODEC(VIA, 0xe717), 0x0000, L"VIA VT1709_7" }, - { HDA_CODEC(VIA, 0xe720), 0x0000, L"VIA VT1708B_0" }, - { HDA_CODEC(VIA, 0xe721), 0x0000, L"VIA VT1708B_1" }, - { HDA_CODEC(VIA, 0xe722), 0x0000, L"VIA VT1708B_2" }, - { HDA_CODEC(VIA, 0xe723), 0x0000, L"VIA VT1708B_3" }, - { HDA_CODEC(VIA, 0xe724), 0x0000, L"VIA VT1708B_4" }, - { HDA_CODEC(VIA, 0xe725), 0x0000, L"VIA VT1708B_5" }, - { HDA_CODEC(VIA, 0xe726), 0x0000, L"VIA VT1708B_6" }, - { HDA_CODEC(VIA, 0xe727), 0x0000, L"VIA VT1708B_7" }, - { HDA_CODEC(VIA, 0x0397), 0x0000, L"VIA VT1708S_0" }, - { HDA_CODEC(VIA, 0x1397), 0x0000, L"VIA VT1708S_1" }, - { HDA_CODEC(VIA, 0x2397), 0x0000, L"VIA VT1708S_2" }, - { HDA_CODEC(VIA, 0x3397), 0x0000, L"VIA VT1708S_3" }, - { HDA_CODEC(VIA, 0x4397), 0x0000, L"VIA VT1708S_4" }, - { HDA_CODEC(VIA, 0x5397), 0x0000, L"VIA VT1708S_5" }, - { HDA_CODEC(VIA, 0x6397), 0x0000, L"VIA VT1708S_6" }, - { HDA_CODEC(VIA, 0x7397), 0x0000, L"VIA VT1708S_7" }, - { HDA_CODEC(VIA, 0x0398), 0x0000, L"VIA VT1702_0" }, - { HDA_CODEC(VIA, 0x1398), 0x0000, L"VIA VT1702_1" }, - { HDA_CODEC(VIA, 0x2398), 0x0000, L"VIA VT1702_2" }, - { HDA_CODEC(VIA, 0x3398), 0x0000, L"VIA VT1702_3" }, - { HDA_CODEC(VIA, 0x4398), 0x0000, L"VIA VT1702_4" }, - { HDA_CODEC(VIA, 0x5398), 0x0000, L"VIA VT1702_5" }, - { HDA_CODEC(VIA, 0x6398), 0x0000, L"VIA VT1702_6" }, - { HDA_CODEC(VIA, 0x7398), 0x0000, L"VIA VT1702_7" }, - { HDA_CODEC(VIA, 0x0433), 0x0000, L"VIA VT1716S_0" }, - { HDA_CODEC(VIA, 0xA721), 0x0000, L"VIA VT1716S_1" }, - { HDA_CODEC(VIA, 0x0428), 0x0000, L"VIA VT1718S_0" }, - { HDA_CODEC(VIA, 0x4428), 0x0000, L"VIA VT1718S_1" }, - { HDA_CODEC(VIA, 0x0446), 0x0000, L"VIA VT1802_0" }, - { HDA_CODEC(VIA, 0x8446), 0x0000, L"VIA VT1802_1" }, - { HDA_CODEC(VIA, 0x0448), 0x0000, L"VIA VT1812" }, - { HDA_CODEC(VIA, 0x0440), 0x0000, L"VIA VT1818S" }, - { HDA_CODEC(VIA, 0x4441), 0x0000, L"VIA VT1828S" }, - { HDA_CODEC(VIA, 0x0438), 0x0000, L"VIA VT2002P_0" }, - { HDA_CODEC(VIA, 0x4438), 0x0000, L"VIA VT2002P_1" }, - { HDA_CODEC(VIA, 0x0441), 0x0000, L"VIA VT2020" }, - { HDA_CODEC(VIA, 0xFFFF), 0x0000, L"VIA (Unknown)" }, - - // End. - { 0, 0x0000, NULL } -}; +BOOLEAN +EFIAPI +IsHDMIAudio(EFI_HANDLE PciDevHandle); #endif diff --git a/Library/HdaDevicesLib/HdaDevicesLib.c b/Library/HdaDevicesLib/HdaDevicesLib.c new file mode 100644 index 000000000..4af170bba --- /dev/null +++ b/Library/HdaDevicesLib/HdaDevicesLib.c @@ -0,0 +1,579 @@ +/* @file HdaDevicesLib.c + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +// Names + +// +// Controller models. +// +HDA_CONTROLLER_LIST_ENTRY gHdaControllerList[] = { + //1002 Advanced Micro Devices [AMD] nee ATI Technologies Inc + { HDA_CONTROLLER(AMD, 0x437b), "AMD SB4x0 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0x4383), "AMD SB600 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0x780d), "AMD Hudson HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0x7919), "AMD RS690 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0x793b), "AMD RS600 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0x960f), "AMD RS780 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0x970f), "AMD RS880 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0x9902), "AMD Trinity HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa00), "AMD R600 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa08), "AMD RV630 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa10), "AMD RV610 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa18), "AMD RV670/680 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa20), "AMD RV635 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa28), "AMD RV620 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa30), "AMD RV770 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa38), "AMD RV730 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa40), "AMD RV710 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa48), "AMD RV740 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa50), "AMD RV870 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa58), "AMD RV840 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa60), "AMD RV830 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa68), "AMD RV810 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa80), "AMD RV970 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa88), "AMD RV940 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa90), "AMD RV930 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaa98), "AMD RV910 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaaa0), "AMD R1000 HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaaa8), "AMD SI HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaab0), "AMD Cape Verde HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaae0), "AMD Buffin HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xaaf0), "AMD Ellesmere HD Audio Controller" }, + { HDA_CONTROLLER(AMD, 0xffff), "AMD HD Audio Controller" }, + + //8086 Intel Corporation + { HDA_CONTROLLER(INTEL, 0x080a), "Intel Oaktrail HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x0a0c), "Intel Haswell HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x0c0c), "Intel Ivy Bridge/Haswell HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x0d0c), "Intel Crystal Well HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x0f04), "Intel BayTrail HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x160c), "Intel Broadwell HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x1a98), "Intel Broxton-T HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x1c20), "Intel 6 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x1d20), "Intel X79/C600 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x1e20), "Intel 7 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x2284), "Intel Braswell HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x2668), "Intel ICH6 HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x269a), "Intel 63XXESB HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x27d8), "Intel ICH7 HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x284b), "Intel ICH8 HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x293e), "Intel ICH9 HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x293f), "Intel ICH9 HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x3a3e), "Intel ICH10 HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x3a6e), "Intel ICH10 HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x3b56), "Intel 5 Series/3400 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x3b57), "Intel 5 Series/3400 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x5a98), "Intel Apollolake HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x811b), "Intel Poulsbo HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x8c20), "Intel 8 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x8c21), "Intel 8 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x8ca0), "Intel 9 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x8d20), "Intel X99/C610 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x8d21), "Intel X99/C610 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x9c20), "Intel 8 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x9c21), "Intel 8 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x9ca0), "Intel 9 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x9d70), "Intel Sunrise Point-LP HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0x9d71), "Intel Kabylake-LP HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0xa170), "Intel 100 Series/C230 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0xa171), "Intel CM238 HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0xa1f0), "Intel Lewisburg HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0xa270), "Intel Lewisburg HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0xa2f0), "Intel 200 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0xa348), "Intel 300 Series HD Audio Controller" }, + { HDA_CONTROLLER(INTEL, 0xffff), "Intel HD Audio Controller" }, + + //10de NVIDIA Corporation + { HDA_CONTROLLER(NVIDIA, 0x026c), "Nvidia MCP51 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0371), "Nvidia MCP55 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x03e4), "Nvidia MCP61 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x03f0), "Nvidia MCP61 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x044a), "Nvidia MCP65 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x044b), "Nvidia MCP65 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x055c), "Nvidia MCP67 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x055d), "Nvidia MCP67 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0774), "Nvidia MCP78 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0775), "Nvidia MCP78 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0776), "Nvidia MCP78 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0777), "Nvidia MCP78 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x07fc), "Nvidia MCP73 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x07fd), "Nvidia MCP73 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0ac0), "Nvidia MCP79 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0ac1), "Nvidia MCP79 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0ac2), "Nvidia MCP79 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0ac3), "Nvidia MCP79 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0be2), "Nvidia GT216 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0be3), "Nvidia GT218 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0be4), "Nvidia GT215 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0be5), "Nvidia GF100 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0be9), "Nvidia GF106 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0bea), "Nvidia GF108 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0beb), "Nvidia GF104 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0bee), "Nvidia GF116 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0d94), "Nvidia MCP89 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0d95), "Nvidia MCP89 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0d96), "Nvidia MCP89 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0d97), "Nvidia MCP89 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0e08), "Nvidia GF119 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0e09), "Nvidia GF110 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0e0a), "Nvidia GK104 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0e0b), "Nvidia GK106 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0e0c), "Nvidia GF114 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0e0f), "Nvidia GK208 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0e1a), "Nvidia GK110 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0e1b), "Nvidia GK107 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0fb0), "Nvidia GM200 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0fb8), "Nvidia GP108 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0fb9), "Nvidia GP107GL HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0fba), "Nvidia GM206 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0fbb), "Nvidia GM204 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x0fbc), "Nvidia GM107 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x10ef), "Nvidia GP102 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x10f0), "Nvidia GP104 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x10f1), "Nvidia GP106 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x10f2), "Nvidia GV100 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x10f7), "Nvidia TU102 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x10f8), "Nvidia TU104 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x10f9), "Nvidia TU106 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0x1aeb), "Nvidia TU116 HD Audio Controller" }, + { HDA_CONTROLLER(NVIDIA, 0xffff), "Nvidia HD Audio Controller" }, + + //17f3 RDC Semiconductor, Inc. + { HDA_CONTROLLER(RDC, 0x3010), "RDC M3010 HD Audio Controller" }, + + //1039 Silicon Integrated Systems [SiS] + { HDA_CONTROLLER(SIS, 0x7502), "SiS 966 HD Audio Controller" }, + { HDA_CONTROLLER(SIS, 0xffff), "SiS HD Audio Controller" }, + + //10b9 ULi Electronics Inc.(Split off ALi Corporation in 2003) + { HDA_CONTROLLER(ULI, 0x5461), "ULI M5461 HD Audio Controller"}, + { HDA_CONTROLLER(ULI, 0xffff), "ULI HD Audio Controller"}, + + //1106 VIA Technologies, Inc. + { HDA_CONTROLLER(VIA, 0x3288), "VIA VT8251/8237A HD Audio Controller" }, + { HDA_CONTROLLER(VIA, 0xffff), "VIA HD Audio Controller" }, + + // End. + { 0, NULL } +}; + +// +// Codec models. +// + +HDA_CODEC_LIST_ENTRY gHdaCodecList[] = { + // AMD. + { HDA_CODEC(AMD, 0xFFFF), 0x0000, "AMD (Unknown)" }, + + // Analog Devices. + { HDA_CODEC(ANALOGDEVICES, 0x1882), 0x0000, "Analog Devices AD1882" }, + { HDA_CODEC(ANALOGDEVICES, 0x882A), 0x0000, "Analog Devices AD1882A" }, + { HDA_CODEC(ANALOGDEVICES, 0x1883), 0x0000, "Analog Devices AD1883" }, + { HDA_CODEC(ANALOGDEVICES, 0x1884), 0x0000, "Analog Devices AD1884" }, + { HDA_CODEC(ANALOGDEVICES, 0x184A), 0x0000, "Analog Devices AD1884A" }, + { HDA_CODEC(ANALOGDEVICES, 0x1981), 0x0000, "Analog Devices AD1981HD" }, + { HDA_CODEC(ANALOGDEVICES, 0x1983), 0x0000, "Analog Devices AD1983" }, + { HDA_CODEC(ANALOGDEVICES, 0x1984), 0x0000, "Analog Devices AD1984" }, + { HDA_CODEC(ANALOGDEVICES, 0x194A), 0x0000, "Analog Devices AD1984A" }, + { HDA_CODEC(ANALOGDEVICES, 0x194B), 0x0000, "Analog Devices AD1984B" }, + { HDA_CODEC(ANALOGDEVICES, 0x1986), 0x0000, "Analog Devices AD1986A" }, + { HDA_CODEC(ANALOGDEVICES, 0x1987), 0x0000, "Analog Devices AD1987" }, + { HDA_CODEC(ANALOGDEVICES, 0x1988), 0x0000, "Analog Devices AD1988A" }, + { HDA_CODEC(ANALOGDEVICES, 0x198B), 0x0000, "Analog Devices AD1988B" }, + { HDA_CODEC(ANALOGDEVICES, 0x989A), 0x0000, "Analog Devices AD1989A" }, + { HDA_CODEC(ANALOGDEVICES, 0x989B), 0x0000, "Analog Devices AD2000b" }, + { HDA_CODEC(ANALOGDEVICES, 0xFFFF), 0x0000, "Analog Devices (Unknown)" }, + + // Cirrus Logic. + { HDA_CODEC(CIRRUSLOGIC, 0x4206), 0x0000, "Cirrus Logic CS4206" }, + { HDA_CODEC(CIRRUSLOGIC, 0x4207), 0x0000, "Cirrus Logic CS4207" }, + { HDA_CODEC(CIRRUSLOGIC, 0x4208), 0x0000, "Cirrus Logic CS4208" }, + { HDA_CODEC(CIRRUSLOGIC, 0x4210), 0x0000, "Cirrus Logic CS4210" }, + { HDA_CODEC(CIRRUSLOGIC, 0x4213), 0x0000, "Cirrus Logic CS4213" }, + { HDA_CODEC(CIRRUSLOGIC, 0xFFFF), 0x0000, "Cirrus Logic (Unknown)" }, + + // Conexant. + { HDA_CODEC(CONEXANT, 0x5045), 0x0000, "Conexant CX20549 (Venice)" }, + { HDA_CODEC(CONEXANT, 0x5047), 0x0000, "Conexant CX20551 (Waikiki)" }, + { HDA_CODEC(CONEXANT, 0x5051), 0x0000, "Conexant CX20561 (Hermosa)" }, + { HDA_CODEC(CONEXANT, 0x5066), 0x0000, "Conexant CX20582 (Pebble)" }, + { HDA_CODEC(CONEXANT, 0x5067), 0x0000, "Conexant CX20583 (Pebble HSF)" }, + { HDA_CODEC(CONEXANT, 0x5068), 0x0000, "Conexant CX20584" }, + { HDA_CODEC(CONEXANT, 0x5069), 0x0000, "Conexant CX20585" }, + { HDA_CODEC(CONEXANT, 0x506C), 0x0000, "Conexant CX20588" }, + { HDA_CODEC(CONEXANT, 0x506E), 0x0000, "Conexant CX20590" }, + { HDA_CODEC(CONEXANT, 0x5097), 0x0000, "Conexant CX20631" }, + { HDA_CODEC(CONEXANT, 0x5098), 0x0000, "Conexant CX20632" }, + { HDA_CODEC(CONEXANT, 0x50A1), 0x0000, "Conexant CX20641" }, + { HDA_CODEC(CONEXANT, 0x50A2), 0x0000, "Conexant CX20642" }, + { HDA_CODEC(CONEXANT, 0x50AB), 0x0000, "Conexant CX20651" }, + { HDA_CODEC(CONEXANT, 0x50AC), 0x0000, "Conexant CX20652" }, + { HDA_CODEC(CONEXANT, 0x50B8), 0x0000, "Conexant CX20664" }, + { HDA_CODEC(CONEXANT, 0x50B9), 0x0000, "Conexant CX20665" }, + { HDA_CODEC(CONEXANT, 0xffff), 0x0000, "Conexant (Unknown)" }, + + // Creative. + { HDA_CODEC(CREATIVE, 0x000A), 0x0000, "Creative CA0110-IBG" }, + { HDA_CODEC(CREATIVE, 0x000B), 0x0000, "Creative CA0110-IBG" }, + { HDA_CODEC(CREATIVE, 0x000D), 0x0000, "Creative SB0880 X-Fi" }, + { HDA_CODEC(CREATIVE, 0x0011), 0x0000, "Creative CA0132" }, + { HDA_CODEC(CREATIVE, 0xffff), 0x0000, "Creative (Unknown)" }, + + // CMedia + { HDA_CODEC(CMEDIA, 0xffff), 0x0000, "C-Media (Unknown)" }, + { HDA_CODEC(CMEDIA2, 0xffff), 0x0000, "C-Media (Unknown)" }, + + // IDT. + { HDA_CODEC(SIGMATEL, 0x7698), 0x0000, "IDT 92HD005" }, + { HDA_CODEC(SIGMATEL, 0x7699), 0x0000, "IDT 92HD005D" }, + { HDA_CODEC(SIGMATEL, 0x7645), 0x0000, "IDT 92HD206X" }, + { HDA_CODEC(SIGMATEL, 0x7646), 0x0000, "IDT 92HD206D" }, + { HDA_CODEC(IDT, 0x76E8), 0x0000, "IDT 92HD66B1X5" }, + { HDA_CODEC(IDT, 0x76E9), 0x0000, "IDT 92HD66B2X5" }, + { HDA_CODEC(IDT, 0x76EA), 0x0000, "IDT 92HD66B3X5" }, + { HDA_CODEC(IDT, 0x76EB), 0x0000, "IDT 92HD66C1X5" }, + { HDA_CODEC(IDT, 0x76EC), 0x0000, "IDT 92HD66C2X5" }, + { HDA_CODEC(IDT, 0x76ED), 0x0000, "IDT 92HD66C3X5" }, + { HDA_CODEC(IDT, 0x76EE), 0x0000, "IDT 92HD66B1X3" }, + { HDA_CODEC(IDT, 0x76EF), 0x0000, "IDT 92HD66B2X3" }, + { HDA_CODEC(IDT, 0x76F0), 0x0000, "IDT 92HD66B3X3" }, + { HDA_CODEC(IDT, 0x76F1), 0x0000, "IDT 92HD66C1X3" }, + { HDA_CODEC(IDT, 0x76F2), 0x0000, "IDT 92HD66C2X3" }, + { HDA_CODEC(IDT, 0x76F3), 0x0000, "IDT 92HD66C3_65" }, + { HDA_CODEC(SIGMATEL, 0x7638), 0x0000, "IDT 92HD700X" }, + { HDA_CODEC(SIGMATEL, 0x7639), 0x0000, "IDT 92HD700D" }, + { HDA_CODEC(IDT, 0x76B6), 0x0000, "IDT 92HD71B5" }, + { HDA_CODEC(IDT, 0x76B7), 0x0000, "IDT 92HD71B5" }, + { HDA_CODEC(IDT, 0x76B4), 0x0000, "IDT 92HD71B6" }, + { HDA_CODEC(IDT, 0x76B5), 0x0000, "IDT 92HD71B6" }, + { HDA_CODEC(IDT, 0x76B2), 0x0000, "IDT 92HD71B7" }, + { HDA_CODEC(IDT, 0x76B3), 0x0000, "IDT 92HD71B7" }, + { HDA_CODEC(IDT, 0x76B0), 0x0000, "IDT 92HD71B8" }, + { HDA_CODEC(IDT, 0x76B1), 0x0000, "IDT 92HD71B8" }, + { HDA_CODEC(IDT, 0x7675), 0x0000, "IDT 92HD73C1" }, + { HDA_CODEC(IDT, 0x7674), 0x0000, "IDT 92HD73D1" }, + { HDA_CODEC(IDT, 0x7676), 0x0000, "IDT 92HD73E1" }, + { HDA_CODEC(IDT, 0x7608), 0x0000, "IDT 92HD75B3" }, + { HDA_CODEC(IDT, 0x7603), 0x0000, "IDT 92HD75BX" }, + { HDA_CODEC(IDT, 0x76D5), 0x0000, "IDT 92HD81B1C" }, + { HDA_CODEC(IDT, 0x7605), 0x0000, "IDT 92HD81B1X" }, + { HDA_CODEC(IDT, 0x76D4), 0x0000, "IDT 92HD83C1C" }, + { HDA_CODEC(IDT, 0x7604), 0x0000, "IDT 92HD83C1X" }, + { HDA_CODEC(IDT, 0x76D1), 0x0000, "IDT 92HD87B1/3" }, + { HDA_CODEC(IDT, 0x76D9), 0x0000, "IDT 92HD87B2/4" }, + { HDA_CODEC(IDT, 0x76C0), 0x0000, "IDT 92HD89C3" }, + { HDA_CODEC(IDT, 0x76C1), 0x0000, "IDT 92HD89C2" }, + { HDA_CODEC(IDT, 0x76C2), 0x0000, "IDT 92HD89C1" }, + { HDA_CODEC(IDT, 0x76C3), 0x0000, "IDT 92HD89B3" }, + { HDA_CODEC(IDT, 0x76C4), 0x0000, "IDT 92HD89B2" }, + { HDA_CODEC(IDT, 0x76C5), 0x0000, "IDT 92HD89B1" }, + { HDA_CODEC(IDT, 0x76C6), 0x0000, "IDT 92HD89E3" }, + { HDA_CODEC(IDT, 0x76C7), 0x0000, "IDT 92HD89E2" }, + { HDA_CODEC(IDT, 0x76C8), 0x0000, "IDT 92HD89E1" }, + { HDA_CODEC(IDT, 0x76C9), 0x0000, "IDT 92HD89D3" }, + { HDA_CODEC(IDT, 0x76CA), 0x0000, "IDT 92HD89D2" }, + { HDA_CODEC(IDT, 0x76CB), 0x0000, "IDT 92HD89D1" }, + { HDA_CODEC(IDT, 0x76CC), 0x0000, "IDT 92HD89F3" }, + { HDA_CODEC(IDT, 0x76CD), 0x0000, "IDT 92HD89F2" }, + { HDA_CODEC(IDT, 0x76CE), 0x0000, "IDT 92HD89F1" }, + { HDA_CODEC(IDT, 0x76E7), 0x0000, "IDT 92HD90BXX" }, + { HDA_CODEC(IDT, 0x76E0), 0x0000, "IDT 92HD91BXX" }, + { HDA_CODEC(IDT, 0x76Df), 0x0000, "IDT 92HD93BXX" }, + { HDA_CODEC(IDT, 0x76E3), 0x0000, "IDT 92HD98BXX" }, + { HDA_CODEC(IDT, 0x76E5), 0x0000, "IDT 92HD99BXX" }, + { HDA_CODEC(IDT, 0xFFFF), 0x0000, "IDT (Unknown)" }, + + // Intel. + { HDA_CODEC(INTEL, 0x29FB), 0x0000, "Intel Crestline HDMI" }, + { HDA_CODEC(INTEL, 0x2801), 0x0000, "Intel Bearlake HDMI" }, + { HDA_CODEC(INTEL, 0x2802), 0x0000, "Intel Cantiga HDMI" }, + { HDA_CODEC(INTEL, 0x2803), 0x0000, "Intel Eaglelake HDMI" }, + { HDA_CODEC(INTEL, 0x2804), 0x0000, "Intel Ibex Peak HDMI" }, + { HDA_CODEC(INTEL, 0x0054), 0x0000, "Intel Ibex Peak HDMI" }, + { HDA_CODEC(INTEL, 0x2805), 0x0000, "Intel Cougar Point HDMI" }, + { HDA_CODEC(INTEL, 0x2806), 0x0000, "Intel Panther Point HDMI" }, + { HDA_CODEC(INTEL, 0x2807), 0x0000, "Intel Haswell HDMI" }, + { HDA_CODEC(INTEL, 0x2808), 0x0000, "Intel Broadwell HDMI" }, + { HDA_CODEC(INTEL, 0x2809), 0x0000, "Intel Skylake HDMI" }, + { HDA_CODEC(INTEL, 0x280A), 0x0000, "Intel Broxton HDMI" }, + { HDA_CODEC(INTEL, 0x280B), 0x0000, "Intel Kaby Lake HDMI" }, + { HDA_CODEC(INTEL, 0x280C), 0x0000, "Intel Cannon Lake HDMI" }, + { HDA_CODEC(INTEL, 0x280D), 0x0000, "Intel Gemini Lake HDMI" }, + { HDA_CODEC(INTEL, 0x2800), 0x0000, "Intel Gemini Lake HDMI" }, + { HDA_CODEC(INTEL, 0xFFFF), 0x0000, "Intel (Unknown)" }, + + // Motorola. + { HDA_CODEC(MOTO, 0xFFFF), 0x0000, "Motorola (Unknown)" }, + + // Silicon Image. + { HDA_CODEC(SII, 0xFFFF), 0x0000, "Silicon Image (Unknown)" }, + + // LSI - Lucent/Agere + { HDA_CODEC(AGERE, 0xFFFF), 0x0000, "LSI (Unknown)" }, + + // Chrontel + { HDA_CODEC(CHRONTEL, 0xFFFF), 0x0000, "Chrontel (Unknown)" }, + + // LG + { HDA_CODEC(LG, 0xFFFF), 0x0000, "LG (Unknown)" }, + + // Wolfson Microelectronics + { HDA_CODEC(WOLFSON, 0xFFFF), 0x0000, "Wolfson Microelectronics (Unknown)" }, + + // QEMU + { HDA_CODEC(QEMU, 0xFFFF), 0x0000, "QEMU (Unknown)" }, + + // Nvidia. + { HDA_CODEC(NVIDIA, 0xFFFF), 0x0000, "Nvidia (Unknown)" }, + + // Realtek. + { HDA_CODEC(REALTEK, 0x0221), 0x0000, "Realtek ALC221" }, + { HDA_CODEC(REALTEK, 0x0225), 0x0000, "Realtek ALC225" }, + { HDA_CODEC(REALTEK, 0x0230), 0x0000, "Realtek ALC230" }, + { HDA_CODEC(REALTEK, 0x0233), 0x0000, "Realtek ALC233" }, + { HDA_CODEC(REALTEK, 0x0235), 0x0000, "Realtek ALC235" }, + { HDA_CODEC(REALTEK, 0x0236), 0x0000, "Realtek ALC236" }, + { HDA_CODEC(REALTEK, 0x0255), 0x0000, "Realtek ALC255" }, + { HDA_CODEC(REALTEK, 0x0256), 0x0000, "Realtek ALC256" }, + { HDA_CODEC(REALTEK, 0x0257), 0x0000, "Realtek ALC257" }, + { HDA_CODEC(REALTEK, 0x0260), 0x0000, "Realtek ALC260" }, + { HDA_CODEC(REALTEK, 0x0262), 0x0000, "Realtek ALC262" }, + { HDA_CODEC(REALTEK, 0x0267), 0x0000, "Realtek ALC267" }, + { HDA_CODEC(REALTEK, 0x0268), 0x0000, "Realtek ALC268" }, + { HDA_CODEC(REALTEK, 0x0269), 0x0000, "Realtek ALC269" }, + { HDA_CODEC(REALTEK, 0x0270), 0x0000, "Realtek ALC270" }, + { HDA_CODEC(REALTEK, 0x0272), 0x0000, "Realtek ALC272" }, + { HDA_CODEC(REALTEK, 0x0273), 0x0000, "Realtek ALC273" }, + { HDA_CODEC(REALTEK, 0x0275), 0x0000, "Realtek ALC275" }, + { HDA_CODEC(REALTEK, 0x0276), 0x0000, "Realtek ALC276" }, + { HDA_CODEC(REALTEK, 0x0280), 0x0000, "Realtek ALC280" }, + { HDA_CODEC(REALTEK, 0x0282), 0x0000, "Realtek ALC282" }, + { HDA_CODEC(REALTEK, 0x0283), 0x0000, "Realtek ALC283" }, + { HDA_CODEC(REALTEK, 0x0284), 0x0000, "Realtek ALC284" }, + { HDA_CODEC(REALTEK, 0x0285), 0x0000, "Realtek ALC285" }, + { HDA_CODEC(REALTEK, 0x0286), 0x0000, "Realtek ALC286" }, + { HDA_CODEC(REALTEK, 0x0288), 0x0000, "Realtek ALC288" }, + { HDA_CODEC(REALTEK, 0x0289), 0x0000, "Realtek ALC289" }, + { HDA_CODEC(REALTEK, 0x0290), 0x0000, "Realtek ALC290" }, + { HDA_CODEC(REALTEK, 0x0292), 0x0000, "Realtek ALC292" }, + { HDA_CODEC(REALTEK, 0x0293), 0x0000, "Realtek ALC293" }, + { HDA_CODEC(REALTEK, 0x0294), 0x0000, "Realtek ALC294" }, + { HDA_CODEC(REALTEK, 0x0295), 0x0000, "Realtek ALC295" }, + { HDA_CODEC(REALTEK, 0x0298), 0x0000, "Realtek ALC298" }, + { HDA_CODEC(REALTEK, 0x0660), 0x0000, "Realtek ALC660" }, + { HDA_CODEC(REALTEK, 0x0662), 0x0002, "Realtek ALC662v2" }, + { HDA_CODEC(REALTEK, 0x0662), 0x0000, "Realtek ALC662" }, + { HDA_CODEC(REALTEK, 0x0663), 0x0000, "Realtek ALC663" }, + { HDA_CODEC(REALTEK, 0x0665), 0x0000, "Realtek ALC665" }, + { HDA_CODEC(REALTEK, 0x0668), 0x0000, "Realtek ALC668" }, + { HDA_CODEC(REALTEK, 0x0670), 0x0000, "Realtek ALC670" }, + { HDA_CODEC(REALTEK, 0x0671), 0x0000, "Realtek ALC671" }, + { HDA_CODEC(REALTEK, 0x0680), 0x0000, "Realtek ALC680" }, + { HDA_CODEC(REALTEK, 0x0861), 0x0000, "Realtek ALC861" }, + { HDA_CODEC(REALTEK, 0x0862), 0x0000, "Realtek ALC861-VD" }, + { HDA_CODEC(REALTEK, 0x0880), 0x0000, "Realtek ALC880" }, + { HDA_CODEC(REALTEK, 0x0882), 0x0000, "Realtek ALC882" }, + { HDA_CODEC(REALTEK, 0x0883), 0x0000, "Realtek ALC883" }, + { HDA_CODEC(REALTEK, 0x0885), 0x0103, "Realtek ALC889A" }, + { HDA_CODEC(REALTEK, 0x0885), 0x0101, "Realtek ALC889A" }, + { HDA_CODEC(REALTEK, 0x0885), 0x0000, "Realtek ALC885" }, + { HDA_CODEC(REALTEK, 0x0887), 0x0302, "Realtek ALC888B" }, + { HDA_CODEC(REALTEK, 0x0887), 0x0002, "Realtek ALC887-VD2" }, + { HDA_CODEC(REALTEK, 0x0887), 0x0001, "Realtek ALC887-VD" }, + { HDA_CODEC(REALTEK, 0x0887), 0x0000, "Realtek ALC887" }, + { HDA_CODEC(REALTEK, 0x0888), 0x0003, "Realtek ALC888S-VD" }, + { HDA_CODEC(REALTEK, 0x0888), 0x0002, "Realtek ALC888S-VC" }, + { HDA_CODEC(REALTEK, 0x0888), 0x0001, "Realtek ALC888S" }, + { HDA_CODEC(REALTEK, 0x0888), 0x0000, "Realtek ALC888" }, + { HDA_CODEC(REALTEK, 0x0889), 0x0000, "Realtek ALC889" }, + { HDA_CODEC(REALTEK, 0x0892), 0x0000, "Realtek ALC892" }, + { HDA_CODEC(REALTEK, 0x0898), 0x0000, "Realtek ALC898" }, + { HDA_CODEC(REALTEK, 0x0899), 0x0000, "Realtek ALC899" }, + { HDA_CODEC(REALTEK, 0x0900), 0x0000, "Realtek ALC1150" }, + { HDA_CODEC(REALTEK, 0x1220), 0x0000, "Realtek ALC1220" }, + { HDA_CODEC(REALTEK, 0xFFFF), 0x0000, "Realtek (Unknown)" }, + + // Sigmatel. + { HDA_CODEC(SIGMATEL, 0x7661), 0x0000, "Sigmatel CXD9872RD/K" }, + { HDA_CODEC(SIGMATEL, 0x7664), 0x0000, "Sigmatel CXD9872AKD" }, + { HDA_CODEC(SIGMATEL, 0x7691), 0x0000, "Sigmatel STAC9200D" }, + { HDA_CODEC(SIGMATEL, 0x76A2), 0x0000, "Sigmatel STAC9204X" }, + { HDA_CODEC(SIGMATEL, 0x76A3), 0x0000, "Sigmatel STAC9204D" }, + { HDA_CODEC(SIGMATEL, 0x76A0), 0x0000, "Sigmatel STAC9205X" }, + { HDA_CODEC(SIGMATEL, 0x76A1), 0x0000, "Sigmatel STAC9205D" }, + { HDA_CODEC(SIGMATEL, 0x7690), 0x0000, "Sigmatel STAC9220" }, + { HDA_CODEC(SIGMATEL, 0x7882), 0x0000, "Sigmatel STAC9220_A1" }, + { HDA_CODEC(SIGMATEL, 0x7880), 0x0000, "Sigmatel STAC9220_A2" }, + { HDA_CODEC(SIGMATEL, 0x7680), 0x0000, "Sigmatel STAC9221" }, + { HDA_CODEC(SIGMATEL, 0x7682), 0x0000, "Sigmatel STAC9221_A2" }, + { HDA_CODEC(SIGMATEL, 0x7683), 0x0000, "Sigmatel STAC9221D" }, + { HDA_CODEC(SIGMATEL, 0x7681), 0x0000, "Sigmatel STAC9220D/9223D" }, + { HDA_CODEC(SIGMATEL, 0x7618), 0x0000, "Sigmatel STAC9227X" }, + { HDA_CODEC(SIGMATEL, 0x7619), 0x0000, "Sigmatel STAC9227D" }, + { HDA_CODEC(SIGMATEL, 0x7616), 0x0000, "Sigmatel STAC9228X" }, + { HDA_CODEC(SIGMATEL, 0x7617), 0x0000, "Sigmatel STAC9228D" }, + { HDA_CODEC(SIGMATEL, 0x7614), 0x0000, "Sigmatel STAC9229X" }, + { HDA_CODEC(SIGMATEL, 0x7615), 0x0000, "Sigmatel STAC9229D" }, + { HDA_CODEC(SIGMATEL, 0x7612), 0x0000, "Sigmatel STAC9230X" }, + { HDA_CODEC(SIGMATEL, 0x7613), 0x0000, "Sigmatel STAC9230D" }, + { HDA_CODEC(SIGMATEL, 0x7634), 0x0000, "Sigmatel STAC9250" }, + { HDA_CODEC(SIGMATEL, 0x7636), 0x0000, "Sigmatel STAC9251" }, + { HDA_CODEC(SIGMATEL, 0x76A4), 0x0000, "Sigmatel STAC9255" }, + { HDA_CODEC(SIGMATEL, 0x76A5), 0x0000, "Sigmatel STAC9255D" }, + { HDA_CODEC(SIGMATEL, 0x76A6), 0x0000, "Sigmatel STAC9254" }, + { HDA_CODEC(SIGMATEL, 0x76A7), 0x0000, "Sigmatel STAC9254D" }, + { HDA_CODEC(SIGMATEL, 0x7626), 0x0000, "Sigmatel STAC9271X" }, + { HDA_CODEC(SIGMATEL, 0x7627), 0x0000, "Sigmatel STAC9271D" }, + { HDA_CODEC(SIGMATEL, 0x7624), 0x0000, "Sigmatel STAC9272X" }, + { HDA_CODEC(SIGMATEL, 0x7625), 0x0000, "Sigmatel STAC9272D" }, + { HDA_CODEC(SIGMATEL, 0x7622), 0x0000, "Sigmatel STAC9273X" }, + { HDA_CODEC(SIGMATEL, 0x7623), 0x0000, "Sigmatel STAC9273D" }, + { HDA_CODEC(SIGMATEL, 0x7620), 0x0000, "Sigmatel STAC9274" }, + { HDA_CODEC(SIGMATEL, 0x7621), 0x0000, "Sigmatel STAC9274D" }, + { HDA_CODEC(SIGMATEL, 0x7628), 0x0000, "Sigmatel STAC9274X5NH" }, + { HDA_CODEC(SIGMATEL, 0x7629), 0x0000, "Sigmatel STAC9274D5NH" }, + { HDA_CODEC(SIGMATEL, 0x7662), 0x0000, "Sigmatel STAC9872AK" }, + { HDA_CODEC(SIGMATEL, 0xFFFF), 0x0000, "Sigmatel (Unknown)" }, + + // VIA. + { HDA_CODEC(VIA, 0x1708), 0x0000, "VIA VT1708_8" }, + { HDA_CODEC(VIA, 0x1709), 0x0000, "VIA VT1708_9" }, + { HDA_CODEC(VIA, 0x170A), 0x0000, "VIA VT1708_A" }, + { HDA_CODEC(VIA, 0x170B), 0x0000, "VIA VT1708_B" }, + { HDA_CODEC(VIA, 0xe710), 0x0000, "VIA VT1709_0" }, + { HDA_CODEC(VIA, 0xe711), 0x0000, "VIA VT1709_1" }, + { HDA_CODEC(VIA, 0xe712), 0x0000, "VIA VT1709_2" }, + { HDA_CODEC(VIA, 0xe713), 0x0000, "VIA VT1709_3" }, + { HDA_CODEC(VIA, 0xe714), 0x0000, "VIA VT1709_4" }, + { HDA_CODEC(VIA, 0xe715), 0x0000, "VIA VT1709_5" }, + { HDA_CODEC(VIA, 0xe716), 0x0000, "VIA VT1709_6" }, + { HDA_CODEC(VIA, 0xe717), 0x0000, "VIA VT1709_7" }, + { HDA_CODEC(VIA, 0xe720), 0x0000, "VIA VT1708B_0" }, + { HDA_CODEC(VIA, 0xe721), 0x0000, "VIA VT1708B_1" }, + { HDA_CODEC(VIA, 0xe722), 0x0000, "VIA VT1708B_2" }, + { HDA_CODEC(VIA, 0xe723), 0x0000, "VIA VT1708B_3" }, + { HDA_CODEC(VIA, 0xe724), 0x0000, "VIA VT1708B_4" }, + { HDA_CODEC(VIA, 0xe725), 0x0000, "VIA VT1708B_5" }, + { HDA_CODEC(VIA, 0xe726), 0x0000, "VIA VT1708B_6" }, + { HDA_CODEC(VIA, 0xe727), 0x0000, "VIA VT1708B_7" }, + { HDA_CODEC(VIA, 0x0397), 0x0000, "VIA VT1708S_0" }, + { HDA_CODEC(VIA, 0x1397), 0x0000, "VIA VT1708S_1" }, + { HDA_CODEC(VIA, 0x2397), 0x0000, "VIA VT1708S_2" }, + { HDA_CODEC(VIA, 0x3397), 0x0000, "VIA VT1708S_3" }, + { HDA_CODEC(VIA, 0x4397), 0x0000, "VIA VT1708S_4" }, + { HDA_CODEC(VIA, 0x5397), 0x0000, "VIA VT1708S_5" }, + { HDA_CODEC(VIA, 0x6397), 0x0000, "VIA VT1708S_6" }, + { HDA_CODEC(VIA, 0x7397), 0x0000, "VIA VT1708S_7" }, + { HDA_CODEC(VIA, 0x0398), 0x0000, "VIA VT1702_0" }, + { HDA_CODEC(VIA, 0x1398), 0x0000, "VIA VT1702_1" }, + { HDA_CODEC(VIA, 0x2398), 0x0000, "VIA VT1702_2" }, + { HDA_CODEC(VIA, 0x3398), 0x0000, "VIA VT1702_3" }, + { HDA_CODEC(VIA, 0x4398), 0x0000, "VIA VT1702_4" }, + { HDA_CODEC(VIA, 0x5398), 0x0000, "VIA VT1702_5" }, + { HDA_CODEC(VIA, 0x6398), 0x0000, "VIA VT1702_6" }, + { HDA_CODEC(VIA, 0x7398), 0x0000, "VIA VT1702_7" }, + { HDA_CODEC(VIA, 0x0433), 0x0000, "VIA VT1716S_0" }, + { HDA_CODEC(VIA, 0xA721), 0x0000, "VIA VT1716S_1" }, + { HDA_CODEC(VIA, 0x0428), 0x0000, "VIA VT1718S_0" }, + { HDA_CODEC(VIA, 0x4428), 0x0000, "VIA VT1718S_1" }, + { HDA_CODEC(VIA, 0x0446), 0x0000, "VIA VT1802_0" }, + { HDA_CODEC(VIA, 0x8446), 0x0000, "VIA VT1802_1" }, + { HDA_CODEC(VIA, 0x0448), 0x0000, "VIA VT1812" }, + { HDA_CODEC(VIA, 0x0440), 0x0000, "VIA VT1818S" }, + { HDA_CODEC(VIA, 0x4441), 0x0000, "VIA VT1828S" }, + { HDA_CODEC(VIA, 0x0438), 0x0000, "VIA VT2002P_0" }, + { HDA_CODEC(VIA, 0x4438), 0x0000, "VIA VT2002P_1" }, + { HDA_CODEC(VIA, 0x0441), 0x0000, "VIA VT2020" }, + { HDA_CODEC(VIA, 0xFFFF), 0x0000, "VIA (Unknown)" }, + + // End. + { 0, 0x0000, NULL } +}; + + +/***************** + * Device Methods + *****************/ + +/* get HDA device name */ + +VOID +EFIAPI +HdaControllerGetName(IN UINT32 ControllerID, OUT CHAR16 **Name) +{ + // DEBUG((DEBUG_INFO, "HdaControllerGetName(): start\n")); + + // Try to match controller name. + UINTN ControllerIndex = 0; + while (gHdaControllerList[ControllerIndex].Id != 0) { + // Check ID and revision against array element. + if (gHdaControllerList[ControllerIndex].Id == ControllerID) { + *Name = AllocateZeroPool(64 * sizeof(CHAR16)); + AsciiStrToUnicodeStrS(gHdaControllerList[ControllerIndex].Name, *Name, 64); + return; + } + ControllerIndex++; + } + + // If match wasn't found, try again with a generic device ID. + ControllerIndex = 0; + while (gHdaControllerList[ControllerIndex].Id != 0) { + // Check ID and revision against array element. + if (gHdaControllerList[ControllerIndex].Id == GET_PCI_GENERIC_ID(ControllerID)) { + *Name = AllocateZeroPool(64 * sizeof(CHAR16)); + AsciiStrToUnicodeStrS(gHdaControllerList[ControllerIndex].Name, *Name, 64); + return; + } + ControllerIndex++; + } + + // If match still wasn't found, controller is unknown. + *Name = AllocateCopyPool(StrSize(HDA_CONTROLLER_MODEL_GENERIC), HDA_CONTROLLER_MODEL_GENERIC); + + // DEBUG((DEBUG_INFO, "HdaControllerGetName(): controller is %a\n", *Name)); +} + +VOID +EFIAPI +HdaCodecGetName(IN UINT32 CodecID, IN UINT16 RevisionId, OUT CHAR16 **Name) +{ + UINTN CodecIndex = 0; + // Try to match codec name. + + while (gHdaCodecList[CodecIndex].Id != 0) { + // Check ID and revision against array element. + if ((gHdaCodecList[CodecIndex].Id == CodecID) && (gHdaCodecList[CodecIndex].Rev <= RevisionId)) { + *Name = AllocateZeroPool(64 * sizeof(CHAR16)); + AsciiStrToUnicodeStrS(gHdaCodecList[CodecIndex].Name, *Name, 64); + return; + } + CodecIndex++; + } + + // If match wasn't found, try again with a generic device ID. + CodecIndex = 0; + while (gHdaCodecList[CodecIndex].Id != 0) { + // Check ID and revision against array element. + if (gHdaCodecList[CodecIndex].Id == GET_CODEC_GENERIC_ID(CodecID)) { + *Name = AllocateZeroPool(64 * sizeof(CHAR16)); + AsciiStrToUnicodeStrS(gHdaCodecList[CodecIndex].Name, *Name, 64); + return; + } + CodecIndex++; + } + + // If match still wasn't found, codec is unknown. + *Name = AllocateCopyPool(StrSize(HDA_CODEC_MODEL_GENERIC), HDA_CODEC_MODEL_GENERIC); + + // DEBUG((DEBUG_INFO, "Codec name: %s\n", HdaCodecDev->Name)); +} diff --git a/Library/HdaDevicesLib/HdaDevicesLib.inf b/Library/HdaDevicesLib/HdaDevicesLib.inf new file mode 100644 index 000000000..3fd5afcf5 --- /dev/null +++ b/Library/HdaDevicesLib/HdaDevicesLib.inf @@ -0,0 +1,31 @@ +## file HdaDevicesLib.inf +# Copyrights??? +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = HdaDevicesLib + FILE_GUID = C10BE401-2B49-11E2-8DA0-CFED6188709B + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = HdaDevicesLib + +[Packages] + MdePkg/MdePkg.dec + CloverPkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + PrintLib + MemoryAllocationLib + UefiBootServicesTableLib + DebugLib + PciLib + +[Sources] + HdaDevicesLib.c + +[BuildOptions] + XCODE:*_*_*_CC_FLAGS = -Os -fno-lto -UUSING_LTO -DMDEPKG_NDEBUG + GCC:*_*_*_CC_FLAGS = -Os -fno-lto -DMDEPKG_NDEBUG diff --git a/rEFIt_UEFI/Platform/Platform.h b/rEFIt_UEFI/Platform/Platform.h index 22fcc50e0..eb4117ff0 100644 --- a/rEFIt_UEFI/Platform/Platform.h +++ b/rEFIt_UEFI/Platform/Platform.h @@ -1504,7 +1504,7 @@ typedef struct { HRDW_MANUFACTERER Vendor; UINT16 controller_vendor_id; UINT16 controller_device_id; - CHAR8 controller_name[32]; + CHAR16 *controller_name; // -- Codec Info -- // UINT16 codec_vendor_id; UINT16 codec_device_id; @@ -1513,7 +1513,7 @@ typedef struct { UINT8 codec_maj_rev; UINT8 codec_min_rev; UINT8 codec_num_function_groups; - CHAR8 codec_name[32]; + CHAR16 *codec_name; } HDA_PROPERTIES; typedef struct { @@ -2068,20 +2068,7 @@ setup_hda_devprop ( CHAR8 *OSVersion ); -CHAR8 -*get_hda_controller_name ( - UINT16 controller_device_id, - UINT16 controller_vendor_id - ); -/* -CHAR8 -*get_hda_codec_name ( - UINT16 codec_vendor_id, - UINT16 codec_device_id, - UINT8 codec_revision_id, - UINT8 codec_stepping_id - ); -*/ + BOOLEAN setup_nvidia_devprop ( pci_dt_t *nvda_dev @@ -2095,7 +2082,7 @@ CHAR8 ); UINT32 PciAddrFromDevicePath(EFI_DEVICE_PATH_PROTOCOL* DevicePath); -EFI_STATUS AddAudioOutput(EFI_HANDLE PciDevHandle); +//EFI_STATUS AddAudioOutput(EFI_HANDLE PciDevHandle); VOID FillCardList ( diff --git a/rEFIt_UEFI/Platform/Settings.c b/rEFIt_UEFI/Platform/Settings.c index e38e34738..e53357552 100644 --- a/rEFIt_UEFI/Platform/Settings.c +++ b/rEFIt_UEFI/Platform/Settings.c @@ -5989,7 +5989,7 @@ GetUserSettings( } } Prop = GetProperty(DictPointer, "MemoryRank"); - gSettings.Attribute = GetPropertyInteger(Prop, -1); //1==Single Rank, 2 == Dual Rank, 0==undefined -1 == keep as is + gSettings.Attribute = (INT8)GetPropertyInteger(Prop, -1); //1==Single Rank, 2 == Dual Rank, 0==undefined -1 == keep as is // Inject memory tables into SMBIOS Prop = GetProperty (DictPointer, "Memory"); @@ -7251,7 +7251,6 @@ GetDevices () ((Pci.Hdr.ClassCode[1] == PCI_CLASS_MEDIA_HDA) || (Pci.Hdr.ClassCode[1] == PCI_CLASS_MEDIA_AUDIO)) && (NHDA < 4)) { - HDA_PROPERTIES *hda = &gAudios[NHDA]; // Populate Controllers IDs @@ -7259,10 +7258,8 @@ GetDevices () hda->controller_device_id = Pci.Hdr.DeviceId; // HDA Controller Info - AsciiSPrint ( hda->controller_name,64, "%a", - get_hda_controller_name ( Pci.Hdr.DeviceId, Pci.Hdr.VendorId ) - ); - + HdaControllerGetName(((hda->controller_device_id << 16) | hda->controller_vendor_id), &hda->controller_name); + if (IsHDMIAudio(HandleArray[Index])) { DBG(" - HDMI Audio: \n"); diff --git a/rEFIt_UEFI/Platform/hda.c b/rEFIt_UEFI/Platform/hda.c index ecac464d7..d96fb9570 100644 --- a/rEFIt_UEFI/Platform/hda.c +++ b/rEFIt_UEFI/Platform/hda.c @@ -19,6 +19,7 @@ */ #include "Platform.h" +//#include #ifndef DEBUG_HDA #ifndef DEBUG_ALL @@ -36,12 +37,6 @@ // HDA layout-id device injection by dmazar -#define HDA_VMIN 0x02 // Minor, Major Version -#define HDA_GCTL 0x08 // Global Control Register -#define HDA_ICO 0x60 // Immediate Command Output Interface -#define HDA_IRI 0x64 // Immediate Response Input Interface -#define HDA_ICS 0x68 // Immediate Command Status - /* CODECs */ /* * ErmaC: There's definitely a lot of different versions of the same audio codec variant out there... @@ -73,37 +68,9 @@ * Device Methods *****************/ -/* get HDA device name */ -CHAR8 *get_hda_controller_name(UINT16 controller_device_id, UINT16 controller_vendor_id) -{ - static char desc[128]; - UINT32 controller_model = ((controller_device_id << 16) | controller_vendor_id); - - HDA_CONTROLLER_LIST_ENTRY *controller; - for (controller = gHdaControllerList; controller->Id != 0; controller++) { - // Check ID and revision against array element. - if (controller->Id == controller_model) { - AsciiSPrint(desc, sizeof(desc), "%s", controller->Name); - return desc; - } - } - - // If match wasn't found, try again with a generic device ID. - for (controller = gHdaControllerList; controller->Id != 0; controller++) { - // Check ID and revision against array element. - if (controller->Id == GET_PCI_GENERIC_ID(controller_model)) { - AsciiSPrint(desc, sizeof(desc), "%s", controller->Name); - return desc; - } - } - - /* Not in table */ - AsciiSPrint(desc, sizeof(desc), "Unknown HDA device, vendor %04x, model %04x", - controller_vendor_id, controller_device_id); - return desc; -} - #if 0 + + // executing HDA verb command using Immediate Command Input and Output Registers UINT32 HDA_IC_sendVerb(EFI_PCI_IO_PROTOCOL *PciIo, UINT32 codecAdr, UINT32 nodeId, UINT32 verb) { diff --git a/rEFIt_UEFI/refit.inf b/rEFIt_UEFI/refit.inf index fd00ada36..96664682b 100644 --- a/rEFIt_UEFI/refit.inf +++ b/rEFIt_UEFI/refit.inf @@ -163,10 +163,10 @@ libeg/ftol.asm | MSFT [Packages] - CloverPkg.dec - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - NetworkPkg/NetworkPkg.dec + CloverPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + NetworkPkg/NetworkPkg.dec IntelFrameworkPkg/IntelFrameworkPkg.dec IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec @@ -181,6 +181,7 @@ DebugLib DxeServicesLib DxeServicesTableLib + HdaDevicesLib HobLib IoLib # HiiLib diff --git a/rEFIt_UEFI/refit/menu.c b/rEFIt_UEFI/refit/menu.c index 10260d62c..920f73c6a 100644 --- a/rEFIt_UEFI/refit/menu.c +++ b/rEFIt_UEFI/refit/menu.c @@ -4518,7 +4518,7 @@ REFIT_MENU_ENTRY *SubMenuAudio() AddMenuInfoLine(SubScreen, PoolPrint(L"Choose options to tune the HDA devices")); AddMenuInfoLine(SubScreen, PoolPrint(L"Number of Audio Controller%a=%d", ((NHDA!=1)?"s":""), NHDA)); for (i = 0; i < NHDA; i++) { - AddMenuInfoLine(SubScreen, PoolPrint(L"%d) %a [%04x][%04x]", + AddMenuInfoLine(SubScreen, PoolPrint(L"%d) %s [%04x][%04x]", (i+1), gAudios[i].controller_name, gAudios[i].controller_vendor_id,