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:

committed by
Madan Koyyalamudi

parent
bedb4f3049
commit
a7d358d70a
@@ -1443,6 +1443,7 @@ enum cdp_pdev_param_type {
|
|||||||
* @cdp_skel_enable : Enable/Disable skeleton code for Umac reset debug
|
* @cdp_skel_enable : Enable/Disable skeleton code for Umac reset debug
|
||||||
* @cdp_drop_tx_mcast: Enable/Disable tx mcast drop
|
* @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_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 {
|
typedef union cdp_config_param_t {
|
||||||
/* peer params */
|
/* peer params */
|
||||||
@@ -1533,6 +1534,7 @@ typedef union cdp_config_param_t {
|
|||||||
bool cdp_umac_rst_skel;
|
bool cdp_umac_rst_skel;
|
||||||
bool cdp_drop_tx_mcast;
|
bool cdp_drop_tx_mcast;
|
||||||
bool cdp_vdev_tx_to_fw;
|
bool cdp_vdev_tx_to_fw;
|
||||||
|
uint8_t cdp_peer_metadata_ver;
|
||||||
} cdp_config_param_type;
|
} 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_UMAC_RST_SKEL_ENABLE: Enable Umac reset skeleton code for debug
|
||||||
* @CDP_SAWF_STATS: set SAWF stats config
|
* @CDP_SAWF_STATS: set SAWF stats config
|
||||||
* @CDP_UMAC_RESET_STATS: UMAC reset stats
|
* @CDP_UMAC_RESET_STATS: UMAC reset stats
|
||||||
|
* @CDP_CFG_RX_PEER_METADATA_VER: RX peer metadata configuration
|
||||||
*/
|
*/
|
||||||
enum cdp_psoc_param_type {
|
enum cdp_psoc_param_type {
|
||||||
CDP_ENABLE_RATE_STATS,
|
CDP_ENABLE_RATE_STATS,
|
||||||
@@ -1700,8 +1703,16 @@ enum cdp_psoc_param_type {
|
|||||||
CDP_UMAC_RST_SKEL_ENABLE,
|
CDP_UMAC_RST_SKEL_ENABLE,
|
||||||
CDP_SAWF_STATS,
|
CDP_SAWF_STATS,
|
||||||
CDP_UMAC_RESET_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_TXSTATS 1
|
||||||
#define TXRX_FW_STATS_RXSTATS 2
|
#define TXRX_FW_STATS_RXSTATS 2
|
||||||
#define TXRX_FW_STATS_RX_RATE_INFO 3
|
#define TXRX_FW_STATS_RX_RATE_INFO 3
|
||||||
|
@@ -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 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
|
#ifdef DP_USE_REDUCED_PEER_ID_FIELD_WIDTH
|
||||||
static inline uint16_t
|
static inline uint16_t
|
||||||
dp_rx_peer_metadata_peer_id_get_be(struct dp_soc *soc, uint32_t peer_metadata)
|
dp_rx_peer_metadata_peer_id_get_be(struct dp_soc *soc, uint32_t peer_metadata)
|
||||||
{
|
{
|
||||||
struct htt_rx_peer_metadata_v1 *metadata =
|
uint8_t ml_peer_valid;
|
||||||
(struct htt_rx_peer_metadata_v1 *)&peer_metadata;
|
|
||||||
uint16_t peer_id;
|
uint16_t peer_id;
|
||||||
|
|
||||||
peer_id = metadata->peer_id |
|
peer_id = HTT_RX_PEER_META_DATA_FIELD_GET(peer_metadata,
|
||||||
(metadata->ml_peer_valid << soc->peer_id_shift);
|
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
|
#else
|
||||||
/* Combine ml_peer_valid and peer_id field */
|
/* 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
|
static inline uint16_t
|
||||||
dp_rx_peer_metadata_vdev_id_get_be(struct dp_soc *soc, uint32_t peer_metadata)
|
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
|
static inline uint8_t
|
||||||
|
@@ -7435,6 +7435,64 @@ dp_set_vdev_param_wrapper(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
* dp_set_psoc_param: function to set parameters in psoc
|
||||||
* @cdp_soc: DP soc handle
|
* @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,
|
wlan_cfg_set_sawf_stats_config(wlan_cfg_ctx,
|
||||||
val.cdp_sawf_stats);
|
val.cdp_sawf_stats);
|
||||||
break;
|
break;
|
||||||
|
case CDP_CFG_RX_PEER_METADATA_VER:
|
||||||
|
dp_rx_peer_metadata_ver_update(
|
||||||
|
soc, val.cdp_peer_metadata_ver);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -2796,6 +2796,16 @@ struct dp_soc {
|
|||||||
uint32_t peer_id_mask;
|
uint32_t peer_id_mask;
|
||||||
#endif
|
#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 */
|
/* SoC level data path statistics */
|
||||||
struct dp_soc_stats stats;
|
struct dp_soc_stats stats;
|
||||||
#ifdef WLAN_SYSFS_DP_STATS
|
#ifdef WLAN_SYSFS_DP_STATS
|
||||||
|
Reference in New Issue
Block a user