qcacmn: DBDC repeater mode changes in AST
Add new ast_get_type API for DBDC repeater feature. Add other changes required in WDS and MEC handling required for DBDC repeater feature to function properly. Apply sta kickout logic to handle roaming cases only within same radio. For roaming across radios, DP should rely on control path. Change-Id: If9b35720082dd87de40827843a14238e818bc454
This commit is contained in:

gecommit door
nshrivas

bovenliggende
52c6b73468
commit
3756b7603e
@@ -461,6 +461,10 @@ int dp_peer_add_ast(struct dp_soc *soc,
|
||||
peer->self_ast_entry = ast_entry;
|
||||
ast_entry->type = CDP_TXRX_AST_TYPE_STATIC;
|
||||
break;
|
||||
case CDP_TXRX_AST_TYPE_SELF:
|
||||
peer->self_ast_entry = ast_entry;
|
||||
ast_entry->type = CDP_TXRX_AST_TYPE_SELF;
|
||||
break;
|
||||
case CDP_TXRX_AST_TYPE_WDS:
|
||||
ast_entry->next_hop = 1;
|
||||
ast_entry->type = CDP_TXRX_AST_TYPE_WDS;
|
||||
@@ -489,7 +493,8 @@ int dp_peer_add_ast(struct dp_soc *soc,
|
||||
else
|
||||
qdf_mem_copy(next_node_mac, peer->mac_addr.raw, 6);
|
||||
|
||||
if (ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) {
|
||||
if ((ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) &&
|
||||
(ast_entry->type != CDP_TXRX_AST_TYPE_SELF)) {
|
||||
if (QDF_STATUS_SUCCESS ==
|
||||
soc->cdp_soc.ol_ops->peer_add_wds_entry(
|
||||
peer->vdev->osif_vdev,
|
||||
@@ -547,25 +552,10 @@ int dp_peer_update_ast(struct dp_soc *soc, struct dp_peer *peer,
|
||||
{
|
||||
int ret = -1;
|
||||
struct dp_peer *old_peer;
|
||||
struct dp_peer *sa_peer;
|
||||
|
||||
if (ast_entry->type == CDP_TXRX_AST_TYPE_STATIC) {
|
||||
sa_peer = ast_entry->peer;
|
||||
|
||||
/*
|
||||
* Kickout, when direct associated peer(SA) roams
|
||||
* to another AP and reachable via TA peer
|
||||
*/
|
||||
if (!sa_peer->delete_in_progress) {
|
||||
sa_peer->delete_in_progress = true;
|
||||
if (soc->cdp_soc.ol_ops->peer_sta_kickout) {
|
||||
soc->cdp_soc.ol_ops->peer_sta_kickout(
|
||||
sa_peer->vdev->pdev->ctrl_pdev,
|
||||
ast_entry->mac_addr.raw);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if ((ast_entry->type == CDP_TXRX_AST_TYPE_STATIC) ||
|
||||
(ast_entry->type == CDP_TXRX_AST_TYPE_SELF))
|
||||
return 0;
|
||||
|
||||
old_peer = ast_entry->peer;
|
||||
TAILQ_REMOVE(&old_peer->ast_entry_list, ast_entry, ase_list_elem);
|
||||
@@ -578,7 +568,7 @@ int dp_peer_update_ast(struct dp_soc *soc, struct dp_peer *peer,
|
||||
TAILQ_INSERT_TAIL(&peer->ast_entry_list, ast_entry, ase_list_elem);
|
||||
|
||||
ret = soc->cdp_soc.ol_ops->peer_update_wds_entry(
|
||||
peer->vdev->osif_vdev,
|
||||
peer->vdev->osif_vdev,
|
||||
ast_entry->mac_addr.raw,
|
||||
peer->mac_addr.raw,
|
||||
flags);
|
||||
|
Verwijs in nieuw issue
Block a user