wmi_unified_pmo_api.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  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. #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. QDF_STATUS wmi_unified_process_gtk_offload_getinfo_cmd(
  122. wmi_unified_t wmi_handle,
  123. uint8_t vdev_id,
  124. uint64_t offload_req_opcode)
  125. {
  126. if (wmi_handle->ops->send_process_gtk_offload_getinfo_cmd)
  127. return wmi_handle->ops->send_process_gtk_offload_getinfo_cmd(
  128. wmi_handle, vdev_id, offload_req_opcode);
  129. return QDF_STATUS_E_FAILURE;
  130. }
  131. QDF_STATUS wmi_unified_enable_enhance_multicast_offload_cmd(
  132. wmi_unified_t wmi_handle, uint8_t vdev_id, bool action)
  133. {
  134. struct wmi_ops *ops;
  135. ops = wmi_handle->ops;
  136. if (ops && ops->send_enable_enhance_multicast_offload_cmd)
  137. return ops->send_enable_enhance_multicast_offload_cmd(
  138. wmi_handle, vdev_id, action);
  139. return QDF_STATUS_E_FAILURE;
  140. }
  141. QDF_STATUS wmi_extract_gtk_rsp_event(
  142. wmi_unified_t wmi_handle, void *evt_buf,
  143. struct pmo_gtk_rsp_params *gtk_rsp_param, uint32_t len)
  144. {
  145. if (wmi_handle->ops->extract_gtk_rsp_event)
  146. return wmi_handle->ops->extract_gtk_rsp_event(wmi_handle,
  147. evt_buf, gtk_rsp_param, len);
  148. return QDF_STATUS_E_FAILURE;
  149. }
  150. #ifdef FEATURE_WLAN_RA_FILTERING
  151. QDF_STATUS wmi_unified_wow_sta_ra_filter_cmd(wmi_unified_t wmi_handle,
  152. uint8_t vdev_id,
  153. uint8_t default_pattern,
  154. uint16_t rate_limit_interval)
  155. {
  156. if (wmi_handle->ops->send_wow_sta_ra_filter_cmd)
  157. return wmi_handle->ops->send_wow_sta_ra_filter_cmd(wmi_handle,
  158. vdev_id, default_pattern, rate_limit_interval);
  159. return QDF_STATUS_E_FAILURE;
  160. }
  161. #endif /* FEATURE_WLAN_RA_FILTERING */
  162. QDF_STATUS wmi_unified_action_frame_patterns_cmd(
  163. wmi_unified_t wmi_handle,
  164. struct pmo_action_wakeup_set_params *action_params)
  165. {
  166. if (wmi_handle->ops->send_action_frame_patterns_cmd)
  167. return wmi_handle->ops->send_action_frame_patterns_cmd(
  168. wmi_handle, action_params);
  169. return QDF_STATUS_E_FAILURE;
  170. }
  171. #ifdef FEATURE_WLAN_LPHB
  172. QDF_STATUS wmi_unified_lphb_config_hbenable_cmd(
  173. wmi_unified_t wmi_handle,
  174. wmi_hb_set_enable_cmd_fixed_param *params)
  175. {
  176. if (wmi_handle->ops->send_lphb_config_hbenable_cmd)
  177. return wmi_handle->ops->send_lphb_config_hbenable_cmd(
  178. wmi_handle, params);
  179. return QDF_STATUS_E_FAILURE;
  180. }
  181. QDF_STATUS wmi_unified_lphb_config_tcp_params_cmd(
  182. wmi_unified_t wmi_handle,
  183. wmi_hb_set_tcp_params_cmd_fixed_param *lphb_conf_req)
  184. {
  185. if (wmi_handle->ops->send_lphb_config_tcp_params_cmd)
  186. return wmi_handle->ops->send_lphb_config_tcp_params_cmd(
  187. wmi_handle, lphb_conf_req);
  188. return QDF_STATUS_E_FAILURE;
  189. }
  190. QDF_STATUS wmi_unified_lphb_config_tcp_pkt_filter_cmd(
  191. wmi_unified_t wmi_handle,
  192. wmi_hb_set_tcp_pkt_filter_cmd_fixed_param *g_hb_tcp_filter_fp)
  193. {
  194. if (wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd)
  195. return wmi_handle->ops->send_lphb_config_tcp_pkt_filter_cmd(
  196. wmi_handle, g_hb_tcp_filter_fp);
  197. return QDF_STATUS_E_FAILURE;
  198. }
  199. QDF_STATUS wmi_unified_lphb_config_udp_params_cmd(
  200. wmi_unified_t wmi_handle,
  201. wmi_hb_set_udp_params_cmd_fixed_param *lphb_conf_req)
  202. {
  203. if (wmi_handle->ops->send_lphb_config_udp_params_cmd)
  204. return wmi_handle->ops->send_lphb_config_udp_params_cmd(
  205. wmi_handle, lphb_conf_req);
  206. return QDF_STATUS_E_FAILURE;
  207. }
  208. QDF_STATUS wmi_unified_lphb_config_udp_pkt_filter_cmd(
  209. wmi_unified_t wmi_handle,
  210. wmi_hb_set_udp_pkt_filter_cmd_fixed_param *lphb_conf_req)
  211. {
  212. if (wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd)
  213. return wmi_handle->ops->send_lphb_config_udp_pkt_filter_cmd(
  214. wmi_handle, lphb_conf_req);
  215. return QDF_STATUS_E_FAILURE;
  216. }
  217. #endif /* FEATURE_WLAN_LPHB */
  218. #ifdef WLAN_FEATURE_PACKET_FILTERING
  219. QDF_STATUS
  220. wmi_unified_enable_disable_packet_filter_cmd(wmi_unified_t wmi_handle,
  221. uint8_t vdev_id, bool enable)
  222. {
  223. if (wmi_handle->ops->send_enable_disable_packet_filter_cmd)
  224. return wmi_handle->ops->send_enable_disable_packet_filter_cmd(
  225. wmi_handle, vdev_id, enable);
  226. return QDF_STATUS_E_FAILURE;
  227. }
  228. QDF_STATUS wmi_unified_config_packet_filter_cmd(
  229. wmi_unified_t wmi_handle,
  230. uint8_t vdev_id, struct pmo_rcv_pkt_fltr_cfg *rcv_filter_param,
  231. uint8_t filter_id, bool enable)
  232. {
  233. if (wmi_handle->ops->send_config_packet_filter_cmd)
  234. return wmi_handle->ops->send_config_packet_filter_cmd(
  235. wmi_handle, vdev_id, rcv_filter_param, filter_id, enable);
  236. return QDF_STATUS_E_FAILURE;
  237. }
  238. #endif /* WLAN_FEATURE_PACKET_FILTERING */
  239. QDF_STATUS wmi_unified_wow_delete_pattern_cmd(wmi_unified_t wmi_handle,
  240. uint8_t ptrn_id,
  241. uint8_t vdev_id)
  242. {
  243. if (wmi_handle->ops->send_wow_delete_pattern_cmd)
  244. return wmi_handle->ops->send_wow_delete_pattern_cmd(wmi_handle,
  245. ptrn_id,
  246. vdev_id);
  247. return QDF_STATUS_E_FAILURE;
  248. }
  249. QDF_STATUS wmi_unified_host_wakeup_ind_to_fw_cmd(wmi_unified_t wmi_handle)
  250. {
  251. if (wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd)
  252. return wmi_handle->ops->send_host_wakeup_ind_to_fw_cmd(wmi_handle);
  253. return QDF_STATUS_E_FAILURE;
  254. }
  255. QDF_STATUS wmi_unified_wow_timer_pattern_cmd(wmi_unified_t wmi_handle,
  256. uint8_t vdev_id,
  257. uint32_t cookie, uint32_t time)
  258. {
  259. if (wmi_handle->ops->send_wow_timer_pattern_cmd)
  260. return wmi_handle->ops->send_wow_timer_pattern_cmd(wmi_handle,
  261. vdev_id, cookie, time);
  262. return QDF_STATUS_E_FAILURE;
  263. }
  264. #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
  265. QDF_STATUS wmi_unified_enable_ext_wow_cmd(wmi_unified_t wmi_handle,
  266. struct ext_wow_params *params)
  267. {
  268. if (wmi_handle->ops->send_enable_ext_wow_cmd)
  269. return wmi_handle->ops->send_enable_ext_wow_cmd(wmi_handle,
  270. params);
  271. return QDF_STATUS_E_FAILURE;
  272. }
  273. QDF_STATUS wmi_unified_set_app_type2_params_in_fw_cmd(
  274. wmi_unified_t wmi_handle,
  275. struct app_type2_params *appType2Params)
  276. {
  277. if (wmi_handle->ops->send_set_app_type2_params_in_fw_cmd)
  278. return wmi_handle->ops->send_set_app_type2_params_in_fw_cmd(
  279. wmi_handle, appType2Params);
  280. return QDF_STATUS_E_FAILURE;
  281. }
  282. QDF_STATUS wmi_unified_app_type1_params_in_fw_cmd(
  283. wmi_unified_t wmi_handle,
  284. struct app_type1_params *app_type1_params)
  285. {
  286. if (wmi_handle->ops->send_app_type1_params_in_fw_cmd)
  287. return wmi_handle->ops->send_app_type1_params_in_fw_cmd(
  288. wmi_handle, app_type1_params);
  289. return QDF_STATUS_E_FAILURE;
  290. }
  291. #endif /* WLAN_FEATURE_EXTWOW_SUPPORT */