wmi_unified_pmo_api.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  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. #include "ol_if_athvar.h"
  22. #include "ol_defines.h"
  23. #include "wmi_unified_priv.h"
  24. #include "wmi_unified_pmo_api.h"
  25. #include "wlan_pmo_hw_filter_public_struct.h"
  26. #ifdef FEATURE_WLAN_D0WOW
  27. QDF_STATUS wmi_unified_d0wow_enable_send(wmi_unified_t wmi_handle,
  28. uint8_t mac_id)
  29. {
  30. if (wmi_handle->ops->send_d0wow_enable_cmd)
  31. return wmi_handle->ops->send_d0wow_enable_cmd(wmi_handle,
  32. mac_id);
  33. return QDF_STATUS_E_FAILURE;
  34. }
  35. QDF_STATUS wmi_unified_d0wow_disable_send(wmi_unified_t wmi_handle,
  36. uint8_t mac_id)
  37. {
  38. if (wmi_handle->ops->send_d0wow_disable_cmd)
  39. return wmi_handle->ops->send_d0wow_disable_cmd(wmi_handle,
  40. mac_id);
  41. return QDF_STATUS_E_FAILURE;
  42. }
  43. #endif /* FEATURE_WLAN_D0WOW */
  44. QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(wmi_unified_t wmi_handle,
  45. uint32_t vdev_id,
  46. uint32_t *bitmap,
  47. bool enable)
  48. {
  49. if (wmi_handle->ops->send_add_wow_wakeup_event_cmd)
  50. return wmi_handle->ops->send_add_wow_wakeup_event_cmd(
  51. wmi_handle, vdev_id, bitmap, enable);
  52. return QDF_STATUS_E_FAILURE;
  53. }
  54. QDF_STATUS wmi_unified_wow_patterns_to_fw_cmd(
  55. wmi_unified_t wmi_handle,
  56. uint8_t vdev_id, uint8_t ptrn_id,
  57. const uint8_t *ptrn, uint8_t ptrn_len,
  58. uint8_t ptrn_offset, const uint8_t *mask,
  59. uint8_t mask_len, bool user,
  60. uint8_t default_patterns)
  61. {
  62. if (wmi_handle->ops->send_wow_patterns_to_fw_cmd)
  63. return wmi_handle->ops->send_wow_patterns_to_fw_cmd(wmi_handle,
  64. vdev_id, ptrn_id, ptrn,
  65. ptrn_len, ptrn_offset, mask,
  66. mask_len, user, default_patterns);
  67. return QDF_STATUS_E_FAILURE;
  68. }
  69. QDF_STATUS wmi_unified_enable_arp_ns_offload_cmd(
  70. wmi_unified_t wmi_handle,
  71. struct pmo_arp_offload_params *arp_offload_req,
  72. struct pmo_ns_offload_params *ns_offload_req,
  73. uint8_t vdev_id)
  74. {
  75. if (wmi_handle->ops->send_enable_arp_ns_offload_cmd)
  76. return wmi_handle->ops->send_enable_arp_ns_offload_cmd(
  77. wmi_handle,
  78. arp_offload_req, ns_offload_req, vdev_id);
  79. return QDF_STATUS_E_FAILURE;
  80. }
  81. QDF_STATUS wmi_unified_add_clear_mcbc_filter_cmd(
  82. wmi_unified_t wmi_handle,
  83. uint8_t vdev_id,
  84. struct qdf_mac_addr multicast_addr,
  85. bool clear_list)
  86. {
  87. if (wmi_handle->ops->send_add_clear_mcbc_filter_cmd)
  88. return wmi_handle->ops->send_add_clear_mcbc_filter_cmd(
  89. wmi_handle, vdev_id, multicast_addr, clear_list);
  90. return QDF_STATUS_E_FAILURE;
  91. }
  92. QDF_STATUS wmi_unified_multiple_add_clear_mcbc_filter_cmd(
  93. wmi_unified_t wmi_handle,
  94. uint8_t vdev_id,
  95. struct pmo_mcast_filter_params *filter_param)
  96. {
  97. if (wmi_handle->ops->send_multiple_add_clear_mcbc_filter_cmd)
  98. return wmi_handle->ops->send_multiple_add_clear_mcbc_filter_cmd(
  99. wmi_handle, vdev_id, filter_param);
  100. return QDF_STATUS_E_FAILURE;
  101. }
  102. QDF_STATUS wmi_unified_conf_hw_filter_cmd(wmi_unified_t wmi_handle,
  103. struct pmo_hw_filter_params *req)
  104. {
  105. if (!wmi_handle->ops->send_conf_hw_filter_cmd)
  106. return QDF_STATUS_E_NOSUPPORT;
  107. return wmi_handle->ops->send_conf_hw_filter_cmd(wmi_handle, req);
  108. }
  109. QDF_STATUS wmi_unified_send_gtk_offload_cmd(wmi_unified_t wmi_handle,
  110. uint8_t vdev_id,
  111. struct pmo_gtk_req *params,
  112. bool enable_offload,
  113. uint32_t gtk_offload_opcode)
  114. {
  115. if (wmi_handle->ops->send_gtk_offload_cmd)
  116. return wmi_handle->ops->send_gtk_offload_cmd(wmi_handle,
  117. vdev_id, params, enable_offload,
  118. gtk_offload_opcode);
  119. return QDF_STATUS_E_FAILURE;
  120. }
  121. #ifdef WLAN_FEATURE_IGMP_OFFLOAD
  122. QDF_STATUS
  123. wmi_unified_send_igmp_offload_cmd(wmi_unified_t wmi_handle,
  124. struct pmo_igmp_offload_req *pmo_igmp_req)
  125. {
  126. if (wmi_handle->ops->send_igmp_offload_cmd)
  127. return wmi_handle->ops->send_igmp_offload_cmd(wmi_handle,
  128. pmo_igmp_req);
  129. return QDF_STATUS_E_FAILURE;
  130. }
  131. #endif
  132. QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd(
  133. wmi_unified_t wmi_handle,
  134. uint8_t vdev_id,
  135. uint64_t offload_req_opcode)
  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. return QDF_STATUS_E_FAILURE;
  141. }
  142. QDF_STATUS wmi_unified_enable_enhance_multicast_offload_cmd(
  143. wmi_unified_t wmi_handle, uint8_t vdev_id, bool action)
  144. {
  145. struct wmi_ops *ops;
  146. ops = wmi_handle->ops;
  147. if (ops && ops->send_enable_enhance_multicast_offload_cmd)
  148. return ops->send_enable_enhance_multicast_offload_cmd(
  149. wmi_handle, vdev_id, action);
  150. return QDF_STATUS_E_FAILURE;
  151. }
  152. QDF_STATUS wmi_extract_gtk_rsp_event(
  153. wmi_unified_t wmi_handle, void *evt_buf,
  154. struct pmo_gtk_rsp_params *gtk_rsp_param, uint32_t len)
  155. {
  156. if (wmi_handle->ops->extract_gtk_rsp_event)
  157. return wmi_handle->ops->extract_gtk_rsp_event(wmi_handle,
  158. evt_buf, gtk_rsp_param, len);
  159. return QDF_STATUS_E_FAILURE;
  160. }
  161. #ifdef FEATURE_WLAN_RA_FILTERING
  162. QDF_STATUS wmi_unified_wow_sta_ra_filter_cmd(wmi_unified_t wmi_handle,
  163. uint8_t vdev_id,
  164. uint8_t default_pattern,
  165. uint16_t rate_limit_interval)
  166. {
  167. if (wmi_handle->ops->send_wow_sta_ra_filter_cmd)
  168. return wmi_handle->ops->send_wow_sta_ra_filter_cmd(wmi_handle,
  169. vdev_id, default_pattern, rate_limit_interval);
  170. return QDF_STATUS_E_FAILURE;
  171. }
  172. #endif /* FEATURE_WLAN_RA_FILTERING */
  173. QDF_STATUS wmi_unified_action_frame_patterns_cmd(
  174. wmi_unified_t wmi_handle,
  175. struct pmo_action_wakeup_set_params *action_params)
  176. {
  177. if (wmi_handle->ops->send_action_frame_patterns_cmd)
  178. return wmi_handle->ops->send_action_frame_patterns_cmd(
  179. wmi_handle, action_params);
  180. return QDF_STATUS_E_FAILURE;
  181. }
  182. #ifdef FEATURE_WLAN_LPHB
  183. QDF_STATUS wmi_unified_lphb_config_hbenable_cmd(
  184. wmi_unified_t wmi_handle,
  185. wmi_hb_set_enable_cmd_fixed_param *params)
  186. {
  187. if (wmi_handle->ops->send_lphb_config_hbenable_cmd)
  188. return wmi_handle->ops->send_lphb_config_hbenable_cmd(
  189. wmi_handle, params);
  190. return QDF_STATUS_E_FAILURE;
  191. }
  192. QDF_STATUS wmi_unified_lphb_config_tcp_params_cmd(
  193. wmi_unified_t wmi_handle,
  194. wmi_hb_set_tcp_params_cmd_fixed_param *lphb_conf_req)
  195. {
  196. if (wmi_handle->ops->send_lphb_config_tcp_params_cmd)
  197. return wmi_handle->ops->send_lphb_config_tcp_params_cmd(
  198. wmi_handle, lphb_conf_req);
  199. return QDF_STATUS_E_FAILURE;
  200. }
  201. QDF_STATUS wmi_unified_lphb_config_tcp_pkt_filter_cmd(
  202. wmi_unified_t wmi_handle,
  203. wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *g_hb_tcp_filter_fp)
  204. {
  205. if (wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd)
  206. return wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd(
  207. wmi_handle, g_hb_tcp_filter_fp);
  208. return QDF_STATUS_E_FAILURE;
  209. }
  210. QDF_STATUS wmi_unified_lphb_config_udp_params_cmd(
  211. wmi_unified_t wmi_handle,
  212. wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req)
  213. {
  214. if (wmi_handle->ops->send_lphb_config_udp_params_cmd)
  215. return wmi_handle->ops->send_lphb_config_udp_params_cmd(
  216. wmi_handle, lphb_conf_req);
  217. return QDF_STATUS_E_FAILURE;
  218. }
  219. QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd(
  220. wmi_unified_t wmi_handle,
  221. wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req)
  222. {
  223. if (wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd)
  224. return wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd(
  225. wmi_handle, lphb_conf_req);
  226. return QDF_STATUS_E_FAILURE;
  227. }
  228. #endif /* FEATURE_WLAN_LPHB */
  229. #ifdef WLAN_FEATURE_PACKET_FILTERING
  230. QDF_STATUS
  231. wmi_unified_enable_disable_packet_filter_cmd(wmi_unified_t wmi_handle,
  232. uint8_t vdev_id, bool enable)
  233. {
  234. if (wmi_handle->ops->send_enable_disable_packet_filter_cmd)
  235. return wmi_handle->ops->send_enable_disable_packet_filter_cmd(
  236. wmi_handle, vdev_id, enable);
  237. return QDF_STATUS_E_FAILURE;
  238. }
  239. QDF_STATUS wmi_unified_config_packet_filter_cmd(
  240. wmi_unified_t wmi_handle,
  241. uint8_t vdev_id, struct pmo_rcv_pkt_fltr_cfg *rcv_filter_param,
  242. uint8_t filter_id, bool enable)
  243. {
  244. if (wmi_handle->ops->send_config_packet_filter_cmd)
  245. return wmi_handle->ops->send_config_packet_filter_cmd(
  246. wmi_handle, vdev_id, rcv_filter_param, filter_id, enable);
  247. return QDF_STATUS_E_FAILURE;
  248. }
  249. #endif /* WLAN_FEATURE_PACKET_FILTERING */
  250. QDF_STATUS wmi_unified_wow_delete_pattern_cmd(wmi_unified_t wmi_handle,
  251. uint8_t ptrn_id,
  252. uint8_t vdev_id)
  253. {
  254. if (wmi_handle->ops->send_wow_delete_pattern_cmd)
  255. return wmi_handle->ops->send_wow_delete_pattern_cmd(wmi_handle,
  256. ptrn_id,
  257. vdev_id);
  258. return QDF_STATUS_E_FAILURE;
  259. }
  260. QDF_STATUS wmi_unified_host_wakeup_ind_to_fw_cmd(wmi_unified_t wmi_handle,
  261. bool tx_pending_ind)
  262. {
  263. if (wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd)
  264. return wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd
  265. (wmi_handle,
  266. tx_pending_ind);
  267. return QDF_STATUS_E_FAILURE;
  268. }
  269. QDF_STATUS wmi_unified_wow_timer_pattern_cmd(wmi_unified_t wmi_handle,
  270. uint8_t vdev_id,
  271. uint32_t cookie, uint32_t time)
  272. {
  273. if (wmi_handle->ops->send_wow_timer_pattern_cmd)
  274. return wmi_handle->ops->send_wow_timer_pattern_cmd(wmi_handle,
  275. vdev_id, cookie, time);
  276. return QDF_STATUS_E_FAILURE;
  277. }
  278. #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
  279. QDF_STATUS wmi_unified_enable_ext_wow_cmd(wmi_unified_t wmi_handle,
  280. struct ext_wow_params *params)
  281. {
  282. if (wmi_handle->ops->send_enable_ext_wow_cmd)
  283. return wmi_handle->ops->send_enable_ext_wow_cmd(wmi_handle,
  284. params);
  285. return QDF_STATUS_E_FAILURE;
  286. }
  287. QDF_STATUS wmi_unified_set_app_type2_params_in_fw_cmd(
  288. wmi_unified_t wmi_handle,
  289. struct app_type2_params *appType2Params)
  290. {
  291. if (wmi_handle->ops->send_set_app_type2_params_in_fw_cmd)
  292. return wmi_handle->ops->send_set_app_type2_params_in_fw_cmd(
  293. wmi_handle, appType2Params);
  294. return QDF_STATUS_E_FAILURE;
  295. }
  296. QDF_STATUS wmi_unified_app_type1_params_in_fw_cmd(
  297. wmi_unified_t wmi_handle,
  298. struct app_type1_params *app_type1_params)
  299. {
  300. if (wmi_handle->ops->send_app_type1_params_in_fw_cmd)
  301. return wmi_handle->ops->send_app_type1_params_in_fw_cmd(
  302. wmi_handle, app_type1_params);
  303. return QDF_STATUS_E_FAILURE;
  304. }
  305. #endif /* WLAN_FEATURE_EXTWOW_SUPPORT */
  306. #ifdef WLAN_FEATURE_ICMP_OFFLOAD
  307. QDF_STATUS wmi_unified_config_icmp_offload_cmd(wmi_unified_t wmi_handle,
  308. struct pmo_icmp_offload *pmo_icmp_req)
  309. {
  310. if (wmi_handle->ops->send_icmp_offload_config_cmd)
  311. return wmi_handle->ops->send_icmp_offload_config_cmd(
  312. wmi_handle, pmo_icmp_req);
  313. return QDF_STATUS_E_FAILURE;
  314. }
  315. #endif