os_if_son.h 23 KB

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