ACPI: NHLT: Reintroduce types the table consists of
[linux-2.6-block.git] / include / acpi / actbl2.h
index 9775384d61c693648c09cd1d99d1f16db964b13f..8030a17431004fb545e6e5845f81a6e0288da4aa 100644 (file)
@@ -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)