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