/* * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the * above copyright notice and this permission notice appear in all * copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /** * DOC: declares driver functions interfacing with linux kernel */ #ifndef _WLAN_CFG80211_H_ #define _WLAN_CFG80211_H_ #include #include #include #include #include #include #include "qal_devcfg.h" #include "wlan_osif_features.h" #define osif_alert(params...) \ QDF_TRACE_FATAL(QDF_MODULE_ID_OS_IF, params) #define osif_err(params...) \ QDF_TRACE_ERROR(QDF_MODULE_ID_OS_IF, params) #define osif_warn(params...) \ QDF_TRACE_WARN(QDF_MODULE_ID_OS_IF, params) #define osif_notice(params...) \ QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params) #define osif_info(params...) \ QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params) #define osif_debug(params...) \ QDF_TRACE_DEBUG(QDF_MODULE_ID_OS_IF, params) #define osif_rl_debug(params...) \ QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_OS_IF, params) #define osif_err_rl(params...) \ QDF_TRACE_ERROR_RL(QDF_MODULE_ID_OS_IF, params) #define osif_nofl_alert(params...) \ QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_OS_IF, params) #define osif_nofl_err(params...) \ QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_OS_IF, params) #define osif_nofl_warn(params...) \ QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_OS_IF, params) #define osif_nofl_info(params...) \ QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_OS_IF, params) #define osif_nofl_debug(params...) \ QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_OS_IF, params) #define osif_enter_dev(dev) \ QDF_TRACE_ENTER(QDF_MODULE_ID_OS_IF, "enter(%s)", (dev)->name) /** * enum qca_nl80211_vendor_subcmds_index - vendor sub commands index * * @QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY_INDEX: Avoid frequency * @QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX: Nan * @QCA_NL80211_VENDOR_SUBCMD_STATS_EXT_INDEX: Ext stats * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START_INDEX: Ext scan start * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP_INDEX: Ext scan stop * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES_INDEX: Ext scan get * capability * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS_INDEX: Ext scan get * cached results * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_RESULTS_AVAILABLE_INDEX: Ext scan * results available * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_FULL_SCAN_RESULT_INDEX: Ext scan full * scan result * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_EVENT_INDEX: Ext scan event * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_FOUND_INDEX: Ext scan hot list * AP found * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST_INDEX: Ext scan set * bssid hotlist * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST_INDEX: Ext scan reset * bssid hotlist * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX: Ext scan * significant change * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX: Ext scan * set significant change * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX: Ext scan * reset significant change * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET_INDEX: Set stats * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET_INDEX: Get stats * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_CLR_INDEX: Clear stats * @QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX: Radio stats * @QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX: Iface stats * @QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX: Peer info stats * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX: MAC layer counters * @QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX: Ext tdls state change * @QCA_NL80211_VENDOR_SUBCMD_DO_ACS_INDEX: ACS command * @QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX: Pass Roam and Auth info * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_STARTED_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_FINISHED_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_ABORTED_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_NOP_FINISHED_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_RADAR_DETECTED_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX: hotlist ap lost * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_NETWORK_FOUND_INDEX: * pno network found index * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND_INDEX: * passpoint match found index * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX: * set ssid hotlist index * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX: * reset ssid hotlist index * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX: * hotlist ssid found index * @QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX: * hotlist ssid lost index * @QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_MONITOR_RSSI_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_MEMORY_DUMP_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_DCC_STATS_EVENT_INDEX: * dcc stats event index * @QCA_NL80211_VENDOR_SUBCMD_SCAN_INDEX: vendor scan index * @QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE_INDEX: * vendor scan complete event index * @QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG_INDEX: * update gateway parameters index * @QCA_NL80211_VENDOR_SUBCMD_INTEROP_ISSUES_AP_INDEX: * update aps info which has interop issues events index * @QCA_NL80211_VENDOR_SUBCMD_TSF_INDEX: TSF response events index * @QCA_NL80211_VENDOR_SUBCMD_NDP_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_P2P_LO_EVENT_INDEX: * P2P listen offload index * @QCA_NL80211_VENDOR_SUBCMD_SAP_CONDITIONAL_CHAN_SWITCH_INDEX: SAP * conditional channel switch index * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_EXTERNAL_ACS_CONFIG: * @QCA_NL80211_VENDOR_SUBCMD_PWR_SAVE_FAIL_DETECTED_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX: NUD DEBUG Stats index * @QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX: hang event reason index * @QCA_NL80211_VENDOR_SUBCMD_WLAN_MAC_INFO_INDEX: MAC mode info index * @QCA_NL80211_VENDOR_SUBCMD_NAN_EXT_INDEX: NAN Extended index * @QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_PEER_STATS_CACHE_FLUSH_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_BEACON_REPORTING_INDEX: Beacon reporting index * @QCA_NL80211_VENDOR_SUBCMD_ROAM_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_OEM_DATA_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_INDEX: Request SAR limit index * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO_INDEX: Update STA info index * @QCA_NL80211_VENDOR_SUBCMD_MEDIUM_ASSESS_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX: Update SSID index * @QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX: Wifi FW stats index * @QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX: * MBSSID TX VDEV status index * @QCA_NL80211_VENDOR_SUBCMD_THERMAL_INDEX: Report thermal event index * @QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX: TWT config index * @QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG_INDEX: CFR data event index * @QCA_NL80211_VENDOR_SUBCMD_DIAG_EVENT_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_ROAM_EVENTS_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_MCC_QUOTA_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_PEER_FLUSH_PENDING_INDEX: * @QCA_NL80211_VENDOR_SUBCMD_DRIVER_READY_INDEX: Driver Ready after SSR index * @QCA_NL80211_VENDOR_SUBCMD_PASN_AUTH_STATUS_INDEX: PASN auth status index * @QCA_NL80211_VENDOR_SUBCMD_SCS_RULE_CONFIG_INDEX: SCS rule config index * @QCA_NL80211_VENDOR_SUBCMD_SR_INDEX: SR Event index * @QCA_NL80211_VENDOR_SUBCMD_MLO_PEER_PRIM_NETDEV_EVENT_INDEX: primary netdev * event index * @QCA_NL80211_VENDOR_SUBCMD_AFC_EVENT_INDEX: AFC Event index * @QCA_NL80211_VENDOR_SUBCMD_DOZED_AP_INDEX: Dozed AP event index * @QCA_NL80211_VENDOR_SUBCMD_ROAM_STATS_INDEX: Roam stats index index * @QCA_NL80211_VENDOR_SUBCMD_CONNECTED_CHANNEL_STATS_INDEX: Connected channel * stats index * @QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON_INDEX: * Driver disconnect reason index * @QCA_NL80211_VENDOR_SUBCMD_TID_TO_LINK_MAP_INDEX: TID-to-link map index * @QCA_NL80211_VENDOR_SUBCMD_LINK_RECONFIG_INDEX: link reconfig event index * @QCA_NL80211_VENDOR_SUBCMD_AUDIO_TRANSPORT_SWITCH_INDEX: Audio transport * switch event index * @QCA_NL80211_VENDOR_SUBCMD_TX_LATENCY_INDEX: event index for transmit * latency stats * @QCA_NL80211_VENDOR_SUBCMD_RECONFIG_REMOVE_COMPLETE_EVENT_INDEX: ML Reconfig * remove complete event index * @QCA_NL80211_VENDOR_SUBCMD_FW_PAGE_FAULT_REPORT_INDEX: Pagefault report * event index */ enum qca_nl80211_vendor_subcmds_index { QCA_NL80211_VENDOR_SUBCMD_AVOID_FREQUENCY_INDEX = 0, QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX, #ifdef WLAN_FEATURE_STATS_EXT QCA_NL80211_VENDOR_SUBCMD_STATS_EXT_INDEX, #endif /* WLAN_FEATURE_STATS_EXT */ #ifdef FEATURE_WLAN_EXTSCAN QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_START_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_STOP_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CAPABILITIES_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_GET_CACHED_RESULTS_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_RESULTS_AVAILABLE_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_FULL_SCAN_RESULT_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SCAN_EVENT_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_FOUND_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_BSSID_HOTLIST_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_BSSID_HOTLIST_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SIGNIFICANT_CHANGE_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SIGNIFICANT_CHANGE_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SIGNIFICANT_CHANGE_INDEX, #endif /* FEATURE_WLAN_EXTSCAN */ #ifdef WLAN_FEATURE_LINK_LAYER_STATS QCA_NL80211_VENDOR_SUBCMD_LL_STATS_SET_INDEX, QCA_NL80211_VENDOR_SUBCMD_LL_STATS_GET_INDEX, QCA_NL80211_VENDOR_SUBCMD_LL_STATS_CLR_INDEX, QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX, QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX, QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX, QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX, #endif /* WLAN_FEATURE_LINK_LAYER_STATS */ QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX, QCA_NL80211_VENDOR_SUBCMD_DO_ACS_INDEX, #ifdef WLAN_FEATURE_ROAM_OFFLOAD QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX, #endif /* DFS */ QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_STARTED_INDEX, QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_FINISHED_INDEX, QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_ABORTED_INDEX, QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_CAC_NOP_FINISHED_INDEX, QCA_NL80211_VENDOR_SUBCMD_DFS_OFFLOAD_RADAR_DETECTED_INDEX, #ifdef FEATURE_WLAN_EXTSCAN QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_AP_LOST_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_NETWORK_FOUND_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_PNO_PASSPOINT_NETWORK_FOUND_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_SET_SSID_HOTLIST_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_RESET_SSID_HOTLIST_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_FOUND_INDEX, QCA_NL80211_VENDOR_SUBCMD_EXTSCAN_HOTLIST_SSID_LOST_INDEX, #endif /* FEATURE_WLAN_EXTSCAN */ QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION_INDEX, QCA_NL80211_VENDOR_SUBCMD_MONITOR_RSSI_INDEX, #ifdef WLAN_FEATURE_MEMDUMP QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_MEMORY_DUMP_INDEX, #endif /* WLAN_FEATURE_MEMDUMP */ /* OCB events */ QCA_NL80211_VENDOR_SUBCMD_DCC_STATS_EVENT_INDEX, QCA_NL80211_VENDOR_SUBCMD_SCAN_INDEX, QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE_INDEX, QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG_INDEX, QCA_NL80211_VENDOR_SUBCMD_INTEROP_ISSUES_AP_INDEX, #ifdef WLAN_FEATURE_TSF QCA_NL80211_VENDOR_SUBCMD_TSF_INDEX, #endif QCA_NL80211_VENDOR_SUBCMD_NDP_INDEX, QCA_NL80211_VENDOR_SUBCMD_P2P_LO_EVENT_INDEX, QCA_NL80211_VENDOR_SUBCMD_SAP_CONDITIONAL_CHAN_SWITCH_INDEX, QCA_NL80211_VENDOR_SUBCMD_UPDATE_EXTERNAL_ACS_CONFIG, QCA_NL80211_VENDOR_SUBCMD_PWR_SAVE_FAIL_DETECTED_INDEX, QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_GET_INDEX, QCA_NL80211_VENDOR_SUBCMD_HANG_REASON_INDEX, QCA_NL80211_VENDOR_SUBCMD_WLAN_MAC_INFO_INDEX, QCA_NL80211_VENDOR_SUBCMD_NAN_EXT_INDEX, QCA_NL80211_VENDOR_SUBCMD_THROUGHPUT_CHANGE_EVENT_INDEX, QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES_INDEX, QCA_NL80211_VENDOR_SUBCMD_PEER_STATS_CACHE_FLUSH_INDEX, QCA_NL80211_VENDOR_SUBCMD_BEACON_REPORTING_INDEX, QCA_NL80211_VENDOR_SUBCMD_ROAM_INDEX, QCA_NL80211_VENDOR_SUBCMD_OEM_DATA_INDEX, QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_INDEX, QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO_INDEX, QCA_NL80211_VENDOR_SUBCMD_MEDIUM_ASSESS_INDEX, QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID_INDEX, QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS_INDEX, QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS_INDEX, QCA_NL80211_VENDOR_SUBCMD_THERMAL_INDEX, QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON_INDEX, #ifdef WLAN_SUPPORT_TWT QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX, #endif #ifdef WLAN_CFR_ENABLE QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG_INDEX, #endif #ifdef WLAN_FEATURE_CONNECTIVITY_LOGGING QCA_NL80211_VENDOR_SUBCMD_DIAG_EVENT_INDEX, #endif #ifdef WLAN_FEATURE_ROAM_OFFLOAD QCA_NL80211_VENDOR_SUBCMD_ROAM_EVENTS_INDEX, #endif QCA_NL80211_VENDOR_SUBCMD_MCC_QUOTA_INDEX, QCA_NL80211_VENDOR_SUBCMD_PEER_FLUSH_PENDING_INDEX, QCA_NL80211_VENDOR_SUBCMD_DRIVER_READY_INDEX, QCA_NL80211_VENDOR_SUBCMD_PASN_AUTH_STATUS_INDEX, QCA_NL80211_VENDOR_SUBCMD_SCS_RULE_CONFIG_INDEX, #ifdef WLAN_FEATURE_SR QCA_NL80211_VENDOR_SUBCMD_SR_INDEX, #endif QCA_NL80211_VENDOR_SUBCMD_MLO_PEER_PRIM_NETDEV_EVENT_INDEX, #ifdef CONFIG_AFC_SUPPORT QCA_NL80211_VENDOR_SUBCMD_AFC_EVENT_INDEX, #endif #ifdef WLAN_SUPPORT_GAP_LL_PS_MODE QCA_NL80211_VENDOR_SUBCMD_DOZED_AP_INDEX, #endif #ifdef WLAN_FEATURE_ROAM_INFO_STATS QCA_NL80211_VENDOR_SUBCMD_ROAM_STATS_INDEX, #endif QCA_NL80211_VENDOR_SUBCMD_CONNECTED_CHANNEL_STATS_INDEX, #ifdef WLAN_FEATURE_11BE_MLO QCA_NL80211_VENDOR_SUBCMD_TID_TO_LINK_MAP_INDEX, #ifdef CONN_MGR_ADV_FEATURE QCA_NL80211_VENDOR_SUBCMD_LINK_RECONFIG_INDEX, #endif #endif QCA_NL80211_VENDOR_SUBCMD_AUDIO_TRANSPORT_SWITCH_INDEX, #ifdef WLAN_FEATURE_TX_LATENCY_STATS QCA_NL80211_VENDOR_SUBCMD_TX_LATENCY_INDEX, #endif QCA_NL80211_VENDOR_SUBCMD_RECONFIG_REMOVE_COMPLETE_EVENT_INDEX, QCA_NL80211_VENDOR_SUBCMD_FW_PAGE_FAULT_REPORT_INDEX, }; #if !defined(SUPPORT_WDEV_CFG80211_VENDOR_EVENT_ALLOC) && \ (LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)) && \ !defined(WITH_BACKPORTS) static inline struct sk_buff * backported_cfg80211_vendor_event_alloc(struct wiphy *wiphy, struct wireless_dev *wdev, int approxlen, int event_idx, gfp_t gfp) { struct sk_buff *skb; skb = cfg80211_vendor_event_alloc(wiphy, approxlen, event_idx, gfp); if (skb && wdev) { struct nlattr *attr; u32 ifindex = wdev->netdev->ifindex; nla_nest_cancel(skb, ((void **)skb->cb)[2]); if (nla_put_u32(skb, NL80211_ATTR_IFINDEX, ifindex)) goto nla_fail; attr = nla_nest_start(skb, NL80211_ATTR_VENDOR_DATA); ((void **)skb->cb)[2] = attr; } return skb; nla_fail: kfree_skb(skb); return NULL; } #define cfg80211_vendor_event_alloc backported_cfg80211_vendor_event_alloc #endif /* For kernel version >= 5.2, driver needs to provide policy */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0)) #define vendor_command_policy(__policy, __maxattr) \ .policy = __policy, \ .maxattr = __maxattr #define VENDOR_NLA_POLICY_NESTED(__policy) \ NLA_POLICY_NESTED(__policy) #define VENDOR_NLA_POLICY_NESTED_ARRAY(__policy) \ NLA_POLICY_NESTED_ARRAY(__policy) #else #define vendor_command_policy(__policy, __maxattr) #define VENDOR_NLA_POLICY_NESTED(__policy) {.type = NLA_NESTED} #define VENDOR_NLA_POLICY_NESTED_ARRAY(__policy) \ VENDOR_NLA_POLICY_NESTED(__policy) #endif /*End of (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0) */ /* For kernel version <= 4.20, driver needs to provide policy */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)) #define VENDOR_NLA_POLICY_MAC_ADDR NLA_POLICY_ETH_ADDR #define VENDOR_NLA_POLICY_IPV4_ADDR NLA_POLICY_EXACT_LEN(QDF_IPV4_ADDR_SIZE) #define VENDOR_NLA_POLICY_IPV6_ADDR NLA_POLICY_EXACT_LEN(QDF_IPV6_ADDR_SIZE) #else #define VENDOR_NLA_POLICY_MAC_ADDR \ {.type = NLA_UNSPEC, .len = QDF_MAC_ADDR_SIZE} #define NLA_EXACT_LEN NLA_UNSPEC #define VENDOR_NLA_POLICY_IPV4_ADDR \ {.type = NLA_EXACT_LEN, .len = QDF_IPV4_ADDR_SIZE} #define VENDOR_NLA_POLICY_IPV6_ADDR \ {.type = NLA_EXACT_LEN, .len = QDF_IPV6_ADDR_SIZE} #endif /*End of (LINUX_VERSION_CODE <= KERNEL_VERSION(4, 20, 0) */ #if defined(NBUF_MEMORY_DEBUG) && defined(NETLINK_BUF_TRACK) #define wlan_cfg80211_vendor_free_skb(skb) \ qdf_nbuf_free(skb) #define wlan_cfg80211_vendor_event(skb, gfp) \ { \ qdf_nbuf_count_dec(skb); \ qdf_net_buf_debug_release_skb(skb); \ cfg80211_vendor_event(skb, gfp); \ } #define wlan_cfg80211_vendor_cmd_reply(skb) \ { \ qdf_nbuf_count_dec(skb); \ qdf_net_buf_debug_release_skb(skb); \ cfg80211_vendor_cmd_reply(skb); \ } static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response(qdf_nbuf_t skb) { qdf_nbuf_count_dec(skb); qdf_net_buf_debug_release_skb(skb); return qal_devcfg_send_response(skb); } static inline struct sk_buff * __cfg80211_vendor_cmd_alloc_reply_skb(struct wiphy *wiphy, int len, const char *func, uint32_t line) { struct sk_buff *skb; skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len); if (skb) { qdf_nbuf_count_inc(skb); qdf_net_buf_debug_acquire_skb(skb, func, line); } return skb; } #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \ __cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len, __func__, __LINE__) static inline struct sk_buff * __cfg80211_vendor_event_alloc(struct wiphy *wiphy, struct wireless_dev *wdev, int approxlen, int event_idx, gfp_t gfp, const char *func, uint32_t line) { struct sk_buff *skb; skb = cfg80211_vendor_event_alloc(wiphy, wdev, approxlen, event_idx, gfp); if (skb) { qdf_nbuf_count_inc(skb); qdf_net_buf_debug_acquire_skb(skb, func, line); } return skb; } #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \ __cfg80211_vendor_event_alloc(wiphy, wdev, len, \ idx, gfp, \ __func__, __LINE__) #else /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */ #define wlan_cfg80211_vendor_free_skb(skb) \ kfree_skb(skb) #define wlan_cfg80211_vendor_event(skb, gfp) \ cfg80211_vendor_event(skb, gfp) #define wlan_cfg80211_vendor_cmd_reply(skb) \ cfg80211_vendor_cmd_reply(skb) #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \ cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \ cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response( qdf_nbuf_t skb) { return qal_devcfg_send_response(skb); } #endif /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */ #undef nla_parse #undef nla_parse_nested #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) static inline int wlan_cfg80211_nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, int len, const struct nla_policy *policy) { return nla_parse(tb, maxtype, head, len, policy); } static inline int wlan_cfg80211_nla_parse_nested(struct nlattr *tb[], int maxtype, const struct nlattr *nla, const struct nla_policy *policy) { return nla_parse_nested(tb, maxtype, nla, policy); } #else static inline int wlan_cfg80211_nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, int len, const struct nla_policy *policy) { return nla_parse(tb, maxtype, head, len, policy, NULL); } static inline int wlan_cfg80211_nla_parse_nested(struct nlattr *tb[], int maxtype, const struct nlattr *nla, const struct nla_policy *policy) { return nla_parse_nested(tb, maxtype, nla, policy, NULL); } #endif #define nla_parse(...) (obsolete, use wlan_cfg80211_nla_parse) #define nla_parse_nested(...) (obsolete, use wlan_cfg80211_nla_parse_nested) /** * wlan_cfg80211_nla_put_u64() - Add u64 attribute to an skb and align it * @skb: SKB to add attribute(s) to * @attrtype: u64 attribute id * @value: u64 attribute value * * This function adds a u64 attribute, and optionally a pad attribute, to the * skb. If this function adds a pad attribute, that pad attribute is defined * in enum qca_wlan_vendor_attr, so only 64-bit attributes that are defined * in enum qca_wlan_vendor_attr should use this interface. For other u64 * attributes, use function wlan_cfg80211_nla_put_u64_64bit() since that * allows the pad attribute to be specified. * * Return: 0 if u64 attribute and optional pad attribute added to skb, * negative errno if operation fails */ #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)) static inline int wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) { return nla_put_u64(skb, attrtype, value); } #else static inline int wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) { return nla_put_u64_64bit(skb, attrtype, value, NL80211_ATTR_PAD); } #endif /** * wlan_cfg80211_nla_put_u64_64bit() - Add u64 attribute to an skb and align it * @skb: SKB to add attribute(s) to * @attrtype: u64 attribute id * @value: u64 attribute value * @padattr: padding attribute id * * This function adds a u64 attribute, and optionally a pad attribute, * to the skb. Unlike wlan_cfg80211_nla_put_u64() which can only be * used with attributes defined in enum qca_wlan_vendor_attr, this * function can be used with attributes defined in any enum, provided * that the enum also defines a pad attribute. * * Return: 0 if u64 attribute and optional pad attribute added to skb, * negative errno if operation fails */ #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)) static inline int wlan_cfg80211_nla_put_u64_64bit(struct sk_buff *skb, int attrtype, u64 value, int padattr) { return nla_put_u64(skb, attrtype, value); } #else static inline int wlan_cfg80211_nla_put_u64_64bit(struct sk_buff *skb, int attrtype, u64 value, int padattr) { return nla_put_u64_64bit(skb, attrtype, value, padattr); } #endif #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) static inline ssize_t wlan_cfg80211_nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize) { return nla_strlcpy(dst, nla, dstsize); } #else static inline ssize_t wlan_cfg80211_nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize) { return nla_strscpy(dst, nla, dstsize); } #endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) || \ (defined CFG80211_CHANGE_NETDEV_REGISTRATION_SEMANTICS)) static inline int wlan_cfg80211_register_netdevice(struct net_device *dev) { return cfg80211_register_netdevice(dev); } #else static inline int wlan_cfg80211_register_netdevice(struct net_device *dev) { return register_netdevice(dev); } #endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) || \ (defined CFG80211_CHANGE_NETDEV_REGISTRATION_SEMANTICS)) static inline void wlan_cfg80211_unregister_netdevice(struct net_device *dev) { cfg80211_unregister_netdevice(dev); } #else static inline void wlan_cfg80211_unregister_netdevice(struct net_device *dev) { unregister_netdevice(dev); } #endif #ifdef CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT #if defined(CFG80211_RU_PUNCT_NOTIFY) || \ defined(CFG80211_PUNCTURING_SINGLE_NETDEV_API) static inline void wlan_cfg80211_ch_switch_notify(struct net_device *dev, struct cfg80211_chan_def *chandef, unsigned int link_id, uint16_t puncture_bitmap) { cfg80211_ch_switch_notify(dev, chandef, link_id, puncture_bitmap); } #else static inline void wlan_cfg80211_ch_switch_notify(struct net_device *dev, struct cfg80211_chan_def *chandef, unsigned int link_id, uint16_t puncture_bitmap) { cfg80211_ch_switch_notify(dev, chandef, link_id); } #endif #else static inline void wlan_cfg80211_ch_switch_notify(struct net_device *dev, struct cfg80211_chan_def *chandef, unsigned int link_id, uint16_t puncture_bitmap) { cfg80211_ch_switch_notify(dev, chandef); } #endif #endif