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