xref: /linux/drivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h (revision 0cdee263bc5e7b20f657ea09f9272f50c568f35b)
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