1 /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */ 2 /* 3 * This file is provided under a dual BSD/GPLv2 license. When using or 4 * redistributing this file, you may do so under either license. 5 * 6 * Copyright(c) 2018 Intel Corporation 7 */ 8 9 #ifndef __INCLUDE_UAPI_SOUND_SOF_USER_HEADER_H__ 10 #define __INCLUDE_UAPI_SOUND_SOF_USER_HEADER_H__ 11 12 #include <linux/types.h> 13 14 /** 15 * struct sof_abi_hdr - Header for all non IPC ABI data. 16 * @magic: Magic number for validation 17 * for IPC3 data: 0x00464F53 ('S', 'O', 'F', '\0') 18 * for IPC4 data: 0x34464F53 ('S', 'O', 'F', '4') 19 * @type: module specific parameter 20 * for IPC3: Component specific type 21 * for IPC4: parameter ID (param_id) of the data 22 * @size: The size in bytes of the data, excluding this struct 23 * @abi: SOF ABI version. The version is valid in scope of the 'magic', IPC3 and 24 * IPC4 ABI version numbers have no relationship. 25 * @reserved: Reserved for future use 26 * @data: Component data - opaque to core 27 * 28 * Identifies data type, size and ABI. 29 * Used by any bespoke component data structures or binary blobs. 30 */ 31 struct sof_abi_hdr { 32 __u32 magic; 33 __u32 type; 34 __u32 size; 35 __u32 abi; 36 __u32 reserved[4]; 37 __u32 data[]; 38 } __packed; 39 40 #define SOF_MANIFEST_DATA_TYPE_NHLT 1 41 42 /** 43 * struct sof_manifest_tlv - SOF manifest TLV data 44 * @type: type of data 45 * @size: data size (not including the size of this struct) 46 * @data: payload data 47 */ 48 struct sof_manifest_tlv { 49 __le32 type; 50 __le32 size; 51 __u8 data[]; 52 }; 53 54 /** 55 * struct sof_manifest - SOF topology manifest 56 * @abi_major: Major ABI version 57 * @abi_minor: Minor ABI version 58 * @abi_patch: ABI patch 59 * @count: count of tlv items 60 * @items: consecutive variable size tlv items 61 */ 62 struct sof_manifest { 63 __le16 abi_major; 64 __le16 abi_minor; 65 __le16 abi_patch; 66 __le16 count; 67 struct sof_manifest_tlv items[]; 68 }; 69 70 #endif 71