From 4ea949632361077be1a474e4644f56adb5101b34 Mon Sep 17 00:00:00 2001 From: bings Date: Thu, 8 Jul 2021 16:15:25 +0800 Subject: [PATCH] qcacmn: Pass mld address and assoc link info when creating bss peer MLO sta needs mld mac and assoc link information to create bss peer Get mld address and assoc link info from connection manager and pass it to bss peer creation. Change-Id: I147ac8365f3c99c6231df589ac17d39122d57362 CRs-Fixed: 2987496 --- .../connection_mgr/core/src/wlan_cm_connect.c | 53 ++++++++++++++++++- .../core/src/wlan_cm_host_roam.c | 2 +- umac/mlme/include/wlan_mlme_cmn.h | 10 +++- .../dispatcher/src/wlan_cmn_mlme_main.c | 8 +-- 4 files changed, 66 insertions(+), 7 deletions(-) diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c b/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c index 7497458034..1e0d015049 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c @@ -485,6 +485,34 @@ static void cm_update_vdev_mlme_macaddr(struct cnx_mgr *cm_ctx, { } #endif +/** + * cm_get_bss_peer_mld_addr() - get bss peer mld mac address + * @req: pointer to cm_connect_req + * + * Return: mld mac address + */ +static struct qdf_mac_addr *cm_get_bss_peer_mld_addr(struct cm_connect_req *req) +{ + if (req && req->cur_candidate && req->cur_candidate->entry && + req->cur_candidate->entry->ml_info) + return &req->cur_candidate->entry->ml_info->mld_mac_addr; + else + return NULL; +} + +/** + * cm_bss_peer_is_assoc_peer() - is the bss peer to be created assoc peer or not + * @req: pointer to cm_connect_req + * + * Return: true if the bss peer to be created is assoc peer + */ +static bool cm_bss_peer_is_assoc_peer(struct cm_connect_req *req) +{ + if (req) + return !req->req.is_non_assoc_link; + + return false; +} #else static inline void cm_set_vdev_link_id(struct cnx_mgr *cm_ctx, @@ -495,6 +523,16 @@ static void cm_update_vdev_mlme_macaddr(struct cnx_mgr *cm_ctx, struct cm_connect_req *req) { } + +static struct qdf_mac_addr *cm_get_bss_peer_mld_addr(struct cm_connect_req *req) +{ + return NULL; +} + +static bool cm_bss_peer_is_assoc_peer(struct cm_connect_req *req) +{ + return false; +} #endif static void cm_create_bss_peer(struct cnx_mgr *cm_ctx, @@ -502,10 +540,23 @@ static void cm_create_bss_peer(struct cnx_mgr *cm_ctx, { QDF_STATUS status; struct qdf_mac_addr *bssid; + struct qdf_mac_addr *mld_mac; + bool is_assoc_link = false; + if (!cm_ctx) { + mlme_err("invalid cm_ctx"); + return; + } + if (!req) { + mlme_err("invalid req"); + return; + } bssid = &req->cur_candidate->entry->bssid; cm_set_vdev_link_id(cm_ctx, req); - status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid); + mld_mac = cm_get_bss_peer_mld_addr(req); + is_assoc_link = cm_bss_peer_is_assoc_peer(req); + status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid, + mld_mac, is_assoc_link); if (QDF_IS_STATUS_ERROR(status)) { struct wlan_cm_connect_resp *resp; uint8_t vdev_id = wlan_vdev_get_id(cm_ctx->vdev); diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c b/umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c index 3a36e9b226..95d892bb16 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c @@ -403,7 +403,7 @@ QDF_STATUS cm_reassoc_disconnect_complete(struct cnx_mgr *cm_ctx, mlme_cm_disconnect_complete_ind(cm_ctx->vdev, resp); bssid = &cm_req->roam_req.cur_candidate->entry->bssid; - status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid); + status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid, NULL, false); if (QDF_IS_STATUS_ERROR(status)) { mlme_err(CM_PREFIX_FMT "Peer create request failed", CM_PREFIX_REF(vdev_id, cm_id)); diff --git a/umac/mlme/include/wlan_mlme_cmn.h b/umac/mlme/include/wlan_mlme_cmn.h index cbcc071995..bc7c550fb7 100644 --- a/umac/mlme/include/wlan_mlme_cmn.h +++ b/umac/mlme/include/wlan_mlme_cmn.h @@ -205,7 +205,9 @@ struct mlme_ext_ops { struct wlan_cm_vdev_connect_req *req); QDF_STATUS (*mlme_cm_ext_bss_peer_create_req_cb)( struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr *peer_mac); + struct qdf_mac_addr *peer_mac, + struct qdf_mac_addr *mld_mac, + bool is_assoc_link); QDF_STATUS (*mlme_cm_ext_connect_req_cb)(struct wlan_objmgr_vdev *vdev, struct wlan_cm_vdev_connect_req *req); QDF_STATUS (*mlme_cm_ext_connect_complete_ind_cb)( @@ -476,11 +478,15 @@ QDF_STATUS mlme_cm_bss_select_ind(struct wlan_objmgr_vdev *vdev, * request * @vdev: VDEV object * @peer_mac: Peer mac address + * @mld_mac: mld mac address + * @is_assoc_link: assoc happens on this link or not * * Return: QDF_STATUS */ QDF_STATUS mlme_cm_bss_peer_create_req(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr *peer_mac); + struct qdf_mac_addr *peer_mac, + struct qdf_mac_addr *mld_mac, + bool is_assoc_link); /** * mlme_cm_connect_req() - Connection manager ext connect request to start vdev diff --git a/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c b/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c index 686c10a562..176c3cbfa7 100644 --- a/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c +++ b/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c @@ -281,13 +281,15 @@ QDF_STATUS mlme_cm_bss_select_ind(struct wlan_objmgr_vdev *vdev, } QDF_STATUS mlme_cm_bss_peer_create_req(struct wlan_objmgr_vdev *vdev, - struct qdf_mac_addr *peer_mac) + struct qdf_mac_addr *peer_mac, + struct qdf_mac_addr *mld_mac, + bool is_assoc_link) { QDF_STATUS ret = QDF_STATUS_SUCCESS; if ((glbl_ops) && glbl_ops->mlme_cm_ext_bss_peer_create_req_cb) - ret = glbl_ops->mlme_cm_ext_bss_peer_create_req_cb(vdev, - peer_mac); + ret = glbl_ops->mlme_cm_ext_bss_peer_create_req_cb( + vdev, peer_mac, mld_mac, is_assoc_link); return ret; }