1 /* 2 * Copyright (c) 2017-2019, 2021 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 /** 19 * DOC: Implement API's specific to PMO component. 20 */ 21 22 #include "ol_if_athvar.h" 23 #include "ol_defines.h" 24 #include "wmi_unified_priv.h" 25 #include "wmi_unified_pmo_api.h" 26 #include "wlan_pmo_hw_filter_public_struct.h" 27 28 #ifdef FEATURE_WLAN_D0WOW wmi_unified_d0wow_enable_send(wmi_unified_t wmi_handle,uint8_t mac_id)29 QDF_STATUS wmi_unified_d0wow_enable_send(wmi_unified_t wmi_handle, 30 uint8_t mac_id) 31 { 32 if (wmi_handle->ops->send_d0wow_enable_cmd) 33 return wmi_handle->ops->send_d0wow_enable_cmd(wmi_handle, 34 mac_id); 35 36 return QDF_STATUS_E_FAILURE; 37 } 38 wmi_unified_d0wow_disable_send(wmi_unified_t wmi_handle,uint8_t mac_id)39 QDF_STATUS wmi_unified_d0wow_disable_send(wmi_unified_t wmi_handle, 40 uint8_t mac_id) 41 { 42 if (wmi_handle->ops->send_d0wow_disable_cmd) 43 return wmi_handle->ops->send_d0wow_disable_cmd(wmi_handle, 44 mac_id); 45 46 return QDF_STATUS_E_FAILURE; 47 } 48 #endif /* FEATURE_WLAN_D0WOW */ 49 wmi_unified_add_wow_wakeup_event_cmd(wmi_unified_t wmi_handle,uint32_t vdev_id,uint32_t * bitmap,bool enable)50 QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(wmi_unified_t wmi_handle, 51 uint32_t vdev_id, 52 uint32_t *bitmap, 53 bool enable) 54 { 55 if (wmi_handle->ops->send_add_wow_wakeup_event_cmd) 56 return wmi_handle->ops->send_add_wow_wakeup_event_cmd( 57 wmi_handle, vdev_id, bitmap, enable); 58 59 return QDF_STATUS_E_FAILURE; 60 } 61 wmi_unified_wow_patterns_to_fw_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,uint8_t ptrn_id,const uint8_t * ptrn,uint8_t ptrn_len,uint8_t ptrn_offset,const uint8_t * mask,uint8_t mask_len,bool user,uint8_t default_patterns)62 QDF_STATUS wmi_unified_wow_patterns_to_fw_cmd( 63 wmi_unified_t wmi_handle, 64 uint8_t vdev_id, uint8_t ptrn_id, 65 const uint8_t *ptrn, uint8_t ptrn_len, 66 uint8_t ptrn_offset, const uint8_t *mask, 67 uint8_t mask_len, bool user, 68 uint8_t default_patterns) 69 { 70 if (wmi_handle->ops->send_wow_patterns_to_fw_cmd) 71 return wmi_handle->ops->send_wow_patterns_to_fw_cmd(wmi_handle, 72 vdev_id, ptrn_id, ptrn, 73 ptrn_len, ptrn_offset, mask, 74 mask_len, user, default_patterns); 75 76 return QDF_STATUS_E_FAILURE; 77 } 78 wmi_unified_enable_arp_ns_offload_cmd(wmi_unified_t wmi_handle,struct pmo_arp_offload_params * arp_offload_req,struct pmo_ns_offload_params * ns_offload_req,uint8_t vdev_id)79 QDF_STATUS wmi_unified_enable_arp_ns_offload_cmd( 80 wmi_unified_t wmi_handle, 81 struct pmo_arp_offload_params *arp_offload_req, 82 struct pmo_ns_offload_params *ns_offload_req, 83 uint8_t vdev_id) 84 { 85 if (wmi_handle->ops->send_enable_arp_ns_offload_cmd) 86 return wmi_handle->ops->send_enable_arp_ns_offload_cmd( 87 wmi_handle, 88 arp_offload_req, ns_offload_req, vdev_id); 89 90 return QDF_STATUS_E_FAILURE; 91 } 92 wmi_unified_add_clear_mcbc_filter_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,struct qdf_mac_addr multicast_addr,bool clear_list)93 QDF_STATUS wmi_unified_add_clear_mcbc_filter_cmd( 94 wmi_unified_t wmi_handle, 95 uint8_t vdev_id, 96 struct qdf_mac_addr multicast_addr, 97 bool clear_list) 98 { 99 if (wmi_handle->ops->send_add_clear_mcbc_filter_cmd) 100 return wmi_handle->ops->send_add_clear_mcbc_filter_cmd( 101 wmi_handle, vdev_id, multicast_addr, clear_list); 102 103 return QDF_STATUS_E_FAILURE; 104 } 105 wmi_unified_multiple_add_clear_mcbc_filter_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,struct pmo_mcast_filter_params * filter_param)106 QDF_STATUS wmi_unified_multiple_add_clear_mcbc_filter_cmd( 107 wmi_unified_t wmi_handle, 108 uint8_t vdev_id, 109 struct pmo_mcast_filter_params *filter_param) 110 { 111 if (wmi_handle->ops->send_multiple_add_clear_mcbc_filter_cmd) 112 return wmi_handle->ops->send_multiple_add_clear_mcbc_filter_cmd( 113 wmi_handle, vdev_id, filter_param); 114 115 return QDF_STATUS_E_FAILURE; 116 } 117 wmi_unified_conf_hw_filter_cmd(wmi_unified_t wmi_handle,struct pmo_hw_filter_params * req)118 QDF_STATUS wmi_unified_conf_hw_filter_cmd(wmi_unified_t wmi_handle, 119 struct pmo_hw_filter_params *req) 120 { 121 if (!wmi_handle->ops->send_conf_hw_filter_cmd) 122 return QDF_STATUS_E_NOSUPPORT; 123 124 return wmi_handle->ops->send_conf_hw_filter_cmd(wmi_handle, req); 125 } 126 wmi_unified_send_gtk_offload_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,struct pmo_gtk_req * params,bool enable_offload,uint32_t gtk_offload_opcode)127 QDF_STATUS wmi_unified_send_gtk_offload_cmd(wmi_unified_t wmi_handle, 128 uint8_t vdev_id, 129 struct pmo_gtk_req *params, 130 bool enable_offload, 131 uint32_t gtk_offload_opcode) 132 { 133 if (wmi_handle->ops->send_gtk_offload_cmd) 134 return wmi_handle->ops->send_gtk_offload_cmd(wmi_handle, 135 vdev_id, params, enable_offload, 136 gtk_offload_opcode); 137 138 return QDF_STATUS_E_FAILURE; 139 } 140 141 #ifdef WLAN_FEATURE_IGMP_OFFLOAD 142 QDF_STATUS wmi_unified_send_igmp_offload_cmd(wmi_unified_t wmi_handle,struct pmo_igmp_offload_req * pmo_igmp_req)143 wmi_unified_send_igmp_offload_cmd(wmi_unified_t wmi_handle, 144 struct pmo_igmp_offload_req *pmo_igmp_req) 145 { 146 if (wmi_handle->ops->send_igmp_offload_cmd) 147 return wmi_handle->ops->send_igmp_offload_cmd(wmi_handle, 148 pmo_igmp_req); 149 150 return QDF_STATUS_E_FAILURE; 151 } 152 #endif 153 wmi_unified_process_gtk_offload_getinfo_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,uint64_t offload_req_opcode)154 QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd( 155 wmi_unified_t wmi_handle, 156 uint8_t vdev_id, 157 uint64_t offload_req_opcode) 158 { 159 if (wmi_handle->ops->send_process_gtk_offload_getinfo_cmd) 160 return wmi_handle->ops->send_process_gtk_offload_getinfo_cmd( 161 wmi_handle, vdev_id, offload_req_opcode); 162 163 return QDF_STATUS_E_FAILURE; 164 } 165 wmi_unified_enable_enhance_multicast_offload_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,bool action)166 QDF_STATUS wmi_unified_enable_enhance_multicast_offload_cmd( 167 wmi_unified_t wmi_handle, uint8_t vdev_id, bool action) 168 { 169 struct wmi_ops *ops; 170 171 ops = wmi_handle->ops; 172 if (ops && ops->send_enable_enhance_multicast_offload_cmd) 173 return ops->send_enable_enhance_multicast_offload_cmd( 174 wmi_handle, vdev_id, action); 175 176 return QDF_STATUS_E_FAILURE; 177 } 178 wmi_extract_gtk_rsp_event(wmi_unified_t wmi_handle,void * evt_buf,struct pmo_gtk_rsp_params * gtk_rsp_param,uint32_t len)179 QDF_STATUS wmi_extract_gtk_rsp_event( 180 wmi_unified_t wmi_handle, void *evt_buf, 181 struct pmo_gtk_rsp_params *gtk_rsp_param, uint32_t len) 182 { 183 if (wmi_handle->ops->extract_gtk_rsp_event) 184 return wmi_handle->ops->extract_gtk_rsp_event(wmi_handle, 185 evt_buf, gtk_rsp_param, len); 186 187 return QDF_STATUS_E_FAILURE; 188 } 189 190 #ifdef FEATURE_WLAN_RA_FILTERING wmi_unified_wow_sta_ra_filter_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,uint8_t default_pattern,uint16_t rate_limit_interval)191 QDF_STATUS wmi_unified_wow_sta_ra_filter_cmd(wmi_unified_t wmi_handle, 192 uint8_t vdev_id, 193 uint8_t default_pattern, 194 uint16_t rate_limit_interval) 195 { 196 197 if (wmi_handle->ops->send_wow_sta_ra_filter_cmd) 198 return wmi_handle->ops->send_wow_sta_ra_filter_cmd(wmi_handle, 199 vdev_id, default_pattern, rate_limit_interval); 200 201 return QDF_STATUS_E_FAILURE; 202 203 } 204 #endif /* FEATURE_WLAN_RA_FILTERING */ 205 wmi_unified_action_frame_patterns_cmd(wmi_unified_t wmi_handle,struct pmo_action_wakeup_set_params * action_params)206 QDF_STATUS wmi_unified_action_frame_patterns_cmd( 207 wmi_unified_t wmi_handle, 208 struct pmo_action_wakeup_set_params *action_params) 209 { 210 if (wmi_handle->ops->send_action_frame_patterns_cmd) 211 return wmi_handle->ops->send_action_frame_patterns_cmd( 212 wmi_handle, action_params); 213 214 return QDF_STATUS_E_FAILURE; 215 } 216 217 #ifdef FEATURE_WLAN_LPHB wmi_unified_lphb_config_hbenable_cmd(wmi_unified_t wmi_handle,wmi_hb_set_enable_cmd_fixed_param * params)218 QDF_STATUS wmi_unified_lphb_config_hbenable_cmd( 219 wmi_unified_t wmi_handle, 220 wmi_hb_set_enable_cmd_fixed_param *params) 221 { 222 if (wmi_handle->ops->send_lphb_config_hbenable_cmd) 223 return wmi_handle->ops->send_lphb_config_hbenable_cmd( 224 wmi_handle, params); 225 226 return QDF_STATUS_E_FAILURE; 227 } 228 wmi_unified_lphb_config_tcp_params_cmd(wmi_unified_t wmi_handle,wmi_hb_set_tcp_params_cmd_fixed_param * lphb_conf_req)229 QDF_STATUS wmi_unified_lphb_config_tcp_params_cmd( 230 wmi_unified_t wmi_handle, 231 wmi_hb_set_tcp_params_cmd_fixed_param *lphb_conf_req) 232 { 233 if (wmi_handle->ops->send_lphb_config_tcp_params_cmd) 234 return wmi_handle->ops->send_lphb_config_tcp_params_cmd( 235 wmi_handle, lphb_conf_req); 236 237 return QDF_STATUS_E_FAILURE; 238 } 239 wmi_unified_lphb_config_tcp_pkt_filter_cmd(wmi_unified_t wmi_handle,wmi_hb_set_tcp_pkt_filter_cmd_fixed_param * g_hb_tcp_filter_fp)240 QDF_STATUS wmi_unified_lphb_config_tcp_pkt_filter_cmd( 241 wmi_unified_t wmi_handle, 242 wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *g_hb_tcp_filter_fp) 243 { 244 if (wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd) 245 return wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd( 246 wmi_handle, g_hb_tcp_filter_fp); 247 248 return QDF_STATUS_E_FAILURE; 249 } 250 wmi_unified_lphb_config_udp_params_cmd(wmi_unified_t wmi_handle,wmi_hb_set_udp_params_cmd_fixed_param * lphb_conf_req)251 QDF_STATUS wmi_unified_lphb_config_udp_params_cmd( 252 wmi_unified_t wmi_handle, 253 wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req) 254 { 255 if (wmi_handle->ops->send_lphb_config_udp_params_cmd) 256 return wmi_handle->ops->send_lphb_config_udp_params_cmd( 257 wmi_handle, lphb_conf_req); 258 259 return QDF_STATUS_E_FAILURE; 260 } 261 wmi_unified_lphb_config_udp_pkt_filter_cmd(wmi_unified_t wmi_handle,wmi_hb_set_udp_pkt_filter_cmd_fixed_param * lphb_conf_req)262 QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd( 263 wmi_unified_t wmi_handle, 264 wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req) 265 { 266 if (wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd) 267 return wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd( 268 wmi_handle, lphb_conf_req); 269 270 return QDF_STATUS_E_FAILURE; 271 } 272 #endif /* FEATURE_WLAN_LPHB */ 273 274 #ifdef WLAN_FEATURE_PACKET_FILTERING 275 QDF_STATUS wmi_unified_enable_disable_packet_filter_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,bool enable)276 wmi_unified_enable_disable_packet_filter_cmd(wmi_unified_t wmi_handle, 277 uint8_t vdev_id, bool enable) 278 { 279 if (wmi_handle->ops->send_enable_disable_packet_filter_cmd) 280 return wmi_handle->ops->send_enable_disable_packet_filter_cmd( 281 wmi_handle, vdev_id, enable); 282 283 return QDF_STATUS_E_FAILURE; 284 } 285 wmi_unified_config_packet_filter_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,struct pmo_rcv_pkt_fltr_cfg * rcv_filter_param,uint8_t filter_id,bool enable)286 QDF_STATUS wmi_unified_config_packet_filter_cmd( 287 wmi_unified_t wmi_handle, 288 uint8_t vdev_id, struct pmo_rcv_pkt_fltr_cfg *rcv_filter_param, 289 uint8_t filter_id, bool enable) 290 { 291 if (wmi_handle->ops->send_config_packet_filter_cmd) 292 return wmi_handle->ops->send_config_packet_filter_cmd( 293 wmi_handle, vdev_id, rcv_filter_param, filter_id, enable); 294 295 return QDF_STATUS_E_FAILURE; 296 } 297 #endif /* WLAN_FEATURE_PACKET_FILTERING */ 298 wmi_unified_wow_delete_pattern_cmd(wmi_unified_t wmi_handle,uint8_t ptrn_id,uint8_t vdev_id)299 QDF_STATUS wmi_unified_wow_delete_pattern_cmd(wmi_unified_t wmi_handle, 300 uint8_t ptrn_id, 301 uint8_t vdev_id) 302 { 303 if (wmi_handle->ops->send_wow_delete_pattern_cmd) 304 return wmi_handle->ops->send_wow_delete_pattern_cmd(wmi_handle, 305 ptrn_id, 306 vdev_id); 307 308 return QDF_STATUS_E_FAILURE; 309 } 310 wmi_unified_host_wakeup_ind_to_fw_cmd(wmi_unified_t wmi_handle,bool tx_pending_ind)311 QDF_STATUS wmi_unified_host_wakeup_ind_to_fw_cmd(wmi_unified_t wmi_handle, 312 bool tx_pending_ind) 313 { 314 if (wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd) 315 return wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd 316 (wmi_handle, 317 tx_pending_ind); 318 319 return QDF_STATUS_E_FAILURE; 320 } 321 wmi_unified_wow_timer_pattern_cmd(wmi_unified_t wmi_handle,uint8_t vdev_id,uint32_t cookie,uint32_t time)322 QDF_STATUS wmi_unified_wow_timer_pattern_cmd(wmi_unified_t wmi_handle, 323 uint8_t vdev_id, 324 uint32_t cookie, uint32_t time) 325 { 326 if (wmi_handle->ops->send_wow_timer_pattern_cmd) 327 return wmi_handle->ops->send_wow_timer_pattern_cmd(wmi_handle, 328 vdev_id, cookie, time); 329 330 return QDF_STATUS_E_FAILURE; 331 } 332 333 #ifdef WLAN_FEATURE_EXTWOW_SUPPORT wmi_unified_enable_ext_wow_cmd(wmi_unified_t wmi_handle,struct ext_wow_params * params)334 QDF_STATUS wmi_unified_enable_ext_wow_cmd(wmi_unified_t wmi_handle, 335 struct ext_wow_params *params) 336 { 337 if (wmi_handle->ops->send_enable_ext_wow_cmd) 338 return wmi_handle->ops->send_enable_ext_wow_cmd(wmi_handle, 339 params); 340 341 return QDF_STATUS_E_FAILURE; 342 } 343 wmi_unified_set_app_type2_params_in_fw_cmd(wmi_unified_t wmi_handle,struct app_type2_params * appType2Params)344 QDF_STATUS wmi_unified_set_app_type2_params_in_fw_cmd( 345 wmi_unified_t wmi_handle, 346 struct app_type2_params *appType2Params) 347 { 348 if (wmi_handle->ops->send_set_app_type2_params_in_fw_cmd) 349 return wmi_handle->ops->send_set_app_type2_params_in_fw_cmd( 350 wmi_handle, appType2Params); 351 352 return QDF_STATUS_E_FAILURE; 353 } 354 wmi_unified_app_type1_params_in_fw_cmd(wmi_unified_t wmi_handle,struct app_type1_params * app_type1_params)355 QDF_STATUS wmi_unified_app_type1_params_in_fw_cmd( 356 wmi_unified_t wmi_handle, 357 struct app_type1_params *app_type1_params) 358 { 359 if (wmi_handle->ops->send_app_type1_params_in_fw_cmd) 360 return wmi_handle->ops->send_app_type1_params_in_fw_cmd( 361 wmi_handle, app_type1_params); 362 363 return QDF_STATUS_E_FAILURE; 364 } 365 #endif /* WLAN_FEATURE_EXTWOW_SUPPORT */ 366 367 #ifdef WLAN_FEATURE_ICMP_OFFLOAD wmi_unified_config_icmp_offload_cmd(wmi_unified_t wmi_handle,struct pmo_icmp_offload * pmo_icmp_req)368 QDF_STATUS wmi_unified_config_icmp_offload_cmd(wmi_unified_t wmi_handle, 369 struct pmo_icmp_offload *pmo_icmp_req) 370 { 371 if (wmi_handle->ops->send_icmp_offload_config_cmd) 372 return wmi_handle->ops->send_icmp_offload_config_cmd( 373 wmi_handle, pmo_icmp_req); 374 375 return QDF_STATUS_E_FAILURE; 376 } 377 #endif 378