diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index 959a12ee980d..d8dfacf19179 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -5133,8 +5133,10 @@ static struct cdp_cmn_ops ol_ops_cmn = { .txrx_pdev_attach_target = ol_txrx_pdev_attach_target, .txrx_pdev_post_attach = ol_txrx_pdev_post_attach, .txrx_pdev_detach = ol_txrx_pdev_detach, - .txrx_peer_attach = ol_txrx_peer_attach, - .txrx_peer_detach = ol_txrx_peer_detach, + .txrx_peer_create = ol_txrx_peer_attach, + .txrx_peer_setup = NULL, + .txrx_peer_teardown = NULL, + .txrx_peer_delete = ol_txrx_peer_detach, .txrx_vdev_register = ol_txrx_vdev_register, .txrx_soc_detach = ol_txrx_soc_detach, .txrx_get_vdev_mac_addr = ol_txrx_get_vdev_mac_addr, diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 58fd5e2102e8..87dc59aaee55 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -77,32 +77,6 @@ #include "wma_nan_datapath.h" #include "wlan_tgt_def_config.h" -#ifdef QCA_WIFI_QCA8074 -#define PEER_ATTACH_WIFI3(peer, soc, vdev, peer_addr) \ -do { \ - peer = cdp_peer_attach(soc, vdev, peer_addr); \ - if (!peer) { \ - WMA_LOGE("%s : Unable to attach peer %pM", \ - __func__, peer_addr); \ - goto err; \ - } \ -} while (0) -/* Do Nothing */ -#define PEER_ATTACH_LEGACY(peer, soc, vdev, peer_addr) {} -#else -/* Do Nothing */ -#define PEER_ATTACH_WIFI3(peer, soc, vdev, peer_addr) {} -#define PEER_ATTACH_LEGACY(peer, soc, vdev, peer_addr) \ -do { \ - peer = cdp_peer_attach(soc, vdev, peer_addr); \ - if (!peer) { \ - WMA_LOGE("%s : Unable to attach peer %pM", \ - __func__, peer_addr); \ - goto err; \ - } \ -} while (0) -#endif /* CONFIG_LITHIUM */ - /** * wma_find_vdev_by_addr() - find vdev_id from mac address * @wma: wma handle @@ -1111,7 +1085,7 @@ void wma_remove_peer(tp_wma_handle wma, uint8_t *bssid, if (roam_synch_in_progress) cdp_peer_detach_force_delete(soc, peer); else - cdp_peer_detach(soc, peer); + cdp_peer_delete(soc, peer); } peer_mac_addr = cdp_peer_get_peer_mac_addr(soc, peer); if (peer_mac_addr == NULL) { @@ -1174,7 +1148,17 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, void *pdev, void *vdev, goto err; } - PEER_ATTACH_LEGACY(peer, soc, vdev, peer_addr); + /* The peer object should be created before sending the WMI peer + * create command to firmware. This is to prevent a race condition + * where the HTT peer map event is received before the peer object + * is created in the data path + */ + peer = cdp_peer_create(soc, vdev, peer_addr); + if (!peer) { + WMA_LOGE("%s : Unable to attach peer %pM", __func__, peer_addr); + goto err; + } + if (roam_synch_in_progress) { WMA_LOGE("%s: LFR3: Created peer %p with peer_addr %pM vdev_id %d," "peer_count - %d", @@ -1188,14 +1172,19 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, void *pdev, void *vdev, if (wmi_unified_peer_create_send(wma->wmi_handle, ¶m) != QDF_STATUS_SUCCESS) { WMA_LOGP("%s : Unable to create peer in Target", __func__); - cdp_peer_detach(soc, peer); + cdp_peer_delete(soc, peer); goto err; } + WMA_LOGE("%s: Created peer %p with peer_addr %pM vdev_id %d, peer_count - %d", __func__, peer, peer_addr, vdev_id, wma->interfaces[vdev_id].peer_count); - PEER_ATTACH_WIFI3(peer, soc, vdev, peer_addr); + cdp_peer_setup(soc, vdev, peer); + + WMA_LOGE("%s: Initialized peer with peer_addr %pM vdev_id %d", + __func__, peer_addr, vdev_id); + mac_addr_raw = cdp_get_vdev_mac_addr(soc, vdev); if (mac_addr_raw == NULL) { WMA_LOGE("%s: peer mac addr is NULL", __func__); @@ -4384,7 +4373,7 @@ void wma_delete_bss_ho_fail(tp_wma_handle wma, tpDeleteBssParams params) } if (peer) - cdp_peer_detach(soc, peer); + cdp_peer_delete(soc, peer); iface->peer_count--; WMA_LOGE("%s: Removed peer %p with peer_addr %pM vdevid %d peer_count %d", __func__, peer, params->bssid, params->smesessionId,