qcacmn: Add support to update peer freq
Add support to update peer freq info and add changes to map link ID to band Change-Id: I1115573c70d73ff83df415bb5732b8ff4109a787 CRs-Fixed: 3589666
This commit is contained in:

committed by
Rahul Choudhary

parent
dc7a06f247
commit
3a860c18df
@@ -1297,6 +1297,7 @@ struct cdp_soc_t {
|
|||||||
* @CDP_CONFIG_ISOLATION: Enable isolation
|
* @CDP_CONFIG_ISOLATION: Enable isolation
|
||||||
* @CDP_CONFIG_IN_TWT: In TWT session or not
|
* @CDP_CONFIG_IN_TWT: In TWT session or not
|
||||||
* @CDP_CONFIG_MLD_PEER_VDEV: Change MLD peer's vdev
|
* @CDP_CONFIG_MLD_PEER_VDEV: Change MLD peer's vdev
|
||||||
|
* @CDP_CONFIG_PEER_FREQ: Set peer frequency
|
||||||
*/
|
*/
|
||||||
enum cdp_peer_param_type {
|
enum cdp_peer_param_type {
|
||||||
CDP_CONFIG_NAWDS,
|
CDP_CONFIG_NAWDS,
|
||||||
@@ -1304,6 +1305,7 @@ enum cdp_peer_param_type {
|
|||||||
CDP_CONFIG_ISOLATION,
|
CDP_CONFIG_ISOLATION,
|
||||||
CDP_CONFIG_IN_TWT,
|
CDP_CONFIG_IN_TWT,
|
||||||
CDP_CONFIG_MLD_PEER_VDEV,
|
CDP_CONFIG_MLD_PEER_VDEV,
|
||||||
|
CDP_CONFIG_PEER_FREQ,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1389,6 +1391,7 @@ enum cdp_pdev_param_type {
|
|||||||
* @cdp_peer_param_isolation: Enable isolation
|
* @cdp_peer_param_isolation: Enable isolation
|
||||||
* @cdp_peer_param_in_twt: in TWT session or not
|
* @cdp_peer_param_in_twt: in TWT session or not
|
||||||
* @cdp_peer_param_nac: Enable nac
|
* @cdp_peer_param_nac: Enable nac
|
||||||
|
* @cdp_peer_param_freq: Peer frequency
|
||||||
*
|
*
|
||||||
* @cdp_vdev_param_nawds: set nawds enable/disable
|
* @cdp_vdev_param_nawds: set nawds enable/disable
|
||||||
* @cdp_vdev_param_mcast_en: enable/disable multicast enhancement
|
* @cdp_vdev_param_mcast_en: enable/disable multicast enhancement
|
||||||
@@ -1483,6 +1486,7 @@ typedef union cdp_config_param_t {
|
|||||||
bool cdp_peer_param_isolation;
|
bool cdp_peer_param_isolation;
|
||||||
uint8_t cdp_peer_param_nac;
|
uint8_t cdp_peer_param_nac;
|
||||||
bool cdp_peer_param_in_twt;
|
bool cdp_peer_param_in_twt;
|
||||||
|
uint32_t cdp_peer_param_freq;
|
||||||
|
|
||||||
/* vdev params */
|
/* vdev params */
|
||||||
bool cdp_vdev_param_wds;
|
bool cdp_vdev_param_wds;
|
||||||
|
@@ -7993,6 +7993,61 @@ static QDF_STATUS dp_get_peer_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
|
||||||
|
static inline void
|
||||||
|
dp_check_map_link_id_band(struct dp_peer *peer)
|
||||||
|
{
|
||||||
|
if (peer->link_id_valid)
|
||||||
|
dp_map_link_id_band(peer);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void
|
||||||
|
dp_check_map_link_id_band(struct dp_peer *peer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_set_peer_freq() - Set peer frequency
|
||||||
|
* @cdp_soc: DP soc handle
|
||||||
|
* @vdev_id: id of vdev handle
|
||||||
|
* @peer_mac: peer mac address
|
||||||
|
* @param: parameter type to be set
|
||||||
|
* @val: value of parameter to be set
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS for success. error code for failure.
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
dp_set_peer_freq(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
|
||||||
|
uint8_t *peer_mac, enum cdp_peer_param_type param,
|
||||||
|
cdp_config_param_type val)
|
||||||
|
{
|
||||||
|
struct dp_peer *peer = NULL;
|
||||||
|
struct cdp_peer_info peer_info = { 0 };
|
||||||
|
|
||||||
|
DP_PEER_INFO_PARAMS_INIT(&peer_info, vdev_id, peer_mac,
|
||||||
|
false, CDP_LINK_PEER_TYPE);
|
||||||
|
|
||||||
|
peer = dp_peer_hash_find_wrapper((struct dp_soc *)cdp_soc,
|
||||||
|
&peer_info, DP_MOD_ID_CDP);
|
||||||
|
if (!peer) {
|
||||||
|
dp_err("peer NULL,MAC " QDF_MAC_ADDR_FMT ", vdev_id %u",
|
||||||
|
QDF_MAC_ADDR_REF(peer_mac), vdev_id);
|
||||||
|
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
peer->freq = val.cdp_peer_param_freq;
|
||||||
|
dp_check_map_link_id_band(peer);
|
||||||
|
dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
|
||||||
|
|
||||||
|
dp_info("Peer " QDF_MAC_ADDR_FMT " vdev_id %u, frequency %u",
|
||||||
|
QDF_MAC_ADDR_REF(peer_mac), vdev_id,
|
||||||
|
peer->freq);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_set_peer_param: function to set parameters in peer
|
* dp_set_peer_param: function to set parameters in peer
|
||||||
* @cdp_soc: DP soc handle
|
* @cdp_soc: DP soc handle
|
||||||
@@ -8036,6 +8091,10 @@ static QDF_STATUS dp_set_peer_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
|
|||||||
case CDP_CONFIG_IN_TWT:
|
case CDP_CONFIG_IN_TWT:
|
||||||
txrx_peer->in_twt = !!(val.cdp_peer_param_in_twt);
|
txrx_peer->in_twt = !!(val.cdp_peer_param_in_twt);
|
||||||
break;
|
break;
|
||||||
|
case CDP_CONFIG_PEER_FREQ:
|
||||||
|
return dp_set_peer_freq(cdp_soc, vdev_id,
|
||||||
|
peer_mac, param, val);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -43,7 +43,9 @@
|
|||||||
#ifdef BYPASS_OL_OPS
|
#ifdef BYPASS_OL_OPS
|
||||||
#include <target_if_dp.h>
|
#include <target_if_dp.h>
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
|
||||||
|
#include "reg_services_common.h"
|
||||||
|
#endif
|
||||||
#ifdef FEATURE_AST
|
#ifdef FEATURE_AST
|
||||||
#ifdef BYPASS_OL_OPS
|
#ifdef BYPASS_OL_OPS
|
||||||
/**
|
/**
|
||||||
@@ -3057,6 +3059,41 @@ dp_rx_peer_unmap_handler(struct dp_soc *soc, uint16_t peer_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
|
#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
|
||||||
|
/**
|
||||||
|
* dp_freq_to_band() - Convert frequency to band
|
||||||
|
* @freq: peer frequency
|
||||||
|
*
|
||||||
|
* Return: band for input frequency
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
enum dp_bands dp_freq_to_band(qdf_freq_t freq)
|
||||||
|
{
|
||||||
|
if (REG_IS_24GHZ_CH_FREQ(freq))
|
||||||
|
return DP_BAND_2GHZ;
|
||||||
|
else if (REG_IS_5GHZ_FREQ(freq) || REG_IS_49GHZ_FREQ(freq))
|
||||||
|
return DP_BAND_5GHZ;
|
||||||
|
else if (REG_IS_6GHZ_FREQ(freq))
|
||||||
|
return DP_BAND_6GHZ;
|
||||||
|
return DP_BAND_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dp_map_link_id_band(struct dp_peer *peer)
|
||||||
|
{
|
||||||
|
struct dp_txrx_peer *txrx_peer = NULL;
|
||||||
|
enum dp_bands band;
|
||||||
|
|
||||||
|
txrx_peer = dp_get_txrx_peer(peer);
|
||||||
|
if (txrx_peer) {
|
||||||
|
band = dp_freq_to_band(peer->freq);
|
||||||
|
txrx_peer->band[peer->link_id + 1] = band;
|
||||||
|
dp_info("Band(Freq: %u): %u mapped to Link ID: %u",
|
||||||
|
peer->freq, band, peer->link_id);
|
||||||
|
} else {
|
||||||
|
dp_info("txrx_peer NULL for peer: " QDF_MAC_ADDR_FMT,
|
||||||
|
QDF_MAC_ADDR_REF(peer->mac_addr.raw));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
dp_rx_peer_ext_evt(struct dp_soc *soc, struct dp_peer_ext_evt_info *info)
|
dp_rx_peer_ext_evt(struct dp_soc *soc, struct dp_peer_ext_evt_info *info)
|
||||||
{
|
{
|
||||||
@@ -3079,6 +3116,10 @@ dp_rx_peer_ext_evt(struct dp_soc *soc, struct dp_peer_ext_evt_info *info)
|
|||||||
|
|
||||||
peer->link_id = info->link_id;
|
peer->link_id = info->link_id;
|
||||||
peer->link_id_valid = info->link_id_valid;
|
peer->link_id_valid = info->link_id_valid;
|
||||||
|
|
||||||
|
if (peer->freq)
|
||||||
|
dp_map_link_id_band(peer);
|
||||||
|
|
||||||
dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG);
|
dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
@@ -48,6 +48,25 @@
|
|||||||
__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_PEER, ## params)
|
__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_PEER, ## params)
|
||||||
#define dp_peer_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_PEER, params)
|
#define dp_peer_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_PEER, params)
|
||||||
|
|
||||||
|
#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
|
||||||
|
/**
|
||||||
|
* enum dp_bands - WiFi Band
|
||||||
|
*
|
||||||
|
* @DP_BAND_INVALID: Invalid band
|
||||||
|
* @DP_BAND_2GHZ: 2GHz link
|
||||||
|
* @DP_BAND_5GHZ: 5GHz link
|
||||||
|
* @DP_BAND_6GHZ: 6GHz link
|
||||||
|
* @DP_BAND_UNKNOWN: Unknown band
|
||||||
|
*/
|
||||||
|
enum dp_bands {
|
||||||
|
DP_BAND_INVALID = 0,
|
||||||
|
DP_BAND_2GHZ = 1,
|
||||||
|
DP_BAND_5GHZ = 2,
|
||||||
|
DP_BAND_6GHZ = 3,
|
||||||
|
DP_BAND_UNKNOWN = 4,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
void check_free_list_for_invalid_flush(struct dp_soc *soc);
|
void check_free_list_for_invalid_flush(struct dp_soc *soc);
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
@@ -2538,4 +2557,19 @@ QDF_STATUS dp_peer_host_add_map_ast(struct dp_soc *soc, uint16_t peer_id,
|
|||||||
uint8_t vdev_id, uint16_t ast_hash,
|
uint8_t vdev_id, uint16_t ast_hash,
|
||||||
uint8_t is_wds);
|
uint8_t is_wds);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT)
|
||||||
|
/**
|
||||||
|
* dp_map_link_id_band: Set link id to band mapping in txrx_peer
|
||||||
|
* @peer: dp peer pointer
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void dp_map_link_id_band(struct dp_peer *peer);
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
void dp_map_link_id_band(struct dp_peer *peer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif /* _DP_PEER_H_ */
|
#endif /* _DP_PEER_H_ */
|
||||||
|
@@ -4974,6 +4974,9 @@ struct dp_peer {
|
|||||||
|
|
||||||
/* AST hash value for peer in HW */
|
/* AST hash value for peer in HW */
|
||||||
uint16_t ast_hash;
|
uint16_t ast_hash;
|
||||||
|
|
||||||
|
/* Peer Frequency */
|
||||||
|
uint32_t freq;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user