wlan_utility.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /*
  2. * Copyright (c) 2017-2018 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: Contains mandatory API from legacy
  20. */
  21. #ifndef _WLAN_UTILITY_H_
  22. #define _WLAN_UTILITY_H_
  23. #include <qdf_types.h>
  24. #include <wlan_objmgr_psoc_obj.h>
  25. #include <wlan_objmgr_pdev_obj.h>
  26. #include <wlan_objmgr_vdev_obj.h>
  27. /**
  28. * struct wlan_find_vdev_filter - find vdev filter object. this can be extended
  29. * @ifname: interface name of vdev
  30. * @found_vdev: found vdev object matching one or more of above params
  31. */
  32. struct wlan_find_vdev_filter {
  33. char *ifname;
  34. struct wlan_objmgr_vdev *found_vdev;
  35. };
  36. #ifdef CMN_VDEV_MLME_SM_ENABLE
  37. /**
  38. * struct wlan_vdev_ch_check_filter - vdev chan check filter object
  39. * @flag: matches or not
  40. * @vdev: vdev to be checked against all the active vdevs
  41. */
  42. struct wlan_vdev_ch_check_filter {
  43. uint8_t flag;
  44. struct wlan_objmgr_vdev *vdev;
  45. };
  46. #endif
  47. /**
  48. * wlan_chan_to_freq() - converts channel to frequency
  49. * @chan: channel number
  50. *
  51. * @return frequency of the channel
  52. */
  53. uint32_t wlan_chan_to_freq(uint8_t chan);
  54. /**
  55. * wlan_freq_to_chan() - converts frequency to channel
  56. * @freq: frequency
  57. *
  58. * Return: channel of frequency
  59. */
  60. uint8_t wlan_freq_to_chan(uint32_t freq);
  61. /**
  62. * wlan_is_ie_valid() - Determine if an IE sequence is valid
  63. * @ie: Pointer to the IE buffer
  64. * @ie_len: Length of the IE buffer @ie
  65. *
  66. * This function validates that the IE sequence is valid by verifying
  67. * that the sum of the lengths of the embedded elements match the
  68. * length of the sequence.
  69. *
  70. * Note well that a 0-length IE sequence is considered valid.
  71. *
  72. * Return: true if the IE sequence is valid, false if it is invalid
  73. */
  74. bool wlan_is_ie_valid(const uint8_t *ie, size_t ie_len);
  75. /**
  76. * wlan_get_ie_ptr_from_eid() - Find out ie from eid
  77. * @eid: element id
  78. * @ie: source ie address
  79. * @ie_len: source ie length
  80. *
  81. * Return: vendor ie address - success
  82. * NULL - failure
  83. */
  84. const uint8_t *wlan_get_ie_ptr_from_eid(uint8_t eid,
  85. const uint8_t *ie,
  86. int ie_len);
  87. /**
  88. * wlan_get_vendor_ie_ptr_from_oui() - Find out vendor ie
  89. * @oui: oui buffer
  90. * @oui_size: oui size
  91. * @ie: source ie address
  92. * @ie_len: source ie length
  93. *
  94. * This function find out vendor ie by pass source ie and vendor oui.
  95. *
  96. * Return: vendor ie address - success
  97. * NULL - failure
  98. */
  99. const uint8_t *wlan_get_vendor_ie_ptr_from_oui(const uint8_t *oui,
  100. uint8_t oui_size,
  101. const uint8_t *ie,
  102. uint16_t ie_len);
  103. /**
  104. * wlan_get_ext_ie_ptr_from_ext_id() - Find out ext ie
  105. * @oui: oui buffer
  106. * @oui_size: oui size
  107. * @ie: source ie address
  108. * @ie_len: source ie length
  109. *
  110. * This function find out ext ie from ext id (passed oui)
  111. *
  112. * Return: vendor ie address - success
  113. * NULL - failure
  114. */
  115. const uint8_t *wlan_get_ext_ie_ptr_from_ext_id(const uint8_t *oui,
  116. uint8_t oui_size,
  117. const uint8_t *ie,
  118. uint16_t ie_len);
  119. /**
  120. * wlan_is_emulation_platform() - check if platform is emulation based
  121. * @phy_version - psoc nif phy_version
  122. *
  123. * Return: boolean value based on platform type
  124. */
  125. bool wlan_is_emulation_platform(uint32_t phy_version);
  126. /**
  127. * wlan_get_pdev_id_from_vdev_id() - Helper func to derive pdev id from vdev_id
  128. * @psoc: psoc object
  129. * @vdev_id: vdev identifier
  130. * @dbg_id: object manager debug id
  131. *
  132. * This function is used to derive the pdev id from vdev id for a psoc
  133. *
  134. * Return : pdev_id - +ve integer for success and WLAN_INVALID_PDEV_ID
  135. * for failure
  136. */
  137. uint32_t wlan_get_pdev_id_from_vdev_id(struct wlan_objmgr_psoc *psoc,
  138. uint8_t vdev_id,
  139. wlan_objmgr_ref_dbgid dbg_id);
  140. /**
  141. * wlan_util_get_vdev_by_ifname() - function to return vdev object from psoc
  142. * matching given interface name
  143. * @psoc: psoc object
  144. * @ifname: interface name
  145. * @ref_id: object manager ref id
  146. *
  147. * This function returns vdev object from psoc by interface name. If found this
  148. * will also take reference with given ref_id
  149. *
  150. * Return : vdev object if found, NULL otherwise
  151. */
  152. struct wlan_objmgr_vdev *wlan_util_get_vdev_by_ifname(
  153. struct wlan_objmgr_psoc *psoc, char *ifname,
  154. wlan_objmgr_ref_dbgid ref_id);
  155. /**
  156. * wlan_util_vdev_get_if_name() - get vdev's interface name
  157. * @vdev: VDEV object
  158. *
  159. * API to get vdev's interface name
  160. *
  161. * Return:
  162. * @id: vdev's interface name
  163. */
  164. uint8_t *wlan_util_vdev_get_if_name(struct wlan_objmgr_vdev *vdev);
  165. /*
  166. * wlan_util_is_vdev_active() - Check for vdev active
  167. * @pdev: pdev pointer
  168. * @dbg_id: debug id for ref counting
  169. *
  170. * @Return: QDF_STATUS_SUCCESS in case of vdev active
  171. */
  172. QDF_STATUS wlan_util_is_vdev_active(struct wlan_objmgr_pdev *pdev,
  173. wlan_objmgr_ref_dbgid dbg_id);
  174. /*
  175. * wlan_vdev_is_up() - Check for vdev is in UP state
  176. * @vdev: vdev pointer
  177. *
  178. * @Return: true in case of vdev is in UP state
  179. */
  180. bool wlan_vdev_is_up(struct wlan_objmgr_vdev *vdev);
  181. /**
  182. * wlan_util_pdev_vdevs_deschan_match() - function to check des channel matches
  183. * with other vdevs in pdev
  184. * @pdev: pdev object
  185. * @vdev: vdev object
  186. * @ref_id: object manager ref id
  187. *
  188. * This function checks the vdev desired channel with other vdev channels
  189. *
  190. * Return : SUCCESS, if it matches, otherwise FAILURE
  191. */
  192. QDF_STATUS wlan_util_pdev_vdevs_deschan_match(struct wlan_objmgr_pdev *pdev,
  193. struct wlan_objmgr_vdev *vdev,
  194. wlan_objmgr_ref_dbgid dbg_id);
  195. /**
  196. * wlan_util_change_map_index() - function to set/reset given index bit
  197. * @map: bitmpap
  198. * @id: bit index
  199. * @set: 1 for set, 0 of reset
  200. *
  201. * This function set/reset given index bit
  202. *
  203. * Return : void
  204. */
  205. void wlan_util_change_map_index(uint32_t *map, uint8_t id, uint8_t set);
  206. /**
  207. * wlan_util_map_index_is_set() - function to check whether given index bit is
  208. * set
  209. * @map: bitmpap
  210. * @id: bit index
  211. *
  212. * This function checks the given index bit is set
  213. *
  214. * Return : true, if bit is set, otherwise false
  215. */
  216. bool wlan_util_map_index_is_set(uint32_t *map, uint8_t id);
  217. /**
  218. * wlan_pdev_chan_change_pending_vdevs() - function to test/set channel change
  219. * pending flag
  220. * @pdev: pdev object
  221. * @vdev_id_map: bitmap to derive channel change vdevs
  222. * @ref_id: object manager ref id
  223. *
  224. * This function test/set channel change pending flag
  225. *
  226. * Return : SUCCESS, if it iterates through all vdevs, otherwise FAILURE
  227. */
  228. QDF_STATUS wlan_pdev_chan_change_pending_vdevs(struct wlan_objmgr_pdev *pdev,
  229. uint32_t *vdev_id_map,
  230. wlan_objmgr_ref_dbgid dbg_id);
  231. /**
  232. * wlan_chan_eq() - function to check whether both channels are same
  233. * @chan1: channel1 object
  234. * @chan2: channel2 object
  235. *
  236. * This function checks the chan1 and chan2 are same
  237. *
  238. * Return : SUCCESS, if it matches, otherwise FAILURE
  239. */
  240. QDF_STATUS wlan_chan_eq(struct wlan_channel *chan1, struct wlan_channel *chan2);
  241. #endif /* _WLAN_UTILITY_H_ */