os_if_son.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. /*
  2. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. */
  15. /**
  16. * DOC : os_if_son.h
  17. *
  18. * WLAN Host Device Driver file for son (Self Organizing Network)
  19. * support.
  20. *
  21. */
  22. #ifndef _OS_IF_SON_H_
  23. #define _OS_IF_SON_H_
  24. #include <qdf_types.h>
  25. #include <wlan_objmgr_vdev_obj.h>
  26. #include <wlan_objmgr_psoc_obj.h>
  27. #include <wlan_objmgr_pdev_obj.h>
  28. #include <wlan_reg_ucfg_api.h>
  29. #include <ieee80211_external.h>
  30. /**
  31. * struct son_callbacks - struct containing callback to non-converged driver
  32. * @os_if_is_acs_in_progress: whether acs is in progress or not
  33. * @os_if_set_chan_ext_offset: set chan extend offset
  34. * @os_if_get_chan_ext_offset: get chan extend offset
  35. * @os_if_set_bandwidth: set band width
  36. * @os_if_get_bandwidth: get band width
  37. * @os_if_set_chan: set chan
  38. * @os_if_set_country_code: set country code
  39. * @os_if_set_candidate_freq: set freq to switch after radar detection
  40. * @os_if_get_candidate_freq: get freq to switch after radar detection
  41. * @os_if_set_phymode: set phy mode
  42. * @os_if_get_phymode: get phy mode
  43. * @os_if_get_rx_nss: Gets number of RX spatial streams
  44. * @os_if_set_acl_policy: set acl policy
  45. * @os_if_get_acl_policy: get acl policy
  46. * @os_if_add_acl_mac: add mac to acl
  47. * @os_if_del_acl_mac: del mac from acl
  48. * @os_if_kickout_mac: kickout sta with given mac
  49. */
  50. struct son_callbacks {
  51. uint32_t (*os_if_is_acs_in_progress)(struct wlan_objmgr_vdev *vdev);
  52. int (*os_if_set_chan_ext_offset)(
  53. struct wlan_objmgr_vdev *vdev,
  54. enum sec20_chan_offset son_chan_ext_offset);
  55. enum sec20_chan_offset (*os_if_get_chan_ext_offset)(
  56. struct wlan_objmgr_vdev *vdev);
  57. int (*os_if_set_bandwidth)(struct wlan_objmgr_vdev *vdev,
  58. uint32_t son_bandwidth);
  59. uint32_t (*os_if_get_bandwidth)(struct wlan_objmgr_vdev *vdev);
  60. int (*os_if_set_chan)(struct wlan_objmgr_vdev *vdev, int chan,
  61. enum wlan_band_id son_band);
  62. uint32_t (*os_if_get_sta_count)(struct wlan_objmgr_vdev *vdev);
  63. int (*os_if_set_country_code)(struct wlan_objmgr_vdev *vdev,
  64. char *country_code);
  65. int (*os_if_set_candidate_freq)(struct wlan_objmgr_vdev *vdev,
  66. qdf_freq_t freq);
  67. qdf_freq_t (*os_if_get_candidate_freq)(struct wlan_objmgr_vdev *vdev);
  68. int (*os_if_set_phymode)(struct wlan_objmgr_vdev *vdev,
  69. enum ieee80211_phymode mode);
  70. enum ieee80211_phymode (*os_if_get_phymode)(
  71. struct wlan_objmgr_vdev *vdev);
  72. uint8_t (*os_if_get_rx_nss)(struct wlan_objmgr_vdev *vdev);
  73. QDF_STATUS (*os_if_set_acl_policy)(struct wlan_objmgr_vdev *vdev,
  74. ieee80211_acl_cmd son_acl_policy);
  75. ieee80211_acl_cmd (*os_if_get_acl_policy)(
  76. struct wlan_objmgr_vdev *vdev);
  77. int (*os_if_add_acl_mac)(struct wlan_objmgr_vdev *vdev,
  78. struct qdf_mac_addr *acl_mac);
  79. int (*os_if_del_acl_mac)(struct wlan_objmgr_vdev *vdev,
  80. struct qdf_mac_addr *acl_mac);
  81. int (*os_if_kickout_mac)(struct wlan_objmgr_vdev *vdev,
  82. struct qdf_mac_addr *acl_mac);
  83. };
  84. /**
  85. * os_if_son_register_hdd_callbacks() - register son hdd callback
  86. * @psoc: psoc
  87. * @cb_obj: pointer to callback
  88. *
  89. * Return: void
  90. */
  91. void os_if_son_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
  92. struct son_callbacks *cb_obj);
  93. /**
  94. * os_if_son_get_freq() - get freq
  95. * @vdev: vdev
  96. *
  97. * Return: freq of given vdev
  98. */
  99. qdf_freq_t os_if_son_get_freq(struct wlan_objmgr_vdev *vdev);
  100. /**
  101. * os_if_son_is_acs_in_progress() - whether ACS in progress or not
  102. * @vdev: vdev
  103. *
  104. * Return: true if ACS is in progress
  105. */
  106. uint32_t os_if_son_is_acs_in_progress(struct wlan_objmgr_vdev *vdev);
  107. /**
  108. * os_if_son_is_cac_in_progress() - whether CAC is in progress or not
  109. * @vdev: vdev
  110. *
  111. * Return: true if CAC is in progress
  112. */
  113. uint32_t os_if_son_is_cac_in_progress(struct wlan_objmgr_vdev *vdev);
  114. /**
  115. * os_if_son_set_chan_ext_offset() - set chan extend offset
  116. * @vdev: vdev
  117. * @son_chan_ext_offset son chan extend offset
  118. *
  119. * Return: 0 on success, negative errno on failure
  120. */
  121. int os_if_son_set_chan_ext_offset(struct wlan_objmgr_vdev *vdev,
  122. enum sec20_chan_offset son_chan_ext_offset);
  123. /**
  124. * os_if_son_get_chan_ext_offset() - get chan extend offset
  125. * @vdev: vdev
  126. *
  127. * Return: enum sec20_chan_offset
  128. */
  129. enum sec20_chan_offset os_if_son_get_chan_ext_offset(
  130. struct wlan_objmgr_vdev *vdev);
  131. /**
  132. * os_if_son_set_bandwidth() - set band width
  133. * @vdev: vdev
  134. * @son_bandwidth: band width
  135. *
  136. * Return: 0 on success, negative errno on failure
  137. */
  138. int os_if_son_set_bandwidth(struct wlan_objmgr_vdev *vdev,
  139. uint32_t son_bandwidth);
  140. /**
  141. * os_if_son_get_bandwidth() - get band width
  142. * @vdev: vdev
  143. *
  144. * Return: band width
  145. */
  146. uint32_t os_if_son_get_bandwidth(struct wlan_objmgr_vdev *vdev);
  147. /**
  148. * os_if_son_get_band_info() - get band info
  149. * @vdev: vdev
  150. *
  151. * Return: band info
  152. */
  153. uint32_t os_if_son_get_band_info(struct wlan_objmgr_vdev *vdev);
  154. /**
  155. * os_if_son_get_chan_list() - get a list of chan information
  156. * @vdev: vdev
  157. * @ic_chans: chan information array to get
  158. * @chan_info: pointer to ieee80211_channel_info to get
  159. * @ic_nchans: number of chan information it gets
  160. * @flag_160: flag indicating the API to fill the center frequencies of 160MHz.
  161. *
  162. * Return: 0 on success, negative errno on failure
  163. */
  164. int os_if_son_get_chan_list(struct wlan_objmgr_vdev *vdev,
  165. struct ieee80211_ath_channel *ic_chans,
  166. struct ieee80211_channel_info *chan_info,
  167. uint8_t *ic_nchans, bool flag_160);
  168. /**
  169. * os_if_son_get_sta_count() - get connected STA count
  170. * @vdev: vdev
  171. *
  172. * Return: connected STA count
  173. */
  174. uint32_t os_if_son_get_sta_count(struct wlan_objmgr_vdev *vdev);
  175. /**
  176. * os_if_son_get_bssid() - get bssid of given vdev
  177. * @vdev: vdev
  178. * @bssid: pointer to BSSID
  179. *
  180. * Return: 0 if BSSID is gotten successfully
  181. */
  182. int os_if_son_get_bssid(struct wlan_objmgr_vdev *vdev,
  183. uint8_t bssid[QDF_MAC_ADDR_SIZE]);
  184. /**
  185. * os_if_son_get_ssid() - get ssid of given vdev
  186. * @vdev: vdev
  187. * @ssid: pointer to SSID
  188. * @ssid_len: ssid length
  189. *
  190. * Return: 0 if SSID is gotten successfully
  191. */
  192. int os_if_son_get_ssid(struct wlan_objmgr_vdev *vdev,
  193. char ssid[WLAN_SSID_MAX_LEN + 1],
  194. uint8_t *ssid_len);
  195. /**
  196. * os_if_son_set_chan() - set chan
  197. * @vdev: vdev
  198. * @chan: given chan
  199. * @son_band: given band
  200. *
  201. * Return: 0 on success, negative errno on failure
  202. */
  203. int os_if_son_set_chan(struct wlan_objmgr_vdev *vdev,
  204. int chan, enum wlan_band_id son_band);
  205. /**
  206. * os_if_son_set_cac_timeout() - set cac timeout
  207. * @vdev: vdev
  208. * @cac_timeout: cac timeount to set
  209. *
  210. * Return: 0 if cac time out is set successfully
  211. */
  212. int os_if_son_set_cac_timeout(struct wlan_objmgr_vdev *vdev,
  213. int cac_timeout);
  214. /**
  215. * os_if_son_get_cac_timeout() - get cac timeout
  216. * @vdev: vdev
  217. * @cac_timeout: cac timeout to get
  218. *
  219. * Return 0 if cac time out is get successfully
  220. */
  221. int os_if_son_get_cac_timeout(struct wlan_objmgr_vdev *vdev,
  222. int *cac_timeout);
  223. /**
  224. * os_if_son_set_country_code() - set country code
  225. * @vdev: vdev
  226. * @country_code: country code to set
  227. *
  228. * Return: 0 if country code is set successfully
  229. */
  230. int os_if_son_set_country_code(struct wlan_objmgr_vdev *vdev,
  231. char *country_code);
  232. /**
  233. * os_if_son_get_country_code() - get country code
  234. * @vdev: vdev
  235. * @country_code: country code to get
  236. *
  237. * Return: 0 if country code is get successfully
  238. */
  239. int os_if_son_get_country_code(struct wlan_objmgr_vdev *vdev,
  240. char *country_code);
  241. /**
  242. * os_if_son_set_candidate_freq() - set freq to switch after radar detection
  243. * @vdev: vdev
  244. * @freq: freq to switch
  245. *
  246. * Return: 0 if candidate freq is set successfully
  247. */
  248. int os_if_son_set_candidate_freq(struct wlan_objmgr_vdev *vdev,
  249. qdf_freq_t freq);
  250. /**
  251. * os_if_son_get_candidate_freq() - get freq to switch after radar detection
  252. * @vdev: vdev
  253. *
  254. * Return: candidate freq to switch after radar detection
  255. */
  256. qdf_freq_t os_if_son_get_candidate_freq(struct wlan_objmgr_vdev *vdev);
  257. /**
  258. * os_if_son_get_phymode() - get phy mode
  259. * @vdev: vdev
  260. *
  261. * Return: enum ieee80211_phymode
  262. */
  263. enum ieee80211_phymode os_if_son_get_phymode(struct wlan_objmgr_vdev *vdev);
  264. /**
  265. * os_if_son_set_phymode() - set phy mode
  266. * @vdev: vdev
  267. * @mode: son phy mode to set
  268. *
  269. * Return: 0 on success, negative errno on failure
  270. */
  271. int os_if_son_set_phymode(struct wlan_objmgr_vdev *vdev,
  272. enum ieee80211_phymode mode);
  273. /**
  274. * os_if_son_pdev_ops() - Handles PDEV specific SON commands
  275. * @pdev: pdev
  276. * @type: SON command to handle
  277. * @data: Input Data
  278. * @ret: Output Data
  279. *
  280. * Return: QDF_SUCCCESS_SUCCESS in case of success
  281. */
  282. QDF_STATUS os_if_son_pdev_ops(struct wlan_objmgr_pdev *pdev,
  283. enum wlan_mlme_pdev_param type,
  284. void *data, void *ret);
  285. /**
  286. * os_if_son_vdev_ops() - Handles VDEV specific SON commands
  287. * @vdev: vdev
  288. * @type: SON command to handle
  289. * @data: Input Data
  290. * @ret: Output Data
  291. *
  292. * Return: QDF_SUCCCESS_SUCCESS in case of success
  293. */
  294. QDF_STATUS os_if_son_vdev_ops(struct wlan_objmgr_vdev *pdev,
  295. enum wlan_mlme_vdev_param type,
  296. void *data, void *ret);
  297. /**
  298. * os_if_son_peer_ops() - Handles PEER specific SON commands
  299. * @peer: peer
  300. * @type: SON command to handle
  301. * @data: Input Data. Pointer to wlan_mlme_peer_data
  302. * @ret: Output Data. Pointer to wlan_mlme_peer_data
  303. *
  304. * Return: QDF_SUCCCESS_SUCCESS in case of success
  305. */
  306. QDF_STATUS os_if_son_peer_ops(struct wlan_objmgr_peer *peer,
  307. enum wlan_mlme_peer_param type,
  308. union wlan_mlme_peer_data *data,
  309. union wlan_mlme_peer_data *ret);
  310. /**
  311. * os_if_son_scan_db_iterate() - get country code
  312. * @pdev: pdev
  313. * @handler: scan_iterator
  314. * @arg: argument to be passed to handler
  315. *
  316. * Return: QDF_SUCCCESS_SUCCESS in case of success
  317. */
  318. QDF_STATUS os_if_son_scan_db_iterate(struct wlan_objmgr_pdev *pdev,
  319. scan_iterator_func handler, void *arg);
  320. /**
  321. * os_if_son_acl_is_probe_wh_set() - Withheld probes for given mac_addr,
  322. * not supported
  323. * @vdev: vdev
  324. * @mac_addr: 6-Byte MAC address
  325. * @probe_rssi: Probe Request RSSI
  326. *
  327. * Return: true / false
  328. */
  329. bool os_if_son_acl_is_probe_wh_set(struct wlan_objmgr_vdev *vdev,
  330. const uint8_t *mac_addr,
  331. uint8_t probe_rssi);
  332. /**
  333. * os_if_son_get_rx_streams() - Gets number of RX spatial streams
  334. * @vdev: target vdev
  335. *
  336. * Return: number of spatial stream
  337. */
  338. uint8_t os_if_son_get_rx_streams(struct wlan_objmgr_vdev *vdev);
  339. /**
  340. * os_if_son_cfg80211_reply() - replies to cfg80211
  341. * @sk_buf: sk_buff to uper layer
  342. *
  343. * Return: QDF_STATUS_SUCCESS on success
  344. */
  345. QDF_STATUS os_if_son_cfg80211_reply(qdf_nbuf_t sk_buf);
  346. /**
  347. * os_if_son_vdev_is_wds() - checks if wds capability is supported or not
  348. * @vdev: Pointer to vdev
  349. *
  350. * Return: true if wds is supported
  351. */
  352. bool os_if_son_vdev_is_wds(struct wlan_objmgr_vdev *vdev);
  353. /*
  354. * os_if_son_set_acl_policy() - set acl policy
  355. * @vdev: vdev
  356. * @son_acl_policy: son acl policy. enum ieee80211_acl_cmd
  357. *
  358. * Return: QDF_STATUS
  359. */
  360. QDF_STATUS os_if_son_set_acl_policy(struct wlan_objmgr_vdev *vdev,
  361. ieee80211_acl_cmd son_acl_policy);
  362. /**
  363. * os_if_son_get_acl_policy() - get acl policy
  364. * @vdev: vdev
  365. *
  366. * Return: acl policy. enum ieee80211_acl_cmd
  367. */
  368. ieee80211_acl_cmd os_if_son_get_acl_policy(struct wlan_objmgr_vdev *vdev);
  369. /**
  370. * os_if_son_add_acl_mac() - add mac to acl
  371. * @vdev: vdev
  372. * @acl_mac: mac to add
  373. *
  374. * Return: 0 on success, negative errno on failure
  375. */
  376. int os_if_son_add_acl_mac(struct wlan_objmgr_vdev *vdev,
  377. struct qdf_mac_addr *acl_mac);
  378. /**
  379. * os_if_son_del_acl_mac() - del mac from acl
  380. * @vdev: vdev
  381. * @acl_mac: mac to del
  382. *
  383. * Return: 0 on success, negative errno on failure
  384. */
  385. int os_if_son_del_acl_mac(struct wlan_objmgr_vdev *vdev,
  386. struct qdf_mac_addr *acl_mac);
  387. /**
  388. * os_if_son_kickout_mac() - kickout sta with given mac
  389. * @vdev: vdev
  390. * @acl_mac: sta mac to kickout
  391. *
  392. * Return: 0 on success, negative errno on failure
  393. */
  394. int os_if_son_kickout_mac(struct wlan_objmgr_vdev *vdev,
  395. struct qdf_mac_addr *mac);
  396. #endif