1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2020 - 2025 Intel Corporation 4 */ 5 6 #ifndef IPU7_FW_COMMOM_ABI_H 7 #define IPU7_FW_COMMOM_ABI_H 8 9 #include <linux/types.h> 10 11 #pragma pack(push, 1) 12 typedef u32 ia_gofo_addr_t; 13 14 #define IA_GOFO_ADDR_NULL (0U) 15 16 struct ia_gofo_version_s { 17 u8 patch; 18 u8 subminor; 19 u8 minor; 20 u8 major; 21 }; 22 23 #define IA_GOFO_MSG_VERSION_INIT(major_val, minor_val, subminor_val, patch_val)\ 24 {.major = (major_val), .minor = (minor_val), .subminor = \ 25 (subminor_val), .patch = (patch_val)} 26 27 #define IA_GOFO_MSG_VERSION_LIST_MAX_ENTRIES (3U) 28 #define IA_GOFO_MSG_RESERVED_SIZE (3U) 29 30 struct ia_gofo_msg_version_list { 31 u8 num_versions; 32 u8 reserved[IA_GOFO_MSG_RESERVED_SIZE]; 33 struct ia_gofo_version_s versions[IA_GOFO_MSG_VERSION_LIST_MAX_ENTRIES]; 34 }; 35 36 #pragma pack(pop) 37 38 #define TLV_TYPE_PADDING (0U) 39 40 #pragma pack(push, 1) 41 42 #define IA_GOFO_ABI_BITS_PER_BYTE (8U) 43 44 struct ia_gofo_tlv_header { 45 u16 tlv_type; 46 u16 tlv_len32; 47 }; 48 49 struct ia_gofo_tlv_list { 50 u16 num_elems; 51 u16 head_offset; 52 }; 53 54 #define TLV_ITEM_ALIGNMENT ((u32)sizeof(u32)) 55 #define TLV_MSG_ALIGNMENT ((u32)sizeof(u64)) 56 #define TLV_LIST_ALIGNMENT TLV_ITEM_ALIGNMENT 57 #pragma pack(pop) 58 59 #define IA_GOFO_MODULO(dividend, divisor) ((dividend) % (divisor)) 60 61 #define IA_GOFO_MSG_ERR_MAX_DETAILS (4U) 62 #define IA_GOFO_MSG_ERR_OK (0U) 63 #define IA_GOFO_MSG_ERR_UNSPECIFED (0xffffffffU) 64 #define IA_GOFO_MSG_ERR_GROUP_UNSPECIFIED (0U) 65 #define IA_GOFO_MSG_ERR_IS_OK(err) (IA_GOFO_MSG_ERR_OK == (err).err_code) 66 67 #pragma pack(push, 1) 68 struct ia_gofo_msg_err { 69 u32 err_group; 70 u32 err_code; 71 u32 err_detail[IA_GOFO_MSG_ERR_MAX_DETAILS]; 72 }; 73 74 #pragma pack(pop) 75 76 #define IA_GOFO_MSG_ERR_GROUP_APP_EXT_START (16U) 77 #define IA_GOFO_MSG_ERR_GROUP_MAX (31U) 78 #define IA_GOFO_MSG_ERR_GROUP_INTERNAL_START (IA_GOFO_MSG_ERR_GROUP_MAX + 1U) 79 #define IA_GOFO_MSG_ERR_GROUP_RESERVED IA_GOFO_MSG_ERR_GROUP_UNSPECIFIED 80 #define IA_GOFO_MSG_ERR_GROUP_GENERAL 1 81 82 enum ia_gofo_msg_err_general { 83 IA_GOFO_MSG_ERR_GENERAL_OK = IA_GOFO_MSG_ERR_OK, 84 IA_GOFO_MSG_ERR_GENERAL_MSG_TOO_SMALL = 1, 85 IA_GOFO_MSG_ERR_GENERAL_MSG_TOO_LARGE = 2, 86 IA_GOFO_MSG_ERR_GENERAL_DEVICE_STATE = 3, 87 IA_GOFO_MSG_ERR_GENERAL_ALIGNMENT = 4, 88 IA_GOFO_MSG_ERR_GENERAL_INDIRECT_REF_PTR_INVALID = 5, 89 IA_GOFO_MSG_ERR_GENERAL_INVALID_MSG_TYPE = 6, 90 IA_GOFO_MSG_ERR_GENERAL_SYSCOM_FAIL = 7, 91 IA_GOFO_MSG_ERR_GENERAL_N 92 }; 93 94 #pragma pack(push, 1) 95 #define IA_GOFO_MSG_TYPE_RESERVED 0 96 #define IA_GOFO_MSG_TYPE_INDIRECT 1 97 #define IA_GOFO_MSG_TYPE_LOG 2 98 #define IA_GOFO_MSG_TYPE_GENERAL_ERR 3 99 100 struct ia_gofo_msg_header { 101 struct ia_gofo_tlv_header tlv_header; 102 struct ia_gofo_tlv_list msg_options; 103 u64 user_token; 104 }; 105 106 struct ia_gofo_msg_header_ack { 107 struct ia_gofo_msg_header header; 108 struct ia_gofo_msg_err err; 109 110 }; 111 112 struct ia_gofo_msg_general_err { 113 struct ia_gofo_msg_header_ack header; 114 }; 115 116 #pragma pack(pop) 117 118 #pragma pack(push, 1) 119 enum ia_gofo_msg_link_streaming_mode { 120 IA_GOFO_MSG_LINK_STREAMING_MODE_SOFF = 0, 121 IA_GOFO_MSG_LINK_STREAMING_MODE_DOFF = 1, 122 IA_GOFO_MSG_LINK_STREAMING_MODE_BCLM = 2, 123 IA_GOFO_MSG_LINK_STREAMING_MODE_BCSM_FIX = 3, 124 IA_GOFO_MSG_LINK_STREAMING_MODE_N 125 }; 126 127 enum ia_gofo_soc_pbk_instance_id { 128 IA_GOFO_SOC_PBK_ID0 = 0, 129 IA_GOFO_SOC_PBK_ID1 = 1, 130 IA_GOFO_SOC_PBK_ID_N 131 }; 132 133 #define IA_GOFO_MSG_LINK_PBK_MAX_SLOTS (2U) 134 135 struct ia_gofo_msg_indirect { 136 struct ia_gofo_msg_header header; 137 struct ia_gofo_tlv_header ref_header; 138 ia_gofo_addr_t ref_msg_ptr; 139 }; 140 141 #pragma pack(pop) 142 143 #pragma pack(push, 1) 144 #define IA_GOFO_MSG_LOG_MAX_PARAMS (4U) 145 #define IA_GOFO_MSG_LOG_DOC_FMT_ID_MIN (0U) 146 147 #define IA_GOFO_MSG_LOG_DOC_FMT_ID_MAX (4095U) 148 #define IA_GOFO_MSG_LOG_FMT_ID_INVALID (0xfffffffU) 149 150 struct ia_gofo_msg_log_info { 151 u16 log_counter; 152 u8 msg_parameter_types; 153 /* [0:0] is_out_of_order, [1:3] logger_channel, [4:7] reserved */ 154 u8 logger_opts; 155 u32 fmt_id; 156 u32 params[IA_GOFO_MSG_LOG_MAX_PARAMS]; 157 }; 158 159 struct ia_gofo_msg_log_info_ts { 160 u64 msg_ts; 161 struct ia_gofo_msg_log_info log_info; 162 }; 163 164 struct ia_gofo_msg_log { 165 struct ia_gofo_msg_header header; 166 struct ia_gofo_msg_log_info_ts log_info_ts; 167 }; 168 169 #pragma pack(pop) 170 171 #define IA_GOFO_MSG_ABI_OUT_ACK_QUEUE_ID (0U) 172 #define IA_GOFO_MSG_ABI_OUT_LOG_QUEUE_ID (1U) 173 #define IA_GOFO_MSG_ABI_IN_DEV_QUEUE_ID (2U) 174 175 #endif 176