1 /* 2 * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022 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 /** 21 * DOC: declares driver functions interfacing with linux kernel 22 */ 23 24 25 #ifndef _WLAN_CFG80211_H_ 26 #define _WLAN_CFG80211_H_ 27 28 #include <linux/version.h> 29 #include <linux/netdevice.h> 30 #include <net/netlink.h> 31 #include <net/cfg80211.h> 32 #include <qca_vendor.h> 33 #include <qdf_nbuf.h> 34 #include "qal_devcfg.h" 35 #include "wlan_osif_features.h" 36 37 #define osif_alert(params...) \ 38 QDF_TRACE_FATAL(QDF_MODULE_ID_OS_IF, params) 39 #define osif_err(params...) \ 40 QDF_TRACE_ERROR(QDF_MODULE_ID_OS_IF, params) 41 #define osif_warn(params...) \ 42 QDF_TRACE_WARN(QDF_MODULE_ID_OS_IF, params) 43 #define osif_notice(params...) \ 44 QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params) 45 #define osif_info(params...) \ 46 QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params) 47 #define osif_debug(params...) \ 48 QDF_TRACE_DEBUG(QDF_MODULE_ID_OS_IF, params) 49 #define osif_rl_debug(params...) \ 50 QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_OS_IF, params) 51 #define osif_err_rl(params...) \ 52 QDF_TRACE_ERROR_RL(QDF_MODULE_ID_OS_IF, params) 53 54 #define osif_nofl_alert(params...) \ 55 QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_OS_IF, params) 56 #define osif_nofl_err(params...) \ 57 QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_OS_IF, params) 58 #define osif_nofl_warn(params...) \ 59 QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_OS_IF, params) 60 #define osif_nofl_info(params...) \ 61 QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_OS_IF, params) 62 #define osif_nofl_debug(params...) \ 63 QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_OS_IF, params) 64 65 #define osif_enter_dev(dev) \ 66 QDF_TRACE_ENTER(QDF_MODULE_ID_OS_IF, "enter(%s)", (dev)->name) 67 68 /** 69 * enum qca_nl80211_vendor_subcmds_index - vendor sub commands index 70 * 71 * @QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY_INDEX: Avoid frequency 72 * @QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX: Nan 73 * @QCA_NL80211_VENDOR_SUBCMD_STATS_EXT_INDEX: Ext stats 74 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START_INDEX: Ext scan start 75 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP_INDEX: Ext scan stop 76 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES_INDEX: Ext scan get 77 * capability 78 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS_INDEX: Ext scan get 79 * cached results 80 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_RESULTS_AVAILABLE_INDEX: Ext scan 81 * results available 82 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_FULL_SCAN_RESULT_INDEX: Ext scan full 83 * scan result 84 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_EVENT_INDEX: Ext scan event 85 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_FOUND_INDEX: Ext scan hot list 86 * AP found 87 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST_INDEX: Ext scan set 88 * bssid hotlist 89 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST_INDEX: Ext scan reset 90 * bssid hotlist 91 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX: Ext scan 92 * significant change 93 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX: Ext scan 94 * set significant change 95 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX: Ext scan 96 * reset significant change 97 * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET_INDEX: Set stats 98 * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET_INDEX: Get stats 99 * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_CLR_INDEX: Clear stats 100 * @QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX: Radio stats 101 * @QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX: Iface stats 102 * @QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX: Peer info stats 103 * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX: MAC layer counters 104 * @QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX: Ext tdls state change 105 * @QCA_NL80211_VENDOR_SUBCMD_DO_ACS_INDEX: ACS command 106 * @QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX: Pass Roam and Auth info 107 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX: hotlist ap lost 108 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_NETWORK_FOUND_INDEX: 109 * pno network found index 110 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND_INDEX: 111 * passpoint match found index 112 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX: 113 * set ssid hotlist index 114 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX: 115 * reset ssid hotlist index 116 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX: 117 * hotlist ssid found index 118 * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX: 119 * hotlist ssid lost 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_P2P_LO_EVENT_INDEX: 131 * P2P listen offload index 132 * @QCA_NL80211_VENDOR_SUBCMD_SAP_CONDITIONAL_CHAN_SWITCH_INDEX: SAP 133 * conditional channel switch index 134 * @QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX: NUD DEBUG Stats index 135 * @QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX: hang event reason index 136 * @QCA_NL80211_VENDOR_SUBCMD_WLAN_MAC_INFO_INDEX: MAC mode info index 137 * @QCA_NL80211_VENDOR_SUBCMD_NAN_EXT_INDEX: NAN Extended index 138 * @QCA_NL80211_VENDOR_SUBCMD_BEACON_REPORTING_INDEX: Beacon reporting index 139 * @QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_INDEX: Request SAR limit index 140 * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO_INDEX: Update STA info index 141 * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX: Update SSID index 142 * @QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX: Wifi FW stats index 143 * @QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX: 144 * MBSSID TX VDEV status index 145 * @QCA_NL80211_VENDOR_SUBCMD_THERMAL_INDEX: Report thermal event index 146 * @QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX: TWT config index 147 * @QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG_INDEX: CFR data event index 148 * @QCA_NL80211_VENDOR_SUBCMD_DRIVER_READY_INDEX: Driver Ready after SSR index 149 * @QCA_NL80211_VENDOR_SUBCMD_SCS_RULE_CONFIG_INDEX: SCS rule config index 150 * @QCA_NL80211_VENDOR_SUBCMD_SR_INDEX: SR Event index 151 * @QCA_NL80211_VENDOR_SUBCMD_MLO_PEER_PRIM_NETDEV_EVENT_INDEX: primary netdev 152 * event index 153 * @QCA_NL80211_VENDOR_SUBCMD_AFC_EVENT_INDEX: AFC Event index 154 */ 155 156 enum qca_nl80211_vendor_subcmds_index { 157 QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY_INDEX = 0, 158 159 QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX, 160 161 #ifdef WLAN_FEATURE_STATS_EXT 162 QCA_NL80211_VENDOR_SUBCMD_STATS_EXT_INDEX, 163 #endif /* WLAN_FEATURE_STATS_EXT */ 164 165 #ifdef FEATURE_WLAN_EXTSCAN 166 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START_INDEX, 167 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP_INDEX, 168 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES_INDEX, 169 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS_INDEX, 170 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_RESULTS_AVAILABLE_INDEX, 171 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_FULL_SCAN_RESULT_INDEX, 172 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_EVENT_INDEX, 173 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_FOUND_INDEX, 174 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST_INDEX, 175 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST_INDEX, 176 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX, 177 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX, 178 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX, 179 #endif /* FEATURE_WLAN_EXTSCAN */ 180 181 #ifdef WLAN_FEATURE_LINK_LAYER_STATS 182 QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET_INDEX, 183 QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET_INDEX, 184 QCA_NL80211_VENDOR_SUBCMD_LL_STATS_CLR_INDEX, 185 QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX, 186 QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX, 187 QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX, 188 QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX, 189 #endif /* WLAN_FEATURE_LINK_LAYER_STATS */ 190 191 QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX, 192 QCA_NL80211_VENDOR_SUBCMD_DO_ACS_INDEX, 193 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 194 QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX, 195 #endif 196 /* DFS */ 197 QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_STARTED_INDEX, 198 QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_FINISHED_INDEX, 199 QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_ABORTED_INDEX, 200 QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_NOP_FINISHED_INDEX, 201 QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_RADAR_DETECTED_INDEX, 202 #ifdef FEATURE_WLAN_EXTSCAN 203 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX, 204 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_NETWORK_FOUND_INDEX, 205 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND_INDEX, 206 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX, 207 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX, 208 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX, 209 QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX, 210 #endif /* FEATURE_WLAN_EXTSCAN */ 211 QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION_INDEX, 212 QCA_NL80211_VENDOR_SUBCMD_MONITOR_RSSI_INDEX, 213 #ifdef WLAN_FEATURE_MEMDUMP 214 QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_MEMORY_DUMP_INDEX, 215 #endif /* WLAN_FEATURE_MEMDUMP */ 216 /* OCB events */ 217 QCA_NL80211_VENDOR_SUBCMD_DCC_STATS_EVENT_INDEX, 218 QCA_NL80211_VENDOR_SUBCMD_SCAN_INDEX, 219 QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE_INDEX, 220 QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG_INDEX, 221 QCA_NL80211_VENDOR_SUBCMD_INTEROP_ISSUES_AP_INDEX, 222 #ifdef WLAN_FEATURE_TSF 223 QCA_NL80211_VENDOR_SUBCMD_TSF_INDEX, 224 #endif 225 QCA_NL80211_VENDOR_SUBCMD_NDP_INDEX, 226 QCA_NL80211_VENDOR_SUBCMD_P2P_LO_EVENT_INDEX, 227 QCA_NL80211_VENDOR_SUBCMD_SAP_CONDITIONAL_CHAN_SWITCH_INDEX, 228 QCA_NL80211_VENDOR_SUBCMD_UPDATE_EXTERNAL_ACS_CONFIG, 229 QCA_NL80211_VENDOR_SUBCMD_PWR_SAVE_FAIL_DETECTED_INDEX, 230 QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX, 231 QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX, 232 QCA_NL80211_VENDOR_SUBCMD_WLAN_MAC_INFO_INDEX, 233 QCA_NL80211_VENDOR_SUBCMD_NAN_EXT_INDEX, 234 QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT_INDEX, 235 QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX, 236 QCA_NL80211_VENDOR_SUBCMD_PEER_STATS_CACHE_FLUSH_INDEX, 237 QCA_NL80211_VENDOR_SUBCMD_BEACON_REPORTING_INDEX, 238 QCA_NL80211_VENDOR_SUBCMD_ROAM_INDEX, 239 QCA_NL80211_VENDOR_SUBCMD_OEM_DATA_INDEX, 240 QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_INDEX, 241 QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO_INDEX, 242 QCA_NL80211_VENDOR_SUBCMD_MEDIUM_ASSESS_INDEX, 243 QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX, 244 QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX, 245 QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX, 246 QCA_NL80211_VENDOR_SUBCMD_THERMAL_INDEX, 247 #ifdef WLAN_SUPPORT_TWT 248 QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX, 249 #endif 250 #ifdef WLAN_CFR_ENABLE 251 QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG_INDEX, 252 #endif 253 #ifdef WLAN_FEATURE_CONNECTIVITY_LOGGING 254 QCA_NL80211_VENDOR_SUBCMD_DIAG_EVENT_INDEX, 255 #endif 256 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 257 QCA_NL80211_VENDOR_SUBCMD_ROAM_EVENTS_INDEX, 258 #endif 259 QCA_NL80211_VENDOR_SUBCMD_MCC_QUOTA_INDEX, 260 QCA_NL80211_VENDOR_SUBCMD_PEER_FLUSH_PENDING_INDEX, 261 QCA_NL80211_VENDOR_SUBCMD_DRIVER_READY_INDEX, 262 QCA_NL80211_VENDOR_SUBCMD_PASN_AUTH_STATUS_INDEX, 263 #ifdef WLAN_SUPPORT_SCS 264 QCA_NL80211_VENDOR_SUBCMD_SCS_RULE_CONFIG_INDEX, 265 #endif 266 #ifdef WLAN_FEATURE_SR 267 QCA_NL80211_VENDOR_SUBCMD_SR_INDEX, 268 #endif 269 QCA_NL80211_VENDOR_SUBCMD_MLO_PEER_PRIM_NETDEV_EVENT_INDEX, 270 #ifdef CONFIG_AFC_SUPPORT 271 QCA_NL80211_VENDOR_SUBCMD_AFC_EVENT_INDEX, 272 #endif 273 #ifdef WLAN_SUPPORT_GAP_LL_PS_MODE 274 QCA_NL80211_VENDOR_SUBCMD_DOZED_AP_INDEX, 275 #endif 276 }; 277 278 #if !defined(SUPPORT_WDEV_CFG80211_VENDOR_EVENT_ALLOC) && \ 279 (LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)) && \ 280 !defined(WITH_BACKPORTS) 281 282 static inline struct sk_buff * 283 backported_cfg80211_vendor_event_alloc(struct wiphy *wiphy, 284 struct wireless_dev *wdev, 285 int approxlen, 286 int event_idx, gfp_t gfp) 287 { 288 struct sk_buff *skb; 289 290 skb = cfg80211_vendor_event_alloc(wiphy, approxlen, event_idx, gfp); 291 292 if (skb && wdev) { 293 struct nlattr *attr; 294 u32 ifindex = wdev->netdev->ifindex; 295 296 nla_nest_cancel(skb, ((void **)skb->cb)[2]); 297 if (nla_put_u32(skb, NL80211_ATTR_IFINDEX, ifindex)) 298 goto nla_fail; 299 300 attr = nla_nest_start(skb, NL80211_ATTR_VENDOR_DATA); 301 ((void **)skb->cb)[2] = attr; 302 } 303 304 return skb; 305 306 nla_fail: 307 kfree_skb(skb); 308 309 return NULL; 310 } 311 312 #define cfg80211_vendor_event_alloc backported_cfg80211_vendor_event_alloc 313 #endif 314 315 /* For kernel version >= 5.2, driver needs to provide policy */ 316 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0)) 317 #define vendor_command_policy(__policy, __maxattr) \ 318 .policy = __policy, \ 319 .maxattr = __maxattr 320 #define VENDOR_NLA_POLICY_NESTED(__policy) \ 321 NLA_POLICY_NESTED(__policy) 322 #else 323 #define vendor_command_policy(__policy, __maxattr) 324 #define VENDOR_NLA_POLICY_NESTED(__policy) {.type = NLA_NESTED} 325 #endif /*End of (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0) */ 326 327 /* For kernel version <= 4.20, driver needs to provide policy */ 328 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)) 329 #define VENDOR_NLA_POLICY_MAC_ADDR NLA_POLICY_ETH_ADDR 330 #define VENDOR_NLA_POLICY_IPV4_ADDR NLA_POLICY_EXACT_LEN(QDF_IPV4_ADDR_SIZE) 331 #define VENDOR_NLA_POLICY_IPV6_ADDR NLA_POLICY_EXACT_LEN(QDF_IPV6_ADDR_SIZE) 332 #else 333 #define VENDOR_NLA_POLICY_MAC_ADDR \ 334 {.type = NLA_UNSPEC, .len = QDF_MAC_ADDR_SIZE} 335 #define NLA_EXACT_LEN NLA_UNSPEC 336 #define VENDOR_NLA_POLICY_IPV4_ADDR \ 337 {.type = NLA_EXACT_LEN, .len = QDF_IPV4_ADDR_SIZE} 338 #define VENDOR_NLA_POLICY_IPV6_ADDR \ 339 {.type = NLA_EXACT_LEN, .len = QDF_IPV6_ADDR_SIZE} 340 #endif /*End of (LINUX_VERSION_CODE <= KERNEL_VERSION(4, 20, 0) */ 341 342 #if defined(NBUF_MEMORY_DEBUG) && defined(NETLINK_BUF_TRACK) 343 #define wlan_cfg80211_vendor_free_skb(skb) \ 344 qdf_nbuf_free(skb) 345 346 #define wlan_cfg80211_vendor_event(skb, gfp) \ 347 { \ 348 qdf_nbuf_count_dec(skb); \ 349 qdf_net_buf_debug_release_skb(skb); \ 350 cfg80211_vendor_event(skb, gfp); \ 351 } 352 353 #define wlan_cfg80211_vendor_cmd_reply(skb) \ 354 { \ 355 qdf_nbuf_count_dec(skb); \ 356 qdf_net_buf_debug_release_skb(skb); \ 357 cfg80211_vendor_cmd_reply(skb); \ 358 } 359 360 static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response(qdf_nbuf_t skb) 361 { 362 qdf_nbuf_count_dec(skb); 363 qdf_net_buf_debug_release_skb(skb); 364 return qal_devcfg_send_response(skb); 365 } 366 367 static inline struct sk_buff * 368 __cfg80211_vendor_cmd_alloc_reply_skb(struct wiphy *wiphy, int len, 369 const char *func, uint32_t line) 370 { 371 struct sk_buff *skb; 372 373 skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len); 374 if (skb) { 375 qdf_nbuf_count_inc(skb); 376 qdf_net_buf_debug_acquire_skb(skb, func, line); 377 } 378 return skb; 379 } 380 #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \ 381 __cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len, __func__, __LINE__) 382 383 static inline struct sk_buff * 384 __cfg80211_vendor_event_alloc(struct wiphy *wiphy, 385 struct wireless_dev *wdev, 386 int approxlen, 387 int event_idx, 388 gfp_t gfp, 389 const char *func, 390 uint32_t line) 391 { 392 struct sk_buff *skb; 393 394 skb = cfg80211_vendor_event_alloc(wiphy, wdev, 395 approxlen, 396 event_idx, 397 gfp); 398 if (skb) { 399 qdf_nbuf_count_inc(skb); 400 qdf_net_buf_debug_acquire_skb(skb, func, line); 401 } 402 return skb; 403 } 404 #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \ 405 __cfg80211_vendor_event_alloc(wiphy, wdev, len, \ 406 idx, gfp, \ 407 __func__, __LINE__) 408 #else /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */ 409 #define wlan_cfg80211_vendor_free_skb(skb) \ 410 kfree_skb(skb) 411 412 #define wlan_cfg80211_vendor_event(skb, gfp) \ 413 cfg80211_vendor_event(skb, gfp) 414 415 #define wlan_cfg80211_vendor_cmd_reply(skb) \ 416 cfg80211_vendor_cmd_reply(skb) 417 418 #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \ 419 cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) 420 421 #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \ 422 cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) 423 424 static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response( qdf_nbuf_t skb) 425 { 426 return qal_devcfg_send_response(skb); 427 } 428 #endif /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */ 429 430 #undef nla_parse 431 #undef nla_parse_nested 432 #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) 433 static inline int wlan_cfg80211_nla_parse(struct nlattr **tb, 434 int maxtype, 435 const struct nlattr *head, 436 int len, 437 const struct nla_policy *policy) 438 { 439 return nla_parse(tb, maxtype, head, len, policy); 440 } 441 442 static inline int 443 wlan_cfg80211_nla_parse_nested(struct nlattr *tb[], 444 int maxtype, 445 const struct nlattr *nla, 446 const struct nla_policy *policy) 447 { 448 return nla_parse_nested(tb, maxtype, nla, policy); 449 } 450 #else 451 static inline int wlan_cfg80211_nla_parse(struct nlattr **tb, 452 int maxtype, 453 const struct nlattr *head, 454 int len, 455 const struct nla_policy *policy) 456 { 457 return nla_parse(tb, maxtype, head, len, policy, NULL); 458 } 459 460 static inline int 461 wlan_cfg80211_nla_parse_nested(struct nlattr *tb[], 462 int maxtype, 463 const struct nlattr *nla, 464 const struct nla_policy *policy) 465 { 466 return nla_parse_nested(tb, maxtype, nla, policy, NULL); 467 } 468 #endif 469 #define nla_parse(...) (obsolete, use wlan_cfg80211_nla_parse) 470 #define nla_parse_nested(...) (obsolete, use wlan_cfg80211_nla_parse_nested) 471 472 #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)) 473 static inline int 474 wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) 475 { 476 return nla_put_u64(skb, attrtype, value); 477 } 478 #else 479 static inline int 480 wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) 481 { 482 return nla_put_u64_64bit(skb, attrtype, value, NL80211_ATTR_PAD); 483 } 484 #endif 485 486 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) 487 static inline ssize_t 488 wlan_cfg80211_nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize) 489 { 490 return nla_strlcpy(dst, nla, dstsize); 491 } 492 #else 493 static inline ssize_t 494 wlan_cfg80211_nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize) 495 { 496 return nla_strscpy(dst, nla, dstsize); 497 } 498 #endif 499 500 #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) 501 static inline int wlan_cfg80211_register_netdevice(struct net_device *dev) 502 { 503 return cfg80211_register_netdevice(dev); 504 } 505 #else 506 static inline int wlan_cfg80211_register_netdevice(struct net_device *dev) 507 { 508 return register_netdevice(dev); 509 } 510 #endif 511 512 #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) 513 static inline void wlan_cfg80211_unregister_netdevice(struct net_device *dev) 514 { 515 cfg80211_unregister_netdevice(dev); 516 } 517 #else 518 static inline void wlan_cfg80211_unregister_netdevice(struct net_device *dev) 519 { 520 unregister_netdevice(dev); 521 } 522 #endif 523 524 #ifdef CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT 525 static inline 526 void wlan_cfg80211_ch_switch_notify(struct net_device *dev, 527 struct cfg80211_chan_def *chandef, 528 unsigned int link_id) 529 { 530 cfg80211_ch_switch_notify(dev, chandef, link_id); 531 } 532 #else 533 static inline 534 void wlan_cfg80211_ch_switch_notify(struct net_device *dev, 535 struct cfg80211_chan_def *chandef, 536 unsigned int link_id) 537 { 538 cfg80211_ch_switch_notify(dev, chandef); 539 } 540 #endif 541 542 #endif 543