1 /* 2 * Copyright (c) 2017-2018 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(void *wmi_hdl, 30 uint8_t mac_id) 31 { 32 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 33 34 if (wmi_handle->ops->send_d0wow_enable_cmd) 35 return wmi_handle->ops->send_d0wow_enable_cmd(wmi_handle, 36 mac_id); 37 38 return QDF_STATUS_E_FAILURE; 39 } 40 41 QDF_STATUS wmi_unified_d0wow_disable_send(void *wmi_hdl, 42 uint8_t mac_id) 43 { 44 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 45 46 if (wmi_handle->ops->send_d0wow_disable_cmd) 47 return wmi_handle->ops->send_d0wow_disable_cmd(wmi_handle, 48 mac_id); 49 50 return QDF_STATUS_E_FAILURE; 51 } 52 #endif /* FEATURE_WLAN_D0WOW */ 53 54 QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl, 55 uint32_t vdev_id, 56 uint32_t *bitmap, 57 bool enable) 58 { 59 struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl; 60 61 if (wmi_handle->ops->send_add_wow_wakeup_event_cmd) 62 return wmi_handle->ops->send_add_wow_wakeup_event_cmd( 63 wmi_handle, vdev_id, bitmap, enable); 64 65 return QDF_STATUS_E_FAILURE; 66 } 67 68 QDF_STATUS wmi_unified_wow_patterns_to_fw_cmd(void *wmi_hdl, 69 uint8_t vdev_id, uint8_t ptrn_id, 70 const uint8_t *ptrn, uint8_t ptrn_len, 71 uint8_t ptrn_offset, const uint8_t *mask, 72 uint8_t mask_len, bool user, 73 uint8_t default_patterns) 74 { 75 struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl; 76 77 if (wmi_handle->ops->send_wow_patterns_to_fw_cmd) 78 return wmi_handle->ops->send_wow_patterns_to_fw_cmd(wmi_handle, 79 vdev_id, ptrn_id, ptrn, 80 ptrn_len, ptrn_offset, mask, 81 mask_len, user, default_patterns); 82 83 return QDF_STATUS_E_FAILURE; 84 } 85 86 QDF_STATUS wmi_unified_enable_arp_ns_offload_cmd(void *wmi_hdl, 87 struct pmo_arp_offload_params *arp_offload_req, 88 struct pmo_ns_offload_params *ns_offload_req, 89 uint8_t vdev_id) 90 { 91 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 92 93 if (wmi_handle->ops->send_enable_arp_ns_offload_cmd) 94 return wmi_handle->ops->send_enable_arp_ns_offload_cmd( 95 wmi_handle, 96 arp_offload_req, ns_offload_req, vdev_id); 97 98 return QDF_STATUS_E_FAILURE; 99 } 100 101 QDF_STATUS wmi_unified_add_clear_mcbc_filter_cmd(void *wmi_hdl, 102 uint8_t vdev_id, 103 struct qdf_mac_addr multicast_addr, 104 bool clearList) 105 { 106 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 107 108 if (wmi_handle->ops->send_add_clear_mcbc_filter_cmd) 109 return wmi_handle->ops->send_add_clear_mcbc_filter_cmd( 110 wmi_handle, vdev_id, multicast_addr, clearList); 111 112 return QDF_STATUS_E_FAILURE; 113 } 114 115 QDF_STATUS wmi_unified_multiple_add_clear_mcbc_filter_cmd(void *wmi_hdl, 116 uint8_t vdev_id, 117 struct pmo_mcast_filter_params *filter_param) 118 { 119 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 120 121 if (wmi_handle->ops->send_multiple_add_clear_mcbc_filter_cmd) 122 return wmi_handle->ops->send_multiple_add_clear_mcbc_filter_cmd( 123 wmi_handle, vdev_id, filter_param); 124 125 return QDF_STATUS_E_FAILURE; 126 } 127 128 QDF_STATUS wmi_unified_conf_hw_filter_cmd(void *opaque_wmi, 129 struct pmo_hw_filter_params *req) 130 { 131 struct wmi_unified *wmi = opaque_wmi; 132 133 if (!wmi->ops->send_conf_hw_filter_cmd) 134 return QDF_STATUS_E_NOSUPPORT; 135 136 return wmi->ops->send_conf_hw_filter_cmd(wmi, req); 137 } 138 139 QDF_STATUS wmi_unified_send_gtk_offload_cmd(void *wmi_hdl, uint8_t vdev_id, 140 struct pmo_gtk_req *params, 141 bool enable_offload, 142 uint32_t gtk_offload_opcode) 143 { 144 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 145 146 if (wmi_handle->ops->send_gtk_offload_cmd) 147 return wmi_handle->ops->send_gtk_offload_cmd(wmi_handle, 148 vdev_id, params, enable_offload, 149 gtk_offload_opcode); 150 151 return QDF_STATUS_E_FAILURE; 152 } 153 154 QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd(void *wmi_hdl, 155 uint8_t vdev_id, 156 uint64_t offload_req_opcode) 157 { 158 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 159 160 if (wmi_handle->ops->send_process_gtk_offload_getinfo_cmd) 161 return wmi_handle->ops->send_process_gtk_offload_getinfo_cmd( 162 wmi_handle, vdev_id, offload_req_opcode); 163 164 return QDF_STATUS_E_FAILURE; 165 } 166 167 QDF_STATUS wmi_unified_enable_enhance_multicast_offload_cmd( 168 void *wmi_hdl, uint8_t vdev_id, bool action) 169 { 170 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 171 struct wmi_ops *ops; 172 173 ops = wmi_handle->ops; 174 if (ops && ops->send_enable_enhance_multicast_offload_cmd) 175 return ops->send_enable_enhance_multicast_offload_cmd( 176 wmi_handle, vdev_id, action); 177 178 return QDF_STATUS_E_FAILURE; 179 } 180 181 QDF_STATUS wmi_extract_gtk_rsp_event(void *wmi_hdl, void *evt_buf, 182 struct pmo_gtk_rsp_params *gtk_rsp_param, uint32_t len) 183 { 184 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 185 186 if (wmi_handle->ops->extract_gtk_rsp_event) 187 return wmi_handle->ops->extract_gtk_rsp_event(wmi_handle, 188 evt_buf, gtk_rsp_param, len); 189 190 return QDF_STATUS_E_FAILURE; 191 } 192 193 #ifdef FEATURE_WLAN_RA_FILTERING 194 QDF_STATUS wmi_unified_wow_sta_ra_filter_cmd(void *wmi_hdl, 195 uint8_t vdev_id, uint8_t default_pattern, 196 uint16_t rate_limit_interval) 197 { 198 199 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 200 201 if (wmi_handle->ops->send_wow_sta_ra_filter_cmd) 202 return wmi_handle->ops->send_wow_sta_ra_filter_cmd(wmi_handle, 203 vdev_id, default_pattern, rate_limit_interval); 204 205 return QDF_STATUS_E_FAILURE; 206 207 } 208 #endif /* FEATURE_WLAN_RA_FILTERING */ 209 210 QDF_STATUS wmi_unified_action_frame_patterns_cmd(void *wmi_hdl, 211 struct pmo_action_wakeup_set_params *action_params) 212 { 213 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 214 215 if (wmi_handle->ops->send_action_frame_patterns_cmd) 216 return wmi_handle->ops->send_action_frame_patterns_cmd( 217 wmi_handle, action_params); 218 219 return QDF_STATUS_E_FAILURE; 220 } 221 222 #ifdef FEATURE_WLAN_LPHB 223 QDF_STATUS wmi_unified_lphb_config_hbenable_cmd(void *wmi_hdl, 224 wmi_hb_set_enable_cmd_fixed_param *params) 225 { 226 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 227 228 if (wmi_handle->ops->send_lphb_config_hbenable_cmd) 229 return wmi_handle->ops->send_lphb_config_hbenable_cmd( 230 wmi_handle, params); 231 232 return QDF_STATUS_E_FAILURE; 233 } 234 235 QDF_STATUS wmi_unified_lphb_config_tcp_params_cmd(void *wmi_hdl, 236 wmi_hb_set_tcp_params_cmd_fixed_param *lphb_conf_req) 237 { 238 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 239 240 if (wmi_handle->ops->send_lphb_config_tcp_params_cmd) 241 return wmi_handle->ops->send_lphb_config_tcp_params_cmd( 242 wmi_handle, lphb_conf_req); 243 244 return QDF_STATUS_E_FAILURE; 245 } 246 247 QDF_STATUS wmi_unified_lphb_config_tcp_pkt_filter_cmd(void *wmi_hdl, 248 wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *g_hb_tcp_filter_fp) 249 { 250 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 251 252 if (wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd) 253 return wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd( 254 wmi_handle, g_hb_tcp_filter_fp); 255 256 return QDF_STATUS_E_FAILURE; 257 } 258 259 QDF_STATUS wmi_unified_lphb_config_udp_params_cmd(void *wmi_hdl, 260 wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req) 261 { 262 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 263 264 if (wmi_handle->ops->send_lphb_config_udp_params_cmd) 265 return wmi_handle->ops->send_lphb_config_udp_params_cmd( 266 wmi_handle, lphb_conf_req); 267 268 return QDF_STATUS_E_FAILURE; 269 } 270 271 QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd(void *wmi_hdl, 272 wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req) 273 { 274 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 275 276 if (wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd) 277 return wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd( 278 wmi_handle, lphb_conf_req); 279 280 return QDF_STATUS_E_FAILURE; 281 } 282 #endif /* FEATURE_WLAN_LPHB */ 283 284 #ifdef WLAN_FEATURE_PACKET_FILTERING 285 QDF_STATUS wmi_unified_enable_disable_packet_filter_cmd(void *wmi_hdl, 286 uint8_t vdev_id, bool enable) 287 { 288 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 289 290 if (wmi_handle->ops->send_enable_disable_packet_filter_cmd) 291 return wmi_handle->ops->send_enable_disable_packet_filter_cmd( 292 wmi_handle, vdev_id, enable); 293 294 return QDF_STATUS_E_FAILURE; 295 } 296 297 QDF_STATUS wmi_unified_config_packet_filter_cmd(void *wmi_hdl, 298 uint8_t vdev_id, struct pmo_rcv_pkt_fltr_cfg *rcv_filter_param, 299 uint8_t filter_id, bool enable) 300 { 301 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 302 303 if (wmi_handle->ops->send_config_packet_filter_cmd) 304 return wmi_handle->ops->send_config_packet_filter_cmd( 305 wmi_handle, vdev_id, rcv_filter_param, filter_id, enable); 306 307 return QDF_STATUS_E_FAILURE; 308 } 309 #endif /* WLAN_FEATURE_PACKET_FILTERING */ 310 311 QDF_STATUS wmi_unified_wow_delete_pattern_cmd(void *wmi_hdl, uint8_t ptrn_id, 312 uint8_t vdev_id) 313 { 314 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 315 316 if (wmi_handle->ops->send_wow_delete_pattern_cmd) 317 return wmi_handle->ops->send_wow_delete_pattern_cmd(wmi_handle, 318 ptrn_id, 319 vdev_id); 320 321 return QDF_STATUS_E_FAILURE; 322 } 323 324 QDF_STATUS wmi_unified_host_wakeup_ind_to_fw_cmd(void *wmi_hdl) 325 { 326 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 327 328 if (wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd) 329 return wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd(wmi_handle); 330 331 return QDF_STATUS_E_FAILURE; 332 } 333 334 QDF_STATUS wmi_unified_wow_timer_pattern_cmd(void *wmi_hdl, uint8_t vdev_id, 335 uint32_t cookie, uint32_t time) 336 { 337 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 338 339 if (wmi_handle->ops->send_wow_timer_pattern_cmd) 340 return wmi_handle->ops->send_wow_timer_pattern_cmd(wmi_handle, 341 vdev_id, cookie, time); 342 343 return QDF_STATUS_E_FAILURE; 344 } 345 346 #ifdef WLAN_FEATURE_EXTWOW_SUPPORT 347 QDF_STATUS wmi_unified_enable_ext_wow_cmd(void *wmi_hdl, 348 struct ext_wow_params *params) 349 { 350 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 351 352 if (wmi_handle->ops->send_enable_ext_wow_cmd) 353 return wmi_handle->ops->send_enable_ext_wow_cmd(wmi_handle, 354 params); 355 356 return QDF_STATUS_E_FAILURE; 357 } 358 359 QDF_STATUS wmi_unified_set_app_type2_params_in_fw_cmd(void *wmi_hdl, 360 struct app_type2_params *appType2Params) 361 { 362 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 363 364 if (wmi_handle->ops->send_set_app_type2_params_in_fw_cmd) 365 return wmi_handle->ops->send_set_app_type2_params_in_fw_cmd( 366 wmi_handle, appType2Params); 367 368 return QDF_STATUS_E_FAILURE; 369 } 370 371 QDF_STATUS wmi_unified_app_type1_params_in_fw_cmd(void *wmi_hdl, 372 struct app_type1_params *app_type1_params) 373 { 374 wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; 375 376 if (wmi_handle->ops->send_app_type1_params_in_fw_cmd) 377 return wmi_handle->ops->send_app_type1_params_in_fw_cmd( 378 wmi_handle, app_type1_params); 379 380 return QDF_STATUS_E_FAILURE; 381 } 382 #endif /* WLAN_FEATURE_EXTWOW_SUPPORT */ 383 384