1 /* 2 * Copyright (c) 2017-2019 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 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 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 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 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 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 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 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 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 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 QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd( 142 wmi_unified_t wmi_handle, 143 uint8_t vdev_id, 144 uint64_t offload_req_opcode) 145 { 146 if (wmi_handle->ops->send_process_gtk_offload_getinfo_cmd) 147 return wmi_handle->ops->send_process_gtk_offload_getinfo_cmd( 148 wmi_handle, vdev_id, offload_req_opcode); 149 150 return QDF_STATUS_E_FAILURE; 151 } 152 153 QDF_STATUS wmi_unified_enable_enhance_multicast_offload_cmd( 154 wmi_unified_t wmi_handle, uint8_t vdev_id, bool action) 155 { 156 struct wmi_ops *ops; 157 158 ops = wmi_handle->ops; 159 if (ops && ops->send_enable_enhance_multicast_offload_cmd) 160 return ops->send_enable_enhance_multicast_offload_cmd( 161 wmi_handle, vdev_id, action); 162 163 return QDF_STATUS_E_FAILURE; 164 } 165 166 QDF_STATUS wmi_extract_gtk_rsp_event( 167 wmi_unified_t wmi_handle, void *evt_buf, 168 struct pmo_gtk_rsp_params *gtk_rsp_param, uint32_t len) 169 { 170 if (wmi_handle->ops->extract_gtk_rsp_event) 171 return wmi_handle->ops->extract_gtk_rsp_event(wmi_handle, 172 evt_buf, gtk_rsp_param, len); 173 174 return QDF_STATUS_E_FAILURE; 175 } 176 177 #ifdef FEATURE_WLAN_RA_FILTERING 178 QDF_STATUS wmi_unified_wow_sta_ra_filter_cmd(wmi_unified_t wmi_handle, 179 uint8_t vdev_id, 180 uint8_t default_pattern, 181 uint16_t rate_limit_interval) 182 { 183 184 if (wmi_handle->ops->send_wow_sta_ra_filter_cmd) 185 return wmi_handle->ops->send_wow_sta_ra_filter_cmd(wmi_handle, 186 vdev_id, default_pattern, rate_limit_interval); 187 188 return QDF_STATUS_E_FAILURE; 189 190 } 191 #endif /* FEATURE_WLAN_RA_FILTERING */ 192 193 QDF_STATUS wmi_unified_action_frame_patterns_cmd( 194 wmi_unified_t wmi_handle, 195 struct pmo_action_wakeup_set_params *action_params) 196 { 197 if (wmi_handle->ops->send_action_frame_patterns_cmd) 198 return wmi_handle->ops->send_action_frame_patterns_cmd( 199 wmi_handle, action_params); 200 201 return QDF_STATUS_E_FAILURE; 202 } 203 204 #ifdef FEATURE_WLAN_LPHB 205 QDF_STATUS wmi_unified_lphb_config_hbenable_cmd( 206 wmi_unified_t wmi_handle, 207 wmi_hb_set_enable_cmd_fixed_param *params) 208 { 209 if (wmi_handle->ops->send_lphb_config_hbenable_cmd) 210 return wmi_handle->ops->send_lphb_config_hbenable_cmd( 211 wmi_handle, params); 212 213 return QDF_STATUS_E_FAILURE; 214 } 215 216 QDF_STATUS wmi_unified_lphb_config_tcp_params_cmd( 217 wmi_unified_t wmi_handle, 218 wmi_hb_set_tcp_params_cmd_fixed_param *lphb_conf_req) 219 { 220 if (wmi_handle->ops->send_lphb_config_tcp_params_cmd) 221 return wmi_handle->ops->send_lphb_config_tcp_params_cmd( 222 wmi_handle, lphb_conf_req); 223 224 return QDF_STATUS_E_FAILURE; 225 } 226 227 QDF_STATUS wmi_unified_lphb_config_tcp_pkt_filter_cmd( 228 wmi_unified_t wmi_handle, 229 wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *g_hb_tcp_filter_fp) 230 { 231 if (wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd) 232 return wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd( 233 wmi_handle, g_hb_tcp_filter_fp); 234 235 return QDF_STATUS_E_FAILURE; 236 } 237 238 QDF_STATUS wmi_unified_lphb_config_udp_params_cmd( 239 wmi_unified_t wmi_handle, 240 wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req) 241 { 242 if (wmi_handle->ops->send_lphb_config_udp_params_cmd) 243 return wmi_handle->ops->send_lphb_config_udp_params_cmd( 244 wmi_handle, lphb_conf_req); 245 246 return QDF_STATUS_E_FAILURE; 247 } 248 249 QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd( 250 wmi_unified_t wmi_handle, 251 wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req) 252 { 253 if (wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd) 254 return wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd( 255 wmi_handle, lphb_conf_req); 256 257 return QDF_STATUS_E_FAILURE; 258 } 259 #endif /* FEATURE_WLAN_LPHB */ 260 261 #ifdef WLAN_FEATURE_PACKET_FILTERING 262 QDF_STATUS 263 wmi_unified_enable_disable_packet_filter_cmd(wmi_unified_t wmi_handle, 264 uint8_t vdev_id, bool enable) 265 { 266 if (wmi_handle->ops->send_enable_disable_packet_filter_cmd) 267 return wmi_handle->ops->send_enable_disable_packet_filter_cmd( 268 wmi_handle, vdev_id, enable); 269 270 return QDF_STATUS_E_FAILURE; 271 } 272 273 QDF_STATUS wmi_unified_config_packet_filter_cmd( 274 wmi_unified_t wmi_handle, 275 uint8_t vdev_id, struct pmo_rcv_pkt_fltr_cfg *rcv_filter_param, 276 uint8_t filter_id, bool enable) 277 { 278 if (wmi_handle->ops->send_config_packet_filter_cmd) 279 return wmi_handle->ops->send_config_packet_filter_cmd( 280 wmi_handle, vdev_id, rcv_filter_param, filter_id, enable); 281 282 return QDF_STATUS_E_FAILURE; 283 } 284 #endif /* WLAN_FEATURE_PACKET_FILTERING */ 285 286 QDF_STATUS wmi_unified_wow_delete_pattern_cmd(wmi_unified_t wmi_handle, 287 uint8_t ptrn_id, 288 uint8_t vdev_id) 289 { 290 if (wmi_handle->ops->send_wow_delete_pattern_cmd) 291 return wmi_handle->ops->send_wow_delete_pattern_cmd(wmi_handle, 292 ptrn_id, 293 vdev_id); 294 295 return QDF_STATUS_E_FAILURE; 296 } 297 298 QDF_STATUS wmi_unified_host_wakeup_ind_to_fw_cmd(wmi_unified_t wmi_handle) 299 { 300 if (wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd) 301 return wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd(wmi_handle); 302 303 return QDF_STATUS_E_FAILURE; 304 } 305 306 QDF_STATUS wmi_unified_wow_timer_pattern_cmd(wmi_unified_t wmi_handle, 307 uint8_t vdev_id, 308 uint32_t cookie, uint32_t time) 309 { 310 if (wmi_handle->ops->send_wow_timer_pattern_cmd) 311 return wmi_handle->ops->send_wow_timer_pattern_cmd(wmi_handle, 312 vdev_id, cookie, time); 313 314 return QDF_STATUS_E_FAILURE; 315 } 316 317 #ifdef WLAN_FEATURE_EXTWOW_SUPPORT 318 QDF_STATUS wmi_unified_enable_ext_wow_cmd(wmi_unified_t wmi_handle, 319 struct ext_wow_params *params) 320 { 321 if (wmi_handle->ops->send_enable_ext_wow_cmd) 322 return wmi_handle->ops->send_enable_ext_wow_cmd(wmi_handle, 323 params); 324 325 return QDF_STATUS_E_FAILURE; 326 } 327 328 QDF_STATUS wmi_unified_set_app_type2_params_in_fw_cmd( 329 wmi_unified_t wmi_handle, 330 struct app_type2_params *appType2Params) 331 { 332 if (wmi_handle->ops->send_set_app_type2_params_in_fw_cmd) 333 return wmi_handle->ops->send_set_app_type2_params_in_fw_cmd( 334 wmi_handle, appType2Params); 335 336 return QDF_STATUS_E_FAILURE; 337 } 338 339 QDF_STATUS wmi_unified_app_type1_params_in_fw_cmd( 340 wmi_unified_t wmi_handle, 341 struct app_type1_params *app_type1_params) 342 { 343 if (wmi_handle->ops->send_app_type1_params_in_fw_cmd) 344 return wmi_handle->ops->send_app_type1_params_in_fw_cmd( 345 wmi_handle, app_type1_params); 346 347 return QDF_STATUS_E_FAILURE; 348 } 349 #endif /* WLAN_FEATURE_EXTWOW_SUPPORT */ 350 351