Message ID | 20240311101658.2343816-1-cezary.rojewski@intel.com |
---|---|
Headers | show |
Series | ACPI: NHLT: Access and query helpers | expand |
On Mon, Mar 11, 2024 at 11:16:54AM +0100, Cezary Rojewski wrote: > The goal of this patchset is to refactor existing interface of > Non HDAudio Link Table (NHLT) table so it becomes useful for the Intel > AudioDSP sound-drivers. Right now the useful duplicate resides in > sound/hda/intel-nhlt.c. > > The API takes form of query functions that help access device or > audio-format configuration space. This information can be then utilized > by a sound-driver to perform necessary programming and facilitate > streaming over I2S/PDM interfaces. Once the series is merged, existing > sound-drivers can move from utilizing sound/hda/intel-nhlt.c to this > very code and ultimately the former file can be removed. > > Paired with equivalent change on ACPICA [1]. > > - > > 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'. Last patch cleans the situation up. FWIW, I am fine with this version esp. taking into account the specification and ACPICA work, Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
On Mon, Mar 11, 2024 at 11:15 AM Cezary Rojewski <cezary.rojewski@intel.com> 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@intel.com> 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 >
On Mon, Mar 11, 2024 at 11:15 AM Cezary Rojewski <cezary.rojewski@intel.com> wrote: > > There are no users for the duplicated NHLT table components. > > Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> This also needs to point to the upstream ACPICA pull request and commit corresponding to it. > --- > include/acpi/actbl2.h | 254 ------------------------------------------ > 1 file changed, 254 deletions(-) > > diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h > index 8030a1743100..31a716a74340 100644 > --- a/include/acpi/actbl2.h > +++ b/include/acpi/actbl2.h > @@ -1887,260 +1887,6 @@ struct nfit_device_handle { > #define ACPI_NFIT_GET_NODE_ID(handle) \ > (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) > > -/******************************************************************************* > - * > - * NHLT - Non HD Audio Link Table > - * > - * Conforms to: Intel Smart Sound Technology NHLT Specification > - * Version 0.8.1, January 2020. > - * > - ******************************************************************************/ > - > -/* Main table */ > - > -struct acpi_table_nhlt { > - struct acpi_table_header header; /* Common ACPI table header */ > - u8 endpoint_count; > -}; > - > -struct acpi_nhlt_endpoint { > - u32 descriptor_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; > -}; > - > -/* Types for link_type field above */ > - > -#define ACPI_NHLT_RESERVED_HD_AUDIO 0 > -#define ACPI_NHLT_RESERVED_DSP 1 > -#define ACPI_NHLT_PDM 2 > -#define ACPI_NHLT_SSP 3 > -#define ACPI_NHLT_RESERVED_SLIMBUS 4 > -#define ACPI_NHLT_RESERVED_SOUNDWIRE 5 > -#define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */ > - > -/* All other values above are reserved */ > - > -/* Values for device_id field above */ > - > -#define ACPI_NHLT_PDM_DMIC 0xAE20 > -#define ACPI_NHLT_BT_SIDEBAND 0xAE30 > -#define ACPI_NHLT_I2S_TDM_CODECS 0xAE23 > - > -/* Values for device_type field above */ > - > -/* SSP Link */ > - > -#define ACPI_NHLT_LINK_BT_SIDEBAND 0 > -#define ACPI_NHLT_LINK_FM 1 > -#define ACPI_NHLT_LINK_MODEM 2 > -/* 3 is reserved */ > -#define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4 > - > -/* PDM Link */ > - > -#define ACPI_NHLT_PDM_ON_CAVS_1P8 0 > -#define ACPI_NHLT_PDM_ON_CAVS_1P5 1 > - > -/* Values for Direction field above */ > - > -#define ACPI_NHLT_DIR_RENDER 0 > -#define ACPI_NHLT_DIR_CAPTURE 1 > -#define ACPI_NHLT_DIR_RENDER_LOOPBACK 2 > -#define ACPI_NHLT_DIR_RENDER_FEEDBACK 3 > -#define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */ > - > -struct acpi_nhlt_device_specific_config { > - u32 capabilities_size; > - u8 virtual_slot; > - u8 config_type; > -}; > - > -struct acpi_nhlt_device_specific_config_a { > - u32 capabilities_size; > - u8 virtual_slot; > - u8 config_type; > - u8 array_type; > -}; > - > -/* Values for Config Type above */ > - > -#define ACPI_NHLT_CONFIG_TYPE_GENERIC 0x00 > -#define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY 0x01 > -#define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK 0x03 > -#define ACPI_NHLT_CONFIG_TYPE_RESERVED 0x04 /* 4 and above are reserved */ > - > -struct acpi_nhlt_device_specific_config_b { > - u32 capabilities_size; > -}; > - > -struct acpi_nhlt_device_specific_config_c { > - u32 capabilities_size; > - u8 virtual_slot; > -}; > - > -struct acpi_nhlt_render_device_specific_config { > - u32 capabilities_size; > - u8 virtual_slot; > -}; > - > -struct acpi_nhlt_wave_extensible { > - 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 sub_format_guid[16]; > -}; > - > -/* Values for channel_mask above */ > - > -#define ACPI_NHLT_SPKR_FRONT_LEFT 0x1 > -#define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2 > -#define ACPI_NHLT_SPKR_FRONT_CENTER 0x4 > -#define ACPI_NHLT_SPKR_LOW_FREQ 0x8 > -#define ACPI_NHLT_SPKR_BACK_LEFT 0x10 > -#define ACPI_NHLT_SPKR_BACK_RIGHT 0x20 > -#define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40 > -#define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80 > -#define ACPI_NHLT_SPKR_BACK_CENTER 0x100 > -#define ACPI_NHLT_SPKR_SIDE_LEFT 0x200 > -#define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400 > -#define ACPI_NHLT_SPKR_TOP_CENTER 0x800 > -#define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000 > -#define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000 > -#define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000 > -#define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000 > -#define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000 > -#define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000 > - > -struct acpi_nhlt_format_config { > - struct acpi_nhlt_wave_extensible format; > - u32 capability_size; > - u8 capabilities[]; > -}; > - > -struct acpi_nhlt_formats_config { > - u8 formats_count; > -}; > - > -struct acpi_nhlt_device_specific_hdr { > - u8 virtual_slot; > - u8 config_type; > -}; > - > -/* Types for config_type above */ > - > -#define ACPI_NHLT_GENERIC 0 > -#define ACPI_NHLT_MIC 1 > -#define ACPI_NHLT_RENDER 3 > - > -struct acpi_nhlt_mic_device_specific_config { > - struct acpi_nhlt_device_specific_hdr device_config; > - u8 array_type_ext; > -}; > - > -/* Values for array_type_ext above */ > - > -#define ACPI_NHLT_ARRAY_TYPE_RESERVED 0x09 /* 9 and below are reserved */ > -#define ACPI_NHLT_SMALL_LINEAR_2ELEMENT 0x0A > -#define ACPI_NHLT_BIG_LINEAR_2ELEMENT 0x0B > -#define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C > -#define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT 0x0D > -#define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E > -#define ACPI_NHLT_VENDOR_DEFINED 0x0F > -#define ACPI_NHLT_ARRAY_TYPE_MASK 0x0F > -#define ACPI_NHLT_ARRAY_TYPE_EXT_MASK 0x10 > - > -#define ACPI_NHLT_NO_EXTENSION 0x0 > -#define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT (1<<4) > - > -struct acpi_nhlt_vendor_mic_count { > - u8 microphone_count; > -}; > - > -struct acpi_nhlt_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_MIC_OMNIDIRECTIONAL 0 > -#define ACPI_NHLT_MIC_SUBCARDIOID 1 > -#define ACPI_NHLT_MIC_CARDIOID 2 > -#define ACPI_NHLT_MIC_SUPER_CARDIOID 3 > -#define ACPI_NHLT_MIC_HYPER_CARDIOID 4 > -#define ACPI_NHLT_MIC_8_SHAPED 5 > -#define ACPI_NHLT_MIC_RESERVED6 6 /* 6 is reserved */ > -#define ACPI_NHLT_MIC_VENDOR_DEFINED 7 > -#define ACPI_NHLT_MIC_RESERVED 8 /* 8 and above are reserved */ > - > -/* Values for Panel field above */ > - > -#define ACPI_NHLT_MIC_POSITION_TOP 0 > -#define ACPI_NHLT_MIC_POSITION_BOTTOM 1 > -#define ACPI_NHLT_MIC_POSITION_LEFT 2 > -#define ACPI_NHLT_MIC_POSITION_RIGHT 3 > -#define ACPI_NHLT_MIC_POSITION_FRONT 4 > -#define ACPI_NHLT_MIC_POSITION_BACK 5 > -#define ACPI_NHLT_MIC_POSITION_RESERVED 6 /* 6 and above are reserved */ > - > -struct acpi_nhlt_vendor_mic_device_specific_config { > - struct acpi_nhlt_mic_device_specific_config mic_array_device_config; > - u8 number_of_microphones; > - struct acpi_nhlt_vendor_mic_config mic_config[]; /* Indexed by number_of_microphones */ > -}; > - > -/* Microphone SNR and Sensitivity extension */ > - > -struct acpi_nhlt_mic_snr_sensitivity_extension { > - u32 SNR; > - u32 sensitivity; > -}; > - > -/* Render device with feedback */ > - > -struct acpi_nhlt_render_feedback_device_specific_config { > - u8 feedback_virtual_slot; /* Render slot in case of capture */ > - u16 feedback_channels; /* Informative only */ > - u16 feedback_valid_bits_per_sample; > -}; > - > -/* Non documented structures */ > - > -struct acpi_nhlt_device_info_count { > - u8 structure_count; > -}; > - > -struct acpi_nhlt_device_info { > - u8 device_id[16]; > - u8 device_instance_id; > - u8 device_port_id; > -}; > - > /******************************************************************************* > * > * NHLT - Non HDAudio Link Table > -- > 2.25.1 >