qcacmn: Code movement to enable multipass support without WDS
Currently the code to support Multipass on SAP is present along with the code to support WDS. Hence with the code in its current state, we will not be able to enable Multipass support without enabling WDS. Move the multipass support code out of the WDS support code, to be able to enable Multipass for chipsets which do not use WDS. Change-Id: Iaafa8dc4f16314d9e3e160fe01251c3684adbf67 CRs-Fixed: 3468548
这个提交包含在:
@@ -12490,3 +12490,75 @@ void dp_destroy_direct_link_refill_ring(struct cdp_soc_t *soc_hdl,
|
||||
dp_srng_free(soc, &pdev->rx_refill_buf_ring4);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef QCA_MULTIPASS_SUPPORT
|
||||
QDF_STATUS dp_set_vlan_groupkey(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
uint16_t vlan_id, uint16_t group_key)
|
||||
{
|
||||
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
|
||||
struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id,
|
||||
DP_MOD_ID_TX_MULTIPASS);
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!vdev || !vdev->multipass_en) {
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!vdev->iv_vlan_map) {
|
||||
uint16_t vlan_map_size = (sizeof(uint16_t)) * DP_MAX_VLAN_IDS;
|
||||
|
||||
vdev->iv_vlan_map = (uint16_t *)qdf_mem_malloc(vlan_map_size);
|
||||
if (!vdev->iv_vlan_map) {
|
||||
QDF_TRACE_ERROR(QDF_MODULE_ID_DP, "iv_vlan_map");
|
||||
status = QDF_STATUS_E_NOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/*
|
||||
* 0 is invalid group key.
|
||||
* Initilalize array with invalid group keys.
|
||||
*/
|
||||
qdf_mem_zero(vdev->iv_vlan_map, vlan_map_size);
|
||||
}
|
||||
|
||||
if (vlan_id >= DP_MAX_VLAN_IDS) {
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
vdev->iv_vlan_map[vlan_id] = group_key;
|
||||
status = QDF_STATUS_SUCCESS;
|
||||
fail:
|
||||
if (vdev)
|
||||
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_TX_MULTIPASS);
|
||||
return status;
|
||||
}
|
||||
|
||||
void dp_tx_vdev_multipass_deinit(struct dp_vdev *vdev)
|
||||
{
|
||||
struct dp_txrx_peer *txrx_peer = NULL;
|
||||
|
||||
qdf_spin_lock_bh(&vdev->mpass_peer_mutex);
|
||||
TAILQ_FOREACH(txrx_peer, &vdev->mpass_peer_list, mpass_peer_list_elem)
|
||||
qdf_err("Peers present in mpass list : %d", txrx_peer->peer_id);
|
||||
qdf_spin_unlock_bh(&vdev->mpass_peer_mutex);
|
||||
|
||||
if (vdev->iv_vlan_map) {
|
||||
qdf_mem_free(vdev->iv_vlan_map);
|
||||
vdev->iv_vlan_map = NULL;
|
||||
}
|
||||
|
||||
qdf_spinlock_destroy(&vdev->mpass_peer_mutex);
|
||||
}
|
||||
|
||||
void dp_peer_multipass_list_init(struct dp_vdev *vdev)
|
||||
{
|
||||
/*
|
||||
* vdev->iv_vlan_map is allocated when the first configuration command
|
||||
* is issued to avoid unnecessary allocation for regular mode VAP.
|
||||
*/
|
||||
TAILQ_INIT(&vdev->mpass_peer_list);
|
||||
qdf_spinlock_create(&vdev->mpass_peer_mutex);
|
||||
}
|
||||
#endif /* QCA_MULTIPASS_SUPPORT */
|
||||
|
在新工单中引用
屏蔽一个用户