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