Files
android_kernel_samsung_sm86…/os_if/linux/wlan_cfg80211.h
Vinod Kumar Pirla 784c8b910d qcacmn: Add new vendor event to notify fw pagefault
Introduce new event type to notify userspace about FW
pagefault. Use this new vendor subcommand to send
pagefault address and count of pagefault to userspace.

Change-Id: I330675b194a0f220cc627a0722494ba36a0def61
CRs-Fixed: 3713819
2024-02-07 01:39:38 -08:00

665 lines
24 KiB
C

/*
* 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 <linux/version.h>
#include <linux/netdevice.h>
#include <net/netlink.h>
#include <net/cfg80211.h>
#include <qca_vendor.h>
#include <qdf_nbuf.h>
#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