On Mon, Mar 11, 2024 at 11:15 AM Cezary Rojewski <cezary.rojewski@xxxxxxxxx> wrote: > > Non HDAudio Link Table (NHLT) is designed to separate hardware-related > description (registers) from AudioDSP firmware-related one i.e.: > pipelines and modules that together make up the audio stream on Intel > DSPs. This task is important as same set of hardware registers can be > used with different topologies and vice versa, same topology could be > utilized with different set of hardware. As the hardware registers > description is directly tied to specific platform, intention is to have > such description part of low-level firmware e.g.: BIOS. > > The initial design has been provided in early Sky Lake (SKL) days. The > audio architecture goes by the name cAVS. SKL is a representative of > cAVS 1.5. The table helps describe endpoint capabilities ever since. > While Raptor Lake (RPL) is the last of cAVS architecture - cAVS 2.5 to > be precise - its successor, the ACE architecture which begun with > Meteor Lake (MTL) inherited the design for all I2S and PDM > configurations. These two configurations are the primary targets for > NHLT table. > > Due to naming conflicts with existing code, several structs are named > 'nhlt2' rather than 'nhlt'. Follow up changes clean this up once > existing code has no users and is removed. > > Signed-off-by: Cezary Rojewski <cezary.rojewski@xxxxxxxxx> I suppose that this is based on an upstream ACPICA pull request that has been merged? If so, it should carry a Link: tag pointing to that pull request. The ID of the upstream ACPICA commit corresponding to this should be included into the changelog too. > --- > include/acpi/actbl2.h | 189 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 189 insertions(+) > > diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h > index 9775384d61c6..8030a1743100 100644 > --- a/include/acpi/actbl2.h > +++ b/include/acpi/actbl2.h > @@ -2141,6 +2141,195 @@ struct acpi_nhlt_device_info { > u8 device_port_id; > }; > > +/******************************************************************************* > + * > + * NHLT - Non HDAudio Link Table > + * Version 1 > + * > + ******************************************************************************/ > + > +struct acpi_table_nhlt2 { > + struct acpi_table_header header; /* Common ACPI table header */ > + u8 endpoints_count; > + /* > + * struct acpi_nhlt_endpoint endpoints[]; > + * struct acpi_nhlt_config oed_config; > + */ > +}; > + > +struct acpi_nhlt2_endpoint { > + u32 length; > + u8 link_type; > + u8 instance_id; > + u16 vendor_id; > + u16 device_id; > + u16 revision_id; > + u32 subsystem_id; > + u8 device_type; > + u8 direction; > + u8 virtual_bus_id; > + /* > + * struct acpi_nhlt_config device_config; > + * struct acpi_nhlt_formats_config formats_config; > + * struct acpi_nhlt_devices_info devices_info; > + */ > +}; > + > +/* > + * Values for link_type field above > + * > + * Only types PDM and SSP are used > + */ > +#define ACPI_NHLT_LINKTYPE_HDA 0 > +#define ACPI_NHLT_LINKTYPE_DSP 1 > +#define ACPI_NHLT_LINKTYPE_PDM 2 > +#define ACPI_NHLT_LINKTYPE_SSP 3 > +#define ACPI_NHLT_LINKTYPE_SLIMBUS 4 > +#define ACPI_NHLT_LINKTYPE_SDW 5 > +#define ACPI_NHLT_LINKTYPE_UAOL 6 > + > +/* Values for device_id field above */ > + > +#define ACPI_NHLT_DEVICEID_DMIC 0xAE20 > +#define ACPI_NHLT_DEVICEID_BT 0xAE30 > +#define ACPI_NHLT_DEVICEID_I2S 0xAE34 > + > +/* Values for device_type field above */ > + > +/* > + * Device types unique to endpoint of link_type=PDM > + * > + * Type PDM used for all SKL+ platforms > + */ > +#define ACPI_NHLT_DEVICETYPE_PDM 0 > +#define ACPI_NHLT_DEVICETYPE_PDM_SKL 1 > +/* Device types unique to endpoint of link_type=SSP */ > +#define ACPI_NHLT_DEVICETYPE_BT 0 > +#define ACPI_NHLT_DEVICETYPE_FM 1 > +#define ACPI_NHLT_DEVICETYPE_MODEM 2 > +#define ACPI_NHLT_DEVICETYPE_CODEC 4 > + > +/* Values for Direction field above */ > + > +#define ACPI_NHLT_DIR_RENDER 0 > +#define ACPI_NHLT_DIR_CAPTURE 1 > + > +struct acpi_nhlt_config { > + u32 capabilities_size; > + u8 capabilities[]; > +}; > + > +struct acpi_nhlt_gendevice_config { > + u8 virtual_slot; > + u8 config_type; > +}; > + > +/* Values for config_type field above */ > + > +#define ACPI_NHLT_CONFIGTYPE_GENERIC 0 > +#define ACPI_NHLT_CONFIGTYPE_MICARRAY 1 > + > +struct acpi_nhlt_micdevice_config { > + u8 virtual_slot; > + u8 config_type; > + u8 array_type; > +}; > + > +/* Values for array_type field above */ > + > +#define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL 0xA > +#define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG 0xB > +#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1 0xC > +#define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED 0xD > +#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2 0xE > +#define ACPI_NHLT_ARRAYTYPE_VENDOR 0xF > + > +struct acpi_nhlt2_vendor_mic_config { > + u8 type; > + u8 panel; > + u16 speaker_position_distance; /* mm */ > + u16 horizontal_offset; /* mm */ > + u16 vertical_offset; /* mm */ > + u8 frequency_low_band; /* 5*Hz */ > + u8 frequency_high_band; /* 500*Hz */ > + u16 direction_angle; /* -180 - +180 */ > + u16 elevation_angle; /* -180 - +180 */ > + u16 work_vertical_angle_begin; /* -180 - +180 with 2 deg step */ > + u16 work_vertical_angle_end; /* -180 - +180 with 2 deg step */ > + u16 work_horizontal_angle_begin; /* -180 - +180 with 2 deg step */ > + u16 work_horizontal_angle_end; /* -180 - +180 with 2 deg step */ > +}; > + > +/* Values for Type field above */ > + > +#define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL 0 > +#define ACPI_NHLT_MICTYPE_SUBCARDIOID 1 > +#define ACPI_NHLT_MICTYPE_CARDIOID 2 > +#define ACPI_NHLT_MICTYPE_SUPERCARDIOID 3 > +#define ACPI_NHLT_MICTYPE_HYPERCARDIOID 4 > +#define ACPI_NHLT_MICTYPE_8SHAPED 5 > +#define ACPI_NHLT_MICTYPE_RESERVED 6 > +#define ACPI_NHLT_MICTYPE_VENDORDEFINED 7 > + > +/* Values for Panel field above */ > + > +#define ACPI_NHLT_MICLOCATION_TOP 0 > +#define ACPI_NHLT_MICLOCATION_BOTTOM 1 > +#define ACPI_NHLT_MICLOCATION_LEFT 2 > +#define ACPI_NHLT_MICLOCATION_RIGHT 3 > +#define ACPI_NHLT_MICLOCATION_FRONT 4 > +#define ACPI_NHLT_MICLOCATION_REAR 5 > + > +struct acpi_nhlt_vendor_micdevice_config { > + u8 virtual_slot; > + u8 config_type; > + u8 array_type; > + u8 mics_count; > + struct acpi_nhlt2_vendor_mic_config mics[]; > +}; > + > +union acpi_nhlt_device_config { > + u8 virtual_slot; > + struct acpi_nhlt_gendevice_config gen; > + struct acpi_nhlt_micdevice_config mic; > + struct acpi_nhlt_vendor_micdevice_config vendor_mic; > +}; > + > +/* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */ > +struct acpi_nhlt2_wave_formatext { > + u16 format_tag; > + u16 channel_count; > + u32 samples_per_sec; > + u32 avg_bytes_per_sec; > + u16 block_align; > + u16 bits_per_sample; > + u16 extra_format_size; > + u16 valid_bits_per_sample; > + u32 channel_mask; > + u8 subformat[16]; > +}; > + > +struct acpi_nhlt2_format_config { > + struct acpi_nhlt2_wave_formatext format; > + struct acpi_nhlt_config config; > +}; > + > +struct acpi_nhlt2_formats_config { > + u8 formats_count; > + struct acpi_nhlt2_format_config formats[]; > +}; > + > +struct acpi_nhlt2_device_info { > + u8 id[16]; > + u8 instance_id; > + u8 port_id; > +}; > + > +struct acpi_nhlt_devices_info { > + u8 devices_count; > + struct acpi_nhlt2_device_info devices[]; > +}; > + > /******************************************************************************* > * > * PCCT - Platform Communications Channel Table (ACPI 5.0) > -- > 2.25.1 >