28#include <Library/BaseOverflowLib.h>
63 UINT8 ConnectionListThresh;
65 UINT8 ActualConnectionCount;
67 UINT16 ConnectionPrev;
68 UINT16 ConnectionValue;
69 UINT16 ConnectionPrevValue;
70 BOOLEAN IsRangedEntry;
72 HdaIo = HdaWidget->FuncGroup->HdaCodecDev->HdaIo;
82 &HdaWidget->Capabilities
84 if (EFI_ERROR (Status)) {
103 if (EFI_ERROR (Status)) {
107 HdaWidget->DefaultUnSol = (UINT8)Response;
119 &HdaWidget->ConnectionListLength
121 if (EFI_ERROR (Status)) {
128 HdaWidget->ConnectionCount = ActualConnectionCount;
136 for (Index = 0; Index < ActualConnectionCount; Index++) {
140 if (Index % ConnectionListThresh == 0) {
147 if (EFI_ERROR (Status)) {
152 ConnectionPrev = Connection;
153 ConnectionPrevValue = ConnectionValue;
157 IsRangedEntry = Index > 0
163 IsRangedEntry = Index > 0
173 if (IsRangedEntry && (ConnectionValue > ConnectionPrevValue)) {
174 if (BaseOverflowAddU32 (HdaWidget->ConnectionCount, ConnectionValue - ConnectionPrevValue, &HdaWidget->ConnectionCount)) {
175 return EFI_OUT_OF_RESOURCES;
180 HdaWidget->Connections = AllocateZeroPool (
sizeof (UINT16) * HdaWidget->ConnectionCount);
181 if (HdaWidget->Connections == NULL) {
182 return EFI_OUT_OF_RESOURCES;
187 for (Index = 0, ConnIndex = 0; ConnIndex < ActualConnectionCount; ConnIndex++) {
191 if (Index % ConnectionListThresh == 0) {
198 if (EFI_ERROR (Status)) {
203 ConnectionPrev = Connection;
204 ConnectionPrevValue = ConnectionValue;
208 IsRangedEntry = ConnIndex > 0
214 IsRangedEntry = ConnIndex > 0
224 if (IsRangedEntry && (ConnectionValue > ConnectionPrevValue)) {
225 while (ConnectionValue > ConnectionPrevValue) {
226 ConnectionPrevValue++;
227 HdaWidget->Connections[Index] = ConnectionPrevValue;
231 HdaWidget->Connections[Index] = ConnectionValue;
251 &HdaWidget->SupportedPowerStates
253 if (EFI_ERROR (Status)) {
264 &HdaWidget->DefaultPowerState
266 if (EFI_ERROR (Status)) {
280 &HdaWidget->AmpInCapabilities
282 if (EFI_ERROR (Status)) {
289 AmpInCount = HdaWidget->ConnectionCount;
290 if (AmpInCount < 1) {
294 HdaWidget->AmpInLeftDefaultGainMute = AllocateZeroPool (
sizeof (UINT8) * AmpInCount);
295 if (HdaWidget->AmpInLeftDefaultGainMute == NULL) {
296 return EFI_OUT_OF_RESOURCES;
299 HdaWidget->AmpInRightDefaultGainMute = AllocateZeroPool (
sizeof (UINT8) * AmpInCount);
300 if (HdaWidget->AmpInRightDefaultGainMute == NULL) {
301 FreePool (HdaWidget->AmpInLeftDefaultGainMute);
302 return EFI_OUT_OF_RESOURCES;
306 for (UINT8 i = 0; i < AmpInCount; i++) {
317 if (EFI_ERROR (Status)) {
321 HdaWidget->AmpInLeftDefaultGainMute[i] = (UINT8)Response;
333 if (EFI_ERROR (Status)) {
337 HdaWidget->AmpInRightDefaultGainMute[i] = (UINT8)Response;
350 &HdaWidget->AmpOutCapabilities
352 if (EFI_ERROR (Status)) {
356 DEBUG ((DEBUG_INFO,
"HDA: | Widget @ 0x%X output amp capabilities: 0x%X\n", HdaWidget->NodeId, HdaWidget->AmpOutCapabilities));
368 if (EFI_ERROR (Status)) {
372 HdaWidget->AmpOutLeftDefaultGainMute = (UINT8)Response;
384 if (EFI_ERROR (Status)) {
388 HdaWidget->AmpOutRightDefaultGainMute = (UINT8)Response;
401 &HdaWidget->SupportedPcmRates
403 if (EFI_ERROR (Status)) {
414 &HdaWidget->SupportedFormats
416 if (EFI_ERROR (Status)) {
430 if (EFI_ERROR (Status)) {
434 HdaWidget->DefaultConvFormat = (UINT16)Response;
444 if (EFI_ERROR (Status)) {
448 HdaWidget->DefaultConvStreamChannel = (UINT8)Response;
458 if (EFI_ERROR (Status)) {
462 HdaWidget->DefaultConvChannelCount = (UINT8)Response;
471 &HdaWidget->PinCapabilities
473 if (EFI_ERROR (Status)) {
487 if (EFI_ERROR (Status)) {
491 HdaWidget->DefaultEapd = (UINT8)Response;
492 HdaWidget->DefaultEapd &= 0x7;
504 if (EFI_ERROR (Status)) {
508 HdaWidget->DefaultPinControl = (UINT8)Response;
516 &HdaWidget->DefaultConfiguration
518 if (EFI_ERROR (Status)) {
530 &HdaWidget->VolumeCapabilities
532 if (EFI_ERROR (Status)) {
545 if (EFI_ERROR (Status)) {
549 HdaWidget->DefaultVolume = (UINT8)Response;
562 DEBUG ((DEBUG_VERBOSE,
"HdaCodecProbeFuncGroup(): start\n"));
582 if (EFI_ERROR (Status)) {
590 DEBUG ((DEBUG_INFO,
"HDA: | Function group @ 0x%X is of type 0x%X\n", FuncGroup->NodeId, FuncGroup->Type));
592 return EFI_UNSUPPORTED;
600 &FuncGroup->Capabilities
602 if (EFI_ERROR (Status)) {
613 &FuncGroup->SupportedPcmRates
615 if (EFI_ERROR (Status)) {
626 &FuncGroup->SupportedFormats
628 if (EFI_ERROR (Status)) {
639 &FuncGroup->AmpInCapabilities
641 if (EFI_ERROR (Status)) {
652 &FuncGroup->AmpOutCapabilities
654 if (EFI_ERROR (Status)) {
658 DEBUG ((DEBUG_INFO,
"HDA: | Function group @ 0x%X output amp capabilities: 0x%X\n", FuncGroup->NodeId, FuncGroup->AmpOutCapabilities));
665 &FuncGroup->SupportedPowerStates
667 if (EFI_ERROR (Status)) {
678 &FuncGroup->GpioCapabilities
680 if (EFI_ERROR (Status)) {
684 DEBUG ((DEBUG_INFO,
"HDA: | Function group @ 0x%X GPIO capabilities: 0x%X\n", FuncGroup->NodeId, FuncGroup->GpioCapabilities));
693 if (EFI_ERROR (Status)) {
699 WidgetEnd = WidgetStart + WidgetCount - 1;
702 "HDA: | Function group @ 0x%X contains %u widgets, start @ 0x%X, end @ 0x%X\n",
711 ASSERT_EFI_ERROR (Status);
714 if (WidgetCount == 0) {
715 return EFI_UNSUPPORTED;
719 FuncGroup->Widgets = AllocateZeroPool (
sizeof (
HDA_WIDGET_DEV) * WidgetCount);
720 if (FuncGroup->Widgets == NULL) {
721 return EFI_OUT_OF_RESOURCES;
724 FuncGroup->WidgetsCount = WidgetCount;
727 DEBUG ((DEBUG_VERBOSE,
"HdaCodecProbeFuncGroup(): probing widgets\n"));
728 for (UINT8 w = 0; w < WidgetCount; w++) {
730 HdaWidget = FuncGroup->Widgets + w;
734 HdaWidget->
NodeId = WidgetStart + w;
736 ASSERT_EFI_ERROR (Status);
741 ASSERT_EFI_ERROR (Status);
746 DEBUG ((DEBUG_VERBOSE,
"HdaCodecProbeFuncGroup(): probing widget connections\n"));
747 for (UINT8 w = 0; w < WidgetCount; w++) {
749 HdaWidget = FuncGroup->Widgets + w;
756 return EFI_OUT_OF_RESOURCES;
763 UINT16 WidgetIndex = HdaWidget->
Connections[c] - WidgetStart;
766 HdaConnectedWidget = FuncGroup->Widgets + WidgetIndex;
798 &HdaCodecDev->VendorId
800 if (EFI_ERROR (Status)) {
811 &HdaCodecDev->RevisionId
813 if (EFI_ERROR (Status)) {
819 DEBUG ((DEBUG_INFO,
"HDA: | Codec name: %s\n", HdaCodecDev->Name));
828 if (EFI_ERROR (Status)) {
834 FuncEnd = FuncStart + FuncCount - 1;
835 DEBUG ((DEBUG_INFO,
"HDA: | Codec contains %u function groups, start @ 0x%X, end @ 0x%X\n", FuncCount, FuncStart, FuncEnd));
838 if (FuncCount == 0) {
839 return EFI_UNSUPPORTED;
843 HdaCodecDev->FuncGroups = AllocateZeroPool (
sizeof (
HDA_FUNC_GROUP) * FuncCount);
844 if (HdaCodecDev->FuncGroups == NULL) {
845 return EFI_OUT_OF_RESOURCES;
848 HdaCodecDev->FuncGroupsCount = FuncCount;
849 HdaCodecDev->AudioFuncGroup = NULL;
852 for (UINT8 i = 0; i < FuncCount; i++) {
853 HdaCodecDev->FuncGroups[i].HdaCodecDev = HdaCodecDev;
854 HdaCodecDev->FuncGroups[i].NodeId = FuncStart + i;
856 if (!(EFI_ERROR (Status)) && (HdaCodecDev->AudioFuncGroup == NULL)) {
857 HdaCodecDev->AudioFuncGroup = HdaCodecDev->FuncGroups + i;
862 if (HdaCodecDev->AudioFuncGroup == NULL) {
863 DEBUG ((DEBUG_INFO,
"HDA: | Codec contains no audio function groups\n"));
864 return EFI_UNSUPPORTED;
889 for (UINT8 c = 0; c < HdaWidget->ConnectionCount; c++) {
894 "HDA: | %*aWidget @ 0x%X (type 0x%X)\n",
897 HdaConnectedWidget->
NodeId,
898 HdaConnectedWidget->
Type
903 HdaWidget->UpstreamWidget = HdaConnectedWidget;
911 if (Status == EFI_SUCCESS) {
912 HdaWidget->UpstreamWidget = HdaConnectedWidget;
919 return EFI_NOT_FOUND;
932 UINT8 DefaultDeviceType;
938 HdaIo = HdaCodecDev->HdaIo;
941 for (UINT8 f = 0; f < HdaCodecDev->FuncGroupsCount; f++) {
943 HdaFuncGroup = HdaCodecDev->FuncGroups + f;
946 for (UINT8 w = 0; w < HdaFuncGroup->
WidgetsCount; w++) {
948 HdaWidget = HdaFuncGroup->
Widgets + w;
959 "HDA: | Ignoring widget @ 0x%X\n",
965 if (PcdGetBool (PcdAudioControllerUsePinCapsForOutputs)) {
985 if (EFI_ERROR (Status)) {
988 "HDA: Widget @ 0x%X find upstream output - %r\n",
998 "HDA: | Port widget @ 0x%X is an output (pin defaults 0x%X) (bitmask %u)\n",
1001 1 << HdaCodecDev->OutputPortsCount
1008 if (EFI_ERROR (Status)) {
1024 if (EFI_ERROR (Status)) {
1049 if (EFI_ERROR (Status)) {
1055 HdaCodecDev->OutputPorts = ReallocatePool (
sizeof (
HDA_WIDGET_DEV *) * HdaCodecDev->OutputPortsCount, sizeof (
HDA_WIDGET_DEV *) * (HdaCodecDev->OutputPortsCount + 1), HdaCodecDev->OutputPorts);
1056 if (HdaCodecDev->OutputPorts == NULL) {
1057 return EFI_OUT_OF_RESOURCES;
1060 HdaCodecDev->OutputPortsCount++;
1063 HdaCodecDev->OutputPorts[HdaCodecDev->OutputPortsCount - 1] = HdaWidget;
1090 if ((HdaCodecInfoData == NULL) || (AudioIoData == NULL)) {
1091 Status = EFI_OUT_OF_RESOURCES;
1107 HdaCodecDev->HdaCodecInfoData = HdaCodecInfoData;
1119 HdaCodecDev->AudioIoData = AudioIoData;
1122 Status =
gBS->InstallMultipleProtocolInterfaces (
1123 &HdaCodecDev->ControllerHandle,
1132 if (EFI_ERROR (Status)) {
1136 DEBUG ((DEBUG_INFO,
"HDA: Codec protocols installed\n"));
1140 if (HdaCodecInfoData != NULL) {
1141 FreePool (HdaCodecInfoData);
1144 if (AudioIoData != NULL) {
1145 FreePool (AudioIoData);
1158 DEBUG ((DEBUG_VERBOSE,
"HdaCodecGetOutputDac(): start\n"));
1161 if ((HdaWidget == NULL) || (HdaOutputWidget == NULL)) {
1162 return EFI_INVALID_PARAMETER;
1166 while (HdaWidget != NULL) {
1169 *HdaOutputWidget = HdaWidget;
1174 HdaWidget = HdaWidget->UpstreamWidget;
1178 return EFI_NOT_FOUND;
1185 OUT UINT32 *SupportedRates
1188 DEBUG ((DEBUG_VERBOSE,
"HdaCodecGetSupportedPcmRates(): start\n"));
1191 if ((HdaPinWidget == NULL) || (SupportedRates == NULL)) {
1192 return EFI_INVALID_PARAMETER;
1201 if (EFI_ERROR (Status)) {
1209 return EFI_UNSUPPORTED;
1216 return EFI_UNSUPPORTED;
1222 DEBUG ((DEBUG_VERBOSE,
"HdaCodecGetSupportedPcmRates(): supported rates - 0x%X\n", *SupportedRates));
1235 if (HdaWidget == NULL) {
1236 return EFI_INVALID_PARAMETER;
1245 while (HdaWidget != NULL) {
1257 if (EFI_ERROR (Status)) {
1273 if (EFI_ERROR (Status)) {
1279 HdaWidget = HdaWidget->UpstreamWidget;
1299 if (HdaWidget == NULL) {
1300 return EFI_INVALID_PARAMETER;
1304 while (HdaWidget != NULL) {
1305 DEBUG ((DEBUG_INFO,
"HDA: Widget @ 0x%X calculating gain\n", HdaWidget->NodeId));
1310 if (HdaWidget->AmpOverride) {
1322 if (GainParam > NumSteps) {
1323 return EFI_INVALID_PARAMETER;
1327 *Gain = ((INTN)GainParam - Offset) * (StepSize + 1) / 4;
1329 DEBUG ((DEBUG_INFO,
"HDA: Calculated amp gain %d dB (from 0x%X raw)\n", *Gain, GainParam));
1336 HdaWidget = HdaWidget->UpstreamWidget;
1339 return EFI_NOT_FOUND;
1348 IN UINT16 StreamFormat
1364 if (HdaWidget == NULL) {
1365 return EFI_INVALID_PARAMETER;
1368 HdaIo = HdaWidget->FuncGroup->HdaCodecDev->HdaIo;
1371 while (HdaWidget != NULL) {
1372 DEBUG ((DEBUG_INFO,
"HDA: Widget @ 0x%X setting up\n", HdaWidget->NodeId));
1401 EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO,
1402 "HDA: Widget @ 0x%X enable output amp vref %u - %r\n",
1407 if (EFI_ERROR (Status)) {
1415 if (EFI_ERROR (Status)) {
1431 if (EFI_ERROR (Status)) {
1450 if (EFI_ERROR (Status)) {
1463 if (EFI_ERROR (Status)) {
1476 if (EFI_ERROR (Status)) {
1484 if (HdaWidget->AmpOverride) {
1495 GainParam = (Gain * 4 / (StepSize + 1)) + Offset;
1496 if (GainParam > NumSteps) {
1497 GainParam = NumSteps;
1498 }
else if (GainParam < 0) {
1502 DEBUG ((DEBUG_INFO,
"HDA: Applying amp gain 0x%X (from %d dB)\n", GainParam, Gain));
1512 if (EFI_ERROR (Status)) {
1519 DEBUG ((DEBUG_INFO,
"HDA: Widget @ 0x%X in amp\n", HdaWidget->NodeId));
1520 for (UINT8 c = 0; c < HdaWidget->ConnectionCount; c++) {
1521 if (HdaWidget->UpstreamIndex == c) {
1524 if (!(HdaWidget->AmpOverride)) {
1537 if (EFI_ERROR (Status)) {
1550 if (EFI_ERROR (Status)) {
1558 if (HdaWidget->ConnectionCount > 1) {
1564 HdaWidget->UpstreamIndex
1568 if (EFI_ERROR (Status)) {
1575 DEBUG ((DEBUG_INFO,
"HDA: Widget @ 0x%X output\n", HdaWidget->NodeId));
1585 if (EFI_ERROR (Status)) {
1598 if (EFI_ERROR (Status)) {
1604 HdaWidget = HdaWidget->UpstreamWidget;
1616 DEBUG ((DEBUG_VERBOSE,
"HdaCodecCleanup(): start\n"));
1624 if (HdaCodecDev == NULL) {
1629 if (HdaCodecDev->HdaCodecInfoData != NULL) {
1631 DEBUG ((DEBUG_VERBOSE,
"HdaCodecCleanup(): clean Hda Codec Info\n"));
1632 Status =
gBS->UninstallProtocolInterface (
1633 HdaCodecDev->ControllerHandle,
1635 &HdaCodecDev->HdaCodecInfoData->HdaCodecInfo
1637 ASSERT_EFI_ERROR (Status);
1640 FreePool (HdaCodecDev->HdaCodecInfoData);
1644 if (HdaCodecDev->AudioIoData != NULL) {
1646 DEBUG ((DEBUG_VERBOSE,
"HdaCodecCleanup(): clean Audio I/O\n"));
1647 Status =
gBS->UninstallProtocolInterface (
1648 HdaCodecDev->ControllerHandle,
1650 &HdaCodecDev->AudioIoData->AudioIo
1652 ASSERT_EFI_ERROR (Status);
1655 FreePool (HdaCodecDev->AudioIoData);
1659 if (HdaCodecDev->OutputPorts != NULL) {
1660 FreePool (HdaCodecDev->OutputPorts);
1663 if (HdaCodecDev->InputPorts != NULL) {
1664 FreePool (HdaCodecDev->InputPorts);
1668 if (HdaCodecDev->FuncGroups != NULL) {
1670 for (UINT8 f = 0; f < HdaCodecDev->FuncGroupsCount; f++) {
1671 HdaFuncGroup = HdaCodecDev->FuncGroups + f;
1674 if (HdaFuncGroup->
Widgets != NULL) {
1675 for (UINT8 w = 0; w < HdaFuncGroup->
WidgetsCount; w++) {
1676 HdaWidget = HdaFuncGroup->
Widgets + w;
1698 FreePool (HdaFuncGroup->
Widgets);
1703 FreePool (HdaCodecDev->FuncGroups);
1707 gBS->UninstallProtocolInterface (
1708 HdaCodecDev->ControllerHandle,
1712 FreePool (HdaCodecDev);
1718 IN EFI_DRIVER_BINDING_PROTOCOL *This,
1719 IN EFI_HANDLE ControllerHandle,
1720 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
1729 Status =
gBS->OpenProtocol (
1733 This->DriverBindingHandle,
1735 EFI_OPEN_PROTOCOL_BY_DRIVER
1737 if (EFI_ERROR (Status)) {
1742 Status = HdaIo->
GetAddress (HdaIo, &CodecAddress);
1743 if (EFI_ERROR (Status)) {
1749 Status = EFI_UNSUPPORTED;
1754 DEBUG ((DEBUG_INFO,
"HDA: Connecting codec 0x%X\n", CodecAddress));
1755 Status = EFI_SUCCESS;
1766 IN EFI_DRIVER_BINDING_PROTOCOL *This,
1767 IN EFI_HANDLE ControllerHandle,
1768 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
1771 DEBUG ((DEBUG_VERBOSE,
"HdaCodecDriverBindingStart(): start\n"));
1776 EFI_DEVICE_PATH_PROTOCOL *HdaCodecDevicePath;
1780 Status =
gBS->OpenProtocol (
1784 This->DriverBindingHandle,
1786 EFI_OPEN_PROTOCOL_BY_DRIVER
1788 if (EFI_ERROR (Status)) {
1793 Status =
gBS->OpenProtocol (
1796 (VOID **)&HdaCodecDevicePath,
1797 This->DriverBindingHandle,
1799 EFI_OPEN_PROTOCOL_BY_DRIVER
1801 if (EFI_ERROR (Status)) {
1807 if (HdaCodecDev == NULL) {
1808 Status = EFI_OUT_OF_RESOURCES;
1814 HdaCodecDev->
HdaIo = HdaIo;
1815 HdaCodecDev->
DevicePath = HdaCodecDevicePath;
1820 if (EFI_ERROR (Status)) {
1826 if (EFI_ERROR (Status)) {
1832 ASSERT_EFI_ERROR (Status);
1833 if (EFI_ERROR (Status)) {
1838 DEBUG ((DEBUG_INFO,
"HDA: Codec initialized\n"));
1855 IN EFI_DRIVER_BINDING_PROTOCOL *This,
1856 IN EFI_HANDLE ControllerHandle,
1857 IN UINTN NumberOfChildren,
1858 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL
1861 DEBUG ((DEBUG_VERBOSE,
"HdaCodecDriverBindingStop(): start\n"));
1868 Status =
gBS->OpenProtocol (
1871 (VOID **)&HdaCodecDev,
1872 This->DriverBindingHandle,
1874 EFI_OPEN_PROTOCOL_GET_PROTOCOL
1876 if (!(EFI_ERROR (Status))) {
1879 return EFI_INVALID_PARAMETER;
#define EFI_AUDIO_IO_PROTOCOL_REVISION
EFI_GUID gEfiAudioIoProtocolGuid
EFI_STATUS EFIAPI HdaCodecInstallProtocols(IN HDA_CODEC_DEV *HdaCodecDev)
EFI_STATUS EFIAPI HdaCodecGetSupportedPcmRates(IN HDA_WIDGET_DEV *HdaPinWidget, OUT UINT32 *SupportedRates)
EFI_STATUS EFIAPI HdaCodecProbeFuncGroup(IN HDA_FUNC_GROUP *FuncGroup)
EFI_STATUS EFIAPI HdaCodecProbeWidget(IN HDA_WIDGET_DEV *HdaWidget)
VOID EFIAPI HdaCodecCleanup(IN HDA_CODEC_DEV *HdaCodecDev)
BOOLEAN gCodecUseConnNoneNode
EFI_STATUS EFIAPI HdaCodecDisableWidgetPath(IN HDA_WIDGET_DEV *HdaWidget)
EFI_STATUS EFIAPI HdaCodecProbeCodec(IN HDA_CODEC_DEV *HdaCodecDev)
EFI_STATUS EFIAPI HdaCodecFindUpstreamOutput(IN HDA_WIDGET_DEV *HdaWidget, IN UINT8 Level)
EFI_STATUS EFIAPI HdaCodecGetOutputDac(IN HDA_WIDGET_DEV *HdaWidget, OUT HDA_WIDGET_DEV **HdaOutputWidget)
EFI_STATUS EFIAPI HdaCodecEnableWidgetPath(IN HDA_WIDGET_DEV *HdaWidget, IN INT8 Gain, IN UINT8 StreamId, IN UINT16 StreamFormat)
EFI_STATUS EFIAPI HdaCodecDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL)
EFI_STATUS EFIAPI HdaCodecDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL)
UINTN gGpioSetupStageMask
EFI_STATUS EFIAPI HdaCodecWidgetRawGainToDecibels(IN HDA_WIDGET_DEV *HdaWidget, IN UINT8 GainParam, OUT INT8 *Gain)
EFI_STATUS EFIAPI HdaCodecDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer OPTIONAL)
EFI_STATUS EFIAPI HdaCodecParsePorts(IN HDA_CODEC_DEV *HdaCodecDev)
#define GPIO_SETUP_STAGE_NONE
EFI_STATUS EFIAPI HdaCodecAudioIoSetupPlayback(IN EFI_AUDIO_IO_PROTOCOL *This, IN UINT64 OutputIndexMask, IN INT8 Gain, IN EFI_AUDIO_IO_PROTOCOL_FREQ Freq, IN EFI_AUDIO_IO_PROTOCOL_BITS Bits, IN UINT8 Channels, IN UINTN PlaybackDelay)
EFI_STATUS EFIAPI HdaCodecInfoGetCodecName(IN EFI_HDA_CODEC_INFO_PROTOCOL *This, OUT CONST CHAR16 **CodecName)
EFI_STATUS EFIAPI HdaCodecInfoGetWidgets(IN EFI_HDA_CODEC_INFO_PROTOCOL *This, OUT HDA_WIDGET **Widgets, OUT UINTN *WidgetCount)
EFI_STATUS EFIAPI HdaCodecAudioIoStartPlaybackAsync(IN EFI_AUDIO_IO_PROTOCOL *This, IN VOID *Data, IN UINTN DataLength, IN UINTN Position OPTIONAL, IN EFI_AUDIO_IO_CALLBACK Callback OPTIONAL, IN VOID *Context OPTIONAL)
EFI_STATUS EFIAPI HdaCodecInfoGetAudioFuncId(IN EFI_HDA_CODEC_INFO_PROTOCOL *This, OUT UINT8 *AudioFuncId, OUT BOOLEAN *UnsolCapable)
EFI_STATUS EFIAPI HdaCodecAudioIoStartPlayback(IN EFI_AUDIO_IO_PROTOCOL *This, IN VOID *Data, IN UINTN DataLength, IN UINTN Position OPTIONAL)
#define HDA_CODEC_PRIVATE_DATA_SIGNATURE
EFI_STATUS EFIAPI HdaCodecInfoGetRevisionId(IN EFI_HDA_CODEC_INFO_PROTOCOL *This, OUT UINT32 *RevisionId)
EFI_STATUS EFIAPI HdaCodecInfoFreeWidgetsBuffer(IN HDA_WIDGET *Widgets, IN UINTN WidgetCount)
EFI_STATUS EFIAPI HdaCodecInfoGetVendorId(IN EFI_HDA_CODEC_INFO_PROTOCOL *This, OUT UINT32 *VendorId)
EFI_STATUS EFIAPI HdaCodecAudioIoGetOutputs(IN EFI_AUDIO_IO_PROTOCOL *This, OUT EFI_AUDIO_IO_PROTOCOL_PORT **OutputPorts, OUT UINTN *OutputPortsCount)
EFI_STATUS EFIAPI HdaCodecInfoGetAddress(IN EFI_HDA_CODEC_INFO_PROTOCOL *This, OUT UINT8 *Address)
EFI_STATUS EFIAPI HdaCodecInfoGetDefaultRatesFormats(IN EFI_HDA_CODEC_INFO_PROTOCOL *This, OUT UINT32 *Rates, OUT UINT32 *Formats)
EFI_STATUS EFIAPI HdaCodecInfoGetDefaultAmpCaps(IN EFI_HDA_CODEC_INFO_PROTOCOL *This, OUT UINT32 *AmpInCaps, OUT UINT32 *AmpOutCaps)
EFI_STATUS EFIAPI HdaCodecAudioIoRawGainToDecibels(IN EFI_AUDIO_IO_PROTOCOL *This, IN UINT64 OutputIndexMask, IN UINT8 GainParam, OUT INT8 *Gain)
#define GPIO_PIN_MASK_AUTO
Auto: use all reported available pins.
EFI_STATUS EFIAPI HdaCodecAudioIoStopPlayback(IN EFI_AUDIO_IO_PROTOCOL *This)
EFI_GUID gEfiHdaCodecInfoProtocolGuid
EFI_GUID gEfiHdaIoProtocolGuid
#define HDA_VERB_GET_CONFIGURATION_DEFAULT_DEVICE(a)
#define HDA_PARAMETER_AMP_CAPS_INPUT
#define HDA_CONFIG_DEFAULT_DEVICE_SPEAKER
#define HDA_PARAMETER_WIDGET_CAPS_DIGITAL
#define HDA_VERB_GET_PARAMETER
#define HDA_PARAMETER_PIN_CAPS_EAPD
#define HDA_PIN_WIDGET_CONTROL_VREF_50
50%
#define HDA_PARAMETER_SUPPORTED_STREAM_FORMATS_PCM
#define HDA_CONFIG_DEFAULT_DEVICE_LINE_OUT
#define HDA_PARAMETER_WIDGET_CAPS_UNSOL_CAPABLE
#define HDA_PARAMETER_WIDGET_CAPS_AMP_OVERRIDE
#define HDA_PARAMETER_WIDGET_CAPS_POWER_CNTRL
#define HDA_VERB_SET_DIGITAL_CONV_CONTROL1
#define HDA_CODEC_VERB(Verb, Payload)
#define HDA_PARAMETER_SUPPORTED_STREAM_FORMATS
#define HDA_PARAMETER_PIN_CAPS_VREF(a)
#define HDA_PARAMETER_PIN_CAPS_VREF_100
100%
#define HDA_VERB_SET_CONVERTER_STREAM_CHANNEL
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES
#define HDA_VERB_GET_POWER_STATE
#define HDA_VERB_SET_AMP_GAIN_MUTE
#define HDA_PARAMETER_SUBNODE_COUNT_START(a)
#define HDA_PARAMETER_WIDGET_CAPS_FORMAT_OVERRIDE
#define HDA_VERB_GET_CONN_LIST_ENTRY_LONG(a, i)
#define HDA_WIDGET_TYPE_PIN_COMPLEX
#define HDA_CONFIG_DEFAULT_DEVICE_SPDIF_OUT
#define HDA_VERB_SET_PIN_WIDGET_CONTROL
#define HDA_VERB_SET_AMP_GAIN_MUTE_PAYLOAD(index, gain, mute, right, left, in, out)
#define HDA_PARAMETER_WIDGET_CAPS_IN_AMP
#define HDA_PARAMETER_FUNC_GROUP_TYPE
#define HDA_VERB_GET_CONVERTER_STREAM_CHANNEL
#define HDA_PIN_WIDGET_CONTROL_VREF_80
80%
#define HDA_PARAMETER_PIN_CAPS_OUTPUT
#define HDA_EAPD_BTL_ENABLE_EAPD
#define HDA_PARAMETER_AMP_CAPS_NUM_STEPS(a)
#define HDA_PARAMETER_VENDOR_ID_DEV(a)
#define HDA_PARAMETER_SUPPORTED_POWER_STATES
#define HDA_PARAMETER_AMP_CAPS_STEP_SIZE(a)
#define HDA_CONFIG_DEFAULT_PORT_CONN_NONE
#define HDA_PARAMETER_AMP_CAPS_OUTPUT
#define HDA_PARAMETER_WIDGET_CAPS_CONN_LIST
#define HDA_PARAMETER_CONN_LIST_LENGTH_LEN(a)
#define HDA_VERB_SET_EAPD_BTL_ENABLE
#define HDA_VERB_GET_VOLUME_KNOB
#define HDA_VERB_GET_CONVERTER_CHANNEL_COUNT
#define HDA_VERB_GET_CONN_LIST_ENTRY_SHORT_VALUE(a)
#define HDA_VERB_SET_CONVERTER_STREAM_PAYLOAD(c, s)
#define HDA_VERB_GET_CONFIGURATION_DEFAULT
#define HDA_VERB_GET_CONN_LIST_ENTRY_SHORT(a, i)
#define HDA_VERB_GET_CONFIGURATION_DEFAULT_ASSOCIATION(a)
#define HDA_PARAMETER_CONN_LIST_LENGTH
#define HDA_PARAMETER_SUBNODE_COUNT_TOTAL(a)
#define HDA_PARAMETER_AMP_CAPS_OFFSET(a)
#define HDA_VERB_GET_CONN_LIST_ENTRY_SHORT_IS_RANGE
#define HDA_VERB_GET_EAPD_BTL_ENABLE
#define HDA_PARAMETER_VOLUME_KNOB_CAPS
#define HDA_VERB_GET_AMP_GAIN_MUTE_PAYLOAD(index, left, out)
#define HDA_VERB_SET_CONN_SELECT_CONTROL
#define HDA_PARAMETER_VENDOR_ID_VEN(a)
#define HDA_WIDGET_TYPE_OUTPUT
#define HDA_WIDGET_TYPE_VOLUME_KNOB
#define HDA_PARAMETER_FUNC_GROUP_TYPE_NODETYPE(a)
#define HDA_PARAMETER_FUNC_GROUP_TYPE_UNSOL
#define HDA_VERB_SET_POWER_STATE
#define HDA_PARAMETER_CONN_LIST_LENGTH_LONG
#define HDA_VERB_GET_CONN_LIST_ENTRY_LONG_VALUE(a)
#define HDA_VERB_GET_AMP_GAIN_MUTE
#define HDA_PIN_WIDGET_CONTROL_VREF_100
100%
#define HDA_PARAMETER_WIDGET_CAPS
#define HDA_PARAMETER_VENDOR_ID
#define HDA_PARAMETER_PIN_CAPS_VREF_80
80%
#define HDA_FUNC_GROUP_TYPE_AUDIO
#define HDA_VERB_GET_PIN_WIDGET_CONTROL
#define HDA_VERB_SET_PIN_WIDGET_CONTROL_PAYLOAD(vref, in, out, hp)
#define HDA_VERB_GET_CONN_LIST_ENTRY
#define HDA_PARAMETER_REVISION_ID
#define HDA_CONFIG_DEFAULT_DEVICE_OTHER_DIGITAL_OUT
#define HDA_PARAMETER_SUBNODE_COUNT
#define HDA_VERB_GET_UNSOL_RESPONSE
#define HDA_PIN_WIDGET_CONTROL_VREF_HIZ
Hi-Z.
#define HDA_PARAMETER_WIDGET_CAPS_TYPE(a)
#define HDA_PARAMETER_PIN_CAPS_VREF_50
50%
#define HDA_CONFIG_DEFAULT_DEVICE_HEADPHONE_OUT
#define HDA_VERB_GET_CONFIGURATION_DEFAULT_PORT_CONN(a)
#define HDA_PARAMETER_GPIO_COUNT
#define HDA_VERB_SET_CONVERTER_FORMAT
#define HDA_PARAMETER_AMP_CAPS_MUTE
#define HDA_DIGITAL_CONV_CONTROL_DIGEN
#define HDA_VERB_SET_ASP_MAPPING
#define HDA_PARAMETER_FUNC_GROUP_CAPS
#define HDA_VERB_GET_CONN_LIST_ENTRY_LONG_IS_RANGE
#define HDA_VERB_GET_CONVERTER_FORMAT
#define HDA_WIDGET_TYPE_INPUT
#define HDA_PARAMETER_WIDGET_CAPS_OUT_AMP
#define HDA_PARAMETER_PIN_CAPS
CONST CHAR8 * OcHdaCodecGetName(IN UINT32 CodecId, IN UINT16 RevisionId)
#define MS_TO_MICROSECONDS(x)
CHAR16 * AsciiStrCopyToUnicode(IN CONST CHAR8 *String, IN UINTN Length)
EFI_GUID gEfiDevicePathProtocolGuid
HDA_CODEC_DEV * HdaCodecDev
EFI_AUDIO_IO_PROTOCOL AudioIo
EFI_HANDLE ControllerHandle
EFI_HDA_IO_PROTOCOL * HdaIo
EFI_DEVICE_PATH_PROTOCOL * DevicePath
HDA_CODEC_DEV * HdaCodecDev
EFI_HDA_CODEC_INFO_PROTOCOL HdaCodecInfo
UINT32 AmpOutCapabilities
UINT8 * AmpInRightDefaultGainMute
UINT32 AmpOutCapabilities
HDA_FUNC_GROUP * FuncGroup
UINT32 DefaultConfiguration
HDA_WIDGET_DEV ** WidgetConnections
UINT8 * AmpInLeftDefaultGainMute
EFI_AUDIO_IO_START_PLAYBACK StartPlayback
EFI_AUDIO_IO_STOP_PLAYBACK StopPlayback
EFI_AUDIO_IO_START_PLAYBACK_ASYNC StartPlaybackAsync
EFI_AUDIO_IO_GET_OUTPUTS GetOutputs
EFI_AUDIO_IO_SETUP_PLAYBACK SetupPlayback
EFI_AUDIO_IO_RAW_GAIN_TO_DECIBELS RawGainToDecibels
EFI_HDA_CODEC_INFO_GET_NAME GetName
EFI_HDA_CODEC_INFO_GET_VENDOR_ID GetVendorId
EFI_HDA_CODEC_INFO_GET_DEFAULT_RATES_FORMATS GetDefaultRatesFormats
EFI_HDA_CODEC_INFO_GET_AUDIO_FUNC_ID GetAudioFuncId
EFI_HDA_CODEC_INFO_GET_WIDGETS GetWidgets
EFI_HDA_CODEC_INFO_GET_REVISION_ID GetRevisionId
EFI_HDA_CODEC_INFO_GET_ADDRESS GetAddress
EFI_HDA_CODEC_INFO_FREE_WIDGETS_BUFFER FreeWidgetsBuffer
EFI_HDA_CODEC_INFO_GET_DEFAULT_AMP_CAPS GetDefaultAmpCaps
EFI_HDA_IO_GET_ADDRESS GetAddress
EFI_HDA_IO_SEND_COMMAND SendCommand