wlan_cfg80211.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. /*
  2. * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for
  6. * any purpose with or without fee is hereby granted, provided that the
  7. * above copyright notice and this permission notice appear in all
  8. * copies.
  9. *
  10. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  11. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  12. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  13. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  14. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  15. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  16. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  17. * PERFORMANCE OF THIS SOFTWARE.
  18. */
  19. /**
  20. * DOC: declares driver functions interfacing with linux kernel
  21. */
  22. #ifndef _WLAN_CFG80211_H_
  23. #define _WLAN_CFG80211_H_
  24. #include <linux/version.h>
  25. #include <linux/netdevice.h>
  26. #include <net/netlink.h>
  27. #include <net/cfg80211.h>
  28. #include <qca_vendor.h>
  29. #include <qdf_nbuf.h>
  30. #include "qal_devcfg.h"
  31. #include "wlan_osif_features.h"
  32. #define osif_alert(params...) \
  33. QDF_TRACE_FATAL(QDF_MODULE_ID_OS_IF, params)
  34. #define osif_err(params...) \
  35. QDF_TRACE_ERROR(QDF_MODULE_ID_OS_IF, params)
  36. #define osif_warn(params...) \
  37. QDF_TRACE_WARN(QDF_MODULE_ID_OS_IF, params)
  38. #define osif_notice(params...) \
  39. QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params)
  40. #define osif_info(params...) \
  41. QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params)
  42. #define osif_debug(params...) \
  43. QDF_TRACE_DEBUG(QDF_MODULE_ID_OS_IF, params)
  44. #define osif_rl_debug(params...) \
  45. QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_OS_IF, params)
  46. #define osif_err_rl(params...) \
  47. QDF_TRACE_ERROR_RL(QDF_MODULE_ID_OS_IF, params)
  48. #define osif_nofl_alert(params...) \
  49. QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_OS_IF, params)
  50. #define osif_nofl_err(params...) \
  51. QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_OS_IF, params)
  52. #define osif_nofl_warn(params...) \
  53. QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_OS_IF, params)
  54. #define osif_nofl_info(params...) \
  55. QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_OS_IF, params)
  56. #define osif_nofl_debug(params...) \
  57. QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_OS_IF, params)
  58. #define osif_enter_dev(dev) \
  59. QDF_TRACE_ENTER(QDF_MODULE_ID_OS_IF, "enter(%s)", (dev)->name)
  60. /**
  61. * enum qca_nl80211_vendor_subcmds_index - vendor sub commands index
  62. *
  63. * @QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY_INDEX: Avoid frequency
  64. * @QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX: Nan
  65. * @QCA_NL80211_VENDOR_SUBCMD_STATS_EXT_INDEX: Ext stats
  66. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START_INDEX: Ext scan start
  67. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP_INDEX: Ext scan stop
  68. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES_INDEX: Ext scan get
  69. * capability
  70. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS_INDEX: Ext scan get
  71. * cached results
  72. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_RESULTS_AVAILABLE_INDEX: Ext scan
  73. * results available
  74. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_FULL_SCAN_RESULT_INDEX: Ext scan full
  75. * scan result
  76. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_EVENT_INDEX: Ext scan event
  77. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_FOUND_INDEX: Ext scan hot list
  78. * AP found
  79. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST_INDEX: Ext scan set
  80. * bssid hotlist
  81. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST_INDEX: Ext scan reset
  82. * bssid hotlist
  83. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX: Ext scan
  84. * significant change
  85. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX: Ext scan
  86. * set significant change
  87. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX: Ext scan
  88. * reset significant change
  89. * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET_INDEX: Set stats
  90. * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET_INDEX: Get stats
  91. * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_CLR_INDEX: Clear stats
  92. * @QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX: Radio stats
  93. * @QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX: Iface stats
  94. * @QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX: Peer info stats
  95. * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX: MAC layer counters
  96. * @QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX: Ext tdls state change
  97. * @QCA_NL80211_VENDOR_SUBCMD_DO_ACS_INDEX: ACS command
  98. * @QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX: Pass Roam and Auth info
  99. * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_STARTED_INDEX:
  100. * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_FINISHED_INDEX:
  101. * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_ABORTED_INDEX:
  102. * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_NOP_FINISHED_INDEX:
  103. * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_RADAR_DETECTED_INDEX:
  104. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX: hotlist ap lost
  105. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_NETWORK_FOUND_INDEX:
  106. * pno network found index
  107. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND_INDEX:
  108. * passpoint match found index
  109. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX:
  110. * set ssid hotlist index
  111. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX:
  112. * reset ssid hotlist index
  113. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX:
  114. * hotlist ssid found index
  115. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX:
  116. * hotlist ssid lost index
  117. * @QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION_INDEX:
  118. * @QCA_NL80211_VENDOR_SUBCMD_MONITOR_RSSI_INDEX:
  119. * @QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_MEMORY_DUMP_INDEX:
  120. * @QCA_NL80211_VENDOR_SUBCMD_DCC_STATS_EVENT_INDEX:
  121. * dcc stats event index
  122. * @QCA_NL80211_VENDOR_SUBCMD_SCAN_INDEX: vendor scan index
  123. * @QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE_INDEX:
  124. * vendor scan complete event index
  125. * @QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG_INDEX:
  126. * update gateway parameters index
  127. * @QCA_NL80211_VENDOR_SUBCMD_INTEROP_ISSUES_AP_INDEX:
  128. * update aps info which has interop issues events index
  129. * @QCA_NL80211_VENDOR_SUBCMD_TSF_INDEX: TSF response events index
  130. * @QCA_NL80211_VENDOR_SUBCMD_NDP_INDEX:
  131. * @QCA_NL80211_VENDOR_SUBCMD_P2P_LO_EVENT_INDEX:
  132. * P2P listen offload index
  133. * @QCA_NL80211_VENDOR_SUBCMD_SAP_CONDITIONAL_CHAN_SWITCH_INDEX: SAP
  134. * conditional channel switch index
  135. * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_EXTERNAL_ACS_CONFIG:
  136. * @QCA_NL80211_VENDOR_SUBCMD_PWR_SAVE_FAIL_DETECTED_INDEX:
  137. * @QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX: NUD DEBUG Stats index
  138. * @QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX: hang event reason index
  139. * @QCA_NL80211_VENDOR_SUBCMD_WLAN_MAC_INFO_INDEX: MAC mode info index
  140. * @QCA_NL80211_VENDOR_SUBCMD_NAN_EXT_INDEX: NAN Extended index
  141. * @QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT_INDEX:
  142. * @QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX:
  143. * @QCA_NL80211_VENDOR_SUBCMD_PEER_STATS_CACHE_FLUSH_INDEX:
  144. * @QCA_NL80211_VENDOR_SUBCMD_BEACON_REPORTING_INDEX: Beacon reporting index
  145. * @QCA_NL80211_VENDOR_SUBCMD_ROAM_INDEX:
  146. * @QCA_NL80211_VENDOR_SUBCMD_OEM_DATA_INDEX:
  147. * @QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_INDEX: Request SAR limit index
  148. * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO_INDEX: Update STA info index
  149. * @QCA_NL80211_VENDOR_SUBCMD_MEDIUM_ASSESS_INDEX:
  150. * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX: Update SSID index
  151. * @QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX: Wifi FW stats index
  152. * @QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX:
  153. * MBSSID TX VDEV status index
  154. * @QCA_NL80211_VENDOR_SUBCMD_THERMAL_INDEX: Report thermal event index
  155. * @QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX: TWT config index
  156. * @QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG_INDEX: CFR data event index
  157. * @QCA_NL80211_VENDOR_SUBCMD_DIAG_EVENT_INDEX:
  158. * @QCA_NL80211_VENDOR_SUBCMD_ROAM_EVENTS_INDEX:
  159. * @QCA_NL80211_VENDOR_SUBCMD_MCC_QUOTA_INDEX:
  160. * @QCA_NL80211_VENDOR_SUBCMD_PEER_FLUSH_PENDING_INDEX:
  161. * @QCA_NL80211_VENDOR_SUBCMD_DRIVER_READY_INDEX: Driver Ready after SSR index
  162. * @QCA_NL80211_VENDOR_SUBCMD_PASN_AUTH_STATUS_INDEX: PASN auth status index
  163. * @QCA_NL80211_VENDOR_SUBCMD_SCS_RULE_CONFIG_INDEX: SCS rule config index
  164. * @QCA_NL80211_VENDOR_SUBCMD_SR_INDEX: SR Event index
  165. * @QCA_NL80211_VENDOR_SUBCMD_MLO_PEER_PRIM_NETDEV_EVENT_INDEX: primary netdev
  166. * event index
  167. * @QCA_NL80211_VENDOR_SUBCMD_AFC_EVENT_INDEX: AFC Event index
  168. * @QCA_NL80211_VENDOR_SUBCMD_DOZED_AP_INDEX: Dozed AP event index
  169. * @QCA_NL80211_VENDOR_SUBCMD_ROAM_STATS_INDEX: Roam stats index index
  170. * @QCA_NL80211_VENDOR_SUBCMD_CONNECTED_CHANNEL_STATS_INDEX: Connected channel
  171. * stats index
  172. * @QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON_INDEX:
  173. * Driver disconnect reason index
  174. * @QCA_NL80211_VENDOR_SUBCMD_TID_TO_LINK_MAP_INDEX: TID-to-link map index
  175. * @QCA_NL80211_VENDOR_SUBCMD_LINK_RECONFIG_INDEX: link reconfig event index
  176. * @QCA_NL80211_VENDOR_SUBCMD_AUDIO_TRANSPORT_SWITCH_INDEX: Audio transport
  177. * switch event index
  178. * @QCA_NL80211_VENDOR_SUBCMD_TX_LATENCY_INDEX: event index for transmit
  179. * latency stats
  180. * @QCA_NL80211_VENDOR_SUBCMD_RECONFIG_REMOVE_COMPLETE_EVENT_INDEX: ML Reconfig
  181. * remove complete event index
  182. */
  183. enum qca_nl80211_vendor_subcmds_index {
  184. QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY_INDEX = 0,
  185. QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX,
  186. #ifdef WLAN_FEATURE_STATS_EXT
  187. QCA_NL80211_VENDOR_SUBCMD_STATS_EXT_INDEX,
  188. #endif /* WLAN_FEATURE_STATS_EXT */
  189. #ifdef FEATURE_WLAN_EXTSCAN
  190. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START_INDEX,
  191. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP_INDEX,
  192. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES_INDEX,
  193. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS_INDEX,
  194. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_RESULTS_AVAILABLE_INDEX,
  195. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_FULL_SCAN_RESULT_INDEX,
  196. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_EVENT_INDEX,
  197. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_FOUND_INDEX,
  198. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST_INDEX,
  199. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST_INDEX,
  200. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX,
  201. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX,
  202. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX,
  203. #endif /* FEATURE_WLAN_EXTSCAN */
  204. #ifdef WLAN_FEATURE_LINK_LAYER_STATS
  205. QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET_INDEX,
  206. QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET_INDEX,
  207. QCA_NL80211_VENDOR_SUBCMD_LL_STATS_CLR_INDEX,
  208. QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX,
  209. QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX,
  210. QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX,
  211. QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX,
  212. #endif /* WLAN_FEATURE_LINK_LAYER_STATS */
  213. QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX,
  214. QCA_NL80211_VENDOR_SUBCMD_DO_ACS_INDEX,
  215. #ifdef WLAN_FEATURE_ROAM_OFFLOAD
  216. QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX,
  217. #endif
  218. /* DFS */
  219. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_STARTED_INDEX,
  220. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_FINISHED_INDEX,
  221. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_ABORTED_INDEX,
  222. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_NOP_FINISHED_INDEX,
  223. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_RADAR_DETECTED_INDEX,
  224. #ifdef FEATURE_WLAN_EXTSCAN
  225. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX,
  226. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_NETWORK_FOUND_INDEX,
  227. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND_INDEX,
  228. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX,
  229. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX,
  230. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX,
  231. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX,
  232. #endif /* FEATURE_WLAN_EXTSCAN */
  233. QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION_INDEX,
  234. QCA_NL80211_VENDOR_SUBCMD_MONITOR_RSSI_INDEX,
  235. #ifdef WLAN_FEATURE_MEMDUMP
  236. QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_MEMORY_DUMP_INDEX,
  237. #endif /* WLAN_FEATURE_MEMDUMP */
  238. /* OCB events */
  239. QCA_NL80211_VENDOR_SUBCMD_DCC_STATS_EVENT_INDEX,
  240. QCA_NL80211_VENDOR_SUBCMD_SCAN_INDEX,
  241. QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE_INDEX,
  242. QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG_INDEX,
  243. QCA_NL80211_VENDOR_SUBCMD_INTEROP_ISSUES_AP_INDEX,
  244. #ifdef WLAN_FEATURE_TSF
  245. QCA_NL80211_VENDOR_SUBCMD_TSF_INDEX,
  246. #endif
  247. QCA_NL80211_VENDOR_SUBCMD_NDP_INDEX,
  248. QCA_NL80211_VENDOR_SUBCMD_P2P_LO_EVENT_INDEX,
  249. QCA_NL80211_VENDOR_SUBCMD_SAP_CONDITIONAL_CHAN_SWITCH_INDEX,
  250. QCA_NL80211_VENDOR_SUBCMD_UPDATE_EXTERNAL_ACS_CONFIG,
  251. QCA_NL80211_VENDOR_SUBCMD_PWR_SAVE_FAIL_DETECTED_INDEX,
  252. QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX,
  253. QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX,
  254. QCA_NL80211_VENDOR_SUBCMD_WLAN_MAC_INFO_INDEX,
  255. QCA_NL80211_VENDOR_SUBCMD_NAN_EXT_INDEX,
  256. QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT_INDEX,
  257. QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX,
  258. QCA_NL80211_VENDOR_SUBCMD_PEER_STATS_CACHE_FLUSH_INDEX,
  259. QCA_NL80211_VENDOR_SUBCMD_BEACON_REPORTING_INDEX,
  260. QCA_NL80211_VENDOR_SUBCMD_ROAM_INDEX,
  261. QCA_NL80211_VENDOR_SUBCMD_OEM_DATA_INDEX,
  262. QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_INDEX,
  263. QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO_INDEX,
  264. QCA_NL80211_VENDOR_SUBCMD_MEDIUM_ASSESS_INDEX,
  265. QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX,
  266. QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX,
  267. QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX,
  268. QCA_NL80211_VENDOR_SUBCMD_THERMAL_INDEX,
  269. QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON_INDEX,
  270. #ifdef WLAN_SUPPORT_TWT
  271. QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX,
  272. #endif
  273. #ifdef WLAN_CFR_ENABLE
  274. QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG_INDEX,
  275. #endif
  276. #ifdef WLAN_FEATURE_CONNECTIVITY_LOGGING
  277. QCA_NL80211_VENDOR_SUBCMD_DIAG_EVENT_INDEX,
  278. #endif
  279. #ifdef WLAN_FEATURE_ROAM_OFFLOAD
  280. QCA_NL80211_VENDOR_SUBCMD_ROAM_EVENTS_INDEX,
  281. #endif
  282. QCA_NL80211_VENDOR_SUBCMD_MCC_QUOTA_INDEX,
  283. QCA_NL80211_VENDOR_SUBCMD_PEER_FLUSH_PENDING_INDEX,
  284. QCA_NL80211_VENDOR_SUBCMD_DRIVER_READY_INDEX,
  285. QCA_NL80211_VENDOR_SUBCMD_PASN_AUTH_STATUS_INDEX,
  286. QCA_NL80211_VENDOR_SUBCMD_SCS_RULE_CONFIG_INDEX,
  287. #ifdef WLAN_FEATURE_SR
  288. QCA_NL80211_VENDOR_SUBCMD_SR_INDEX,
  289. #endif
  290. QCA_NL80211_VENDOR_SUBCMD_MLO_PEER_PRIM_NETDEV_EVENT_INDEX,
  291. #ifdef CONFIG_AFC_SUPPORT
  292. QCA_NL80211_VENDOR_SUBCMD_AFC_EVENT_INDEX,
  293. #endif
  294. #ifdef WLAN_SUPPORT_GAP_LL_PS_MODE
  295. QCA_NL80211_VENDOR_SUBCMD_DOZED_AP_INDEX,
  296. #endif
  297. #ifdef WLAN_FEATURE_ROAM_INFO_STATS
  298. QCA_NL80211_VENDOR_SUBCMD_ROAM_STATS_INDEX,
  299. #endif
  300. QCA_NL80211_VENDOR_SUBCMD_CONNECTED_CHANNEL_STATS_INDEX,
  301. #ifdef WLAN_FEATURE_11BE_MLO
  302. QCA_NL80211_VENDOR_SUBCMD_TID_TO_LINK_MAP_INDEX,
  303. #ifdef CONN_MGR_ADV_FEATURE
  304. QCA_NL80211_VENDOR_SUBCMD_LINK_RECONFIG_INDEX,
  305. #endif
  306. #endif
  307. QCA_NL80211_VENDOR_SUBCMD_AUDIO_TRANSPORT_SWITCH_INDEX,
  308. #ifdef WLAN_FEATURE_TX_LATENCY_STATS
  309. QCA_NL80211_VENDOR_SUBCMD_TX_LATENCY_INDEX,
  310. #endif
  311. QCA_NL80211_VENDOR_SUBCMD_RECONFIG_REMOVE_COMPLETE_EVENT_INDEX,
  312. };
  313. #if !defined(SUPPORT_WDEV_CFG80211_VENDOR_EVENT_ALLOC) && \
  314. (LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)) && \
  315. !defined(WITH_BACKPORTS)
  316. static inline struct sk_buff *
  317. backported_cfg80211_vendor_event_alloc(struct wiphy *wiphy,
  318. struct wireless_dev *wdev,
  319. int approxlen,
  320. int event_idx, gfp_t gfp)
  321. {
  322. struct sk_buff *skb;
  323. skb = cfg80211_vendor_event_alloc(wiphy, approxlen, event_idx, gfp);
  324. if (skb && wdev) {
  325. struct nlattr *attr;
  326. u32 ifindex = wdev->netdev->ifindex;
  327. nla_nest_cancel(skb, ((void **)skb->cb)[2]);
  328. if (nla_put_u32(skb, NL80211_ATTR_IFINDEX, ifindex))
  329. goto nla_fail;
  330. attr = nla_nest_start(skb, NL80211_ATTR_VENDOR_DATA);
  331. ((void **)skb->cb)[2] = attr;
  332. }
  333. return skb;
  334. nla_fail:
  335. kfree_skb(skb);
  336. return NULL;
  337. }
  338. #define cfg80211_vendor_event_alloc backported_cfg80211_vendor_event_alloc
  339. #endif
  340. /* For kernel version >= 5.2, driver needs to provide policy */
  341. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0))
  342. #define vendor_command_policy(__policy, __maxattr) \
  343. .policy = __policy, \
  344. .maxattr = __maxattr
  345. #define VENDOR_NLA_POLICY_NESTED(__policy) \
  346. NLA_POLICY_NESTED(__policy)
  347. #define VENDOR_NLA_POLICY_NESTED_ARRAY(__policy) \
  348. NLA_POLICY_NESTED_ARRAY(__policy)
  349. #else
  350. #define vendor_command_policy(__policy, __maxattr)
  351. #define VENDOR_NLA_POLICY_NESTED(__policy) {.type = NLA_NESTED}
  352. #define VENDOR_NLA_POLICY_NESTED_ARRAY(__policy) \
  353. VENDOR_NLA_POLICY_NESTED(__policy)
  354. #endif /*End of (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0) */
  355. /* For kernel version <= 4.20, driver needs to provide policy */
  356. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0))
  357. #define VENDOR_NLA_POLICY_MAC_ADDR NLA_POLICY_ETH_ADDR
  358. #define VENDOR_NLA_POLICY_IPV4_ADDR NLA_POLICY_EXACT_LEN(QDF_IPV4_ADDR_SIZE)
  359. #define VENDOR_NLA_POLICY_IPV6_ADDR NLA_POLICY_EXACT_LEN(QDF_IPV6_ADDR_SIZE)
  360. #else
  361. #define VENDOR_NLA_POLICY_MAC_ADDR \
  362. {.type = NLA_UNSPEC, .len = QDF_MAC_ADDR_SIZE}
  363. #define NLA_EXACT_LEN NLA_UNSPEC
  364. #define VENDOR_NLA_POLICY_IPV4_ADDR \
  365. {.type = NLA_EXACT_LEN, .len = QDF_IPV4_ADDR_SIZE}
  366. #define VENDOR_NLA_POLICY_IPV6_ADDR \
  367. {.type = NLA_EXACT_LEN, .len = QDF_IPV6_ADDR_SIZE}
  368. #endif /*End of (LINUX_VERSION_CODE <= KERNEL_VERSION(4, 20, 0) */
  369. #if defined(NBUF_MEMORY_DEBUG) && defined(NETLINK_BUF_TRACK)
  370. #define wlan_cfg80211_vendor_free_skb(skb) \
  371. qdf_nbuf_free(skb)
  372. #define wlan_cfg80211_vendor_event(skb, gfp) \
  373. { \
  374. qdf_nbuf_count_dec(skb); \
  375. qdf_net_buf_debug_release_skb(skb); \
  376. cfg80211_vendor_event(skb, gfp); \
  377. }
  378. #define wlan_cfg80211_vendor_cmd_reply(skb) \
  379. { \
  380. qdf_nbuf_count_dec(skb); \
  381. qdf_net_buf_debug_release_skb(skb); \
  382. cfg80211_vendor_cmd_reply(skb); \
  383. }
  384. static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response(qdf_nbuf_t skb)
  385. {
  386. qdf_nbuf_count_dec(skb);
  387. qdf_net_buf_debug_release_skb(skb);
  388. return qal_devcfg_send_response(skb);
  389. }
  390. static inline struct sk_buff *
  391. __cfg80211_vendor_cmd_alloc_reply_skb(struct wiphy *wiphy, int len,
  392. const char *func, uint32_t line)
  393. {
  394. struct sk_buff *skb;
  395. skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len);
  396. if (skb) {
  397. qdf_nbuf_count_inc(skb);
  398. qdf_net_buf_debug_acquire_skb(skb, func, line);
  399. }
  400. return skb;
  401. }
  402. #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \
  403. __cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len, __func__, __LINE__)
  404. static inline struct sk_buff *
  405. __cfg80211_vendor_event_alloc(struct wiphy *wiphy,
  406. struct wireless_dev *wdev,
  407. int approxlen,
  408. int event_idx,
  409. gfp_t gfp,
  410. const char *func,
  411. uint32_t line)
  412. {
  413. struct sk_buff *skb;
  414. skb = cfg80211_vendor_event_alloc(wiphy, wdev,
  415. approxlen,
  416. event_idx,
  417. gfp);
  418. if (skb) {
  419. qdf_nbuf_count_inc(skb);
  420. qdf_net_buf_debug_acquire_skb(skb, func, line);
  421. }
  422. return skb;
  423. }
  424. #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \
  425. __cfg80211_vendor_event_alloc(wiphy, wdev, len, \
  426. idx, gfp, \
  427. __func__, __LINE__)
  428. #else /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */
  429. #define wlan_cfg80211_vendor_free_skb(skb) \
  430. kfree_skb(skb)
  431. #define wlan_cfg80211_vendor_event(skb, gfp) \
  432. cfg80211_vendor_event(skb, gfp)
  433. #define wlan_cfg80211_vendor_cmd_reply(skb) \
  434. cfg80211_vendor_cmd_reply(skb)
  435. #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \
  436. cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len)
  437. #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \
  438. cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp)
  439. static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response( qdf_nbuf_t skb)
  440. {
  441. return qal_devcfg_send_response(skb);
  442. }
  443. #endif /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */
  444. #undef nla_parse
  445. #undef nla_parse_nested
  446. #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
  447. static inline int wlan_cfg80211_nla_parse(struct nlattr **tb,
  448. int maxtype,
  449. const struct nlattr *head,
  450. int len,
  451. const struct nla_policy *policy)
  452. {
  453. return nla_parse(tb, maxtype, head, len, policy);
  454. }
  455. static inline int
  456. wlan_cfg80211_nla_parse_nested(struct nlattr *tb[],
  457. int maxtype,
  458. const struct nlattr *nla,
  459. const struct nla_policy *policy)
  460. {
  461. return nla_parse_nested(tb, maxtype, nla, policy);
  462. }
  463. #else
  464. static inline int wlan_cfg80211_nla_parse(struct nlattr **tb,
  465. int maxtype,
  466. const struct nlattr *head,
  467. int len,
  468. const struct nla_policy *policy)
  469. {
  470. return nla_parse(tb, maxtype, head, len, policy, NULL);
  471. }
  472. static inline int
  473. wlan_cfg80211_nla_parse_nested(struct nlattr *tb[],
  474. int maxtype,
  475. const struct nlattr *nla,
  476. const struct nla_policy *policy)
  477. {
  478. return nla_parse_nested(tb, maxtype, nla, policy, NULL);
  479. }
  480. #endif
  481. #define nla_parse(...) (obsolete, use wlan_cfg80211_nla_parse)
  482. #define nla_parse_nested(...) (obsolete, use wlan_cfg80211_nla_parse_nested)
  483. /**
  484. * wlan_cfg80211_nla_put_u64() - Add u64 attribute to an skb and align it
  485. * @skb: SKB to add attribute(s) to
  486. * @attrtype: u64 attribute id
  487. * @value: u64 attribute value
  488. *
  489. * This function adds a u64 attribute, and optionally a pad attribute, to the
  490. * skb. If this function adds a pad attribute, that pad attribute is defined
  491. * in enum qca_wlan_vendor_attr, so only 64-bit attributes that are defined
  492. * in enum qca_wlan_vendor_attr should use this interface. For other u64
  493. * attributes, use function wlan_cfg80211_nla_put_u64_64bit() since that
  494. * allows the pad attribute to be specified.
  495. *
  496. * Return: 0 if u64 attribute and optional pad attribute added to skb,
  497. * negative errno if operation fails
  498. */
  499. #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0))
  500. static inline int
  501. wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
  502. {
  503. return nla_put_u64(skb, attrtype, value);
  504. }
  505. #else
  506. static inline int
  507. wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
  508. {
  509. return nla_put_u64_64bit(skb, attrtype, value, NL80211_ATTR_PAD);
  510. }
  511. #endif
  512. /**
  513. * wlan_cfg80211_nla_put_u64_64bit() - Add u64 attribute to an skb and align it
  514. * @skb: SKB to add attribute(s) to
  515. * @attrtype: u64 attribute id
  516. * @value: u64 attribute value
  517. * @padattr: padding attribute id
  518. *
  519. * This function adds a u64 attribute, and optionally a pad attribute,
  520. * to the skb. Unlike wlan_cfg80211_nla_put_u64() which can only be
  521. * used with attributes defined in enum qca_wlan_vendor_attr, this
  522. * function can be used with attributes defined in any enum, provided
  523. * that the enum also defines a pad attribute.
  524. *
  525. * Return: 0 if u64 attribute and optional pad attribute added to skb,
  526. * negative errno if operation fails
  527. */
  528. #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0))
  529. static inline int
  530. wlan_cfg80211_nla_put_u64_64bit(struct sk_buff *skb, int attrtype,
  531. u64 value, int padattr)
  532. {
  533. return nla_put_u64(skb, attrtype, value);
  534. }
  535. #else
  536. static inline int
  537. wlan_cfg80211_nla_put_u64_64bit(struct sk_buff *skb, int attrtype,
  538. u64 value, int padattr)
  539. {
  540. return nla_put_u64_64bit(skb, attrtype, value, padattr);
  541. }
  542. #endif
  543. #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
  544. static inline ssize_t
  545. wlan_cfg80211_nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize)
  546. {
  547. return nla_strlcpy(dst, nla, dstsize);
  548. }
  549. #else
  550. static inline ssize_t
  551. wlan_cfg80211_nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize)
  552. {
  553. return nla_strscpy(dst, nla, dstsize);
  554. }
  555. #endif
  556. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) || \
  557. (defined CFG80211_CHANGE_NETDEV_REGISTRATION_SEMANTICS))
  558. static inline int wlan_cfg80211_register_netdevice(struct net_device *dev)
  559. {
  560. return cfg80211_register_netdevice(dev);
  561. }
  562. #else
  563. static inline int wlan_cfg80211_register_netdevice(struct net_device *dev)
  564. {
  565. return register_netdevice(dev);
  566. }
  567. #endif
  568. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) || \
  569. (defined CFG80211_CHANGE_NETDEV_REGISTRATION_SEMANTICS))
  570. static inline void wlan_cfg80211_unregister_netdevice(struct net_device *dev)
  571. {
  572. cfg80211_unregister_netdevice(dev);
  573. }
  574. #else
  575. static inline void wlan_cfg80211_unregister_netdevice(struct net_device *dev)
  576. {
  577. unregister_netdevice(dev);
  578. }
  579. #endif
  580. #ifdef CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT
  581. #if defined(CFG80211_RU_PUNCT_NOTIFY) || \
  582. defined(CFG80211_PUNCTURING_SINGLE_NETDEV_API)
  583. static inline
  584. void wlan_cfg80211_ch_switch_notify(struct net_device *dev,
  585. struct cfg80211_chan_def *chandef,
  586. unsigned int link_id,
  587. uint16_t puncture_bitmap)
  588. {
  589. cfg80211_ch_switch_notify(dev, chandef, link_id,
  590. puncture_bitmap);
  591. }
  592. #else
  593. static inline
  594. void wlan_cfg80211_ch_switch_notify(struct net_device *dev,
  595. struct cfg80211_chan_def *chandef,
  596. unsigned int link_id,
  597. uint16_t puncture_bitmap)
  598. {
  599. cfg80211_ch_switch_notify(dev, chandef, link_id);
  600. }
  601. #endif
  602. #else
  603. static inline
  604. void wlan_cfg80211_ch_switch_notify(struct net_device *dev,
  605. struct cfg80211_chan_def *chandef,
  606. unsigned int link_id,
  607. uint16_t puncture_bitmap)
  608. {
  609. cfg80211_ch_switch_notify(dev, chandef);
  610. }
  611. #endif
  612. #endif