os_if_son.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. /*
  2. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2021-2022 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: os_if_son.h
  18. *
  19. * WLAN Host Device Driver file for son (Self Organizing Network)
  20. * support.
  21. *
  22. */
  23. #ifndef _OS_IF_SON_H_
  24. #define _OS_IF_SON_H_
  25. #include <qdf_types.h>
  26. #include <wlan_objmgr_vdev_obj.h>
  27. #include <wlan_objmgr_psoc_obj.h>
  28. #include <wlan_objmgr_pdev_obj.h>
  29. #include <wlan_reg_ucfg_api.h>
  30. #include <ieee80211_external.h>
  31. #define INVALID_WIDTH 0xFF
  32. /**
  33. * struct son_callbacks - struct containing callback to non-converged driver
  34. * @os_if_is_acs_in_progress: whether acs is in progress or not
  35. * @os_if_set_chan_ext_offset: set chan extend offset
  36. * @os_if_get_chan_ext_offset: get chan extend offset
  37. * @os_if_set_bandwidth: set band width
  38. * @os_if_get_bandwidth: get band width
  39. * @os_if_set_chan: set chan
  40. * @os_if_get_sta_count: get station count
  41. * @os_if_set_country_code: set country code
  42. * @os_if_set_candidate_freq: set freq to switch after radar detection
  43. * @os_if_get_candidate_freq: get freq to switch after radar detection
  44. * @os_if_set_phymode: set phy mode
  45. * @os_if_get_phymode: get phy mode
  46. * @os_if_get_rx_nss: Gets number of RX spatial streams
  47. * @os_if_set_acl_policy: set acl policy
  48. * @os_if_get_acl_policy: get acl policy
  49. * @os_if_add_acl_mac: add mac to acl
  50. * @os_if_del_acl_mac: del mac from acl
  51. * @os_if_kickout_mac: kickout sta with given mac
  52. * @os_if_set_chwidth: set chan width
  53. * @os_if_get_chwidth: get chan width
  54. * @os_if_get_sta_list: get sta list
  55. * @os_if_get_sta_space: get sta space
  56. * @os_if_deauth_sta: Deauths the target peer
  57. * @os_if_modify_acl: Add/Del target peer in ACL
  58. * @os_if_get_vdev_by_netdev: Get vdev from net device
  59. * @os_if_trigger_objmgr_object_creation: Trigger objmgr object creation
  60. * @os_if_trigger_objmgr_object_deletion: Trigger objmgr object deletion
  61. * @os_if_start_acs: Trigger ACS
  62. * @os_if_set_acs_channels: Set channel list for ACS
  63. * @os_if_get_acs_report: Gets the ACS report
  64. * @os_if_get_node_info: Gets the datarate info for node
  65. * @os_if_get_peer_capability: Gets peer capability
  66. * @os_if_get_peer_max_mcs_idx: Gets peer max MCS index
  67. * @os_if_get_sta_stats: Get sta stats
  68. */
  69. struct son_callbacks {
  70. uint32_t (*os_if_is_acs_in_progress)(struct wlan_objmgr_vdev *vdev);
  71. int (*os_if_set_chan_ext_offset)(
  72. struct wlan_objmgr_vdev *vdev,
  73. enum sec20_chan_offset son_chan_ext_offset);
  74. enum sec20_chan_offset (*os_if_get_chan_ext_offset)(
  75. struct wlan_objmgr_vdev *vdev);
  76. int (*os_if_set_bandwidth)(struct wlan_objmgr_vdev *vdev,
  77. uint32_t son_bandwidth);
  78. uint32_t (*os_if_get_bandwidth)(struct wlan_objmgr_vdev *vdev);
  79. int (*os_if_set_chan)(struct wlan_objmgr_vdev *vdev, int chan,
  80. enum wlan_band_id son_band);
  81. uint32_t (*os_if_get_sta_count)(struct wlan_objmgr_vdev *vdev);
  82. int (*os_if_set_country_code)(struct wlan_objmgr_vdev *vdev,
  83. char *country_code);
  84. int (*os_if_set_candidate_freq)(struct wlan_objmgr_vdev *vdev,
  85. qdf_freq_t freq);
  86. qdf_freq_t (*os_if_get_candidate_freq)(struct wlan_objmgr_vdev *vdev);
  87. int (*os_if_set_phymode)(struct wlan_objmgr_vdev *vdev,
  88. enum ieee80211_phymode mode);
  89. enum ieee80211_phymode (*os_if_get_phymode)(
  90. struct wlan_objmgr_vdev *vdev);
  91. uint8_t (*os_if_get_rx_nss)(struct wlan_objmgr_vdev *vdev);
  92. QDF_STATUS (*os_if_set_acl_policy)(struct wlan_objmgr_vdev *vdev,
  93. ieee80211_acl_cmd son_acl_policy);
  94. ieee80211_acl_cmd (*os_if_get_acl_policy)(
  95. struct wlan_objmgr_vdev *vdev);
  96. int (*os_if_add_acl_mac)(struct wlan_objmgr_vdev *vdev,
  97. struct qdf_mac_addr *acl_mac);
  98. int (*os_if_del_acl_mac)(struct wlan_objmgr_vdev *vdev,
  99. struct qdf_mac_addr *acl_mac);
  100. int (*os_if_kickout_mac)(struct wlan_objmgr_vdev *vdev,
  101. struct qdf_mac_addr *acl_mac);
  102. int (*os_if_set_chwidth)(struct wlan_objmgr_vdev *vdev,
  103. enum ieee80211_cwm_width son_chwidth);
  104. enum ieee80211_cwm_width (*os_if_get_chwidth)(
  105. struct wlan_objmgr_vdev *vdev);
  106. void (*os_if_get_sta_list)(struct wlan_objmgr_vdev *vdev,
  107. struct ieee80211req_sta_info *req,
  108. uint32_t *space);
  109. uint32_t (*os_if_get_sta_space)(struct wlan_objmgr_vdev *vdev);
  110. void (*os_if_deauth_sta)(struct wlan_objmgr_vdev *vdev,
  111. uint8_t *peer_mac,
  112. bool ignore_frame);
  113. void (*os_if_modify_acl)(struct wlan_objmgr_vdev *vdev,
  114. uint8_t *peer_mac,
  115. bool allow_auth);
  116. struct wlan_objmgr_vdev *(*os_if_get_vdev_by_netdev)
  117. (struct net_device *dev);
  118. QDF_STATUS (*os_if_trigger_objmgr_object_creation)
  119. (enum wlan_umac_comp_id id);
  120. QDF_STATUS (*os_if_trigger_objmgr_object_deletion)
  121. (enum wlan_umac_comp_id id);
  122. int (*os_if_start_acs)(struct wlan_objmgr_vdev *vdev, uint8_t enable);
  123. int (*os_if_set_acs_channels)(struct wlan_objmgr_vdev *vdev,
  124. struct ieee80211req_athdbg *req);
  125. int (*os_if_get_acs_report)(struct wlan_objmgr_vdev *vdev,
  126. struct ieee80211_acs_dbg *acs_r);
  127. QDF_STATUS (*os_if_get_node_info)(struct wlan_objmgr_vdev *vdev,
  128. uint8_t *mac_addr,
  129. wlan_node_info *nodeinfo);
  130. QDF_STATUS (*os_if_get_peer_capability)(struct wlan_objmgr_vdev *vdev,
  131. struct wlan_objmgr_peer *peer,
  132. wlan_peer_cap *cap);
  133. uint32_t (*os_if_get_peer_max_mcs_idx)(struct wlan_objmgr_vdev *vdev,
  134. struct wlan_objmgr_peer *peer);
  135. int (*os_if_get_sta_stats)(struct wlan_objmgr_vdev *vdev,
  136. uint8_t *mac_addr,
  137. struct ieee80211_nodestats *stats);
  138. };
  139. /**
  140. * enum os_if_son_vendor_cmd_type - Enum to specify get/set command
  141. * @OS_IF_SON_VENDOR_GET_CMD: Get type command called from wificonfiguration
  142. * vendor command handler
  143. * @OS_IF_SON_VENDOR_SET_CMD: Set type command called from wificonfiguration
  144. * vendor command handler
  145. * @OS_IF_SON_VENDOR_MAX_CMD: Max cmd type
  146. */
  147. enum os_if_son_vendor_cmd_type {
  148. OS_IF_SON_VENDOR_GET_CMD,
  149. OS_IF_SON_VENDOR_SET_CMD,
  150. OS_IF_SON_VENDOR_MAX_CMD,
  151. };
  152. /**
  153. * struct os_if_son_rx_ops - Contains cb for os_if rx ops used by SON
  154. * @parse_generic_nl_cmd: Callback for parsing generic nl vendor commands
  155. */
  156. struct os_if_son_rx_ops {
  157. int (*parse_generic_nl_cmd)(struct wiphy *wiphy,
  158. struct wireless_dev *wdev, void *params,
  159. enum os_if_son_vendor_cmd_type type);
  160. };
  161. /**
  162. * struct wlan_os_if_son_ops - Contains cb for os_if txrx ops used by SON
  163. * @son_osif_rx_ops: structure to contain rx ops
  164. */
  165. struct wlan_os_if_son_ops {
  166. struct os_if_son_rx_ops son_osif_rx_ops;
  167. };
  168. /**
  169. * wlan_os_if_son_ops_register_cb() - Set son os_if ops cb
  170. * @handler: son os_if ops cb table
  171. *
  172. * Return: void
  173. */
  174. void
  175. wlan_os_if_son_ops_register_cb(void (*handler)(struct wlan_os_if_son_ops *));
  176. /**
  177. * os_if_son_register_osif_ops() - Register son os_if ops with os_if
  178. *
  179. * Return: void
  180. */
  181. void os_if_son_register_osif_ops(void);
  182. /**
  183. * os_if_son_register_lmac_if_ops() - Register son lmac_if rx_ops with lmac
  184. * @psoc: objmrg psoc handle
  185. *
  186. * Register son lmac_if rx_ops with lmac to be called by SON DLKM
  187. *
  188. * Return: void
  189. */
  190. void os_if_son_register_lmac_if_ops(struct wlan_objmgr_psoc *psoc);
  191. /**
  192. * os_if_son_register_hdd_callbacks() - register son hdd callback
  193. * @psoc: psoc
  194. * @cb_obj: pointer to callback
  195. *
  196. * Return: void
  197. */
  198. void os_if_son_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
  199. struct son_callbacks *cb_obj);
  200. /**
  201. * os_if_son_get_freq() - get freq
  202. * @vdev: vdev
  203. *
  204. * Return: freq of given vdev
  205. */
  206. qdf_freq_t os_if_son_get_freq(struct wlan_objmgr_vdev *vdev);
  207. /**
  208. * os_if_son_is_acs_in_progress() - whether ACS in progress or not
  209. * @vdev: vdev
  210. *
  211. * Return: true if ACS is in progress
  212. */
  213. uint32_t os_if_son_is_acs_in_progress(struct wlan_objmgr_vdev *vdev);
  214. /**
  215. * os_if_son_is_cac_in_progress() - whether CAC is in progress or not
  216. * @vdev: vdev
  217. *
  218. * Return: true if CAC is in progress
  219. */
  220. uint32_t os_if_son_is_cac_in_progress(struct wlan_objmgr_vdev *vdev);
  221. /**
  222. * os_if_son_set_chan_ext_offset() - set chan extend offset
  223. * @vdev: vdev
  224. * @son_chan_ext_offset: son chan extend offset
  225. *
  226. * Return: 0 on success, negative errno on failure
  227. */
  228. int os_if_son_set_chan_ext_offset(struct wlan_objmgr_vdev *vdev,
  229. enum sec20_chan_offset son_chan_ext_offset);
  230. /**
  231. * os_if_son_get_chan_ext_offset() - get chan extend offset
  232. * @vdev: vdev
  233. *
  234. * Return: enum sec20_chan_offset
  235. */
  236. enum sec20_chan_offset os_if_son_get_chan_ext_offset(
  237. struct wlan_objmgr_vdev *vdev);
  238. /**
  239. * os_if_son_set_bandwidth() - set band width
  240. * @vdev: vdev
  241. * @son_bandwidth: band width
  242. *
  243. * Return: 0 on success, negative errno on failure
  244. */
  245. int os_if_son_set_bandwidth(struct wlan_objmgr_vdev *vdev,
  246. uint32_t son_bandwidth);
  247. /**
  248. * os_if_son_get_bandwidth() - get band width
  249. * @vdev: vdev
  250. *
  251. * Return: band width
  252. */
  253. uint32_t os_if_son_get_bandwidth(struct wlan_objmgr_vdev *vdev);
  254. /**
  255. * os_if_son_get_band_info() - get band info
  256. * @vdev: vdev
  257. *
  258. * Return: band info
  259. */
  260. uint32_t os_if_son_get_band_info(struct wlan_objmgr_vdev *vdev);
  261. /**
  262. * os_if_son_get_chan_list() - get a list of chan information
  263. * @vdev: vdev
  264. * @ic_chans: chan information array to get
  265. * @chan_info: pointer to ieee80211_channel_info to get
  266. * @ic_nchans: number of chan information it gets
  267. * @flag_160: flag indicating the API to fill the center frequencies of 160MHz.
  268. * @flag_6ghz: flag indicating the API to include 6 GHz or not
  269. *
  270. * Return: 0 on success, negative errno on failure
  271. */
  272. int os_if_son_get_chan_list(struct wlan_objmgr_vdev *vdev,
  273. struct ieee80211_ath_channel *ic_chans,
  274. struct ieee80211_channel_info *chan_info,
  275. uint8_t *ic_nchans, bool flag_160, bool flag_6ghz);
  276. /**
  277. * os_if_son_get_sta_count() - get connected STA count
  278. * @vdev: vdev
  279. *
  280. * Return: connected STA count
  281. */
  282. uint32_t os_if_son_get_sta_count(struct wlan_objmgr_vdev *vdev);
  283. /**
  284. * os_if_son_get_bssid() - get bssid of given vdev
  285. * @vdev: vdev
  286. * @bssid: pointer to BSSID
  287. *
  288. * Return: 0 if BSSID is gotten successfully
  289. */
  290. int os_if_son_get_bssid(struct wlan_objmgr_vdev *vdev,
  291. uint8_t bssid[QDF_MAC_ADDR_SIZE]);
  292. /**
  293. * os_if_son_get_ssid() - get ssid of given vdev
  294. * @vdev: vdev
  295. * @ssid: pointer to SSID
  296. * @ssid_len: ssid length
  297. *
  298. * Return: 0 if SSID is gotten successfully
  299. */
  300. int os_if_son_get_ssid(struct wlan_objmgr_vdev *vdev,
  301. char ssid[WLAN_SSID_MAX_LEN + 1],
  302. uint8_t *ssid_len);
  303. /**
  304. * os_if_son_set_chan() - set chan
  305. * @vdev: vdev
  306. * @chan: given chan
  307. * @son_band: given band
  308. *
  309. * Return: 0 on success, negative errno on failure
  310. */
  311. int os_if_son_set_chan(struct wlan_objmgr_vdev *vdev,
  312. int chan, enum wlan_band_id son_band);
  313. /**
  314. * os_if_son_set_cac_timeout() - set cac timeout
  315. * @vdev: vdev
  316. * @cac_timeout: cac timeount to set
  317. *
  318. * Return: 0 if cac time out is set successfully
  319. */
  320. int os_if_son_set_cac_timeout(struct wlan_objmgr_vdev *vdev,
  321. int cac_timeout);
  322. /**
  323. * os_if_son_get_cac_timeout() - get cac timeout
  324. * @vdev: vdev
  325. * @cac_timeout: cac timeout to get
  326. *
  327. * Return 0 if cac time out is get successfully
  328. */
  329. int os_if_son_get_cac_timeout(struct wlan_objmgr_vdev *vdev,
  330. int *cac_timeout);
  331. /**
  332. * os_if_son_set_country_code() - set country code
  333. * @vdev: vdev
  334. * @country_code: country code to set
  335. *
  336. * Return: 0 if country code is set successfully
  337. */
  338. int os_if_son_set_country_code(struct wlan_objmgr_vdev *vdev,
  339. char *country_code);
  340. /**
  341. * os_if_son_get_country_code() - get country code
  342. * @vdev: vdev
  343. * @country_code: country code to get
  344. *
  345. * Return: 0 if country code is get successfully
  346. */
  347. int os_if_son_get_country_code(struct wlan_objmgr_vdev *vdev,
  348. char *country_code);
  349. /**
  350. * os_if_son_set_candidate_freq() - set freq to switch after radar detection
  351. * @vdev: vdev
  352. * @freq: freq to switch
  353. *
  354. * Return: 0 if candidate freq is set successfully
  355. */
  356. int os_if_son_set_candidate_freq(struct wlan_objmgr_vdev *vdev,
  357. qdf_freq_t freq);
  358. /**
  359. * os_if_son_get_candidate_freq() - get freq to switch after radar detection
  360. * @vdev: vdev
  361. *
  362. * Return: candidate freq to switch after radar detection
  363. */
  364. qdf_freq_t os_if_son_get_candidate_freq(struct wlan_objmgr_vdev *vdev);
  365. /**
  366. * os_if_son_get_phymode() - get phy mode
  367. * @vdev: vdev
  368. *
  369. * Return: enum ieee80211_phymode
  370. */
  371. enum ieee80211_phymode os_if_son_get_phymode(struct wlan_objmgr_vdev *vdev);
  372. /**
  373. * os_if_son_set_phymode() - set phy mode
  374. * @vdev: vdev
  375. * @mode: son phy mode to set
  376. *
  377. * Return: 0 on success, negative errno on failure
  378. */
  379. int os_if_son_set_phymode(struct wlan_objmgr_vdev *vdev,
  380. enum ieee80211_phymode mode);
  381. /**
  382. * os_if_son_get_phy_stats() - get phy stats
  383. * @vdev: vdev
  384. * @phy_stats: phy stats
  385. *
  386. * Return: void
  387. */
  388. void os_if_son_get_phy_stats(struct wlan_objmgr_vdev *vdev,
  389. struct ol_ath_radiostats *phy_stats);
  390. /**
  391. * os_if_son_cbs_init() - cbs init
  392. *
  393. * Return: 0 on success, negative errno on failure
  394. */
  395. int os_if_son_cbs_init(void);
  396. /**
  397. * os_if_son_cbs_deinit() - cbs deinit
  398. *
  399. * Return: 0 on success, negative errno on failure
  400. */
  401. int os_if_son_cbs_deinit(void);
  402. /**
  403. * os_if_son_set_cbs() - enable cbs or disable
  404. * @vdev: vdev
  405. * @enable: true or false
  406. *
  407. * Return: 0 on success, negative errno on failure
  408. */
  409. int os_if_son_set_cbs(struct wlan_objmgr_vdev *vdev,
  410. bool enable);
  411. /**
  412. * os_if_son_set_cbs_wait_time() - set cbs wait time
  413. * @vdev: vdev
  414. * @val: value
  415. *
  416. * Return: 0 on success, negative errno on failure
  417. */
  418. int os_if_son_set_cbs_wait_time(struct wlan_objmgr_vdev *vdev,
  419. uint32_t val);
  420. /**
  421. * os_if_son_set_cbs_dwell_split_time() - set cbs dwell split time
  422. * @vdev: vdev
  423. * @val: value
  424. *
  425. * Return: 0 on success, negative errno on failure
  426. */
  427. int os_if_son_set_cbs_dwell_split_time(struct wlan_objmgr_vdev *vdev,
  428. uint32_t val);
  429. /**
  430. * os_if_son_get_chan_util() - get chan utilization
  431. * @vdev: vdev
  432. *
  433. * Return: chan utilization (0 - 100)
  434. */
  435. uint8_t os_if_son_get_chan_util(struct wlan_objmgr_vdev *vdev);
  436. /**
  437. * os_if_son_pdev_ops() - Handles PDEV specific SON commands
  438. * @pdev: pdev
  439. * @type: SON command to handle
  440. * @data: Input Data
  441. * @ret: Output Data
  442. *
  443. * Return: QDF_SUCCCESS_SUCCESS in case of success
  444. */
  445. QDF_STATUS os_if_son_pdev_ops(struct wlan_objmgr_pdev *pdev,
  446. enum wlan_mlme_pdev_param type,
  447. void *data, void *ret);
  448. /**
  449. * os_if_son_vdev_ops() - Handles VDEV specific SON commands
  450. * @vdev: vdev
  451. * @type: SON command to handle
  452. * @data: Input Data
  453. * @ret: Output Data
  454. *
  455. * Return: QDF_SUCCCESS_SUCCESS in case of success
  456. */
  457. QDF_STATUS os_if_son_vdev_ops(struct wlan_objmgr_vdev *vdev,
  458. enum wlan_mlme_vdev_param type,
  459. void *data, void *ret);
  460. /**
  461. * os_if_son_peer_ops() - Handles PEER specific SON commands
  462. * @peer: peer
  463. * @type: SON command to handle
  464. * @data: Input Data. Pointer to wlan_mlme_peer_data
  465. * @ret: Output Data. Pointer to wlan_mlme_peer_data
  466. *
  467. * Return: QDF_SUCCCESS_SUCCESS in case of success
  468. */
  469. QDF_STATUS os_if_son_peer_ops(struct wlan_objmgr_peer *peer,
  470. enum wlan_mlme_peer_param type,
  471. union wlan_mlme_peer_data *data,
  472. union wlan_mlme_peer_data *ret);
  473. /**
  474. * os_if_son_scan_db_iterate() - get country code
  475. * @pdev: pdev
  476. * @handler: scan_iterator
  477. * @arg: argument to be passed to handler
  478. *
  479. * Return: QDF_SUCCCESS_SUCCESS in case of success
  480. */
  481. QDF_STATUS os_if_son_scan_db_iterate(struct wlan_objmgr_pdev *pdev,
  482. scan_iterator_func handler, void *arg);
  483. /**
  484. * os_if_son_acl_is_probe_wh_set() - Withheld probes for given mac_addr,
  485. * not supported
  486. * @vdev: vdev
  487. * @mac_addr: 6-Byte MAC address
  488. * @probe_rssi: Probe Request RSSI
  489. *
  490. * Return: true / false
  491. */
  492. bool os_if_son_acl_is_probe_wh_set(struct wlan_objmgr_vdev *vdev,
  493. const uint8_t *mac_addr,
  494. uint8_t probe_rssi);
  495. /**
  496. * os_if_son_get_rx_streams() - Gets number of RX spatial streams
  497. * @vdev: target vdev
  498. *
  499. * Return: number of spatial stream
  500. */
  501. uint8_t os_if_son_get_rx_streams(struct wlan_objmgr_vdev *vdev);
  502. /**
  503. * os_if_son_cfg80211_reply() - replies to cfg80211
  504. * @sk_buf: sk_buff to uper layer
  505. *
  506. * Return: QDF_STATUS_SUCCESS on success
  507. */
  508. QDF_STATUS os_if_son_cfg80211_reply(qdf_nbuf_t sk_buf);
  509. /**
  510. * os_if_son_vdev_is_wds() - checks if wds capability is supported or not
  511. * @vdev: Pointer to vdev
  512. *
  513. * Return: true if wds is supported
  514. */
  515. bool os_if_son_vdev_is_wds(struct wlan_objmgr_vdev *vdev);
  516. /*
  517. * os_if_son_set_acl_policy() - set acl policy
  518. * @vdev: vdev
  519. * @son_acl_policy: son acl policy. enum ieee80211_acl_cmd
  520. *
  521. * Return: QDF_STATUS
  522. */
  523. QDF_STATUS os_if_son_set_acl_policy(struct wlan_objmgr_vdev *vdev,
  524. ieee80211_acl_cmd son_acl_policy);
  525. /**
  526. * os_if_son_get_acl_policy() - get acl policy
  527. * @vdev: vdev
  528. *
  529. * Return: acl policy. enum ieee80211_acl_cmd
  530. */
  531. ieee80211_acl_cmd os_if_son_get_acl_policy(struct wlan_objmgr_vdev *vdev);
  532. /**
  533. * os_if_son_add_acl_mac() - add mac to acl
  534. * @vdev: vdev
  535. * @acl_mac: mac to add
  536. *
  537. * Return: 0 on success, negative errno on failure
  538. */
  539. int os_if_son_add_acl_mac(struct wlan_objmgr_vdev *vdev,
  540. struct qdf_mac_addr *acl_mac);
  541. /**
  542. * os_if_son_get_sta_space() - get sta space
  543. * @vdev: target vdev
  544. *
  545. * Return: bytes which is needed to fill sta information
  546. */
  547. uint32_t os_if_son_get_sta_space(struct wlan_objmgr_vdev *vdev);
  548. /**
  549. * os_if_son_get_sta_list() - get sta list
  550. * @vdev: target vdev
  551. * @si: pointer to ieee80211req_sta_info
  552. * @space: space left
  553. *
  554. * Return: void
  555. */
  556. void os_if_son_get_sta_list(struct wlan_objmgr_vdev *vdev,
  557. struct ieee80211req_sta_info *si, uint32_t *space);
  558. /**
  559. * os_if_son_del_acl_mac() - del mac from acl
  560. * @vdev: vdev
  561. * @acl_mac: mac to del
  562. *
  563. * Return: 0 on success, negative errno on failure
  564. */
  565. int os_if_son_del_acl_mac(struct wlan_objmgr_vdev *vdev,
  566. struct qdf_mac_addr *acl_mac);
  567. /**
  568. * os_if_son_kickout_mac() - kickout sta with given mac
  569. * @vdev: vdev
  570. * @mac: sta mac to kickout
  571. *
  572. * Return: 0 on success, negative errno on failure
  573. */
  574. int os_if_son_kickout_mac(struct wlan_objmgr_vdev *vdev,
  575. struct qdf_mac_addr *mac);
  576. /**
  577. * os_if_son_set_chwidth() - set chan width
  578. * @vdev: vdev
  579. * @son_chwidth: son chan width
  580. *
  581. * Return: 0 on success, negative errno on failure
  582. */
  583. int os_if_son_set_chwidth(struct wlan_objmgr_vdev *vdev,
  584. enum ieee80211_cwm_width son_chwidth);
  585. /**
  586. * os_if_son_get_chwidth() - get chan width
  587. * @vdev: vdev
  588. *
  589. * Return: son chan width
  590. */
  591. enum ieee80211_cwm_width os_if_son_get_chwidth(struct wlan_objmgr_vdev *vdev);
  592. /**
  593. * os_if_son_deauth_peer_sta - Deauths specified STA
  594. * @vdev: vdev
  595. * @peer_mac: Target peer MAC address
  596. * @ignore_frame: True to silently deauth the peer
  597. *
  598. * Return: void
  599. */
  600. void os_if_son_deauth_peer_sta(struct wlan_objmgr_vdev *vdev,
  601. uint8_t *peer_mac,
  602. bool ignore_frame);
  603. /**
  604. * os_if_son_modify_acl - Updates ACL with given peer
  605. * @vdev: vdev
  606. * @peer_mac: Target peer MAC address
  607. * @allow_auth: True to allow specified peer to connect
  608. *
  609. * Return: void
  610. */
  611. void os_if_son_modify_acl(struct wlan_objmgr_vdev *vdev,
  612. uint8_t *peer_mac,
  613. bool allow_auth);
  614. /**
  615. * os_if_son_deliver_ald_event() - deliver ald events to son
  616. * @vdev: vdev object
  617. * @peer: peer object
  618. * @event: Name of the event
  619. * @event_data: event data
  620. *
  621. * Return: 0 on success
  622. */
  623. int os_if_son_deliver_ald_event(struct wlan_objmgr_vdev *vdev,
  624. struct wlan_objmgr_peer *peer,
  625. enum ieee80211_event_type event,
  626. void *event_data);
  627. /**
  628. * os_if_son_get_vdev_by_netdev() - Get vdev from net device
  629. * @dev: net device struct
  630. *
  631. * Return: objmgr vdev on success else NULL
  632. */
  633. struct wlan_objmgr_vdev *os_if_son_get_vdev_by_netdev(struct net_device *dev);
  634. /**
  635. * os_if_son_trigger_objmgr_object_deletion() - Trigger objmgr object deletion
  636. * @id: umac component id
  637. *
  638. * Return: QDF_STATUS_SUCCESS on success
  639. */
  640. QDF_STATUS os_if_son_trigger_objmgr_object_deletion(enum wlan_umac_comp_id id);
  641. /**
  642. * os_if_son_trigger_objmgr_object_creation() - Trigger objmgr object creation
  643. * @id: umac component id
  644. *
  645. * Return: QDF_STATUS_SUCCESS on success
  646. */
  647. QDF_STATUS os_if_son_trigger_objmgr_object_creation(enum wlan_umac_comp_id id);
  648. /**
  649. * os_if_son_start_acs() - Triggers ACS on the target vdev
  650. * @vdev: target vdev
  651. * @enable: True - to start ACS
  652. *
  653. * Return: 0 on success
  654. */
  655. int os_if_son_start_acs(struct wlan_objmgr_vdev *vdev, uint8_t enable);
  656. /**
  657. * os_if_son_set_acs_chan() - Set channel list for ACS
  658. * @vdev: target vdev
  659. * @req: channel list
  660. *
  661. * Return: 0 on success
  662. */
  663. int os_if_son_set_acs_chan(struct wlan_objmgr_vdev *vdev,
  664. struct ieee80211req_athdbg *req);
  665. /**
  666. * os_if_son_get_acs_report() - Get ACS report
  667. * @vdev: target vdev
  668. * @acs_r: ACS report structure
  669. *
  670. * Return: 0 on success
  671. */
  672. int os_if_son_get_acs_report(struct wlan_objmgr_vdev *vdev,
  673. struct ieee80211_acs_dbg *acs_r);
  674. /**
  675. * os_if_son_parse_generic_nl_cmd() - Sends the Generic vendor commands
  676. * to SON.
  677. * @wiphy: Standard wiphy object
  678. * @wdev: wireless device
  679. * @tb: Command type structure pointer
  680. * @type: Get/Set command
  681. *
  682. * This function parses the GENERIC vendor commands received from
  683. * userspace then sends the extracted data to SON module for further
  684. * processing along with wiphy, wdev, extected structure - param
  685. * and command type i.e. GET / SET. Each of the GENERIC commands are
  686. * interdependent and hence in SON module, they will be further
  687. * parsed based on type i.e. GET / SET.
  688. *
  689. * Return: 0 on success
  690. */
  691. int os_if_son_parse_generic_nl_cmd(struct wiphy *wiphy,
  692. struct wireless_dev *wdev,
  693. struct nlattr **tb,
  694. enum os_if_son_vendor_cmd_type type);
  695. /**
  696. * os_if_son_get_node_datarate_info() - Get datarate info about given mac
  697. * @vdev: vdev_obj
  698. * @mac_addr: mac_address to get datarate information
  699. * @node_info: object to store datarate information
  700. *
  701. * Return: void
  702. */
  703. QDF_STATUS os_if_son_get_node_datarate_info(struct wlan_objmgr_vdev *vdev,
  704. uint8_t *mac_addr,
  705. wlan_node_info *node_info);
  706. /**
  707. * os_if_son_get_peer_max_mcs_idx() - Get max mcs index of the peer
  708. * @vdev: vdev obj
  709. * @peer: peer obj
  710. *
  711. * Return: max mcs index on success / 0 on failure
  712. */
  713. uint32_t os_if_son_get_peer_max_mcs_idx(struct wlan_objmgr_vdev *vdev,
  714. struct wlan_objmgr_peer *peer);
  715. /**
  716. * os_if_son_get_sta_stats() - get connected sta rssi and estimated data rate
  717. * @vdev: pointer to vdev
  718. * @mac_addr: connected sta mac addr
  719. * @stats: pointer to ieee80211_nodestats
  720. *
  721. * Return: 0 on success, negative errno on failure
  722. */
  723. int os_if_son_get_sta_stats(struct wlan_objmgr_vdev *vdev, uint8_t *mac_addr,
  724. struct ieee80211_nodestats *stats);
  725. #endif