qcacmn: Enable WDS learning only when configured
Add support to make WDS source port learning in lithium datapath to be configurable. Change-Id: I63eb64d6f46560a31f8e40a806d05d1dceddd784 CRs-Fixed: 2004658
This commit is contained in:

committed by
Sandeep Puligilla

vanhempi
7e19ec5b53
commit
ca792543cf
@@ -521,7 +521,7 @@ struct cdp_wds_ops {
|
||||
void
|
||||
(*txrx_set_wds_rx_policy)(struct cdp_vdev *vdev,
|
||||
u_int32_t val);
|
||||
|
||||
int (*vdev_set_wds)(void *vdev, uint32_t val);
|
||||
};
|
||||
|
||||
struct cdp_raw_ops {
|
||||
|
@@ -58,4 +58,21 @@ cdp_set_wds_rx_policy(ol_txrx_soc_handle soc,
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* cdp_vdev_set_wds() - Set/unset wds_enable flag in vdev
|
||||
* @soc - data path soc handle
|
||||
* @vdev - data path vap handle
|
||||
* @val - value to be set in wds_en flag
|
||||
*
|
||||
* This flag enables WDS source port learning feature on a vdev
|
||||
*
|
||||
* return 1 on success
|
||||
*/
|
||||
static inline int
|
||||
cdp_vdev_set_wds(ol_txrx_soc_handle soc, void *vdev, uint32_t val)
|
||||
{
|
||||
if (soc->ops->wds_ops->vdev_set_wds)
|
||||
return soc->ops->wds_ops->vdev_set_wds(vdev, val);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@@ -2116,10 +2116,24 @@ static void dp_peer_delete_wifi3(void *peer_handle)
|
||||
static uint8 *dp_get_vdev_mac_addr_wifi3(struct cdp_vdev *pvdev)
|
||||
{
|
||||
struct dp_vdev *vdev = (struct dp_vdev *)pvdev;
|
||||
|
||||
return vdev->mac_addr.raw;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_vdev_set_wds() - Enable per packet stats
|
||||
* @vdev_handle: DP VDEV handle
|
||||
* @val: value
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static int dp_vdev_set_wds(void *vdev_handle, uint32_t val)
|
||||
{
|
||||
struct dp_vdev *vdev = (struct dp_vdev *)vdev_handle;
|
||||
|
||||
vdev->wds_enabled = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_get_vdev_from_vdev_id_wifi3() – Detach txrx peer
|
||||
* @peer_handle: Datapath peer handle
|
||||
@@ -3332,6 +3346,10 @@ static QDF_STATUS dp_txrx_dump_stats(void *psoc, uint16_t value)
|
||||
|
||||
}
|
||||
|
||||
static struct cdp_wds_ops dp_ops_wds = {
|
||||
.vdev_set_wds = dp_vdev_set_wds,
|
||||
};
|
||||
|
||||
static struct cdp_cmn_ops dp_ops_cmn = {
|
||||
.txrx_soc_attach_target = dp_soc_attach_target_wifi3,
|
||||
.txrx_vdev_attach = dp_vdev_attach_wifi3,
|
||||
@@ -3400,10 +3418,6 @@ static struct cdp_host_stats_ops dp_ops_host_stats = {
|
||||
/* TODO */
|
||||
};
|
||||
|
||||
static struct cdp_wds_ops dp_ops_wds = {
|
||||
/* TODO */
|
||||
};
|
||||
|
||||
static struct cdp_raw_ops dp_ops_raw = {
|
||||
/* TODO */
|
||||
};
|
||||
|
@@ -964,10 +964,11 @@ done:
|
||||
#endif /* NAPIER_EMULATION */
|
||||
|
||||
/* WDS Source Port Learning */
|
||||
if (qdf_likely(vdev->rx_decap_type ==
|
||||
htt_cmn_pkt_type_ethernet))
|
||||
if (qdf_likely((vdev->wds_enabled) &&
|
||||
(vdev->rx_decap_type ==
|
||||
htt_cmn_pkt_type_ethernet)))
|
||||
dp_rx_wds_srcport_learn(soc, rx_tlv_hdr, peer,
|
||||
nbuf);
|
||||
nbuf);
|
||||
|
||||
/* Intrabss-fwd */
|
||||
if (vdev->opmode != wlan_op_mode_sta)
|
||||
|
@@ -298,7 +298,8 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc,
|
||||
__func__, __LINE__, sgi, rate_mcs, tid);
|
||||
|
||||
/* WDS Source Port Learning */
|
||||
if (qdf_likely(vdev->rx_decap_type == htt_cmn_pkt_type_ethernet))
|
||||
if (qdf_likely(vdev->rx_decap_type == htt_cmn_pkt_type_ethernet) &&
|
||||
(vdev->wds_enabled))
|
||||
dp_rx_wds_srcport_learn(soc, rx_desc->rx_buf_start, peer, nbuf);
|
||||
|
||||
/*
|
||||
@@ -310,9 +311,6 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc,
|
||||
if (l2_hdr_offset)
|
||||
qdf_nbuf_pull_head(nbuf, l2_hdr_offset);
|
||||
|
||||
/* WDS Source Port Learning */
|
||||
dp_rx_wds_srcport_learn(soc, rx_desc->rx_buf_start, peer, nbuf);
|
||||
|
||||
if (hal_rx_mpdu_start_mpdu_qos_control_valid_get(
|
||||
rx_desc->rx_buf_start)) {
|
||||
/* TODO: Assuming that qos_control_valid also indicates
|
||||
|
@@ -896,6 +896,9 @@ struct dp_vdev {
|
||||
/* BSS peer */
|
||||
struct dp_peer *vap_bss_peer;
|
||||
|
||||
/* WDS enabled */
|
||||
bool wds_enabled;
|
||||
|
||||
/* NAWDS enabled */
|
||||
bool nawds_enabled;
|
||||
|
||||
|
Viittaa uudesa ongelmassa
Block a user