wlan_cfg80211.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. /*
  2. * Copyright (c) 2016-2020 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: declares driver functions interfacing with linux kernel
  20. */
  21. #ifndef _WLAN_CFG80211_H_
  22. #define _WLAN_CFG80211_H_
  23. #include <linux/version.h>
  24. #include <linux/netdevice.h>
  25. #include <net/netlink.h>
  26. #include <net/cfg80211.h>
  27. #include <qca_vendor.h>
  28. #include <qdf_nbuf.h>
  29. #include "qal_devcfg.h"
  30. #define osif_alert(params...) \
  31. QDF_TRACE_FATAL(QDF_MODULE_ID_OS_IF, params)
  32. #define osif_err(params...) \
  33. QDF_TRACE_ERROR(QDF_MODULE_ID_OS_IF, params)
  34. #define osif_warn(params...) \
  35. QDF_TRACE_WARN(QDF_MODULE_ID_OS_IF, params)
  36. #define osif_notice(params...) \
  37. QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params)
  38. #define osif_info(params...) \
  39. QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params)
  40. #define osif_debug(params...) \
  41. QDF_TRACE_DEBUG(QDF_MODULE_ID_OS_IF, params)
  42. #define osif_rl_debug(params...) \
  43. QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_OS_IF, params)
  44. #define osif_err_rl(params...) \
  45. QDF_TRACE_ERROR_RL(QDF_MODULE_ID_OS_IF, params)
  46. #define osif_nofl_alert(params...) \
  47. QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_OS_IF, params)
  48. #define osif_nofl_err(params...) \
  49. QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_OS_IF, params)
  50. #define osif_nofl_warn(params...) \
  51. QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_OS_IF, params)
  52. #define osif_nofl_info(params...) \
  53. QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_OS_IF, params)
  54. #define osif_nofl_debug(params...) \
  55. QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_OS_IF, params)
  56. #define osif_enter_dev(dev) \
  57. QDF_TRACE_ENTER(QDF_MODULE_ID_OS_IF, "enter(%s)", (dev)->name)
  58. /**
  59. * enum qca_nl80211_vendor_subcmds_index - vendor sub commands index
  60. *
  61. * @QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY_INDEX: Avoid frequency
  62. * @QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX: Nan
  63. * @QCA_NL80211_VENDOR_SUBCMD_STATS_EXT_INDEX: Ext stats
  64. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START_INDEX: Ext scan start
  65. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP_INDEX: Ext scan stop
  66. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES_INDEX: Ext scan get
  67. * capability
  68. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS_INDEX: Ext scan get
  69. * cached results
  70. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_RESULTS_AVAILABLE_INDEX: Ext scan
  71. * results available
  72. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_FULL_SCAN_RESULT_INDEX: Ext scan full
  73. * scan result
  74. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_EVENT_INDEX: Ext scan event
  75. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_FOUND_INDEX: Ext scan hot list
  76. * AP found
  77. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST_INDEX: Ext scan set
  78. * bssid hotlist
  79. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST_INDEX: Ext scan reset
  80. * bssid hotlist
  81. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX: Ext scan
  82. * significant change
  83. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX: Ext scan
  84. * set significant change
  85. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX: Ext scan
  86. * reset significant change
  87. * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET_INDEX: Set stats
  88. * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET_INDEX: Get stats
  89. * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_CLR_INDEX: Clear stats
  90. * @QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX: Radio stats
  91. * @QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX: Iface stats
  92. * @QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX: Peer info stats
  93. * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX: MAC layer counters
  94. * @QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX: Ext tdls state change
  95. * @QCA_NL80211_VENDOR_SUBCMD_DO_ACS_INDEX: ACS command
  96. * @QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX: Pass Roam and Auth info
  97. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX: hotlist ap lost
  98. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_NETWORK_FOUND_INDEX:
  99. * pno network found index
  100. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND_INDEX:
  101. * passpoint match found index
  102. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX:
  103. * set ssid hotlist index
  104. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX:
  105. * reset ssid hotlist index
  106. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX:
  107. * hotlist ssid found index
  108. * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX:
  109. * hotlist ssid lost index
  110. * @QCA_NL80211_VENDOR_SUBCMD_DCC_STATS_EVENT_INDEX
  111. * dcc stats event index
  112. * @QCA_NL80211_VENDOR_SUBCMD_SCAN_INDEX: vendor scan index
  113. * @QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE_INDEX:
  114. * vendor scan complete event index
  115. * @QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG_INDEX:
  116. * update gateway parameters index
  117. * @QCA_NL80211_VENDOR_SUBCMD_INTEROP_ISSUES_AP_INDEX:
  118. * update aps info which has interop issues events index
  119. * @QCA_NL80211_VENDOR_SUBCMD_TSF_INDEX: TSF response events index
  120. * @QCA_NL80211_VENDOR_SUBCMD_P2P_LO_EVENT_INDEX:
  121. * P2P listen offload index
  122. * @QCA_NL80211_VENDOR_SUBCMD_SAP_CONDITIONAL_CHAN_SWITCH_INDEX: SAP
  123. * conditional channel switch index
  124. * @QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX: NUD DEBUG Stats index
  125. * @QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX: hang event reason index
  126. * @QCA_NL80211_VENDOR_SUBCMD_WLAN_MAC_INFO_INDEX: MAC mode info index
  127. * @QCA_NL80211_VENDOR_SUBCMD_NAN_EXT_INDEX: NAN Extended index
  128. * @QCA_NL80211_VENDOR_SUBCMD_BEACON_REPORTING_INDEX: Beacon reporting index
  129. * @QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_INDEX: Request SAR limit index
  130. * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO_INDEX: Update STA info index
  131. * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX: Update SSID index
  132. * @QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX: Wifi FW stats index
  133. * @QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX:
  134. * MBSSID TX VDEV status index
  135. * @QCA_NL80211_VENDOR_SUBCMD_THERMAL_INDEX: Report thermal event index
  136. */
  137. enum qca_nl80211_vendor_subcmds_index {
  138. QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY_INDEX = 0,
  139. QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX,
  140. #ifdef WLAN_FEATURE_STATS_EXT
  141. QCA_NL80211_VENDOR_SUBCMD_STATS_EXT_INDEX,
  142. #endif /* WLAN_FEATURE_STATS_EXT */
  143. #ifdef FEATURE_WLAN_EXTSCAN
  144. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START_INDEX,
  145. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP_INDEX,
  146. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES_INDEX,
  147. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS_INDEX,
  148. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_RESULTS_AVAILABLE_INDEX,
  149. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_FULL_SCAN_RESULT_INDEX,
  150. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_EVENT_INDEX,
  151. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_FOUND_INDEX,
  152. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST_INDEX,
  153. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST_INDEX,
  154. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX,
  155. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX,
  156. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX,
  157. #endif /* FEATURE_WLAN_EXTSCAN */
  158. #ifdef WLAN_FEATURE_LINK_LAYER_STATS
  159. QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET_INDEX,
  160. QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET_INDEX,
  161. QCA_NL80211_VENDOR_SUBCMD_LL_STATS_CLR_INDEX,
  162. QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX,
  163. QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX,
  164. QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX,
  165. QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX,
  166. #endif /* WLAN_FEATURE_LINK_LAYER_STATS */
  167. QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX,
  168. QCA_NL80211_VENDOR_SUBCMD_DO_ACS_INDEX,
  169. #ifdef WLAN_FEATURE_ROAM_OFFLOAD
  170. QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX,
  171. #endif
  172. /* DFS */
  173. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_STARTED_INDEX,
  174. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_FINISHED_INDEX,
  175. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_ABORTED_INDEX,
  176. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_NOP_FINISHED_INDEX,
  177. QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_RADAR_DETECTED_INDEX,
  178. #ifdef FEATURE_WLAN_EXTSCAN
  179. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX,
  180. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_NETWORK_FOUND_INDEX,
  181. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND_INDEX,
  182. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX,
  183. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX,
  184. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX,
  185. QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX,
  186. #endif /* FEATURE_WLAN_EXTSCAN */
  187. QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION_INDEX,
  188. QCA_NL80211_VENDOR_SUBCMD_MONITOR_RSSI_INDEX,
  189. #ifdef WLAN_FEATURE_MEMDUMP
  190. QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_MEMORY_DUMP_INDEX,
  191. #endif /* WLAN_FEATURE_MEMDUMP */
  192. /* OCB events */
  193. QCA_NL80211_VENDOR_SUBCMD_DCC_STATS_EVENT_INDEX,
  194. QCA_NL80211_VENDOR_SUBCMD_SCAN_INDEX,
  195. QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE_INDEX,
  196. QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG_INDEX,
  197. QCA_NL80211_VENDOR_SUBCMD_INTEROP_ISSUES_AP_INDEX,
  198. #ifdef WLAN_FEATURE_TSF
  199. QCA_NL80211_VENDOR_SUBCMD_TSF_INDEX,
  200. #endif
  201. QCA_NL80211_VENDOR_SUBCMD_NDP_INDEX,
  202. QCA_NL80211_VENDOR_SUBCMD_P2P_LO_EVENT_INDEX,
  203. QCA_NL80211_VENDOR_SUBCMD_SAP_CONDITIONAL_CHAN_SWITCH_INDEX,
  204. QCA_NL80211_VENDOR_SUBCMD_UPDATE_EXTERNAL_ACS_CONFIG,
  205. QCA_NL80211_VENDOR_SUBCMD_PWR_SAVE_FAIL_DETECTED_INDEX,
  206. QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX,
  207. QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX,
  208. QCA_NL80211_VENDOR_SUBCMD_WLAN_MAC_INFO_INDEX,
  209. QCA_NL80211_VENDOR_SUBCMD_NAN_EXT_INDEX,
  210. QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT_INDEX,
  211. QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX,
  212. QCA_NL80211_VENDOR_SUBCMD_PEER_STATS_CACHE_FLUSH_INDEX,
  213. QCA_NL80211_VENDOR_SUBCMD_BEACON_REPORTING_INDEX,
  214. QCA_NL80211_VENDOR_SUBCMD_ROAM_INDEX,
  215. QCA_NL80211_VENDOR_SUBCMD_OEM_DATA_INDEX,
  216. QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_INDEX,
  217. QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO_INDEX,
  218. QCA_NL80211_VENDOR_SUBCMD_MEDIUM_ASSESS_INDEX,
  219. QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX,
  220. QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX,
  221. QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX,
  222. QCA_NL80211_VENDOR_SUBCMD_THERMAL_INDEX,
  223. #ifdef WLAN_SUPPORT_TWT
  224. QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX,
  225. #endif
  226. };
  227. #if !defined(SUPPORT_WDEV_CFG80211_VENDOR_EVENT_ALLOC) && \
  228. (LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)) && \
  229. !defined(WITH_BACKPORTS)
  230. static inline struct sk_buff *
  231. backported_cfg80211_vendor_event_alloc(struct wiphy *wiphy,
  232. struct wireless_dev *wdev,
  233. int approxlen,
  234. int event_idx, gfp_t gfp)
  235. {
  236. struct sk_buff *skb;
  237. skb = cfg80211_vendor_event_alloc(wiphy, approxlen, event_idx, gfp);
  238. if (skb && wdev) {
  239. struct nlattr *attr;
  240. u32 ifindex = wdev->netdev->ifindex;
  241. nla_nest_cancel(skb, ((void **)skb->cb)[2]);
  242. if (nla_put_u32(skb, NL80211_ATTR_IFINDEX, ifindex))
  243. goto nla_fail;
  244. attr = nla_nest_start(skb, NL80211_ATTR_VENDOR_DATA);
  245. ((void **)skb->cb)[2] = attr;
  246. }
  247. return skb;
  248. nla_fail:
  249. kfree_skb(skb);
  250. return NULL;
  251. }
  252. #define cfg80211_vendor_event_alloc backported_cfg80211_vendor_event_alloc
  253. #endif
  254. /* For kernel version >= 5.2, driver needs to provide policy */
  255. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0))
  256. #define vendor_command_policy(__policy, __maxattr) \
  257. .policy = __policy, \
  258. .maxattr = __maxattr
  259. #define VENDOR_NLA_POLICY_NESTED(__policy) \
  260. NLA_POLICY_NESTED(__policy)
  261. #else
  262. #define vendor_command_policy(__policy, __maxattr)
  263. #define VENDOR_NLA_POLICY_NESTED(__policy) {.type = NLA_NESTED}
  264. #endif /*End of (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0) */
  265. /* For kernel version <= 4.20, driver needs to provide policy */
  266. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0))
  267. #define VENDOR_NLA_POLICY_MAC_ADDR NLA_POLICY_ETH_ADDR
  268. #else
  269. #define VENDOR_NLA_POLICY_MAC_ADDR \
  270. {.type = NLA_UNSPEC, .len = QDF_MAC_ADDR_SIZE}
  271. #define NLA_EXACT_LEN NLA_UNSPEC
  272. #endif /*End of (LINUX_VERSION_CODE <= KERNEL_VERSION(4, 20, 0) */
  273. #if defined(NBUF_MEMORY_DEBUG) && defined(NETLINK_BUF_TRACK)
  274. #define wlan_cfg80211_vendor_free_skb(skb) \
  275. qdf_nbuf_free(skb)
  276. #define wlan_cfg80211_vendor_event(skb, gfp) \
  277. { \
  278. qdf_nbuf_count_dec(skb); \
  279. qdf_net_buf_debug_release_skb(skb); \
  280. cfg80211_vendor_event(skb, gfp); \
  281. }
  282. #define wlan_cfg80211_vendor_cmd_reply(skb) \
  283. { \
  284. qdf_nbuf_count_dec(skb); \
  285. qdf_net_buf_debug_release_skb(skb); \
  286. cfg80211_vendor_cmd_reply(skb); \
  287. }
  288. static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response(qdf_nbuf_t skb)
  289. {
  290. qdf_nbuf_count_dec(skb);
  291. qdf_net_buf_debug_release_skb(skb);
  292. return qal_devcfg_send_response(skb);
  293. }
  294. static inline struct sk_buff *
  295. __cfg80211_vendor_cmd_alloc_reply_skb(struct wiphy *wiphy, int len,
  296. const char *func, uint32_t line)
  297. {
  298. struct sk_buff *skb;
  299. skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len);
  300. if (skb) {
  301. qdf_nbuf_count_inc(skb);
  302. qdf_net_buf_debug_acquire_skb(skb, func, line);
  303. }
  304. return skb;
  305. }
  306. #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \
  307. __cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len, __func__, __LINE__)
  308. static inline struct sk_buff *
  309. __cfg80211_vendor_event_alloc(struct wiphy *wiphy,
  310. struct wireless_dev *wdev,
  311. int approxlen,
  312. int event_idx,
  313. gfp_t gfp,
  314. const char *func,
  315. uint32_t line)
  316. {
  317. struct sk_buff *skb;
  318. skb = cfg80211_vendor_event_alloc(wiphy, wdev,
  319. approxlen,
  320. event_idx,
  321. gfp);
  322. if (skb) {
  323. qdf_nbuf_count_inc(skb);
  324. qdf_net_buf_debug_acquire_skb(skb, func, line);
  325. }
  326. return skb;
  327. }
  328. #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \
  329. __cfg80211_vendor_event_alloc(wiphy, wdev, len, \
  330. idx, gfp, \
  331. __func__, __LINE__)
  332. #else /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */
  333. #define wlan_cfg80211_vendor_free_skb(skb) \
  334. kfree_skb(skb)
  335. #define wlan_cfg80211_vendor_event(skb, gfp) \
  336. cfg80211_vendor_event(skb, gfp)
  337. #define wlan_cfg80211_vendor_cmd_reply(skb) \
  338. cfg80211_vendor_cmd_reply(skb)
  339. #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \
  340. cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len)
  341. #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \
  342. cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp)
  343. static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response( qdf_nbuf_t skb)
  344. {
  345. return qal_devcfg_send_response(skb);
  346. }
  347. #endif /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */
  348. #undef nla_parse
  349. #undef nla_parse_nested
  350. #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
  351. static inline int wlan_cfg80211_nla_parse(struct nlattr **tb,
  352. int maxtype,
  353. const struct nlattr *head,
  354. int len,
  355. const struct nla_policy *policy)
  356. {
  357. return nla_parse(tb, maxtype, head, len, policy);
  358. }
  359. static inline int
  360. wlan_cfg80211_nla_parse_nested(struct nlattr *tb[],
  361. int maxtype,
  362. const struct nlattr *nla,
  363. const struct nla_policy *policy)
  364. {
  365. return nla_parse_nested(tb, maxtype, nla, policy);
  366. }
  367. #else
  368. static inline int wlan_cfg80211_nla_parse(struct nlattr **tb,
  369. int maxtype,
  370. const struct nlattr *head,
  371. int len,
  372. const struct nla_policy *policy)
  373. {
  374. return nla_parse(tb, maxtype, head, len, policy, NULL);
  375. }
  376. static inline int
  377. wlan_cfg80211_nla_parse_nested(struct nlattr *tb[],
  378. int maxtype,
  379. const struct nlattr *nla,
  380. const struct nla_policy *policy)
  381. {
  382. return nla_parse_nested(tb, maxtype, nla, policy, NULL);
  383. }
  384. #endif
  385. #define nla_parse(...) (obsolete, use wlan_cfg80211_nla_parse)
  386. #define nla_parse_nested(...) (obsolete, use wlan_cfg80211_nla_parse_nested)
  387. #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0))
  388. static inline int
  389. wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
  390. {
  391. return nla_put_u64(skb, attrtype, value);
  392. }
  393. #else
  394. static inline int
  395. wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
  396. {
  397. return nla_put_u64_64bit(skb, attrtype, value, NL80211_ATTR_PAD);
  398. }
  399. #endif
  400. #endif