1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7/** 8 * Non-HD Audio Link Table (NHLT) definitions taken from 9 * 10 * Intel Smart Sound Technology Audio DSP Non-HD Audio ACPI High Level Design 11 * Revision 0.7 12 * November 2015 13 */ 14 15// Including ACPI table header definitions here to avoid including 16// ACPICA header file 17 18#if !__cplusplus 19#error "C++ only header" 20#else 21 22namespace audio { 23namespace intel_hda { 24 25constexpr const char* ACPI_NHLT_SIGNATURE = "NHLT"; 26 27#define ACPI_NAME_SIZE 4 28#define ACPI_OEM_ID_SIZE 6 29#define ACPI_OEM_TABLE_ID_SIZE 8 30 31struct acpi_table_header_t { 32 char signature[ACPI_NAME_SIZE]; 33 uint32_t length; 34 uint8_t revision; 35 uint8_t checksum; 36 char oem_id[ACPI_OEM_ID_SIZE]; 37 char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; 38 uint32_t oem_revision; 39 char asl_compiler_id[ACPI_NAME_SIZE]; 40 uint32_t asl_compiler_revision; 41} __PACKED; 42 43struct specific_config_t { 44 uint32_t capabilities_size; 45 uint8_t capabilities[]; 46} __PACKED; 47 48struct format_config_t { 49 uint16_t format_tag; 50 uint16_t n_channels; 51 uint32_t n_samples_per_sec; 52 uint32_t n_avg_bytes_per_sec; 53 uint16_t n_block_align; 54 uint16_t bits_per_sample; 55 uint16_t cb_size; 56 uint16_t valid_bits_per_sample; 57 uint32_t channel_mask; 58 uint8_t subformat_guid[16]; 59 specific_config_t config; 60} __PACKED; 61 62struct formats_config_t { 63 uint8_t format_config_count; 64 format_config_t format_configs[]; 65} __PACKED; 66 67struct nhlt_descriptor_t { 68 uint32_t length; 69 uint8_t link_type; 70 uint8_t instance_id; 71 uint16_t vendor_id; 72 uint16_t device_id; 73 uint16_t revision_id; 74 uint32_t subsystem_id; 75 uint8_t device_type; 76 uint8_t direction; 77 uint8_t virtual_bus_id; 78 specific_config_t config; 79 // followed by formats_config_t format_configs 80} __PACKED; 81 82constexpr uint8_t NHLT_LINK_TYPE_HDA = 0; 83constexpr uint8_t NHLT_LINK_TYPE_PDM = 2; 84constexpr uint8_t NHLT_LINK_TYPE_SSP = 3; 85 86constexpr uint8_t NHLT_DIRECTION_RENDER = 0; 87constexpr uint8_t NHLT_DIRECTION_CAPTURE = 1; 88constexpr uint8_t NHLT_DIRECTION_BIDIR = 2; 89 90struct nhlt_table_t { 91 acpi_table_header_t header; 92 uint8_t endpoint_desc_count; 93 nhlt_descriptor_t endpoints[]; 94 // followed by specific_config_t oed_config; 95} __PACKED; 96 97} // namespace intel_hda 98} // namespace audio 99 100#endif 101