/** @file HDAUDIO policy @copyright INTEL CONFIDENTIAL Copyright 2015 - 2020 Intel Corporation. The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material may contain trade secrets and proprietary and confidential information of Intel Corporation and its suppliers and licensors, and is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel's prior express written permission. No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing. Unless otherwise agreed by Intel in writing, you may not remove or alter this notice or any other notice embedded in Materials by Intel or Intel's suppliers or licensors in any way. This file contains an 'Intel Peripheral Driver' and is uniquely identified as "Intel Reference Module" and is licensed for Intel CPUs and chipsets under the terms of your license agreement with Intel or your vendor. This file may be modified by the user, subject to additional terms of the license agreement. @par Specification Reference: **/ #ifndef _HDAUDIO_CONFIG_H_ #define _HDAUDIO_CONFIG_H_ #include #include #define HDAUDIO_PREMEM_CONFIG_REVISION 4 #define HDAUDIO_CONFIG_REVISION 1 #define HDAUDIO_DXE_CONFIG_REVISION 2 extern EFI_GUID gHdAudioPreMemConfigGuid; extern EFI_GUID gHdAudioConfigGuid; extern EFI_GUID gHdAudioDxeConfigGuid; #pragma pack (push,1) /// /// The PCH_HDAUDIO_CONFIG block describes the expected configuration of the Intel HD Audio feature. /// #define HDAUDIO_VERB_TABLE_VIDDID(Vid,Did) (UINT32)((UINT16)Vid | ((UINT16)Did << 16)) #define HDAUDIO_VERB_TABLE_RID_SDI_SIZE(Rid,Sdi,VerbTableSize) (UINT32)((UINT8)Rid | ((UINT8)Sdi << 8) | ((UINT16)VerbTableSize << 16)) #define HDAUDIO_VERB_TABLE_CMD_SIZE(VerbTable) ((sizeof (VerbTable) - sizeof (HDA_VERB_TABLE_HEADER)) / (sizeof (UINT32))) /// /// Use this macro to create HDAUDIO_VERB_TABLE and populate size automatically /// #define HDAUDIO_VERB_TABLE_INIT(Vid,Did,Rid,Sdi,...) \ { \ { Vid, Did, Rid, Sdi, (sizeof((UINT32[]){__VA_ARGS__})/sizeof(UINT32)) }, \ { __VA_ARGS__ } \ } /** Azalia verb table header Every verb table should contain this defined header and followed by azalia verb commands. **/ typedef struct { UINT16 VendorId; ///< Codec Vendor ID UINT16 DeviceId; ///< Codec Device ID UINT8 RevisionId; ///< Revision ID of the codec. 0xFF matches any revision. UINT8 SdiNum; ///< SDI number, 0xFF matches any SDI. UINT16 DataDwords; ///< Number of data DWORDs following the header. } HDA_VERB_TABLE_HEADER; #ifdef _MSC_VER // // Disable "zero-sized array in struct/union" extension warning. // Used for neater verb table definitions. // #pragma warning (push) #pragma warning (disable: 4200) #endif typedef struct { HDA_VERB_TABLE_HEADER Header; UINT32 Data[]; } HDAUDIO_VERB_TABLE; #ifdef _MSC_VER #pragma warning (pop) #endif typedef struct { UINT32 ClkA; ///< Pin mux configuration. Refer to GPIO_*_MUXING_DMIC*_CLKA_* UINT32 ClkB; ///< Pin mux configuration. Refer to GPIO_*_MUXING_DMIC*_CLKB_* UINT32 Data; ///< Pin mux configuration. Refer to GPIO_*_MUXING_DMIC*_DATA_* } HDA_DMIC_PIN_MUX; /** HD Audio Link Policies **/ typedef struct { UINT32 Enable : 1; ///< HDA interface enable. When enabled related pins will be switched to native mode: 0: Disable; 1: Enable. UINT32 RsvdBits0 : 31; UINT8 SdiEnable[PCH_MAX_HDA_SDI]; ///< HDA SDI signal enable. When enabled related SDI pins will be switched to appropriate native mode: 0: Disable; 1: Enable UINT8 Reserved[(4 - (PCH_MAX_HDA_SDI % 4)) % 4]; ///< Padding for SDI enable table. } HDA_LINK_HDA; /** HD Audio DMIC Interface Policies **/ typedef struct { UINT32 Enable : 1; ///< HDA DMIC interface enable. When enabled related pins will be switched to native mode: 0: Disable; 1: Enable. UINT32 DmicClockSelect : 2; ///< DMIC link clock select: 0: Both, 1: ClkA, 2: ClkB; default is "Both" UINT32 RsvdBits0 : 29; HDA_DMIC_PIN_MUX PinMux; ///< Pin mux configuration. } HDA_LINK_DMIC; /** HD Audio SSP Interface Policies **/ typedef struct { UINT32 Enable : 1; ///< HDA SSP interface enable. When enabled related pins will be switched to native mode: 0: Disable; 1: Enable. UINT32 RsvdBits0 : 31; } HDA_LINK_SSP; /** HD Audio SNDW Interface Policies **/ typedef struct { UINT32 Enable : 1; ///< HDA SNDW interface enable. When enabled related pins will be switched to native mode: 0: Disable; 1: Enable. UINT32 RsvdBits0 : 31; } HDA_LINK_SNDW; /** This structure contains the policies which are related to HD Audio device (cAVS). Revision 1: - Inital version. **/ typedef struct { CONFIG_BLOCK_HEADER Header; ///< Config Block Header UINT32 Pme : 1; ///< Azalia wake-on-ring, 0: Disable; 1: Enable UINT32 CodecSxWakeCapability : 1; ///< Capability to detect wake initiated by a codec in Sx (eg by modem codec), 0: Disable; 1: Enable UINT32 HdAudioLinkFrequency : 4; ///< HDA-Link frequency (PCH_HDAUDIO_LINK_FREQUENCY enum): 2: 24MHz, 1: 12MHz, 0: 6MHz UINT32 RsvdBits0 : 26; ///< Reserved bits 0 /** Number of the verb table entry defined in VerbTablePtr. Each entry points to a verb table which contains HDAUDIO_VERB_TABLE structure and verb command blocks. **/ UINT8 VerbTableEntryNum; UINT8 Rsvd0[3]; ///< Reserved bytes, align to multiple 4 /** Pointer to a verb table array. This pointer points to 32bits address, and is only eligible and consumed in post mem phase. Each entry points to a verb table which contains HDAUDIO_VERB_TABLE structure and verb command blocks. The prototype of this is: HDAUDIO_VERB_TABLE **VerbTablePtr; **/ UINT32 VerbTablePtr; } HDAUDIO_CONFIG; /** This structure contains the premem policies which are related to HD Audio device (cAVS). Revision 1: - Inital version. Revision 2: - Add DmicClockSelect Revision 3: - Add AudioFpgaSocVer Revision 4: - Remove AudioFpgaSocVer **/ typedef struct { CONFIG_BLOCK_HEADER Header; ///< Config Block Header UINT32 Enable : 1; ///< Intel HD Audio (Azalia) enablement: 0: Disable, 1: Enable UINT32 DspEnable : 1; ///< DSP enablement: 0: Disable; 1: Enable UINT32 VcType : 1; ///< Virtual Channel Type Select: 0: VC0, 1: VC1 /** Universal Audio Architecture compliance for DSP enabled system: 0: Not-UAA Compliant (Intel SST driver supported only), 1: UAA Compliant (HDA Inbox driver or SST driver supported) **/ UINT32 DspUaaCompliance : 1; UINT32 IDispLinkFrequency : 4; ///< iDisp-Link frequency (PCH_HDAUDIO_LINK_FREQUENCY enum): 4: 96MHz, 3: 48MHz UINT32 IDispLinkTmode : 3; ///< iDisp-Link T-Mode (PCH_HDAUDIO_IDISP_TMODE enum): 0: 2T, 1: 1T, 2: 4T, 3: 8T, 4: 16T UINT32 IDispCodecDisconnect : 1; ///< iDisplay Audio Codec disconnection, 0: Not disconnected, enumerable; 1: Disconnected SDI, not enumerable UINT32 PowerGatingSupported : 1; ///< Power Gating supported: 0: Not supported, 1: Supported UINT32 RsvdBits : 19; ///< Reserved bits 0 /** Audio Link Mode configuration bitmask. Allows to configure enablement of the following interfaces: HDA-Link, DMIC, SSP, SoundWire. **/ HDA_LINK_HDA AudioLinkHda; ///< HDA-Link enablement: 0: Disable; 1: Enable. /** DMIC link enablement: 0: Disable; 1: Enable. DMIC0 LKF: Muxed with SNDW2/SNDW4. **/ HDA_LINK_DMIC AudioLinkDmic [PCH_MAX_HDA_DMIC_LINK_NUM]; /** I2S/SSP link enablement: 0: Disable; 1: Enable. SSP0/1 LKF: Muxed with HDA. @note Since the I2S/SSP2 pin set contains pads which are also used for CNVi purpose, enabling AudioLinkSsp2 is exclusive with CNVi is present. **/ HDA_LINK_SSP AudioLinkSsp [PCH_MAX_HDA_SSP_LINK_NUM]; /** SoundWire link enablement: 0: Disable; 1: Enable. SNDW2 LKF: Muxed with DMIC0/DMIC1. SNDW3 LKF: Muxed with DMIC1. SNDW4 LKF: Muxed with DMIC0. **/ HDA_LINK_SNDW AudioLinkSndw [PCH_MAX_HDA_SNDW_LINK_NUM]; UINT16 ResetWaitTimer; ///< (Test) The delay timer after Azalia reset, the value is number of microseconds. Default is 600. UINT8 Rsvd0[2]; ///< Reserved bytes, align to multiple 4 UINT32 SubSystemIds; ///< Value for SID and SVID. If its set to 0 then default value is used. } HDAUDIO_PREMEM_CONFIG; typedef struct { UINT32 AutonomousClockStop : 1; ///< SoundWire1 link autonomous clock stop capability: 0: Disable; 1: Enable UINT32 DataOnActiveIntervalSelect : 2; ///< SoundWire1 link data on active interval select 0: 6 clock periods; 1: 7 clock periods; 2: 8 clock periods; 3: 11 clock periods UINT32 DataOnDelaySelect : 1; ///< SoundWire1 link data on delay select 0: 2 clock periods; 1: 3 clock periods UINT32 RsvdBits1 : 28; ///< Reserved bits 1 } HDAUDIO_SNDW_CONFIG; /** This structure contains the DXE policies which are related to HD Audio device (cAVS). Revision 1: - Inital version. Revision 2: - Add IoControlEnabled Revision 3: - Remove IoControlEnabled **/ typedef struct { CONFIG_BLOCK_HEADER Header; ///< Config Block Header /** SNDW configuration for exposed via SNDW ACPI tables: **/ HDAUDIO_SNDW_CONFIG SndwConfig[PCH_MAX_HDA_SNDW_LINK_NUM]; /** Bitmask of supported DSP features: [BIT0] - WoV; [BIT1] - BT Sideband; [BIT2] - Codec VAD; [BIT5] - BT Intel HFP; [BIT6] - BT Intel A2DP [BIT7] - DSP based speech pre-processing disabled; [BIT8] - 0: Intel WoV, 1: Windows Voice Activation Default is zero. **/ UINT32 DspFeatureMask; } HDAUDIO_DXE_CONFIG; #pragma pack (pop) #endif // _HDAUDIO_CONFIG_H_