qcacld-3.0: Featurize monitor mode

Featurize monitor mode code.

Change-Id: I42d2d6a92d9097676ab3f8ec4a86958b8c0bc096
CRs-Fixed: 2245419
This commit is contained in:
Nirav Shah 2018-05-17 14:50:41 +05:30 committed by nshrivas
parent 8e89d57e0e
commit 73713f7e80
15 changed files with 1364 additions and 1200 deletions

4
Kbuild
View File

@ -946,6 +946,9 @@ HTT_OBJS := $(HTT_DIR)/htt_tx.o \
$(HTT_DIR)/htt_fw_stats.o \
$(HTT_DIR)/htt_rx.o
ifeq ($(CONFIG_FEATURE_MONITOR_MODE_SUPPORT), y)
HTT_OBJS += $(HTT_DIR)/htt_monitor_rx.o
endif
############## INIT-DEINIT ###########
INIT_DEINIT_DIR := init_deinit/dispatcher
@ -1487,6 +1490,7 @@ cppflags-$(CONFIG_HDD_INIT_WITH_RTNL_LOCK) += -DCONFIG_HDD_INIT_WITH_RTNL_LOCK
cppflags-$(CONFIG_CONVERGED_TDLS_ENABLE) += -DCONVERGED_TDLS_ENABLE
cppflags-$(CONFIG_WLAN_CONV_SPECTRAL_ENABLE) += -DWLAN_CONV_SPECTRAL_ENABLE
cppflags-$(CONFIG_WMI_CMD_STRINGS) += -DWMI_CMD_STRINGS
cppflags-$(CONFIG_FEATURE_MONITOR_MODE_SUPPORT) += -DFEATURE_MONITOR_MODE_SUPPORT
cppflags-$(CONFIG_WLAN_DISABLE_EXPORT_SYMBOL) += -DWLAN_DISABLE_EXPORT_SYMBOL
cppflags-$(CONFIG_WIFI_POS_CONVERGED) += -DWIFI_POS_CONVERGED

View File

@ -507,6 +507,7 @@ CONFIG_CONVERGED_TDLS_ENABLE := y
CONFIG_WLAN_CONV_SPECTRAL_ENABLE := y
CONFIG_WLAN_SPECTRAL_ENABLE := y
CONFIG_WMI_CMD_STRINGS := y
CONFIG_FEATURE_MONITOR_MODE_SUPPORT := y
ifeq ($(CONFIG_HELIUMPLUS), y)
ifneq ($(CONFIG_FORCE_ALLOC_FROM_DMA_ZONE), y)

View File

@ -60,6 +60,7 @@ CONFIG_TX_CREDIT_RECLAIM_SUPPORT := n
CONFIG_CHECKSUM_OFFLOAD := y
CONFIG_QCA_SUPPORT_TX_THROTTLE := y
CONFIG_RX_OL := y
CONFIG_FEATURE_MONITOR_MODE_SUPPORT := y
ifeq ($(CONFIG_INET_LRO), y)
CONFIG_WLAN_LRO := y

View File

@ -896,4 +896,141 @@ void htt_rx_dbg_rxbuf_deinit(struct htt_pdev_t *pdev)
return;
}
#endif
#ifndef CONFIG_HL_SUPPORT
#ifdef HTT_DEBUG_DATA
#define HTT_PKT_DUMP(x) x
#else
#define HTT_PKT_DUMP(x) /* no-op */
#endif
#ifdef RX_HASH_DEBUG
#define HTT_RX_CHECK_MSDU_COUNT(msdu_count) HTT_ASSERT_ALWAYS(msdu_count)
#else
#define HTT_RX_CHECK_MSDU_COUNT(msdu_count) /* no-op */
#endif
#if HTT_PADDR64
#define NEXT_FIELD_OFFSET_IN32 2
#else /* ! HTT_PADDR64 */
#define NEXT_FIELD_OFFSET_IN32 1
#endif /* HTT_PADDR64 */
#define RX_PADDR_MAGIC_PATTERN 0xDEAD0000
#if HTT_PADDR64
static inline qdf_dma_addr_t htt_paddr_trim_to_37(qdf_dma_addr_t paddr)
{
qdf_dma_addr_t ret = paddr;
if (sizeof(paddr) > 4)
ret &= 0x1fffffffff;
return ret;
}
#else /* not 64 bits */
static inline qdf_dma_addr_t htt_paddr_trim_to_37(qdf_dma_addr_t paddr)
{
return paddr;
}
#endif /* HTT_PADDR64 */
#ifdef ENABLE_DEBUG_ADDRESS_MARKING
static inline qdf_dma_addr_t
htt_rx_paddr_unmark_high_bits(qdf_dma_addr_t paddr)
{
uint32_t markings;
if (sizeof(qdf_dma_addr_t) > 4) {
markings = (uint32_t)((paddr >> 16) >> 16);
/*
* check if it is marked correctly:
* See the mark_high_bits function above for the expected
* pattern.
* the LS 5 bits are the high bits of physical address
* padded (with 0b0) to 8 bits
*/
if ((markings & 0xFFFF0000) != RX_PADDR_MAGIC_PATTERN) {
qdf_print("%s: paddr not marked correctly: 0x%pK!\n",
__func__, (void *)paddr);
HTT_ASSERT_ALWAYS(0);
}
/* clear markings for further use */
paddr = htt_paddr_trim_to_37(paddr);
}
return paddr;
}
static inline
qdf_dma_addr_t htt_rx_in_ord_paddr_get(uint32_t *u32p)
{
qdf_dma_addr_t paddr = 0;
paddr = (qdf_dma_addr_t)HTT_RX_IN_ORD_PADDR_IND_PADDR_GET(*u32p);
if (sizeof(qdf_dma_addr_t) > 4) {
u32p++;
/* 32 bit architectures dont like <<32 */
paddr |= (((qdf_dma_addr_t)
HTT_RX_IN_ORD_PADDR_IND_PADDR_GET(*u32p))
<< 16 << 16);
}
paddr = htt_rx_paddr_unmark_high_bits(paddr);
return paddr;
}
#else
#if HTT_PADDR64
static inline
qdf_dma_addr_t htt_rx_in_ord_paddr_get(uint32_t *u32p)
{
qdf_dma_addr_t paddr = 0;
paddr = (qdf_dma_addr_t)HTT_RX_IN_ORD_PADDR_IND_PADDR_GET(*u32p);
if (sizeof(qdf_dma_addr_t) > 4) {
u32p++;
/* 32 bit architectures dont like <<32 */
paddr |= (((qdf_dma_addr_t)
HTT_RX_IN_ORD_PADDR_IND_PADDR_GET(*u32p))
<< 16 << 16);
}
return paddr;
}
#else
static inline
qdf_dma_addr_t htt_rx_in_ord_paddr_get(uint32_t *u32p)
{
return HTT_RX_IN_ORD_PADDR_IND_PADDR_GET(*u32p);
}
#endif
#endif /* ENABLE_DEBUG_ADDRESS_MARKING */
static inline qdf_nbuf_t
htt_rx_in_order_netbuf_pop(htt_pdev_handle pdev, qdf_dma_addr_t paddr)
{
HTT_ASSERT1(htt_rx_in_order_ring_elems(pdev) != 0);
pdev->rx_ring.fill_cnt--;
paddr = htt_paddr_trim_to_37(paddr);
return htt_rx_hash_list_lookup(pdev, paddr);
}
#ifdef FEATURE_MONITOR_MODE_SUPPORT
int htt_rx_mon_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev,
qdf_nbuf_t rx_ind_msg,
qdf_nbuf_t *head_msdu,
qdf_nbuf_t *tail_msdu,
uint32_t *replenish_cnt);
#else
static inline
int htt_rx_mon_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev,
qdf_nbuf_t rx_ind_msg,
qdf_nbuf_t *head_msdu,
qdf_nbuf_t *tail_msdu,
uint32_t *replenish_cnt)
{
return 0;
}
#endif
#endif
#endif /* _HTT_INTERNAL__H_ */

1055
core/dp/htt/htt_monitor_rx.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -360,9 +360,17 @@ static inline void htt_ipa_uc_detach(struct htt_pdev_t *pdev)
}
#endif /* IPA_OFFLOAD */
#ifdef FEATURE_MONITOR_MODE_SUPPORT
void htt_rx_mon_note_capture_channel(htt_pdev_handle pdev, int mon_ch);
void ol_htt_mon_note_chan(struct cdp_pdev *ppdev, int mon_ch);
#else
static inline
void htt_rx_mon_note_capture_channel(htt_pdev_handle pdev, int mon_ch) {}
static inline
void ol_htt_mon_note_chan(struct cdp_pdev *ppdev, int mon_ch) {}
#endif
#if defined(DEBUG_HL_LOGGING) && defined(CONFIG_HL_SUPPORT)

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011-2017 The Linux Foundation. All rights reserved.
* Copyright (c) 2011-2018 The Linux Foundation. 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
@ -824,11 +824,22 @@ int htt_rx_msdu_buff_in_order_replenish(htt_pdev_handle pdev, uint32_t num);
* list, else operates on a cloned nbuf
* @return network buffer handle to the MPDU
*/
#if !defined(QCA6290_HEADERS_DEF) && defined(FEATURE_MONITOR_MODE_SUPPORT)
qdf_nbuf_t
htt_rx_restitch_mpdu_from_msdus(htt_pdev_handle pdev,
qdf_nbuf_t head_msdu,
struct ieee80211_rx_status *rx_status,
unsigned clone_not_reqd);
#else
static inline qdf_nbuf_t
htt_rx_restitch_mpdu_from_msdus(htt_pdev_handle pdev,
qdf_nbuf_t head_msdu,
struct ieee80211_rx_status *rx_status,
unsigned clone_not_reqd)
{
return NULL;
}
#endif
/**
* @brief Return the sequence number of MPDUs to flush.

View File

@ -1718,6 +1718,7 @@ ol_rx_offload_paddr_deliver_ind_handler(htt_pdev_handle htt_pdev,
}
#endif
#ifdef FEATURE_MONITOR_MODE_SUPPORT
/**
* ol_htt_mon_note_chan() - Update monitor channel information
* @pdev: handle to the physical device
@ -1731,6 +1732,7 @@ void ol_htt_mon_note_chan(struct cdp_pdev *ppdev, int mon_ch)
htt_rx_mon_note_capture_channel(pdev->htt_pdev, mon_ch);
}
#endif
#ifdef NEVERDEFINED
/**

View File

@ -3176,6 +3176,7 @@ bool hdd_is_cli_iface_up(struct hdd_context *hdd_ctx);
*/
void hdd_set_disconnect_status(struct hdd_adapter *adapter, bool disconnecting);
#ifdef FEATURE_MONITOR_MODE_SUPPORT
/**
* wlan_hdd_set_mon_chan() - Set capture channel on the monitor mode interface.
* @adapter: Handle to adapter
@ -3186,6 +3187,14 @@ void hdd_set_disconnect_status(struct hdd_adapter *adapter, bool disconnecting);
*/
int wlan_hdd_set_mon_chan(struct hdd_adapter *adapter, uint32_t chan,
uint32_t bandwidth);
#else
static inline
int wlan_hdd_set_mon_chan(struct hdd_adapter *adapter, uint32_t chan,
uint32_t bandwidth)
{
return 0;
}
#endif
/**
* hdd_wlan_get_version() - Get version information

View File

@ -181,7 +181,17 @@ const char *hdd_reason_type_to_string(enum netif_reason_type reason);
const char *hdd_action_type_to_string(enum netif_action_type action);
void wlan_hdd_netif_queue_control(struct hdd_adapter *adapter,
enum netif_action_type action, enum netif_reason_type reason);
#ifdef FEATURE_MONITOR_MODE_SUPPORT
int hdd_set_mon_rx_cb(struct net_device *dev);
#else
static inline
int hdd_set_mon_rx_cb(struct net_device *dev)
{
return 0;
}
#endif
void hdd_send_rps_ind(struct hdd_adapter *adapter);
void hdd_send_rps_disable_ind(struct hdd_adapter *adapter);
void wlan_hdd_classify_pkt(struct sk_buff *skb);

View File

@ -17541,6 +17541,64 @@ wlan_hdd_cfg80211_roam_metrics_handover(struct hdd_adapter *adapter,
}
#endif
#ifdef FEATURE_MONITOR_MODE_SUPPORT
static
void hdd_mon_select_cbmode(struct hdd_adapter *adapter,
uint8_t operationChannel,
struct ch_params *ch_params)
{
struct hdd_station_ctx *station_ctx =
WLAN_HDD_GET_STATION_CTX_PTR(adapter);
struct hdd_mon_set_ch_info *ch_info = &station_ctx->ch_info;
enum hdd_dot11_mode hdd_dot11_mode;
uint8_t ini_dot11_mode =
(WLAN_HDD_GET_CTX(adapter))->config->dot11Mode;
hdd_debug("Dot11Mode is %u", ini_dot11_mode);
switch (ini_dot11_mode) {
case eHDD_DOT11_MODE_AUTO:
case eHDD_DOT11_MODE_11ax:
case eHDD_DOT11_MODE_11ax_ONLY:
if (sme_is_feature_supported_by_fw(DOT11AX))
hdd_dot11_mode = eHDD_DOT11_MODE_11ax;
else if (sme_is_feature_supported_by_fw(DOT11AC))
hdd_dot11_mode = eHDD_DOT11_MODE_11ac;
else
hdd_dot11_mode = eHDD_DOT11_MODE_11n;
break;
case eHDD_DOT11_MODE_11ac:
case eHDD_DOT11_MODE_11ac_ONLY:
if (sme_is_feature_supported_by_fw(DOT11AC))
hdd_dot11_mode = eHDD_DOT11_MODE_11ac;
else
hdd_dot11_mode = eHDD_DOT11_MODE_11n;
break;
case eHDD_DOT11_MODE_11n:
case eHDD_DOT11_MODE_11n_ONLY:
hdd_dot11_mode = eHDD_DOT11_MODE_11n;
break;
default:
hdd_dot11_mode = ini_dot11_mode;
break;
}
ch_info->channel_width = ch_params->ch_width;
ch_info->phy_mode =
hdd_cfg_xlate_to_csr_phy_mode(hdd_dot11_mode);
ch_info->channel = operationChannel;
ch_info->cb_mode = ch_params->ch_width;
hdd_debug("ch_info width %d, phymode %d channel %d",
ch_info->channel_width, ch_info->phy_mode,
ch_info->channel);
}
#else
static
void hdd_mon_select_cbmode(struct hdd_adapter *adapter,
uint8_t operationChannel,
struct ch_params *ch_params)
{
}
#endif
/**
* hdd_select_cbmode() - select channel bonding mode
* @adapter: Pointer to adapter
@ -17552,8 +17610,6 @@ wlan_hdd_cfg80211_roam_metrics_handover(struct hdd_adapter *adapter,
void hdd_select_cbmode(struct hdd_adapter *adapter, uint8_t operationChannel,
struct ch_params *ch_params)
{
struct hdd_station_ctx *station_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
struct hdd_mon_set_ch_info *ch_info = &station_ctx->ch_info;
uint8_t sec_ch = 0;
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
@ -17573,47 +17629,8 @@ void hdd_select_cbmode(struct hdd_adapter *adapter, uint8_t operationChannel,
wlan_reg_set_channel_params(hdd_ctx->hdd_pdev, operationChannel,
sec_ch, ch_params);
if (QDF_GLOBAL_MONITOR_MODE == cds_get_conparam()) {
enum hdd_dot11_mode hdd_dot11_mode;
uint8_t iniDot11Mode =
(WLAN_HDD_GET_CTX(adapter))->config->dot11Mode;
hdd_debug("Dot11Mode is %u", iniDot11Mode);
switch (iniDot11Mode) {
case eHDD_DOT11_MODE_AUTO:
case eHDD_DOT11_MODE_11ax:
case eHDD_DOT11_MODE_11ax_ONLY:
if (sme_is_feature_supported_by_fw(DOT11AX))
hdd_dot11_mode = eHDD_DOT11_MODE_11ax;
else if (sme_is_feature_supported_by_fw(DOT11AC))
hdd_dot11_mode = eHDD_DOT11_MODE_11ac;
else
hdd_dot11_mode = eHDD_DOT11_MODE_11n;
break;
case eHDD_DOT11_MODE_11ac:
case eHDD_DOT11_MODE_11ac_ONLY:
if (sme_is_feature_supported_by_fw(DOT11AC))
hdd_dot11_mode = eHDD_DOT11_MODE_11ac;
else
hdd_dot11_mode = eHDD_DOT11_MODE_11n;
break;
case eHDD_DOT11_MODE_11n:
case eHDD_DOT11_MODE_11n_ONLY:
hdd_dot11_mode = eHDD_DOT11_MODE_11n;
break;
default:
hdd_dot11_mode = iniDot11Mode;
break;
}
ch_info->channel_width = ch_params->ch_width;
ch_info->phy_mode =
hdd_cfg_xlate_to_csr_phy_mode(hdd_dot11_mode);
ch_info->channel = operationChannel;
ch_info->cb_mode = ch_params->ch_width;
hdd_debug("ch_info width %d, phymode %d channel %d",
ch_info->channel_width, ch_info->phy_mode,
ch_info->channel);
}
if (cds_get_conparam() == QDF_GLOBAL_MONITOR_MODE)
hdd_mon_select_cbmode(adapter, operationChannel, ch_params);
}
/**
@ -22013,6 +22030,7 @@ int wlan_hdd_change_hw_mode_for_given_chnl(struct hdd_adapter *adapter,
return 0;
}
#ifdef FEATURE_MONITOR_MODE_SUPPORT
/**
* wlan_hdd_cfg80211_set_mon_ch() - Set monitor mode capture channel
* @wiphy: Handle to struct wiphy to get handle to module context.
@ -22117,6 +22135,7 @@ static int wlan_hdd_cfg80211_set_mon_ch(struct wiphy *wiphy,
cds_ssr_unprotect(__func__);
return ret;
}
#endif
/**
* wlan_hdd_clear_link_layer_stats() - clear link layer stats
@ -22677,7 +22696,9 @@ static struct cfg80211_ops wlan_hdd_cfg80211_ops = {
#ifdef CHANNEL_SWITCH_SUPPORTED
.channel_switch = wlan_hdd_cfg80211_channel_switch,
#endif
#ifdef FEATURE_MONITOR_MODE_SUPPORT
.set_monitor_channel = wlan_hdd_cfg80211_set_mon_ch,
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0)) || \
defined(CFG80211_ABORT_SCAN)
.abort_scan = wlan_hdd_cfg80211_abort_scan,

View File

@ -2133,6 +2133,7 @@ static void hdd_mon_mode_ether_setup(struct net_device *dev)
memset(dev->broadcast, 0xFF, ETH_ALEN);
}
#ifdef FEATURE_MONITOR_MODE_SUPPORT
/**
* __hdd__mon_open() - HDD Open function
* @dev: Pointer to net_device structure
@ -2201,6 +2202,7 @@ static int hdd_mon_open(struct net_device *dev)
return ret;
}
#endif
static QDF_STATUS
wlan_hdd_update_dbs_scan_and_fw_mode_config(void)
@ -3525,6 +3527,7 @@ static const struct net_device_ops wlan_drv_ops = {
#endif
};
#ifdef FEATURE_MONITOR_MODE_SUPPORT
/* Monitor mode net_device_ops, doesnot Tx and most of operations. */
static const struct net_device_ops wlan_mon_drv_ops = {
.ndo_open = hdd_mon_open,
@ -3544,6 +3547,12 @@ void hdd_set_station_ops(struct net_device *dev)
else
dev->netdev_ops = &wlan_drv_ops;
}
#else
void hdd_set_station_ops(struct net_device *dev)
{
dev->netdev_ops = &wlan_drv_ops;
}
#endif
/**
* hdd_alloc_station_adapter() - allocate the station hdd adapter
@ -5875,6 +5884,7 @@ void hdd_connect_result(struct net_device *dev, const u8 *bssid,
}
#endif
#ifdef FEATURE_MONITOR_MODE_SUPPORT
int wlan_hdd_set_mon_chan(struct hdd_adapter *adapter, uint32_t chan,
uint32_t bandwidth)
{
@ -5952,6 +5962,7 @@ int wlan_hdd_set_mon_chan(struct hdd_adapter *adapter, uint32_t chan,
adapter->mon_bandwidth = bandwidth;
return qdf_status_to_os_return(status);
}
#endif
#ifdef MSM_PLATFORM
/**
@ -12447,6 +12458,32 @@ static int fwpath_changed_handler(const char *kmessage,
return param_set_copystring(kmessage, kp);
}
#ifdef FEATURE_MONITOR_MODE_SUPPORT
static bool is_monitor_mode_supported(void)
{
return true;
}
#else
static bool is_monitor_mode_supported(void)
{
pr_err("Monitor mode not supported!");
return false;
}
#endif
#ifdef WLAN_FEATURE_EPPING
static bool is_epping_mode_supported(void)
{
return true;
}
#else
static bool is_epping_mode_supported(void)
{
pr_err("Epping mode not supported!");
return false;
}
#endif
/**
* is_con_mode_valid() check con mode is valid or not
* @mode: global con mode
@ -12457,8 +12494,10 @@ static bool is_con_mode_valid(enum QDF_GLOBAL_MODE mode)
{
switch (mode) {
case QDF_GLOBAL_MONITOR_MODE:
case QDF_GLOBAL_FTM_MODE:
return is_monitor_mode_supported();
case QDF_GLOBAL_EPPING_MODE:
return is_epping_mode_supported();
case QDF_GLOBAL_FTM_MODE:
case QDF_GLOBAL_MISSION_MODE:
return true;
default:
@ -12752,6 +12791,7 @@ static int con_mode_handler_ftm(const char *kmessage,
return ret;
}
#ifdef FEATURE_MONITOR_MODE_SUPPORT
static int con_mode_handler_monitor(const char *kmessage,
const struct kernel_param *kp)
{
@ -12769,6 +12809,7 @@ static int con_mode_handler_monitor(const char *kmessage,
return ret;
}
#endif
/**
* hdd_get_conparam() - driver exit point
@ -14026,10 +14067,12 @@ static const struct kernel_param_ops con_mode_ftm_ops = {
.get = param_get_int,
};
#ifdef FEATURE_MONITOR_MODE_SUPPORT
static const struct kernel_param_ops con_mode_monitor_ops = {
.set = con_mode_handler_monitor,
.get = param_get_int,
};
#endif
static const struct kernel_param_ops fwpath_ops = {
.set = fwpath_changed_handler,
@ -14042,8 +14085,10 @@ module_param_cb(con_mode, &con_mode_ops, &con_mode,
module_param_cb(con_mode_ftm, &con_mode_ftm_ops, &con_mode_ftm,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
#ifdef FEATURE_MONITOR_MODE_SUPPORT
module_param_cb(con_mode_monitor, &con_mode_monitor_ops, &con_mode_monitor,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
#endif
module_param_cb(fwpath, &fwpath_ops, &fwpath,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);

View File

@ -1304,6 +1304,7 @@ QDF_STATUS hdd_deinit_tx_rx(struct hdd_adapter *adapter)
return status;
}
#ifdef FEATURE_MONITOR_MODE_SUPPORT
/**
* hdd_mon_rx_packet_cbk() - Receive callback registered with OL layer.
* @context: [in] pointer to qdf context
@ -1379,6 +1380,7 @@ static QDF_STATUS hdd_mon_rx_packet_cbk(void *context, qdf_nbuf_t rxbuf)
return QDF_STATUS_SUCCESS;
}
#endif
/**
* hdd_get_peer_idx() - Get the idx for given address in peer table
@ -2338,6 +2340,7 @@ void wlan_hdd_netif_queue_control(struct hdd_adapter *adapter,
adapter->history_index = 0;
}
#ifdef FEATURE_MONITOR_MODE_SUPPORT
/**
* hdd_set_mon_rx_cb() - Set Monitor mode Rx callback
* @dev: Pointer to net_device structure
@ -2381,6 +2384,7 @@ exit:
ret = qdf_status_to_os_return(qdf_status);
return ret;
}
#endif
/**
* hdd_send_rps_ind() - send rps indication to daemon

View File

@ -10126,11 +10126,12 @@ static const struct iw_priv_args we_private_args[] = {
0, "dump_dp_trace"}
,
#endif
#ifdef FEATURE_MONITOR_MODE_SUPPORT
{WE_SET_MON_MODE_CHAN,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
0, "setMonChan"}
,
#endif
{WE_GET_ROAM_SYNCH_DELAY,
0,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,