1 /** @file 2 Header file for DxePchHdaNhltLib - NHLT structure definitions. 3 4 Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> 5 SPDX-License-Identifier: BSD-2-Clause-Patent 6 **/ 7 8 #ifndef _DXE_HDA_NHLT_H_ 9 #define _DXE_HDA_NHLT_H_ 10 11 #include <IndustryStandard/Acpi.h> 12 13 // 14 // ACPI support protocol instance signature definition. 15 // 16 #define NHLT_ACPI_TABLE_SIGNATURE SIGNATURE_32 ('N', 'H', 'L', 'T') 17 18 // MSFT defined structures 19 #define SPEAKER_FRONT_LEFT 0x1 20 #define SPEAKER_FRONT_RIGHT 0x2 21 #define SPEAKER_FRONT_CENTER 0x4 22 #define SPEAKER_BACK_LEFT 0x10 23 #define SPEAKER_BACK_RIGHT 0x20 24 25 #define KSAUDIO_SPEAKER_MONO (SPEAKER_FRONT_CENTER) 26 #define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT) 27 #define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT) 28 29 #define WAVE_FORMAT_EXTENSIBLE 0xFFFE /* Microsoft */ 30 #define KSDATAFORMAT_SUBTYPE_PCM \ 31 {0x00000001, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} 32 33 #pragma pack (push, 1) 34 35 typedef struct { 36 UINT16 wFormatTag; 37 UINT16 nChannels; 38 UINT32 nSamplesPerSec; 39 UINT32 nAvgBytesPerSec; 40 UINT16 nBlockAlign; 41 UINT16 wBitsPerSample; 42 UINT16 cbSize; 43 } WAVEFORMATEX; 44 45 typedef struct { 46 WAVEFORMATEX Format; 47 union { 48 UINT16 wValidBitsPerSample; 49 UINT16 wSamplesPerBlock; 50 UINT16 wReserved; 51 } Samples; 52 UINT32 dwChannelMask; 53 GUID SubFormat; 54 } WAVEFORMATEXTENSIBLE; 55 56 // 57 // List of supported link type. 58 // 59 enum NHLT_LINK_TYPE 60 { 61 HdaNhltLinkHd = 0, 62 HdaNhltLinkDsp = 1, 63 HdaNhltLinkDmic = 2, 64 HdaNhltLinkSsp = 3, 65 HdaNhltLinkInvalid 66 }; 67 68 // 69 // List of supported device type. 70 // 71 enum NHLT_SSP_DEVICE_TYPE 72 { 73 HdaNhltSspDeviceBt = 0, 74 HdaNhltSspDeviceI2s = 4, 75 HdaNhltSspDeviceInvalid 76 }; 77 78 enum NHLT_PDM_DEVICE_TYPE 79 { 80 HdaNhltPdmDeviceDmic = 0, 81 HdaNhltPdmDeviceInvalid 82 }; 83 84 typedef struct { 85 UINT32 CapabilitiesSize; 86 UINT8 Capabilities[1]; 87 } SPECIFIC_CONFIG; 88 89 typedef struct { 90 WAVEFORMATEXTENSIBLE Format; 91 SPECIFIC_CONFIG FormatConfiguration; 92 } FORMAT_CONFIG; 93 94 typedef struct { 95 UINT8 FormatsCount; 96 FORMAT_CONFIG FormatsConfiguration[1]; 97 } FORMATS_CONFIG; 98 99 typedef struct { 100 UINT8 DeviceId[16]; 101 UINT8 DeviceInstanceId; 102 UINT8 DevicePortId; 103 } DEVICE_INFO; 104 105 typedef struct { 106 UINT8 DeviceInfoCount; 107 DEVICE_INFO DeviceInformation[1]; 108 } DEVICES_INFO; 109 110 typedef struct { 111 UINT32 EndpointDescriptorLength; 112 UINT8 LinkType; 113 UINT8 InstanceId; 114 UINT16 HwVendorId; 115 UINT16 HwDeviceId; 116 UINT16 HwRevisionId; 117 UINT32 HwSubsystemId; 118 UINT8 DeviceType; 119 UINT8 Direction; 120 UINT8 VirtualBusId; 121 SPECIFIC_CONFIG EndpointConfig; 122 FORMATS_CONFIG FormatsConfig; 123 DEVICES_INFO DevicesInformation; 124 } ENDPOINT_DESCRIPTOR; 125 126 // 127 // High Level Table structure 128 // 129 typedef struct { 130 EFI_ACPI_DESCRIPTION_HEADER Header; //{'N', 'H', 'L', 'T'} 131 UINT8 EndpointCount; // Actual number of endpoints 132 ENDPOINT_DESCRIPTOR EndpointDescriptors[1]; 133 SPECIFIC_CONFIG OedConfiguration; 134 } NHLT_ACPI_TABLE; 135 136 #pragma pack (pop) 137 138 #endif // _DXE_PCH_HDA_NHLT_H_ 139