qcacmn: add support for Secondary HMWDS ast entry
add support for Secondary HMWDS ast entry Change-Id: Ibf77659cbc2d7e2b536736d89e747549e269e68c CRs-Fixed: 2312270
This commit is contained in:

committed by
nshrivas

parent
9da501e634
commit
5e3a39c8d3
@@ -314,6 +314,7 @@ enum cdp_txrx_ast_entry_type {
|
||||
CDP_TXRX_AST_TYPE_WDS_HM, /* HM WDS entry */
|
||||
CDP_TXRX_AST_TYPE_STA_BSS, /* BSS entry(STA mode) */
|
||||
CDP_TXRX_AST_TYPE_DA, /* AST entry based on Destination address */
|
||||
CDP_TXRX_AST_TYPE_WDS_HM_SEC, /* HM WDS entry for secondary radio */
|
||||
CDP_TXRX_AST_TYPE_MAX
|
||||
};
|
||||
|
||||
|
@@ -872,7 +872,8 @@ static void dp_print_ast_stats(struct dp_soc *soc)
|
||||
struct dp_peer *peer;
|
||||
struct dp_ast_entry *ase, *tmp_ase;
|
||||
char type[CDP_TXRX_AST_TYPE_MAX][10] = {
|
||||
"NONE", "STATIC", "SELF", "WDS", "MEC", "HMWDS", "BSS", "DA"};
|
||||
"NONE", "STATIC", "SELF", "WDS", "MEC", "HMWDS", "BSS",
|
||||
"DA", "HMWDS_SEC"};
|
||||
|
||||
DP_PRINT_STATS("AST Stats:");
|
||||
DP_PRINT_STATS(" Entries Added = %d", soc->stats.ast.added);
|
||||
|
@@ -502,6 +502,15 @@ int dp_peer_add_ast(struct dp_soc *soc,
|
||||
|
||||
qdf_spin_lock_bh(&soc->ast_lock);
|
||||
|
||||
/* For HMWDS and HWMWDS_SEC entries can be added for same mac address
|
||||
* do not check for existing entry
|
||||
* SON takes care of deleting any existing AST entry with other types
|
||||
* before adding HMWDS entries
|
||||
*/
|
||||
if ((type == CDP_TXRX_AST_TYPE_WDS_HM) ||
|
||||
(type == CDP_TXRX_AST_TYPE_WDS_HM_SEC))
|
||||
goto add_ast_entry;
|
||||
|
||||
/* If AST entry already exists , just return from here
|
||||
* ast entry with same mac address can exist on different radios
|
||||
* if ast_override support is enabled use search by pdev in this
|
||||
@@ -548,6 +557,7 @@ int dp_peer_add_ast(struct dp_soc *soc,
|
||||
}
|
||||
}
|
||||
|
||||
add_ast_entry:
|
||||
ast_entry = (struct dp_ast_entry *)
|
||||
qdf_mem_malloc(sizeof(struct dp_ast_entry));
|
||||
|
||||
@@ -583,6 +593,10 @@ int dp_peer_add_ast(struct dp_soc *soc,
|
||||
ast_entry->next_hop = 1;
|
||||
ast_entry->type = CDP_TXRX_AST_TYPE_WDS_HM;
|
||||
break;
|
||||
case CDP_TXRX_AST_TYPE_WDS_HM_SEC:
|
||||
ast_entry->next_hop = 1;
|
||||
ast_entry->type = CDP_TXRX_AST_TYPE_WDS_HM_SEC;
|
||||
break;
|
||||
case CDP_TXRX_AST_TYPE_MEC:
|
||||
ast_entry->next_hop = 1;
|
||||
ast_entry->type = CDP_TXRX_AST_TYPE_MEC;
|
||||
@@ -610,7 +624,8 @@ int dp_peer_add_ast(struct dp_soc *soc,
|
||||
|
||||
if ((ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) &&
|
||||
(ast_entry->type != CDP_TXRX_AST_TYPE_SELF) &&
|
||||
(ast_entry->type != CDP_TXRX_AST_TYPE_STA_BSS)) {
|
||||
(ast_entry->type != CDP_TXRX_AST_TYPE_STA_BSS) &&
|
||||
(ast_entry->type != CDP_TXRX_AST_TYPE_WDS_HM_SEC)) {
|
||||
if (QDF_STATUS_SUCCESS ==
|
||||
soc->cdp_soc.ol_ops->peer_add_wds_entry(
|
||||
peer->vdev->osif_vdev,
|
||||
@@ -658,7 +673,8 @@ void dp_peer_del_ast(struct dp_soc *soc, struct dp_ast_entry *ast_entry)
|
||||
{
|
||||
struct dp_peer *peer = ast_entry->peer;
|
||||
|
||||
if (ast_entry->next_hop)
|
||||
if (ast_entry->next_hop &&
|
||||
ast_entry->type != CDP_TXRX_AST_TYPE_WDS_HM_SEC)
|
||||
soc->cdp_soc.ol_ops->peer_del_wds_entry(peer->vdev->osif_vdev,
|
||||
ast_entry->mac_addr.raw);
|
||||
|
||||
@@ -695,8 +711,9 @@ int dp_peer_update_ast(struct dp_soc *soc, struct dp_peer *peer,
|
||||
struct dp_peer *old_peer;
|
||||
|
||||
if ((ast_entry->type == CDP_TXRX_AST_TYPE_STATIC) ||
|
||||
(ast_entry->type == CDP_TXRX_AST_TYPE_SELF) ||
|
||||
(ast_entry->type == CDP_TXRX_AST_TYPE_STA_BSS))
|
||||
(ast_entry->type == CDP_TXRX_AST_TYPE_SELF) ||
|
||||
(ast_entry->type == CDP_TXRX_AST_TYPE_STA_BSS) ||
|
||||
(ast_entry->type == CDP_TXRX_AST_TYPE_WDS_HM_SEC))
|
||||
return 0;
|
||||
|
||||
old_peer = ast_entry->peer;
|
||||
|
@@ -451,6 +451,10 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
|
||||
|
||||
qdf_spin_unlock_bh(&soc->ast_lock);
|
||||
|
||||
if ((ast->type == CDP_TXRX_AST_TYPE_WDS_HM) ||
|
||||
(ast->type == CDP_TXRX_AST_TYPE_WDS_HM_SEC))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Ensure we are updating the right AST entry by
|
||||
* validating ast_idx.
|
||||
@@ -492,7 +496,8 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
|
||||
* Kickout, when direct associated peer(SA) roams
|
||||
* to another AP and reachable via TA peer
|
||||
*/
|
||||
if (!sa_peer->delete_in_progress) {
|
||||
if ((sa_peer->vdev->opmode == wlan_op_mode_ap) &&
|
||||
!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(
|
||||
|
@@ -1848,7 +1848,8 @@ qdf_nbuf_t dp_tx_send_exception(void *vap_dev, qdf_nbuf_t nbuf,
|
||||
|
||||
/* Mcast enhancement*/
|
||||
if (qdf_unlikely(vdev->mcast_enhancement_en > 0)) {
|
||||
if (DP_FRAME_IS_MULTICAST((eh)->ether_dhost)) {
|
||||
if (DP_FRAME_IS_MULTICAST((eh)->ether_dhost) &&
|
||||
!DP_FRAME_IS_BROADCAST((eh)->ether_dhost)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"Ignoring mcast_enhancement_en which is set and sending the mcast packet to the FW");
|
||||
}
|
||||
|
Reference in New Issue
Block a user