qcacmn: Handle FPMO filter configuration
Handle FPMO mode filter settings configured from lite_mon tool. Change-Id: I9bfe70101bae7c8f55c6db95d9c36f4c1d308e95 CRs-Fixed: 3235935
This commit is contained in:

committed by
Madan Koyyalamudi

parent
7d3197b9a5
commit
2b76805c5a
@@ -1672,6 +1672,14 @@ int htt_h2t_rx_ring_cfg(struct htt_soc *htt_soc, int pdev_id,
|
||||
|
||||
dp_mon_rx_wmask_subscribe(soc->dp_soc, msg_word, htt_tlv_filter);
|
||||
|
||||
#ifdef FW_SUPPORT_NOT_YET
|
||||
/* word 17*/
|
||||
msg_word += 3;
|
||||
*msg_word = 0;
|
||||
|
||||
dp_mon_rx_enable_fpmo(soc->dp_soc, msg_word, htt_tlv_filter);
|
||||
#endif/* FW_SUPPORT_NOT_YET */
|
||||
|
||||
/* "response_required" field should be set if a HTT response message is
|
||||
* required after setting up the ring.
|
||||
*/
|
||||
|
@@ -618,6 +618,10 @@ struct htt_tx_ring_tlv_filter {
|
||||
* @ctrl_mpdu_log: enable ctrl mpdu level logging
|
||||
* @data_mpdu_log: enable data mpdu level logging
|
||||
* @enable: enable rx monitor
|
||||
* @enable_fpmo: enable/disable FPMO packet
|
||||
* @fpmo_data_filter: FPMO mode data filter
|
||||
* @fpmo_mgmt_filter: FPMO mode mgmt filter
|
||||
* @fpmo_ctrl_filter: FPMO mode ctrl filter
|
||||
*
|
||||
* NOTE: Do not change the layout of this structure
|
||||
*/
|
||||
@@ -677,6 +681,10 @@ struct htt_rx_ring_tlv_filter {
|
||||
ctrl_mpdu_log:1,
|
||||
data_mpdu_log:1,
|
||||
enable:1;
|
||||
u_int16_t enable_fpmo:1;
|
||||
u_int16_t fpmo_data_filter;
|
||||
u_int16_t fpmo_mgmt_filter;
|
||||
u_int16_t fpmo_ctrl_filter;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@@ -1201,6 +1201,7 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc)
|
||||
mon_ops->rx_mon_enable = NULL;
|
||||
mon_ops->rx_wmask_subscribe = NULL;
|
||||
mon_ops->rx_enable_mpdu_logging = NULL;
|
||||
mon_ops->rx_enable_fpmo = NULL;
|
||||
mon_ops->mon_neighbour_peers_detach = dp_neighbour_peers_detach;
|
||||
mon_ops->mon_vdev_set_monitor_mode_buf_rings =
|
||||
dp_vdev_set_monitor_mode_buf_rings;
|
||||
|
@@ -1388,6 +1388,7 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc)
|
||||
mon_ops->mon_filter_reset_undecoded_metadata_capture =
|
||||
dp_mon_filter_reset_undecoded_metadata_capture_2_0;
|
||||
#endif
|
||||
mon_ops->rx_enable_fpmo = dp_rx_mon_enable_fpmo;
|
||||
}
|
||||
|
||||
struct dp_mon_ops monitor_ops_2_0 = {
|
||||
|
@@ -205,6 +205,182 @@ dp_rx_mon_word_mask_subscribe(uint32_t *msg_word,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
dp_rx_mon_enable_fpmo(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
||||
{
|
||||
#ifdef FW_SUPPORT_NOT_YET
|
||||
if (!msg_word || !tlv_filter)
|
||||
return;
|
||||
|
||||
if (tlv_filter->enable_fpmo) {
|
||||
/* TYPE: MGMT */
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 0000,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_ASSOC_REQ) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 0001,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_ASSOC_RES) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 0010,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_REASSOC_REQ) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 0011,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_REASSOC_RES) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 0100,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_PROBE_REQ) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 0101,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_PROBE_RES) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 0110,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_TIM_ADVT) ? 1 : 0);
|
||||
/* reserved */
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 0111,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_RESERVED_7) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 1000,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_BEACON) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 1001,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_ATIM) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 1010,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_DISASSOC) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 1011,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_AUTH) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 1100,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_DEAUTH) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 1101,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_ACTION) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 1110,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_ACT_NO_ACK) ? 1 : 0);
|
||||
/* reserved*/
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, MGMT, 1111,
|
||||
(tlv_filter->fpmo_mgmt_filter &
|
||||
FILTER_MGMT_RESERVED_15) ? 1 : 0);
|
||||
|
||||
/* TYPE: CTRL */
|
||||
/* reserved */
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 0000,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_RESERVED_1) ? 1 : 0);
|
||||
/* reserved */
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 0001,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_RESERVED_2) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 0010,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_TRIGGER) ? 1 : 0);
|
||||
/* reserved */
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 0011,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_RESERVED_4) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 0100,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_BF_REP_POLL) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 0101,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_VHT_NDP) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 0110,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_FRAME_EXT) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 0111,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_CTRLWRAP) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 1000,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_BA_REQ) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 1001,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_BA) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 1010,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_PSPOLL) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 1011,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_RTS) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 1100,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_CTS) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 1101,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_ACK) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 1110,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_CFEND) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG0,
|
||||
FPMO, CTRL, 1111,
|
||||
(tlv_filter->fpmo_ctrl_filter &
|
||||
FILTER_CTRL_CFEND_CFACK) ? 1 : 0);
|
||||
|
||||
/* word 18 */
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
|
||||
/* TYPE: DATA */
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG1,
|
||||
FPMO, DATA, MCAST,
|
||||
(tlv_filter->fpmo_data_filter &
|
||||
FILTER_DATA_MCAST) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG1,
|
||||
FPMO, DATA, UCAST,
|
||||
(tlv_filter->fpmo_data_filter &
|
||||
FILTER_DATA_UCAST) ? 1 : 0);
|
||||
htt_rx_ring_pkt_enable_subtype_set(*msg_word, FLAG1,
|
||||
FPMO, DATA, NULL,
|
||||
(tlv_filter->fpmo_data_filter &
|
||||
FILTER_DATA_NULL) ? 1 : 0);
|
||||
|
||||
} else {
|
||||
/* clear word 18 if fpmo is disabled
|
||||
* word 17 is already cleared by caller
|
||||
*/
|
||||
|
||||
/* word 18 */
|
||||
msg_word++;
|
||||
*msg_word = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
htt_tx_tlv_filter_mask_set_in0(uint32_t *msg_word,
|
||||
struct htt_tx_ring_tlv_filter *htt_tlv_filter)
|
||||
@@ -1325,6 +1501,7 @@ static void dp_mon_filter_set_mon_2_0(struct dp_mon_pdev *mon_pdev,
|
||||
filter->tlv_filter.mo_ctrl_filter = mon_pdev->mo_ctrl_filter;
|
||||
filter->tlv_filter.mo_data_filter = mon_pdev->mo_data_filter;
|
||||
filter->tlv_filter.enable_md = 0;
|
||||
filter->tlv_filter.enable_fpmo = 0;
|
||||
filter->tlv_filter.offset_valid = false;
|
||||
filter->tlv_filter.mgmt_dma_length = DEFAULT_DMA_LENGTH;
|
||||
filter->tlv_filter.data_dma_length = DEFAULT_DMA_LENGTH;
|
||||
@@ -1452,6 +1629,7 @@ static void dp_rx_mon_filter_show_filter(struct dp_mon_filter_be *filter)
|
||||
DP_MON_FILTER_PRINT("enable_fp: %d", rx_tlv_filter->enable_fp);
|
||||
DP_MON_FILTER_PRINT("enable_md: %d", rx_tlv_filter->enable_md);
|
||||
DP_MON_FILTER_PRINT("enable_mo: %d", rx_tlv_filter->enable_mo);
|
||||
DP_MON_FILTER_PRINT("enable_fpmo: %d", rx_tlv_filter->enable_fpmo);
|
||||
DP_MON_FILTER_PRINT("fp_mgmt_filter: 0x%x",
|
||||
rx_tlv_filter->fp_mgmt_filter);
|
||||
DP_MON_FILTER_PRINT("mo_mgmt_filter: 0x%x",
|
||||
@@ -1470,6 +1648,12 @@ static void dp_rx_mon_filter_show_filter(struct dp_mon_filter_be *filter)
|
||||
rx_tlv_filter->md_mgmt_filter);
|
||||
DP_MON_FILTER_PRINT("md_ctrl_filter: 0x%x",
|
||||
rx_tlv_filter->md_ctrl_filter);
|
||||
DP_MON_FILTER_PRINT("fpmo_data_filter: 0x%x",
|
||||
rx_tlv_filter->fpmo_data_filter);
|
||||
DP_MON_FILTER_PRINT("fpmo_mgmt_filter: 0x%x",
|
||||
rx_tlv_filter->fpmo_mgmt_filter);
|
||||
DP_MON_FILTER_PRINT("fpmo_ctrl_filter: 0x%x",
|
||||
rx_tlv_filter->fpmo_ctrl_filter);
|
||||
DP_MON_FILTER_PRINT("mgmt_dma_length: %d",
|
||||
rx_tlv_filter->mgmt_dma_length);
|
||||
DP_MON_FILTER_PRINT("ctrl_dma_length: %d",
|
||||
@@ -2304,6 +2488,21 @@ dp_rx_mon_filter_h2t_setup(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||
tlv_filter->rx_pkt_tlv_offset =
|
||||
src_tlv_filter->rx_pkt_tlv_offset;
|
||||
|
||||
/*
|
||||
* set fpmo filter settings
|
||||
*/
|
||||
if (src_tlv_filter->enable_fpmo &&
|
||||
!tlv_filter->enable_fpmo) {
|
||||
tlv_filter->enable_fpmo =
|
||||
src_tlv_filter->enable_fpmo;
|
||||
tlv_filter->fpmo_data_filter =
|
||||
src_tlv_filter->fpmo_data_filter;
|
||||
tlv_filter->fpmo_mgmt_filter =
|
||||
src_tlv_filter->fpmo_mgmt_filter;
|
||||
tlv_filter->fpmo_ctrl_filter =
|
||||
src_tlv_filter->fpmo_ctrl_filter;
|
||||
}
|
||||
|
||||
dp_mon_filter_show_rx_filter_be(current_mode, mon_filter);
|
||||
}
|
||||
}
|
||||
@@ -2779,6 +2978,17 @@ dp_mon_filter_setup_rx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
|
||||
config->rx_config.data_filter[DP_MON_FRM_FILTER_MODE_MO];
|
||||
}
|
||||
|
||||
/* configure fpmo filters if enabled */
|
||||
if (config->rx_config.fpmo_enabled) {
|
||||
rx_tlv_filter->tlv_filter.enable_fpmo = 1;
|
||||
rx_tlv_filter->tlv_filter.fpmo_mgmt_filter =
|
||||
config->rx_config.mgmt_filter[DP_MON_FRM_FILTER_MODE_FP_MO];
|
||||
rx_tlv_filter->tlv_filter.fpmo_ctrl_filter =
|
||||
config->rx_config.ctrl_filter[DP_MON_FRM_FILTER_MODE_FP_MO];
|
||||
rx_tlv_filter->tlv_filter.fpmo_data_filter =
|
||||
config->rx_config.data_filter[DP_MON_FRM_FILTER_MODE_FP_MO];
|
||||
}
|
||||
|
||||
mgmt_len = config->rx_config.len[WLAN_FC0_TYPE_MGMT];
|
||||
ctrl_len = config->rx_config.len[WLAN_FC0_TYPE_CTRL];
|
||||
data_len = config->rx_config.len[WLAN_FC0_TYPE_DATA];
|
||||
|
@@ -85,6 +85,15 @@ void
|
||||
dp_rx_mon_enable_mpdu_logging(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
|
||||
/**
|
||||
* dp_rx_mon_enable_fpmo() - Setup rx monitor fpmo mode type/subtype filters
|
||||
* @msg_word: msg word
|
||||
* @htt_tlv_filter: rx ring filter configuration
|
||||
*/
|
||||
void
|
||||
dp_rx_mon_enable_fpmo(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
|
||||
#ifdef QCA_ENHANCED_STATS_SUPPORT
|
||||
/**
|
||||
* dp_mon_filter_setup_enhanced_stats() - Setup the enhanced stats filter
|
||||
|
@@ -6028,6 +6028,7 @@ void dp_mon_feature_ops_deregister(struct dp_soc *soc)
|
||||
mon_ops->rx_packet_length_set = NULL;
|
||||
mon_ops->rx_wmask_subscribe = NULL;
|
||||
mon_ops->rx_enable_mpdu_logging = NULL;
|
||||
mon_ops->rx_enable_fpmo = NULL;
|
||||
mon_ops->mon_neighbour_peers_detach = NULL;
|
||||
mon_ops->mon_vdev_set_monitor_mode_buf_rings = NULL;
|
||||
mon_ops->mon_vdev_set_monitor_mode_rings = NULL;
|
||||
|
@@ -787,6 +787,8 @@ struct dp_mon_ops {
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
void (*rx_enable_mpdu_logging)(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
void (*rx_enable_fpmo)(uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter);
|
||||
#ifndef DISABLE_MON_CONFIG
|
||||
void (*mon_register_intr_ops)(struct dp_soc *soc);
|
||||
#endif
|
||||
@@ -3727,6 +3729,35 @@ dp_mon_rx_enable_mpdu_logging(struct dp_soc *soc, uint32_t *msg_word,
|
||||
monitor_ops->rx_enable_mpdu_logging(msg_word, tlv_filter);
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_mon_rx_enable_fpmo() - set fpmo filters
|
||||
* @soc: dp soc handle
|
||||
* @msg_word: msg word
|
||||
* @tlv_filter: rx fing filter config
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void
|
||||
dp_mon_rx_enable_fpmo(struct dp_soc *soc, uint32_t *msg_word,
|
||||
struct htt_rx_ring_tlv_filter *tlv_filter)
|
||||
{
|
||||
struct dp_mon_soc *mon_soc = soc->monitor_soc;
|
||||
struct dp_mon_ops *monitor_ops;
|
||||
|
||||
if (!mon_soc) {
|
||||
dp_mon_debug("mon soc is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_ops = mon_soc->mon_ops;
|
||||
if (!monitor_ops || !monitor_ops->rx_enable_fpmo) {
|
||||
dp_mon_debug("callback not registered");
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_ops->rx_enable_fpmo(msg_word, tlv_filter);
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_mon_rx_hdr_length_set() - set rx hdr tlv length
|
||||
* @soc: dp soc handle
|
||||
|
Reference in New Issue
Block a user