xref: /wlan-dirver/qca-wifi-host-cmn/wmi/src/wmi_unified_pmo_api.c (revision 302a1d9701784af5f4797b1a9fe07ae820b51907)
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 QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl,
29 					uint32_t vdev_id,
30 					uint32_t *bitmap,
31 					bool enable)
32 {
33 	struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl;
34 
35 	if (wmi_handle->ops->send_add_wow_wakeup_event_cmd)
36 		return wmi_handle->ops->send_add_wow_wakeup_event_cmd(
37 				wmi_handle, vdev_id, bitmap, enable);
38 
39 	return QDF_STATUS_E_FAILURE;
40 }
41 
42 QDF_STATUS wmi_unified_wow_patterns_to_fw_cmd(void *wmi_hdl,
43 				uint8_t vdev_id, uint8_t ptrn_id,
44 				const uint8_t *ptrn, uint8_t ptrn_len,
45 				uint8_t ptrn_offset, const uint8_t *mask,
46 				uint8_t mask_len, bool user,
47 				uint8_t default_patterns)
48 {
49 	struct wmi_unified *wmi_handle = (struct wmi_unified *) wmi_hdl;
50 
51 	if (wmi_handle->ops->send_wow_patterns_to_fw_cmd)
52 		return wmi_handle->ops->send_wow_patterns_to_fw_cmd(wmi_handle,
53 				vdev_id, ptrn_id, ptrn,
54 				ptrn_len, ptrn_offset, mask,
55 				mask_len, user, default_patterns);
56 
57 	return QDF_STATUS_E_FAILURE;
58 }
59 
60 QDF_STATUS wmi_unified_add_clear_mcbc_filter_cmd(void *wmi_hdl,
61 				     uint8_t vdev_id,
62 				     struct qdf_mac_addr multicast_addr,
63 				     bool clearList)
64 {
65 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
66 
67 	if (wmi_handle->ops->send_add_clear_mcbc_filter_cmd)
68 		return wmi_handle->ops->send_add_clear_mcbc_filter_cmd(
69 				wmi_handle, vdev_id, multicast_addr, clearList);
70 
71 	return QDF_STATUS_E_FAILURE;
72 }
73 
74 QDF_STATUS wmi_unified_multiple_add_clear_mcbc_filter_cmd(void *wmi_hdl,
75 				uint8_t vdev_id,
76 				struct pmo_mcast_filter_params *filter_param)
77 {
78 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
79 
80 	if (wmi_handle->ops->send_multiple_add_clear_mcbc_filter_cmd)
81 		return wmi_handle->ops->send_multiple_add_clear_mcbc_filter_cmd(
82 				wmi_handle, vdev_id, filter_param);
83 
84 	return QDF_STATUS_E_FAILURE;
85 }
86 
87 #ifdef FEATURE_WLAN_RA_FILTERING
88 QDF_STATUS wmi_unified_wow_sta_ra_filter_cmd(void *wmi_hdl,
89 				uint8_t vdev_id, uint8_t default_pattern,
90 				uint16_t rate_limit_interval)
91 {
92 
93 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
94 
95 	if (wmi_handle->ops->send_wow_sta_ra_filter_cmd)
96 		return wmi_handle->ops->send_wow_sta_ra_filter_cmd(wmi_handle,
97 			    vdev_id, default_pattern, rate_limit_interval);
98 
99 	return QDF_STATUS_E_FAILURE;
100 
101 }
102 #endif /* FEATURE_WLAN_RA_FILTERING */
103 
104 QDF_STATUS wmi_unified_enable_enhance_multicast_offload_cmd(
105 		void *wmi_hdl, uint8_t vdev_id, bool action)
106 {
107 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
108 	struct wmi_ops *ops;
109 
110 	ops = wmi_handle->ops;
111 	if (ops && ops->send_enable_enhance_multicast_offload_cmd)
112 		return ops->send_enable_enhance_multicast_offload_cmd(
113 			wmi_handle, vdev_id, action);
114 
115 	return QDF_STATUS_E_FAILURE;
116 }
117 
118 QDF_STATUS wmi_extract_gtk_rsp_event(void *wmi_hdl, void *evt_buf,
119 	struct pmo_gtk_rsp_params *gtk_rsp_param, uint32_t len)
120 {
121 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
122 
123 	if (wmi_handle->ops->extract_gtk_rsp_event)
124 		return wmi_handle->ops->extract_gtk_rsp_event(wmi_handle,
125 				evt_buf, gtk_rsp_param, len);
126 
127 	return QDF_STATUS_E_FAILURE;
128 }
129 
130 
131 QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd(void *wmi_hdl,
132 				uint8_t vdev_id,
133 				uint64_t offload_req_opcode)
134 {
135 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
136 
137 	if (wmi_handle->ops->send_process_gtk_offload_getinfo_cmd)
138 		return wmi_handle->ops->send_process_gtk_offload_getinfo_cmd(
139 				wmi_handle, vdev_id, offload_req_opcode);
140 
141 	return QDF_STATUS_E_FAILURE;
142 }
143 
144 QDF_STATUS wmi_unified_action_frame_patterns_cmd(void *wmi_hdl,
145 		struct pmo_action_wakeup_set_params *action_params)
146 {
147 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
148 
149 	if (wmi_handle->ops->send_action_frame_patterns_cmd)
150 		return wmi_handle->ops->send_action_frame_patterns_cmd(
151 				wmi_handle, action_params);
152 
153 	return QDF_STATUS_E_FAILURE;
154 }
155 
156 QDF_STATUS wmi_unified_send_gtk_offload_cmd(void *wmi_hdl, uint8_t vdev_id,
157 					   struct pmo_gtk_req  *params,
158 					   bool enable_offload,
159 					   uint32_t gtk_offload_opcode)
160 {
161 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
162 
163 	if (wmi_handle->ops->send_gtk_offload_cmd)
164 		return wmi_handle->ops->send_gtk_offload_cmd(wmi_handle,
165 				vdev_id, params, enable_offload,
166 				gtk_offload_opcode);
167 
168 	return QDF_STATUS_E_FAILURE;
169 }
170 
171 #ifdef WLAN_FEATURE_PACKET_FILTERING
172 QDF_STATUS wmi_unified_enable_disable_packet_filter_cmd(void *wmi_hdl,
173 		uint8_t vdev_id, bool enable)
174 {
175 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
176 
177 	if (wmi_handle->ops->send_enable_disable_packet_filter_cmd)
178 		return wmi_handle->ops->send_enable_disable_packet_filter_cmd(
179 		wmi_handle, vdev_id, enable);
180 
181 	return QDF_STATUS_E_FAILURE;
182 }
183 
184 QDF_STATUS wmi_unified_config_packet_filter_cmd(void *wmi_hdl,
185 		uint8_t vdev_id, struct pmo_rcv_pkt_fltr_cfg *rcv_filter_param,
186 		uint8_t filter_id, bool enable)
187 {
188 	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
189 
190 	if (wmi_handle->ops->send_config_packet_filter_cmd)
191 		return wmi_handle->ops->send_config_packet_filter_cmd(
192 		wmi_handle, vdev_id, rcv_filter_param, filter_id, enable);
193 
194 	return QDF_STATUS_E_FAILURE;
195 }
196 #endif
197 
198 QDF_STATUS wmi_unified_enable_arp_ns_offload_cmd(void *wmi_hdl,
199 			   struct pmo_arp_offload_params *arp_offload_req,
200 			   struct pmo_ns_offload_params *ns_offload_req,
201 			   uint8_t vdev_id)
202 {
203 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
204 
205 	if (wmi_handle->ops->send_enable_arp_ns_offload_cmd)
206 		return wmi_handle->ops->send_enable_arp_ns_offload_cmd(
207 				wmi_handle,
208 				arp_offload_req, ns_offload_req, vdev_id);
209 
210 	return QDF_STATUS_E_FAILURE;
211 }
212 
213 QDF_STATUS wmi_unified_conf_hw_filter_cmd(void *opaque_wmi,
214 					  struct pmo_hw_filter_params *req)
215 {
216 	struct wmi_unified *wmi = opaque_wmi;
217 
218 	if (!wmi->ops->send_conf_hw_filter_cmd)
219 		return QDF_STATUS_E_NOSUPPORT;
220 
221 	return wmi->ops->send_conf_hw_filter_cmd(wmi, req);
222 }
223 
224 #ifdef FEATURE_WLAN_LPHB
225 QDF_STATUS wmi_unified_lphb_config_hbenable_cmd(void *wmi_hdl,
226 				wmi_hb_set_enable_cmd_fixed_param *params)
227 {
228 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
229 
230 	if (wmi_handle->ops->send_lphb_config_hbenable_cmd)
231 		return wmi_handle->ops->send_lphb_config_hbenable_cmd(
232 				wmi_handle, params);
233 
234 	return QDF_STATUS_E_FAILURE;
235 }
236 
237 QDF_STATUS wmi_unified_lphb_config_tcp_params_cmd(void *wmi_hdl,
238 		    wmi_hb_set_tcp_params_cmd_fixed_param *lphb_conf_req)
239 {
240 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
241 
242 	if (wmi_handle->ops->send_lphb_config_tcp_params_cmd)
243 		return wmi_handle->ops->send_lphb_config_tcp_params_cmd(
244 				wmi_handle, lphb_conf_req);
245 
246 	return QDF_STATUS_E_FAILURE;
247 }
248 
249 QDF_STATUS wmi_unified_lphb_config_tcp_pkt_filter_cmd(void *wmi_hdl,
250 		wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *g_hb_tcp_filter_fp)
251 {
252 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
253 
254 	if (wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd)
255 		return wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd(
256 				wmi_handle, g_hb_tcp_filter_fp);
257 
258 	return QDF_STATUS_E_FAILURE;
259 }
260 
261 QDF_STATUS wmi_unified_lphb_config_udp_params_cmd(void *wmi_hdl,
262 			wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req)
263 {
264 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
265 
266 	if (wmi_handle->ops->send_lphb_config_udp_params_cmd)
267 		return wmi_handle->ops->send_lphb_config_udp_params_cmd(
268 				wmi_handle, lphb_conf_req);
269 
270 	return QDF_STATUS_E_FAILURE;
271 }
272 
273 QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd(void *wmi_hdl,
274 		wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req)
275 {
276 	struct wmi_unified *wmi_handle = (struct wmi_unified *)wmi_hdl;
277 
278 	if (wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd)
279 		return wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd(
280 				wmi_handle, lphb_conf_req);
281 
282 	return QDF_STATUS_E_FAILURE;
283 }
284 #endif /* FEATURE_WLAN_LPHB */
285