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

parent
7e19ec5b53
commit
ca792543cf
@@ -521,7 +521,7 @@ struct cdp_wds_ops {
|
|||||||
void
|
void
|
||||||
(*txrx_set_wds_rx_policy)(struct cdp_vdev *vdev,
|
(*txrx_set_wds_rx_policy)(struct cdp_vdev *vdev,
|
||||||
u_int32_t val);
|
u_int32_t val);
|
||||||
|
int (*vdev_set_wds)(void *vdev, uint32_t val);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cdp_raw_ops {
|
struct cdp_raw_ops {
|
||||||
|
@@ -58,4 +58,21 @@ cdp_set_wds_rx_policy(ol_txrx_soc_handle soc,
|
|||||||
return;
|
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
|
#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)
|
static uint8 *dp_get_vdev_mac_addr_wifi3(struct cdp_vdev *pvdev)
|
||||||
{
|
{
|
||||||
struct dp_vdev *vdev = (struct dp_vdev *)pvdev;
|
struct dp_vdev *vdev = (struct dp_vdev *)pvdev;
|
||||||
|
|
||||||
return vdev->mac_addr.raw;
|
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
|
* dp_get_vdev_from_vdev_id_wifi3() – Detach txrx peer
|
||||||
* @peer_handle: Datapath peer handle
|
* @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 = {
|
static struct cdp_cmn_ops dp_ops_cmn = {
|
||||||
.txrx_soc_attach_target = dp_soc_attach_target_wifi3,
|
.txrx_soc_attach_target = dp_soc_attach_target_wifi3,
|
||||||
.txrx_vdev_attach = dp_vdev_attach_wifi3,
|
.txrx_vdev_attach = dp_vdev_attach_wifi3,
|
||||||
@@ -3400,10 +3418,6 @@ static struct cdp_host_stats_ops dp_ops_host_stats = {
|
|||||||
/* TODO */
|
/* TODO */
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct cdp_wds_ops dp_ops_wds = {
|
|
||||||
/* TODO */
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct cdp_raw_ops dp_ops_raw = {
|
static struct cdp_raw_ops dp_ops_raw = {
|
||||||
/* TODO */
|
/* TODO */
|
||||||
};
|
};
|
||||||
|
@@ -964,10 +964,11 @@ done:
|
|||||||
#endif /* NAPIER_EMULATION */
|
#endif /* NAPIER_EMULATION */
|
||||||
|
|
||||||
/* WDS Source Port Learning */
|
/* WDS Source Port Learning */
|
||||||
if (qdf_likely(vdev->rx_decap_type ==
|
if (qdf_likely((vdev->wds_enabled) &&
|
||||||
htt_cmn_pkt_type_ethernet))
|
(vdev->rx_decap_type ==
|
||||||
|
htt_cmn_pkt_type_ethernet)))
|
||||||
dp_rx_wds_srcport_learn(soc, rx_tlv_hdr, peer,
|
dp_rx_wds_srcport_learn(soc, rx_tlv_hdr, peer,
|
||||||
nbuf);
|
nbuf);
|
||||||
|
|
||||||
/* Intrabss-fwd */
|
/* Intrabss-fwd */
|
||||||
if (vdev->opmode != wlan_op_mode_sta)
|
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);
|
__func__, __LINE__, sgi, rate_mcs, tid);
|
||||||
|
|
||||||
/* WDS Source Port Learning */
|
/* 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);
|
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)
|
if (l2_hdr_offset)
|
||||||
qdf_nbuf_pull_head(nbuf, 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(
|
if (hal_rx_mpdu_start_mpdu_qos_control_valid_get(
|
||||||
rx_desc->rx_buf_start)) {
|
rx_desc->rx_buf_start)) {
|
||||||
/* TODO: Assuming that qos_control_valid also indicates
|
/* TODO: Assuming that qos_control_valid also indicates
|
||||||
|
@@ -896,6 +896,9 @@ struct dp_vdev {
|
|||||||
/* BSS peer */
|
/* BSS peer */
|
||||||
struct dp_peer *vap_bss_peer;
|
struct dp_peer *vap_bss_peer;
|
||||||
|
|
||||||
|
/* WDS enabled */
|
||||||
|
bool wds_enabled;
|
||||||
|
|
||||||
/* NAWDS enabled */
|
/* NAWDS enabled */
|
||||||
bool nawds_enabled;
|
bool nawds_enabled;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user