1 /* 2 * Copyright (c) 2017 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 27 QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl, 28 uint32_t vdev_id, 29 uint32_t bitmap, 30 bool enable) 31 { 32 struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl; 33 34 if (wmi_handle->ops->send_add_wow_wakeup_event_cmd) 35 return wmi_handle->ops->send_add_wow_wakeup_event_cmd( 36 wmi_handle, vdev_id, bitmap, enable); 37 38 return QDF_STATUS_E_FAILURE; 39 } 40 41 QDF_STATUS wmi_unified_wow_patterns_to_fw_cmd(void *wmi_hdl, 42 uint8_t vdev_id, uint8_t ptrn_id, 43 const uint8_t *ptrn, uint8_t ptrn_len, 44 uint8_t ptrn_offset, const uint8_t *mask, 45 uint8_t mask_len, bool user, 46 uint8_t default_patterns) 47 { 48 struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl; 49 50 if (wmi_handle->ops->send_wow_patterns_to_fw_cmd) 51 return wmi_handle->ops->send_wow_patterns_to_fw_cmd(wmi_handle, 52 vdev_id, ptrn_id, ptrn, 53 ptrn_len, ptrn_offset, mask, 54 mask_len, user, default_patterns); 55 56 return QDF_STATUS_E_FAILURE; 57 } 58 59 QDF_STATUS wmi_unified_add_clear_mcbc_filter_cmd(void *wmi_hdl, 60 uint8_t vdev_id, 61 struct qdf_mac_addr multicast_addr, 62 bool clearList) 63 { 64 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 65 66 if (wmi_handle->ops->send_add_clear_mcbc_filter_cmd) 67 return wmi_handle->ops->send_add_clear_mcbc_filter_cmd( 68 wmi_handle, vdev_id, multicast_addr, clearList); 69 70 return QDF_STATUS_E_FAILURE; 71 } 72 73 74 #ifdef FEATURE_WLAN_RA_FILTERING 75 QDF_STATUS wmi_unified_wow_sta_ra_filter_cmd(void *wmi_hdl, 76 uint8_t vdev_id, uint8_t default_pattern, 77 uint16_t rate_limit_interval) 78 { 79 80 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 81 82 if (wmi_handle->ops->send_wow_sta_ra_filter_cmd) 83 return wmi_handle->ops->send_wow_sta_ra_filter_cmd(wmi_handle, 84 vdev_id, default_pattern, rate_limit_interval); 85 86 return QDF_STATUS_E_FAILURE; 87 88 } 89 #endif /* FEATURE_WLAN_RA_FILTERING */ 90 91 QDF_STATUS wmi_unified_enable_enhance_multicast_offload_cmd( 92 void *wmi_hdl, uint8_t vdev_id, bool action) 93 { 94 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 95 struct wmi_ops *ops; 96 97 ops = wmi_handle->ops; 98 if (ops && ops->send_enable_enhance_multicast_offload_cmd) 99 return ops->send_enable_enhance_multicast_offload_cmd( 100 wmi_handle, vdev_id, action); 101 102 return QDF_STATUS_E_FAILURE; 103 } 104 105 QDF_STATUS wmi_extract_gtk_rsp_event(void *wmi_hdl, void *evt_buf, 106 struct pmo_gtk_rsp_params *gtk_rsp_param, uint32_t len) 107 { 108 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 109 110 if (wmi_handle->ops->extract_gtk_rsp_event) 111 return wmi_handle->ops->extract_gtk_rsp_event(wmi_handle, 112 evt_buf, gtk_rsp_param, len); 113 114 return QDF_STATUS_E_FAILURE; 115 } 116 117 118 QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd(void *wmi_hdl, 119 uint8_t vdev_id, 120 uint64_t offload_req_opcode) 121 { 122 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 123 124 if (wmi_handle->ops->send_process_gtk_offload_getinfo_cmd) 125 return wmi_handle->ops->send_process_gtk_offload_getinfo_cmd( 126 wmi_handle, vdev_id, offload_req_opcode); 127 128 return QDF_STATUS_E_FAILURE; 129 } 130 131 QDF_STATUS wmi_unified_action_frame_patterns_cmd(void *wmi_hdl, 132 struct pmo_action_wakeup_set_params *action_params) 133 { 134 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 135 136 if (wmi_handle->ops->send_action_frame_patterns_cmd) 137 return wmi_handle->ops->send_action_frame_patterns_cmd( 138 wmi_handle, action_params); 139 140 return QDF_STATUS_E_FAILURE; 141 } 142 143 QDF_STATUS wmi_unified_send_gtk_offload_cmd(void *wmi_hdl, uint8_t vdev_id, 144 struct pmo_gtk_req *params, 145 bool enable_offload, 146 uint32_t gtk_offload_opcode) 147 { 148 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 149 150 if (wmi_handle->ops->send_gtk_offload_cmd) 151 return wmi_handle->ops->send_gtk_offload_cmd(wmi_handle, 152 vdev_id, params, enable_offload, 153 gtk_offload_opcode); 154 155 return QDF_STATUS_E_FAILURE; 156 } 157 158 QDF_STATUS wmi_unified_enable_arp_ns_offload_cmd(void *wmi_hdl, 159 struct pmo_arp_offload_params *arp_offload_req, 160 struct pmo_ns_offload_params *ns_offload_req, 161 uint8_t vdev_id) 162 { 163 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 164 165 if (wmi_handle->ops->send_enable_arp_ns_offload_cmd) 166 return wmi_handle->ops->send_enable_arp_ns_offload_cmd( 167 wmi_handle, 168 arp_offload_req, ns_offload_req, vdev_id); 169 170 return QDF_STATUS_E_FAILURE; 171 } 172 173 #ifdef FEATURE_WLAN_LPHB 174 QDF_STATUS wmi_unified_lphb_config_hbenable_cmd(void *wmi_hdl, 175 wmi_hb_set_enable_cmd_fixed_param *params) 176 { 177 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 178 179 if (wmi_handle->ops->send_lphb_config_hbenable_cmd) 180 return wmi_handle->ops->send_lphb_config_hbenable_cmd( 181 wmi_handle, params); 182 183 return QDF_STATUS_E_FAILURE; 184 } 185 186 QDF_STATUS wmi_unified_lphb_config_tcp_params_cmd(void *wmi_hdl, 187 wmi_hb_set_tcp_params_cmd_fixed_param *lphb_conf_req) 188 { 189 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 190 191 if (wmi_handle->ops->send_lphb_config_tcp_params_cmd) 192 return wmi_handle->ops->send_lphb_config_tcp_params_cmd( 193 wmi_handle, lphb_conf_req); 194 195 return QDF_STATUS_E_FAILURE; 196 } 197 198 QDF_STATUS wmi_unified_lphb_config_tcp_pkt_filter_cmd(void *wmi_hdl, 199 wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *g_hb_tcp_filter_fp) 200 { 201 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 202 203 if (wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd) 204 return wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd( 205 wmi_handle, g_hb_tcp_filter_fp); 206 207 return QDF_STATUS_E_FAILURE; 208 } 209 210 QDF_STATUS wmi_unified_lphb_config_udp_params_cmd(void *wmi_hdl, 211 wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req) 212 { 213 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 214 215 if (wmi_handle->ops->send_lphb_config_udp_params_cmd) 216 return wmi_handle->ops->send_lphb_config_udp_params_cmd( 217 wmi_handle, lphb_conf_req); 218 219 return QDF_STATUS_E_FAILURE; 220 } 221 222 QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd(void *wmi_hdl, 223 wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req) 224 { 225 struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl; 226 227 if (wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd) 228 return wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd( 229 wmi_handle, lphb_conf_req); 230 231 return QDF_STATUS_E_FAILURE; 232 } 233 #endif /* FEATURE_WLAN_LPHB */ 234