xref: /wlan-dirver/platform/cnss2/qmi.h (revision f4e01456554869586c179d4adc72a650f917b006)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
5  */
6 
7 
8 #ifndef _CNSS_QMI_H
9 #define _CNSS_QMI_H
10 
11 #include "wlan_firmware_service_v01.h"
12 
13 struct cnss_plat_data;
14 
15 struct cnss_qmi_event_server_arrive_data {
16 	unsigned int node;
17 	unsigned int port;
18 };
19 
20 struct cnss_mem_seg {
21 	u64 addr;
22 	u32 size;
23 };
24 
25 struct cnss_qmi_event_fw_mem_file_save_data {
26 	u32 total_size;
27 	u32 mem_seg_len;
28 	enum wlfw_mem_type_enum_v01 mem_type;
29 	struct cnss_mem_seg mem_seg[QMI_WLFW_MAX_NUM_MEM_SEG_V01];
30 	char file_name[QMI_WLFW_MAX_STR_LEN_V01 + 1];
31 };
32 
33 #ifdef CONFIG_CNSS2_QMI
34 #include "coexistence_service_v01.h"
35 #include "ip_multimedia_subsystem_private_service_v01.h"
36 #include "device_management_service_v01.h"
37 
38 int cnss_qmi_init(struct cnss_plat_data *plat_priv);
39 void cnss_qmi_deinit(struct cnss_plat_data *plat_priv);
40 unsigned int cnss_get_qmi_timeout(struct cnss_plat_data *plat_priv);
41 int cnss_wlfw_server_arrive(struct cnss_plat_data *plat_priv, void *data);
42 int cnss_wlfw_server_exit(struct cnss_plat_data *plat_priv);
43 int cnss_wlfw_respond_mem_send_sync(struct cnss_plat_data *plat_priv);
44 int cnss_wlfw_tgt_cap_send_sync(struct cnss_plat_data *plat_priv);
45 int cnss_wlfw_bdf_dnld_send_sync(struct cnss_plat_data *plat_priv,
46 				 u32 bdf_type);
47 int cnss_wlfw_m3_dnld_send_sync(struct cnss_plat_data *plat_priv);
48 int cnss_wlfw_aux_dnld_send_sync(struct cnss_plat_data *plat_priv);
49 int cnss_wlfw_wlan_mode_send_sync(struct cnss_plat_data *plat_priv,
50 				  enum cnss_driver_mode mode);
51 int cnss_wlfw_wlan_cfg_send_sync(struct cnss_plat_data *plat_priv,
52 				 struct cnss_wlan_enable_cfg *config,
53 				 const char *host_version);
54 int cnss_wlfw_athdiag_read_send_sync(struct cnss_plat_data *plat_priv,
55 				     u32 offset, u32 mem_type,
56 				     u32 data_len, u8 *data);
57 int cnss_wlfw_athdiag_write_send_sync(struct cnss_plat_data *plat_priv,
58 				      u32 offset, u32 mem_type,
59 				      u32 data_len, u8 *data);
60 int cnss_wlfw_ini_send_sync(struct cnss_plat_data *plat_priv,
61 			    u8 fw_log_mode);
62 int cnss_wlfw_antenna_switch_send_sync(struct cnss_plat_data *plat_priv);
63 int cnss_wlfw_antenna_grant_send_sync(struct cnss_plat_data *plat_priv);
64 int cnss_wlfw_dynamic_feature_mask_send_sync(struct cnss_plat_data *plat_priv);
65 int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type,
66 				 void *cmd, int cmd_len);
67 int cnss_process_wfc_call_ind_event(struct cnss_plat_data *plat_priv,
68 				    void *data);
69 int cnss_process_twt_cfg_ind_event(struct cnss_plat_data *plat_priv,
70 				   void *data);
71 int cnss_register_coex_service(struct cnss_plat_data *plat_priv);
72 void cnss_unregister_coex_service(struct cnss_plat_data *plat_priv);
73 int coex_antenna_switch_to_wlan_send_sync_msg(struct cnss_plat_data *plat_priv);
74 int coex_antenna_switch_to_mdm_send_sync_msg(struct cnss_plat_data *plat_priv);
75 int cnss_wlfw_qdss_trace_mem_info_send_sync(struct cnss_plat_data *plat_priv);
76 int cnss_register_ims_service(struct cnss_plat_data *plat_priv);
77 void cnss_unregister_ims_service(struct cnss_plat_data *plat_priv);
78 int cnss_wlfw_send_pcie_gen_speed_sync(struct cnss_plat_data *plat_priv);
79 void cnss_ignore_qmi_failure(bool ignore);
80 int cnss_qmi_get_dms_mac(struct cnss_plat_data *plat_priv);
81 int cnss_wlfw_wlan_mac_req_send_sync(struct cnss_plat_data *plat_priv,
82 				     u8 *mac, u32 mac_len);
83 int cnss_dms_init(struct cnss_plat_data *plat_priv);
84 void cnss_dms_deinit(struct cnss_plat_data *plat_priv);
85 int cnss_wlfw_qdss_dnld_send_sync(struct cnss_plat_data *plat_priv);
86 int cnss_wlfw_qdss_data_send_sync(struct cnss_plat_data *plat_priv, char *file_name,
87 				  u32 total_size);
88 int wlfw_qdss_trace_start(struct cnss_plat_data *plat_priv);
89 int wlfw_qdss_trace_stop(struct cnss_plat_data *plat_priv, unsigned long long option);
90 int cnss_wlfw_cal_report_req_send_sync(struct cnss_plat_data *plat_priv,
91 				       u32 cal_file_download_size);
92 int cnss_send_subsys_restart_level_msg(struct cnss_plat_data *plat_priv);
93 int cnss_wlfw_ini_file_send_sync(struct cnss_plat_data *plat_priv,
94 				 enum wlfw_ini_file_type_v01 file_type);
95 int cnss_wlfw_send_host_wfc_call_status(struct cnss_plat_data *plat_priv,
96 					struct cnss_wfc_cfg cfg);
97 void cnss_cancel_dms_work(void);
98 #else
99 #define QMI_WLFW_TIMEOUT_MS		10000
100 
101 static inline int cnss_qmi_init(struct cnss_plat_data *plat_priv)
102 {
103 	return 0;
104 }
105 
106 static inline void cnss_qmi_deinit(struct cnss_plat_data *plat_priv)
107 {
108 }
109 
110 static inline
111 unsigned int cnss_get_qmi_timeout(struct cnss_plat_data *plat_priv)
112 {
113 	return QMI_WLFW_TIMEOUT_MS;
114 }
115 
116 static inline int cnss_wlfw_server_arrive(struct cnss_plat_data *plat_priv,
117 					  void *data)
118 {
119 	return 0;
120 }
121 
122 static inline int cnss_wlfw_server_exit(struct cnss_plat_data *plat_priv)
123 {
124 	return 0;
125 }
126 
127 static inline
128 int cnss_wlfw_respond_mem_send_sync(struct cnss_plat_data *plat_priv)
129 {
130 	return 0;
131 }
132 
133 static inline int cnss_wlfw_tgt_cap_send_sync(struct cnss_plat_data *plat_priv)
134 {
135 	return 0;
136 }
137 
138 static inline int cnss_wlfw_bdf_dnld_send_sync(struct cnss_plat_data *plat_priv,
139 					       u32 bdf_type)
140 {
141 	return 0;
142 }
143 
144 static inline int cnss_wlfw_m3_dnld_send_sync(struct cnss_plat_data *plat_priv)
145 {
146 	return 0;
147 }
148 
149 static inline int cnss_wlfw_aux_dnld_send_sync(struct cnss_plat_data *plat_priv)
150 {
151 	return 0;
152 }
153 
154 static inline
155 int cnss_wlfw_wlan_mode_send_sync(struct cnss_plat_data *plat_priv,
156 				  enum cnss_driver_mode mode)
157 {
158 	return 0;
159 }
160 
161 static inline
162 int cnss_wlfw_wlan_cfg_send_sync(struct cnss_plat_data *plat_priv,
163 				 struct cnss_wlan_enable_cfg *config,
164 				 const char *host_version)
165 {
166 	return 0;
167 }
168 
169 static inline
170 int cnss_wlfw_athdiag_read_send_sync(struct cnss_plat_data *plat_priv,
171 				     u32 offset, u32 mem_type,
172 				     u32 data_len, u8 *data)
173 {
174 	return 0;
175 }
176 
177 static inline
178 int cnss_wlfw_athdiag_write_send_sync(struct cnss_plat_data *plat_priv,
179 				      u32 offset, u32 mem_type,
180 				      u32 data_len, u8 *data)
181 {
182 	return 0;
183 }
184 
185 static inline
186 int cnss_wlfw_ini_send_sync(struct cnss_plat_data *plat_priv,
187 			    u8 fw_log_mode)
188 {
189 	return 0;
190 }
191 
192 static inline
193 int cnss_wlfw_antenna_switch_send_sync(struct cnss_plat_data *plat_priv)
194 {
195 	return 0;
196 }
197 
198 static inline
199 int cnss_wlfw_antenna_grant_send_sync(struct cnss_plat_data *plat_priv)
200 {
201 	return 0;
202 }
203 
204 static inline
205 int cnss_wlfw_dynamic_feature_mask_send_sync(struct cnss_plat_data *plat_priv)
206 {
207 	return 0;
208 }
209 
210 static inline
211 int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type,
212 				 void *cmd, int cmd_len)
213 {
214 	return 0;
215 }
216 
217 static inline
218 int cnss_process_wfc_call_ind_event(struct cnss_plat_data *plat_priv,
219 				    void *data)
220 {
221 	return 0;
222 }
223 
224 static inline
225 int cnss_process_twt_cfg_ind_event(struct cnss_plat_data *plat_priv,
226 				   void *data)
227 {
228 	return 0;
229 }
230 
231 static inline
232 int cnss_register_coex_service(struct cnss_plat_data *plat_priv)
233 {
234 	return 0;
235 }
236 
237 static inline
238 void cnss_unregister_coex_service(struct cnss_plat_data *plat_priv) {}
239 
240 static inline
241 int coex_antenna_switch_to_wlan_send_sync_msg(struct cnss_plat_data *plat_priv)
242 {
243 	return 0;
244 }
245 
246 static inline
247 int coex_antenna_switch_to_mdm_send_sync_msg(struct cnss_plat_data *plat_priv)
248 {
249 	return 0;
250 }
251 
252 static inline
253 int cnss_wlfw_qdss_trace_mem_info_send_sync(struct cnss_plat_data *plat_priv)
254 {
255 	return 0;
256 }
257 
258 static inline
259 int cnss_register_ims_service(struct cnss_plat_data *plat_priv)
260 {
261 	return 0;
262 }
263 
264 static inline
265 void cnss_unregister_ims_service(struct cnss_plat_data *plat_priv) {}
266 
267 static inline
268 int cnss_wlfw_send_pcie_gen_speed_sync(struct cnss_plat_data *plat_priv)
269 {
270 	return 0;
271 }
272 void cnss_ignore_qmi_failure(bool ignore) {};
273 static inline int cnss_qmi_get_dms_mac(struct cnss_plat_data *plat_priv)
274 {
275 	return 0;
276 }
277 
278 int cnss_wlfw_wlan_mac_req_send_sync(struct cnss_plat_data *plat_priv,
279 				     u8 *mac, u32 mac_len)
280 {
281 	return 0;
282 }
283 
284 static inline int cnss_dms_init(struct cnss_plat_data *plat_priv)
285 {
286 	return 0;
287 }
288 
289 int cnss_wlfw_qdss_dnld_send_sync(struct cnss_plat_data *plat_priv)
290 {
291 	return 0;
292 }
293 
294 int cnss_wlfw_qdss_data_send_sync(struct cnss_plat_data *plat_priv, char *file_name,
295 				  u32 total_size)
296 {
297 	return 0;
298 }
299 
300 static inline void cnss_dms_deinit(struct cnss_plat_data *plat_priv) {}
301 
302 int wlfw_qdss_trace_start(struct cnss_plat_data *plat_priv)
303 {
304 	return 0;
305 }
306 
307 int wlfw_qdss_trace_stop(struct cnss_plat_data *plat_priv, unsigned long long option)
308 {
309 	return 0;
310 }
311 
312 static inline
313 int cnss_wlfw_cal_report_req_send_sync(struct cnss_plat_data *plat_priv,
314 				       u32 cal_file_download_size)
315 {
316 	return 0;
317 }
318 
319 static inline
320 int cnss_send_subsys_restart_level_msg(struct cnss_plat_data *plat_priv)
321 {
322 	return 0;
323 }
324 
325 int cnss_wlfw_ini_file_send_sync(struct cnss_plat_data *plat_priv,
326 				 enum wlfw_ini_file_type_v01 file_type)
327 {
328 	return 0;
329 }
330 
331 static void cnss_cancel_dms_work(void)
332 {
333 }
334 
335 int cnss_wlfw_send_host_wfc_call_status(struct cnss_plat_data *plat_priv,
336 					struct cnss_wfc_cfg cfg)
337 {
338 	return 0;
339 }
340 #endif /* CONFIG_CNSS2_QMI */
341 
342 #ifdef CONFIG_CNSS2_DEBUG
343 static inline u32 cnss_get_host_build_type(void)
344 {
345 	return QMI_HOST_BUILD_TYPE_PRIMARY_V01;
346 }
347 #else
348 static inline u32 cnss_get_host_build_type(void)
349 {
350 	return QMI_HOST_BUILD_TYPE_SECONDARY_V01;
351 }
352 #endif
353 
354 #endif /* _CNSS_QMI_H */
355