qcacld-3.0: Featurize monitor mode
Featurize monitor mode code. Change-Id: I42d2d6a92d9097676ab3f8ec4a86958b8c0bc096 CRs-Fixed: 2245419
This commit is contained in:
parent
8e89d57e0e
commit
73713f7e80
4
Kbuild
4
Kbuild
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
1055
core/dp/htt/htt_monitor_rx.c
Normal file
File diff suppressed because it is too large
Load Diff
1163
core/dp/htt/htt_rx.c
1163
core/dp/htt/htt_rx.c
File diff suppressed because it is too large
Load Diff
@ -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)
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user