11#include <Library/PcdLib.h>
32 DEBUG ((DEBUG_VERBOSE,
"HdaCodecHdaIoStreamCallback(): start\n"));
39 if ((AudioIo == NULL) || (AudioIoCallback == NULL)) {
44 AudioIoCallback (AudioIo, Context3);
62 OUT UINTN *OutputPortsCount
65 DEBUG ((DEBUG_VERBOSE,
"HdaCodecAudioIoGetOutputs(): start\n"));
72 UINT32 SupportedRates;
75 if ((This == NULL) || (OutputPorts == NULL) ||
76 (OutputPortsCount == NULL))
78 return EFI_INVALID_PARAMETER;
87 if (HdaOutputPorts == NULL) {
88 return EFI_OUT_OF_RESOURCES;
178 if (EFI_ERROR (Status)) {
248 *OutputPorts = HdaOutputPorts;
272 IN UINT64 OutputIndexMask,
284 if ((This == NULL) || (Gain == NULL)) {
285 return EFI_INVALID_PARAMETER;
292 Status = EFI_NOT_FOUND;
295 for (Index = 0, IndexMask = 1; Index < HdaCodecDev->
OutputPortsCount; Index++, IndexMask <<= 1) {
296 if ((OutputIndexMask & IndexMask) == 0) {
301 if (!EFI_ERROR (Status) || (Status != EFI_NOT_FOUND)) {
329 IN UINT64 OutputIndexMask,
334 IN UINTN PlaybackDelay
345 UINT8 ChannelPayload;
350 UINT32 SupportedRates;
357 BOOLEAN StreamBase44kHz;
360 DEBUG ((DEBUG_VERBOSE,
"HdaCodecAudioIoSetupPlayback(): start\n"));
380 return EFI_INVALID_PARAMETER;
386 HdaIo = HdaCodecDev->
HdaIo;
390 return EFI_UNSUPPORTED;
396 if (PcdGetBool (PcdAudioCodecErrorOnNoOutputs) && (OutputIndexMask == 0)) {
397 return EFI_INVALID_PARAMETER;
404 StreamBase44kHz = FALSE;
408 for (Index = 0, IndexMask = 1; Index < HdaCodecDev->
OutputPortsCount; Index++, IndexMask <<= 1) {
409 if ((OutputIndexMask & IndexMask) == 0) {
417 if (EFI_ERROR (Status)) {
423 if (EFI_ERROR (Status)) {
424 DEBUG ((DEBUG_INFO,
"HdaCodecGetSupportedPcmRates(): failure - %r\n", Status));
433 return EFI_UNSUPPORTED;
442 return EFI_UNSUPPORTED;
451 return EFI_UNSUPPORTED;
460 return EFI_UNSUPPORTED;
469 return EFI_UNSUPPORTED;
477 return EFI_INVALID_PARAMETER;
485 return EFI_UNSUPPORTED;
488 StreamBase44kHz = FALSE;
496 return EFI_UNSUPPORTED;
499 StreamBase44kHz = FALSE;
507 return EFI_UNSUPPORTED;
510 StreamBase44kHz = FALSE;
518 return EFI_UNSUPPORTED;
521 StreamBase44kHz = FALSE;
529 return EFI_UNSUPPORTED;
532 StreamBase44kHz = FALSE;
540 return EFI_UNSUPPORTED;
543 StreamBase44kHz = TRUE;
551 return EFI_UNSUPPORTED;
554 StreamBase44kHz = FALSE;
562 return EFI_UNSUPPORTED;
565 StreamBase44kHz = TRUE;
573 return EFI_UNSUPPORTED;
576 StreamBase44kHz = FALSE;
584 return EFI_UNSUPPORTED;
587 StreamBase44kHz = FALSE;
594 return EFI_INVALID_PARAMETER;
599 for (Index = 0, IndexMask = 1; Index < HdaCodecDev->
OutputPortsCount; Index++, IndexMask <<= 1) {
600 if ((OutputIndexMask & IndexMask) != 0) {
605 if (EFI_ERROR (Status)) {
612 if (EFI_ERROR (Status)) {
620 if (OutputIndexMask == 0) {
632 DEBUG ((DEBUG_VERBOSE,
"HdaCodecAudioIoPlay(): Stream format 0x%X\n", StreamFmt));
634 if (EFI_ERROR (Status)) {
639 for (Index = 0, IndexMask = 1; Index < HdaCodecDev->
OutputPortsCount; Index++, IndexMask <<= 1) {
640 if ((OutputIndexMask & IndexMask) == 0) {
645 if (EFI_ERROR (Status)) {
680 Status = EFI_INVALID_PARAMETER;
684 ChannelPayload = (1 << NumGpios) - 1;
687 if (ChannelPayload != 0) {
688 Status = EFI_SUCCESS;
699 if ( !EFI_ERROR (Status)
710 if ( !EFI_ERROR (Status)
723 EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO,
724 "HDA: GPIO setup on pins 0x%02X - %r\n",
729 if (EFI_ERROR (Status)) {
739 if (PlaybackDelay > 0) {
768 IN UINTN Position OPTIONAL
771 DEBUG ((DEBUG_VERBOSE,
"HdaCodecAudioIoStartPlayback(): start\n"));
777 BOOLEAN StreamRunning;
780 if ((This == NULL) || (Data == NULL) || (DataLength == 0)) {
781 return EFI_INVALID_PARAMETER;
805 if (EFI_ERROR (Status)) {
810 StreamRunning = TRUE;
811 while (StreamRunning) {
813 if (EFI_ERROR (Status)) {
844 IN UINTN Position OPTIONAL,
846 IN VOID *Context OPTIONAL
849 DEBUG ((DEBUG_VERBOSE,
"HdaCodecAudioIoStartPlaybackAsync(): start\n"));
857 if ((This == NULL) || (Data == NULL) || (DataLength == 0)) {
858 return EFI_INVALID_PARAMETER;
894 DEBUG ((DEBUG_VERBOSE,
"HdaCodecAudioIoStopPlayback(): start\n"));
902 return EFI_INVALID_PARAMETER;
#define APPLE_SYSTEM_AUDIO_VOLUME_DB_MIN
@ EfiAudioIoDeviceSpeaker
@ EfiAudioIoDeviceHeadphones
@ EfiAudioIoSurfaceExternal
@ EfiAudioIoSurfaceInternal
@ EfiAudioIoLocationOther
@ EfiAudioIoLocationRight
@ EfiAudioIoLocationBottom
@ EfiAudioIoLocationFront
EFI_AUDIO_IO_PROTOCOL_FREQ
VOID(EFIAPI * EFI_AUDIO_IO_CALLBACK)(IN EFI_AUDIO_IO_PROTOCOL *AudioIo, IN VOID *Context)
EFI_AUDIO_IO_PROTOCOL_BITS
EFI_STATUS EFIAPI HdaCodecGetSupportedPcmRates(IN HDA_WIDGET_DEV *HdaPinWidget, OUT UINT32 *SupportedRates)
EFI_STATUS EFIAPI HdaCodecDisableWidgetPath(IN HDA_WIDGET_DEV *HdaWidget)
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)
UINTN gGpioSetupStageMask
EFI_STATUS EFIAPI HdaCodecWidgetRawGainToDecibels(IN HDA_WIDGET_DEV *HdaWidget, IN UINT8 GainParam, OUT INT8 *Gain)
#define GPIO_SETUP_STAGE_ENABLE
#define GPIO_SETUP_STAGE_DIRECTION
#define GPIO_SETUP_STAGE_DATA
#define AUDIO_IO_PRIVATE_DATA_FROM_THIS(This)
STATIC EFI_AUDIO_IO_PROTOCOL_BITS mBits
VOID EFIAPI HdaCodecHdaIoStreamCallback(IN EFI_HDA_IO_PROTOCOL_TYPE Type, IN VOID *Context1, IN VOID *Context2, IN VOID *Context3)
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)
STATIC EFI_AUDIO_IO_PROTOCOL_FREQ mFreq
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)
STATIC UINT64 mOutputIndexMask
EFI_STATUS EFIAPI HdaCodecAudioIoStartPlayback(IN EFI_AUDIO_IO_PROTOCOL *This, IN VOID *Data, IN UINTN DataLength, IN UINTN Position OPTIONAL)
EFI_STATUS EFIAPI HdaCodecAudioIoGetOutputs(IN EFI_AUDIO_IO_PROTOCOL *This, OUT EFI_AUDIO_IO_PROTOCOL_PORT **OutputPorts, OUT UINTN *OutputPortsCount)
EFI_STATUS EFIAPI HdaCodecAudioIoRawGainToDecibels(IN EFI_AUDIO_IO_PROTOCOL *This, IN UINT64 OutputIndexMask, IN UINT8 GainParam, OUT INT8 *Gain)
EFI_STATUS EFIAPI HdaCodecAudioIoStopPlayback(IN EFI_AUDIO_IO_PROTOCOL *This)
#define HDA_VERB_GET_CONFIGURATION_DEFAULT_DEVICE(a)
#define HDA_CONFIG_DEFAULT_DEVICE_SPEAKER
#define HDA_CONFIG_DEFAULT_DEVICE_SPDIF_IN
#define HDA_VERB_SET_GPIO_DIRECTION
#define HDA_CONFIG_DEFAULT_LOC_SPEC_BOTTOM
#define HDA_CONFIG_DEFAULT_DEVICE_LINE_OUT
#define HDA_CONFIG_DEFAULT_LOC_SPEC_TOP
#define HDA_CONFIG_DEFAULT_LOC_SPEC_RIGHT
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_24BIT
#define HDA_CONFIG_DEFAULT_DEVICE_MIC_IN
#define HDA_CODEC_VERB(Verb, Payload)
#define HDA_CONVERTER_FORMAT_BITS_16
#define HDA_VERB_SET_GPIO_DATA
#define HDA_CONFIG_DEFAULT_LOC_SURF_INTERNAL
#define HDA_CONFIG_DEFAULT_LOC_SPEC_REAR
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_16KHZ
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_88KHZ
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_192KHZ
#define HDA_CONFIG_DEFAULT_DEVICE_SPDIF_OUT
#define HDA_VERB_GET_CONFIGURATION_DEFAULT_LOC(a)
#define HDA_PARAMETER_GPIO_COUNT_NUM_GPIOS(a)
#define HDA_CONVERTER_FORMAT_BITS_8
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_16BIT
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_8BIT
#define HDA_VERB_SET_GPIO_ENABLE_MASK
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_44KHZ
#define HDA_CONVERTER_FORMAT_BITS_20
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_32BIT
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_8KHZ
#define HDA_CONVERTER_FORMAT_SET(chan, bits, div, mult, base)
#define HDA_CONFIG_DEFAULT_DEVICE_LINE_IN
#define HDA_CONFIG_DEFAULT_LOC_SPEC_LEFT
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_11KHZ
#define HDA_CONFIG_DEFAULT_LOC_SPEC_FRONT
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_32KHZ
#define HDA_PARAMETER_PIN_CAPS_HDMI
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_48KHZ
#define HDA_CONFIG_DEFAULT_LOC_SPEC_NA
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_22KHZ
#define HDA_CONVERTER_FORMAT_BITS_24
#define HDA_CONFIG_DEFAULT_DEVICE_HEADPHONE_OUT
#define HDA_CONVERTER_FORMAT_BITS_32
#define HDA_CONFIG_DEFAULT_LOC_SURF_EXTERNAL
#define HDA_VERB_GET_CONFIGURATION_DEFAULT_SURF(a)
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_20BIT
#define HDA_PARAMETER_SUPPORTED_PCM_SIZE_RATES_96KHZ
#define MS_TO_MICROSECONDS(x)
UINT64 SelectedOutputIndexMask
HDA_CODEC_DEV * HdaCodecDev
HDA_WIDGET_DEV ** OutputPorts
EFI_HDA_IO_PROTOCOL * HdaIo
HDA_FUNC_GROUP * AudioFuncGroup
UINT32 DefaultConfiguration
EFI_AUDIO_IO_PROTOCOL_BITS SupportedBits
EFI_AUDIO_IO_PROTOCOL_SURFACE Surface
EFI_AUDIO_IO_PROTOCOL_FREQ SupportedFreqs
EFI_AUDIO_IO_PROTOCOL_LOCATION Location
EFI_AUDIO_IO_PROTOCOL_TYPE Type
EFI_AUDIO_IO_PROTOCOL_DEVICE Device
EFI_HDA_IO_CLOSE_STREAM CloseStream
EFI_HDA_IO_START_STREAM StartStream
EFI_HDA_IO_SETUP_STREAM SetupStream
EFI_HDA_IO_SEND_COMMAND SendCommand
EFI_HDA_IO_GET_STREAM GetStream
EFI_HDA_IO_STOP_STREAM StopStream