qcacmn: add DP API to support RX peer meta data version update

add DP API to support RX peer meta data version update.

Change-Id: I010cd64d5d60e5f2313fa3c4387968e85ce96157
CRs-Fixed: 3469143
This commit is contained in:
Jinwei Chen
2023-04-17 04:55:08 -07:00
committed by Madan Koyyalamudi
parent bedb4f3049
commit a7d358d70a
4 changed files with 98 additions and 8 deletions

View File

@@ -1443,6 +1443,7 @@ enum cdp_pdev_param_type {
* @cdp_skel_enable : Enable/Disable skeleton code for Umac reset debug
* @cdp_drop_tx_mcast: Enable/Disable tx mcast drop
* @cdp_vdev_tx_to_fw: Set to_fw bit for all tx packets for the vdev
* @cdp_peer_metadata_ver: DP rx peer metadata version configuration
*/
typedef union cdp_config_param_t {
/* peer params */
@@ -1533,6 +1534,7 @@ typedef union cdp_config_param_t {
bool cdp_umac_rst_skel;
bool cdp_drop_tx_mcast;
bool cdp_vdev_tx_to_fw;
uint8_t cdp_peer_metadata_ver;
} cdp_config_param_type;
/**
@@ -1688,6 +1690,7 @@ enum cdp_vdev_param_type {
* @CDP_UMAC_RST_SKEL_ENABLE: Enable Umac reset skeleton code for debug
* @CDP_SAWF_STATS: set SAWF stats config
* @CDP_UMAC_RESET_STATS: UMAC reset stats
* @CDP_CFG_RX_PEER_METADATA_VER: RX peer metadata configuration
*/
enum cdp_psoc_param_type {
CDP_ENABLE_RATE_STATS,
@@ -1700,8 +1703,16 @@ enum cdp_psoc_param_type {
CDP_UMAC_RST_SKEL_ENABLE,
CDP_SAWF_STATS,
CDP_UMAC_RESET_STATS,
CDP_CFG_RX_PEER_METADATA_VER,
};
#ifdef CONFIG_AP_PLATFORM
/* RX peer metadata version if v1a_v1b is supported */
#define CDP_RX_PEER_METADATA_V1_A_B 3
#else
#define CDP_RX_PEER_METADATA_V1_A_B 2
#endif
#define TXRX_FW_STATS_TXSTATS 1
#define TXRX_FW_STATS_RXSTATS 2
#define TXRX_FW_STATS_RX_RATE_INFO 3

View File

@@ -190,18 +190,25 @@ dp_rx_desc_sw_cc_check(struct dp_soc *soc,
#define DP_PEER_METADATA_OFFLOAD_GET_BE(_peer_metadata) (0)
#define HTT_RX_PEER_META_DATA_FIELD_GET(_var, _field_s, _field_m) \
(((_var) & (_field_m)) >> (_field_s))
#ifdef DP_USE_REDUCED_PEER_ID_FIELD_WIDTH
static inline uint16_t
dp_rx_peer_metadata_peer_id_get_be(struct dp_soc *soc, uint32_t peer_metadata)
{
struct htt_rx_peer_metadata_v1 *metadata =
(struct htt_rx_peer_metadata_v1 *)&peer_metadata;
uint8_t ml_peer_valid;
uint16_t peer_id;
peer_id = metadata->peer_id |
(metadata->ml_peer_valid << soc->peer_id_shift);
peer_id = HTT_RX_PEER_META_DATA_FIELD_GET(peer_metadata,
soc->htt_peer_id_s,
soc->htt_peer_id_m);
ml_peer_valid = HTT_RX_PEER_META_DATA_FIELD_GET(
peer_metadata,
soc->htt_mld_peer_valid_s,
soc->htt_mld_peer_valid_m);
return peer_id;
return (peer_id | (ml_peer_valid << soc->peer_id_shift));
}
#else
/* Combine ml_peer_valid and peer_id field */
@@ -219,10 +226,10 @@ dp_rx_peer_metadata_peer_id_get_be(struct dp_soc *soc, uint32_t peer_metadata)
static inline uint16_t
dp_rx_peer_metadata_vdev_id_get_be(struct dp_soc *soc, uint32_t peer_metadata)
{
struct htt_rx_peer_metadata_v1 *metadata =
(struct htt_rx_peer_metadata_v1 *)&peer_metadata;
return metadata->vdev_id;
return HTT_RX_PEER_META_DATA_FIELD_GET(peer_metadata,
soc->htt_vdev_id_s,
soc->htt_vdev_id_m);
}
static inline uint8_t

View File

@@ -7435,6 +7435,64 @@ dp_set_vdev_param_wrapper(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
}
#endif
/**
* dp_rx_peer_metadata_ver_update() - update rx peer metadata version and
* corresponding filed shift and mask
* @soc: Handle to DP Soc structure
* @peer_md_ver: RX peer metadata version value
*
* Return: None
*/
static void
dp_rx_peer_metadata_ver_update(struct dp_soc *soc, uint8_t peer_md_ver)
{
dp_info("rx_peer_metadata version %d", peer_md_ver);
switch (peer_md_ver) {
case 0: /* htt_rx_peer_metadata_v0 */
soc->htt_peer_id_s = HTT_RX_PEER_META_DATA_V0_PEER_ID_S;
soc->htt_peer_id_m = HTT_RX_PEER_META_DATA_V0_PEER_ID_M;
soc->htt_vdev_id_s = HTT_RX_PEER_META_DATA_V0_VDEV_ID_S;
soc->htt_vdev_id_m = HTT_RX_PEER_META_DATA_V0_VDEV_ID_M;
break;
case 1: /* htt_rx_peer_metadata_v1 */
soc->htt_peer_id_s = HTT_RX_PEER_META_DATA_V1_PEER_ID_S;
soc->htt_peer_id_m = HTT_RX_PEER_META_DATA_V1_PEER_ID_M;
soc->htt_vdev_id_s = HTT_RX_PEER_META_DATA_V1_VDEV_ID_S;
soc->htt_vdev_id_m = HTT_RX_PEER_META_DATA_V1_VDEV_ID_M;
soc->htt_mld_peer_valid_s =
HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_S;
soc->htt_mld_peer_valid_m =
HTT_RX_PEER_META_DATA_V1_ML_PEER_VALID_M;
break;
case 2: /* htt_rx_peer_metadata_v1a */
soc->htt_peer_id_s = HTT_RX_PEER_META_DATA_V1A_PEER_ID_S;
soc->htt_peer_id_m = HTT_RX_PEER_META_DATA_V1A_PEER_ID_M;
soc->htt_vdev_id_s = HTT_RX_PEER_META_DATA_V1A_VDEV_ID_S;
soc->htt_vdev_id_m = HTT_RX_PEER_META_DATA_V1A_VDEV_ID_M;
soc->htt_mld_peer_valid_s =
HTT_RX_PEER_META_DATA_V1A_ML_PEER_VALID_S;
soc->htt_mld_peer_valid_m =
HTT_RX_PEER_META_DATA_V1A_ML_PEER_VALID_M;
break;
case 3: /* htt_rx_peer_metadata_v1b */
soc->htt_peer_id_s = HTT_RX_PEER_META_DATA_V1B_PEER_ID_S;
soc->htt_peer_id_m = HTT_RX_PEER_META_DATA_V1B_PEER_ID_M;
soc->htt_vdev_id_s = HTT_RX_PEER_META_DATA_V1B_VDEV_ID_S;
soc->htt_vdev_id_m = HTT_RX_PEER_META_DATA_V1B_VDEV_ID_M;
soc->htt_mld_peer_valid_s =
HTT_RX_PEER_META_DATA_V1B_ML_PEER_VALID_S;
soc->htt_mld_peer_valid_m =
HTT_RX_PEER_META_DATA_V1B_ML_PEER_VALID_M;
break;
default:
dp_err("invliad rx_peer_metadata version %d", peer_md_ver);
break;
}
soc->rx_peer_metadata_ver = peer_md_ver;
}
/**
* dp_set_psoc_param: function to set parameters in psoc
* @cdp_soc: DP soc handle
@@ -7506,6 +7564,10 @@ dp_set_psoc_param(struct cdp_soc_t *cdp_soc,
wlan_cfg_set_sawf_stats_config(wlan_cfg_ctx,
val.cdp_sawf_stats);
break;
case CDP_CFG_RX_PEER_METADATA_VER:
dp_rx_peer_metadata_ver_update(
soc, val.cdp_peer_metadata_ver);
break;
default:
break;
}

View File

@@ -2796,6 +2796,16 @@ struct dp_soc {
uint32_t peer_id_mask;
#endif
/* rx peer metadata field shift and mask configuration */
uint8_t htt_peer_id_s;
uint32_t htt_peer_id_m;
uint8_t htt_vdev_id_s;
uint32_t htt_vdev_id_m;
uint8_t htt_mld_peer_valid_s;
uint32_t htt_mld_peer_valid_m;
/* rx peer metadata version */
uint8_t rx_peer_metadata_ver;
/* SoC level data path statistics */
struct dp_soc_stats stats;
#ifdef WLAN_SYSFS_DP_STATS