son_api.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /*
  2. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any
  6. * purpose with or without fee is hereby granted, provided that the above
  7. * copyright notice and this permission notice appear in all copies.
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. /**
  17. * DOC : contains interface prototypes for son api
  18. */
  19. #ifndef _SON_API_H_
  20. #define _SON_API_H_
  21. #include <qdf_types.h>
  22. #include <wlan_objmgr_peer_obj.h>
  23. #include <wlan_objmgr_pdev_obj.h>
  24. #include <reg_services_public_struct.h>
  25. /**
  26. * mlme_deliver_cb - cb to deliver mlme event
  27. * @vdev: pointer to vdev
  28. * @event_len: event length
  29. * @event_buf: event buffer
  30. *
  31. * @Return: 0 if event is sent successfully
  32. */
  33. typedef int (*mlme_deliver_cb)(struct wlan_objmgr_vdev *vdev,
  34. uint32_t event_len,
  35. const uint8_t *event_buf);
  36. /**
  37. * enum SON_MLME_DELIVER_CB_TYPE - mlme deliver cb type
  38. * @SON_MLME_DELIVER_CB_TYPE_OPMODE: cb to deliver opmode
  39. * @SON_MLME_DELIVER_CB_TYPE_SMPS: cb to deliver smps
  40. */
  41. enum SON_MLME_DELIVER_CB_TYPE {
  42. SON_MLME_DELIVER_CB_TYPE_OPMODE,
  43. SON_MLME_DELIVER_CB_TYPE_SMPS,
  44. };
  45. /**
  46. * wlan_son_register_mlme_deliver_cb - register mlme deliver cb
  47. * @psoc: pointer to psoc
  48. * @cb: mlme deliver cb
  49. * @type: mlme deliver cb type
  50. *
  51. * Return: QDF_STATUS
  52. */
  53. QDF_STATUS
  54. wlan_son_register_mlme_deliver_cb(struct wlan_objmgr_psoc *psoc,
  55. mlme_deliver_cb cb,
  56. enum SON_MLME_DELIVER_CB_TYPE type);
  57. /**
  58. * wlan_son_get_chan_flag() - get chan flag
  59. * @pdev: pointer to pdev
  60. * @freq: qdf_freq_t
  61. * @flag_160: If true, 160 channel info will be obtained;
  62. * otherwise 80+80, 80 channel info will be obtained
  63. * @chan_params: chan parameters
  64. *
  65. * Return: combination of enum qca_wlan_vendor_channel_prop_flags and
  66. * enum qca_wlan_vendor_channel_prop_flags_2
  67. */
  68. uint32_t wlan_son_get_chan_flag(struct wlan_objmgr_pdev *pdev,
  69. qdf_freq_t freq, bool flag_160,
  70. struct ch_params *chan_params);
  71. /**
  72. * wlan_son_peer_set_kickout_allow() - set the peer is allowed to kickout
  73. * @vdev: pointer to vdev
  74. * @peer: pointer to peer
  75. * @kickout_allow: kickout_allow to set
  76. *
  77. * Return: QDF_STATUS_SUCCESS on Success else failure.
  78. */
  79. QDF_STATUS wlan_son_peer_set_kickout_allow(struct wlan_objmgr_vdev *vdev,
  80. struct wlan_objmgr_peer *peer,
  81. bool kickout_allow);
  82. #ifdef WLAN_FEATURE_SON
  83. /**
  84. * wlan_son_peer_is_kickout_allow() - Is peer is allowed to kickout
  85. * @vdev: pointer to vdev
  86. * @macaddr: mac addr of the peer
  87. *
  88. * Return: True if it is allowed to kickout.
  89. */
  90. bool wlan_son_peer_is_kickout_allow(struct wlan_objmgr_vdev *vdev,
  91. uint8_t *macaddr);
  92. /**
  93. * wlan_son_ind_assoc_req_frm() - indicate assoc req frame to son
  94. * @vdev: pointer to vdev
  95. * @is_reassoc: true if it is reassoc req
  96. * @frame: frame body
  97. * @frame_len: frame body length
  98. * @status: assoc req frame is handled successfully
  99. *
  100. * Return: Void
  101. */
  102. void wlan_son_ind_assoc_req_frm(struct wlan_objmgr_vdev *vdev,
  103. uint8_t *macaddr, bool is_reassoc,
  104. uint8_t *frame, uint16_t frame_len,
  105. QDF_STATUS status);
  106. /**
  107. * wlan_son_deliver_tx_power() - notify son module of tx power
  108. * @vdev: vdev
  109. * @max_pwr: max power in dBm unit
  110. *
  111. * Return: 0 if event is sent successfully
  112. */
  113. int wlan_son_deliver_tx_power(struct wlan_objmgr_vdev *vdev,
  114. int32_t max_pwr);
  115. /**
  116. * wlan_son_deliver_vdev_stop() - notify son module of vdev stop
  117. * @vdev: vdev
  118. *
  119. * Return: 0 if event is sent successfully
  120. */
  121. int wlan_son_deliver_vdev_stop(struct wlan_objmgr_vdev *vdev);
  122. /**
  123. * wlan_son_deliver_inst_rssi() - notify son module of inst rssi
  124. * @vdev: vdev
  125. * @peer: peer device
  126. * @irssi: inst rssi above the noise floor in dB unit
  127. *
  128. * Return: 0 if event is sent successfully
  129. */
  130. int wlan_son_deliver_inst_rssi(struct wlan_objmgr_vdev *vdev,
  131. struct wlan_objmgr_peer *peer,
  132. uint32_t irssi);
  133. /**
  134. * wlan_son_deliver_opmode() - notity user app of opmode
  135. * @vdev: vdev objmgr
  136. * @bw: channel width defined in enum eSirMacHTChannelWidth
  137. * @nss: supported rx nss
  138. * @addr: source addr
  139. *
  140. * Return: 0 if event is sent successfully
  141. */
  142. int wlan_son_deliver_opmode(struct wlan_objmgr_vdev *vdev,
  143. uint8_t bw,
  144. uint8_t nss,
  145. uint8_t *addr);
  146. /**
  147. * wlan_son_deliver_smps() - notity user app of smps
  148. * @vdev: vdev objmgr
  149. * @is_static: is_static
  150. * @addr: source addr
  151. *
  152. * Return: 0 if event is sent successfully
  153. */
  154. int wlan_son_deliver_smps(struct wlan_objmgr_vdev *vdev,
  155. uint8_t is_static,
  156. uint8_t *addr);
  157. /**
  158. * wlan_son_deliver_rrm_rpt() - notity son module of rrm rpt
  159. * @vdev: vdev objmgr
  160. * @addr: sender addr
  161. * @frm: points to measurement report
  162. * @flen: frame length
  163. *
  164. * Return: 0 if event is sent successfully
  165. */
  166. int wlan_son_deliver_rrm_rpt(struct wlan_objmgr_vdev *vdev,
  167. uint8_t *addr,
  168. uint8_t *frm,
  169. uint32_t flen);
  170. #else
  171. static inline bool wlan_son_peer_is_kickout_allow(struct wlan_objmgr_vdev *vdev,
  172. uint8_t *macaddr)
  173. {
  174. return true;
  175. }
  176. static inline
  177. void wlan_son_ind_assoc_req_frm(struct wlan_objmgr_vdev *vdev,
  178. uint8_t *macaddr, bool is_reassoc,
  179. uint8_t *frame, uint16_t frame_len,
  180. QDF_STATUS status)
  181. {
  182. }
  183. static inline
  184. int wlan_son_deliver_tx_power(struct wlan_objmgr_vdev *vdev,
  185. int32_t max_pwr)
  186. {
  187. return -EINVAL;
  188. }
  189. static inline
  190. int wlan_son_deliver_vdev_stop(struct wlan_objmgr_vdev *vdev)
  191. {
  192. return -EINVAL;
  193. }
  194. static inline
  195. int wlan_son_deliver_inst_rssi(struct wlan_objmgr_vdev *vdev,
  196. struct wlan_objmgr_peer *peer,
  197. uint32_t irssi)
  198. {
  199. return -EINVAL;
  200. }
  201. static inline
  202. int wlan_son_deliver_opmode(struct wlan_objmgr_vdev *vdev,
  203. uint8_t bw,
  204. uint8_t nss,
  205. uint8_t *addr)
  206. {
  207. return -EINVAL;
  208. }
  209. static inline
  210. int wlan_son_deliver_smps(struct wlan_objmgr_vdev *vdev,
  211. uint8_t is_static,
  212. uint8_t *addr)
  213. {
  214. return -EINVAL;
  215. }
  216. static inline
  217. int wlan_son_deliver_rrm_rpt(struct wlan_objmgr_vdev *vdev,
  218. uint8_t *mac_addr,
  219. uint8_t *frm,
  220. uint32_t flen)
  221. {
  222. return -EINVAL;
  223. }
  224. #endif /*WLAN_FEATURE_SON*/
  225. #endif