qcacmn: Add initial support for word mask compaction

Add initial support for word mask compaction.

Change-Id: Ife05e355395fbc6c6804c34f62954a2b04a2cd03
CRs-Fixed: 3398292
This commit is contained in:
nobelj
2023-02-06 15:04:27 -08:00
committed by Madan Koyyalamudi
parent 3377c445f8
commit 20db7b641f
3 changed files with 55 additions and 23 deletions

View File

@@ -512,22 +512,28 @@ struct dp_tx_mon_upstream_tlv_config {
/**
* struct dp_tx_mon_wordmask_config - Tx monitor word mask
* @tx_fes_setup: TX_FES_SETUP TLV word mask
* @pcu_ppdu_setup_init: PCU_PPDU_SETUP TLV word mask
* @tx_peer_entry: TX_PEER_ENTRY TLV word mask
* @tx_queue_ext: TX_QUEUE_EXTENSION TLV word mask
* @tx_fes_status_end: TX_FES_STATUS_END TLV word mask
* @response_end_status: RESPONSE_END_STATUS TLV word mask
* @tx_fes_status_prot: TX_FES_STATUS_PROT TLV word mask
* @tx_fes_setup: TX_FES_SETUP TLV word mask
* @tx_msdu_start: TX_MSDU_START TLV word mask
* @tx_mpdu_start: TX_MPDU_START TLV word mask
* @pcu_ppdu_setup_init: PCU_PPDU_SETUP TLV word mask
* @rxpcu_user_setup: RXPCU_USER_SETUP TLV word mask
*/
struct dp_tx_mon_wordmask_config {
uint16_t tx_fes_setup;
uint32_t pcu_ppdu_setup_init;
uint16_t tx_peer_entry;
uint16_t tx_queue_ext;
uint16_t tx_msdu_start;
uint16_t tx_mpdu_start;
uint32_t pcu_ppdu_setup_init;
uint16_t rxpcu_user_setup;
uint16_t tx_fes_status_end;
uint16_t response_end_status;
uint16_t tx_fes_status_prot;
uint8_t tx_fes_setup;
uint8_t tx_msdu_start;
uint8_t tx_mpdu_start;
uint8_t rxpcu_user_setup;
};
/**
@@ -536,6 +542,7 @@ struct dp_tx_mon_wordmask_config {
* @dtlvs: enable/disable downstream TLVs
* @utlvs: enable/disable upstream TLVs
* @wmask: enable/disable word mask subscription
* @compaction_enable: word mask compaction enable
* @mgmt_filter: enable/disable mgmt packets
* @data_filter: enable/disable data packets
* @ctrl_filter: enable/disable ctrl packets
@@ -565,6 +572,7 @@ struct htt_tx_ring_tlv_filter {
struct dp_tx_mon_downstream_tlv_config dtlvs;
struct dp_tx_mon_upstream_tlv_config utlvs;
struct dp_tx_mon_wordmask_config wmask;
uint8_t compaction_enable;
uint16_t mgmt_filter;
uint16_t data_filter;
uint16_t ctrl_filter;

View File

@@ -1398,17 +1398,6 @@ void dp_tx_mon_filter_set_upstream_tlvs(struct htt_tx_ring_tlv_filter *filter)
filter->utlvs.eht_sig_usr_ofdma = 1;
}
void dp_tx_mon_filter_set_word_mask(struct htt_tx_ring_tlv_filter *filter)
{
filter->wmask.tx_fes_setup = 1;
filter->wmask.tx_peer_entry = 1;
filter->wmask.tx_queue_ext = 1;
filter->wmask.tx_msdu_start = 1;
filter->wmask.tx_mpdu_start = 1;
filter->wmask.pcu_ppdu_setup_init = 1;
filter->wmask.rxpcu_user_setup = 1;
}
void dp_tx_mon_filter_set_all(struct dp_mon_pdev_be *mon_pdev_be,
struct htt_tx_ring_tlv_filter *filter)
{
@@ -1421,7 +1410,6 @@ void dp_tx_mon_filter_set_all(struct dp_mon_pdev_be *mon_pdev_be,
dp_tx_mon_filter_set_downstream_tlvs(filter);
dp_tx_mon_filter_set_upstream_tlvs(filter);
dp_tx_mon_filter_set_word_mask(filter);
filter->mgmt_filter = 0x1;
filter->data_filter = 0x1;
@@ -1448,6 +1436,26 @@ void dp_tx_mon_filter_set_all(struct dp_mon_pdev_be *mon_pdev_be,
filter->data_dma_length = mon_pdev_be->tx_mon_filter_length;
}
void dp_tx_mon_filter_set_word_mask(struct dp_pdev *pdev,
struct htt_tx_ring_tlv_filter *filter)
{
/* invoke hal api to get the word mask */
filter->wmask.pcu_ppdu_setup_init = 0xFFFFFFFF;
filter->wmask.tx_peer_entry = 0xFFFF;
filter->wmask.tx_queue_ext = 0xFFFF;
filter->wmask.tx_fes_status_end = 0xFFFF;
filter->wmask.response_end_status = 0xFFFF;
filter->wmask.tx_fes_status_prot = 0xFFFF;
filter->wmask.tx_fes_setup = 0xFF;
filter->wmask.tx_msdu_start = 0xFF;
filter->wmask.tx_mpdu_start = 0xFF;
filter->wmask.rxpcu_user_setup = 0xFF;
/* compaction is disable */
filter->compaction_enable = 0;
}
void dp_mon_filter_setup_tx_mon_mode_2_0(struct dp_pdev *pdev)
{
struct dp_mon_filter_be filter = {0};
@@ -1479,6 +1487,7 @@ void dp_mon_filter_setup_tx_mon_mode_2_0(struct dp_pdev *pdev)
filter.tx_valid = !!mon_pdev_be->tx_mon_mode;
dp_tx_mon_filter_set_all(mon_pdev_be, &filter.tx_tlv_filter);
dp_tx_mon_filter_set_word_mask(pdev, &filter.tx_tlv_filter);
dp_mon_filter_show_tx_filter_be(mode, &filter);
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -3156,8 +3165,10 @@ dp_mon_filter_reset_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
}
void
dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
dp_mon_filter_setup_tx_lite_mon(struct dp_pdev *pdev)
{
struct dp_mon_pdev *mon_pdev = NULL;
struct dp_mon_pdev_be *be_mon_pdev = NULL;
struct dp_mon_filter_be filter = {0};
enum dp_mon_filter_mode mode = DP_MON_FILTER_LITE_MON_MODE;
enum dp_mon_filter_srng_type srng_type =
@@ -3165,6 +3176,19 @@ dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
struct htt_tx_ring_tlv_filter *tx_tlv_filter = &filter.tx_tlv_filter;
struct dp_lite_mon_tx_config *config = NULL;
if (!pdev) {
dp_mon_filter_err("Pdev context is null");
return;
}
mon_pdev = pdev->monitor_pdev;
if (!mon_pdev) {
dp_mon_filter_err("Monitor pdev context is null");
return;
}
be_mon_pdev = dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev);
config = be_mon_pdev->lite_mon_tx_config;
if (!config)
return;
@@ -3182,7 +3206,7 @@ dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
dp_tx_mon_filter_set_downstream_tlvs(tx_tlv_filter);
dp_tx_mon_filter_set_upstream_tlvs(tx_tlv_filter);
dp_tx_mon_filter_set_word_mask(tx_tlv_filter);
dp_tx_mon_filter_set_word_mask(pdev, tx_tlv_filter);
/* configure mgmt filters */
if (config->tx_config.mgmt_filter[DP_MON_FRM_FILTER_MODE_FP]) {

View File

@@ -318,10 +318,10 @@ void dp_mon_filter_reset_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev);
/**
* dp_mon_filter_setup_tx_lite_mon() - Setup tx lite monitor filter
* @be_mon_pdev: physical mon device handle
* @pdev: physical device handle
*
* Return: Null
*/
void dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev);
void dp_mon_filter_setup_tx_lite_mon(struct dp_pdev *pdev);
#endif
#endif /* _DP_MON_FILTER_2_0_H_ */