/** @file
Header file for DxePchHdaNhltLib - NHLT structure definitions.
Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _DXE_HDA_NHLT_H_
#define _DXE_HDA_NHLT_H_
#include
//
// ACPI support protocol instance signature definition.
//
#define NHLT_ACPI_TABLE_SIGNATURE SIGNATURE_32 ('N', 'H', 'L', 'T')
// MSFT defined structures
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define KSAUDIO_SPEAKER_MONO (SPEAKER_FRONT_CENTER)
#define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
#define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
#define WAVE_FORMAT_EXTENSIBLE 0xFFFE /* Microsoft */
#define KSDATAFORMAT_SUBTYPE_PCM \
{0x00000001, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}
#pragma pack (push, 1)
typedef struct {
UINT16 wFormatTag;
UINT16 nChannels;
UINT32 nSamplesPerSec;
UINT32 nAvgBytesPerSec;
UINT16 nBlockAlign;
UINT16 wBitsPerSample;
UINT16 cbSize;
} WAVEFORMATEX;
typedef struct {
WAVEFORMATEX Format;
union {
UINT16 wValidBitsPerSample;
UINT16 wSamplesPerBlock;
UINT16 wReserved;
} Samples;
UINT32 dwChannelMask;
GUID SubFormat;
} WAVEFORMATEXTENSIBLE;
//
// List of supported link type.
//
enum NHLT_LINK_TYPE
{
HdaNhltLinkHd = 0,
HdaNhltLinkDsp = 1,
HdaNhltLinkDmic = 2,
HdaNhltLinkSsp = 3,
HdaNhltLinkInvalid
};
//
// List of supported device type.
//
enum NHLT_SSP_DEVICE_TYPE
{
HdaNhltSspDeviceBt = 0,
HdaNhltSspDeviceI2s = 4,
HdaNhltSspDeviceInvalid
};
enum NHLT_PDM_DEVICE_TYPE
{
HdaNhltPdmDeviceDmic = 0,
HdaNhltPdmDeviceInvalid
};
typedef struct {
UINT32 CapabilitiesSize;
UINT8 Capabilities[1];
} SPECIFIC_CONFIG;
typedef struct {
WAVEFORMATEXTENSIBLE Format;
SPECIFIC_CONFIG FormatConfiguration;
} FORMAT_CONFIG;
typedef struct {
UINT8 FormatsCount;
FORMAT_CONFIG FormatsConfiguration[1];
} FORMATS_CONFIG;
typedef struct {
UINT8 DeviceId[16];
UINT8 DeviceInstanceId;
UINT8 DevicePortId;
} DEVICE_INFO;
typedef struct {
UINT8 DeviceInfoCount;
DEVICE_INFO DeviceInformation[1];
} DEVICES_INFO;
typedef struct {
UINT32 EndpointDescriptorLength;
UINT8 LinkType;
UINT8 InstanceId;
UINT16 HwVendorId;
UINT16 HwDeviceId;
UINT16 HwRevisionId;
UINT32 HwSubsystemId;
UINT8 DeviceType;
UINT8 Direction;
UINT8 VirtualBusId;
SPECIFIC_CONFIG EndpointConfig;
FORMATS_CONFIG FormatsConfig;
DEVICES_INFO DevicesInformation;
} ENDPOINT_DESCRIPTOR;
//
// High Level Table structure
//
typedef struct {
EFI_ACPI_DESCRIPTION_HEADER Header; //{'N', 'H', 'L', 'T'}
UINT8 EndpointCount; // Actual number of endpoints
ENDPOINT_DESCRIPTOR EndpointDescriptors[1];
SPECIFIC_CONFIG OedConfiguration;
} NHLT_ACPI_TABLE;
#pragma pack (pop)
#endif // _DXE_PCH_HDA_NHLT_H_