qcacmn: Attach / Detach vdev from DP MLO Dev ctx

For ML-Repurpose usecase, Attach or Detach vdev
to DP MLO device context.

Change-Id: I67a31db07c68fc9988c504f12a075541907d7027
CRs-Fixed: 3598387
This commit is contained in:
Kenvish Butani
2023-08-25 12:53:06 +05:30
committed by Rahul Choudhary
父節點 beede07860
當前提交 31876041a5

查看文件

@@ -1239,6 +1239,13 @@ QDF_STATUS wlan_mlo_mgr_mld_vdev_attach(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr *mld_addr)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct wlan_objmgr_psoc *psoc = NULL;
psoc = wlan_vdev_get_psoc(vdev);
if (!psoc) {
mlo_err("Failed to get psoc");
return QDF_STATUS_E_FAILURE;
}
wlan_vdev_obj_lock(vdev);
wlan_vdev_mlme_set_mldaddr(vdev, (uint8_t *)&mld_addr->bytes[0]);
@@ -1246,15 +1253,45 @@ QDF_STATUS wlan_mlo_mgr_mld_vdev_attach(struct wlan_objmgr_vdev *vdev,
status = mlo_dev_ctx_init(vdev);
if (cdp_mlo_dev_ctxt_attach(wlan_psoc_get_dp_handle(psoc),
wlan_vdev_get_id(vdev),
(uint8_t *)mld_addr)
!= QDF_STATUS_SUCCESS) {
mlo_err("Failed to attach DP vdev (" QDF_MAC_ADDR_FMT ") to"
" MLO Dev ctxt (" QDF_MAC_ADDR_FMT ")",
QDF_MAC_ADDR_REF(wlan_vdev_mlme_get_macaddr(vdev)),
QDF_MAC_ADDR_REF(mld_addr->bytes));
}
return status;
}
QDF_STATUS wlan_mlo_mgr_mld_vdev_detach(struct wlan_objmgr_vdev *vdev)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct qdf_mac_addr *mld_addr;
struct wlan_objmgr_psoc *psoc = NULL;
psoc = wlan_vdev_get_psoc(vdev);
if (!psoc) {
mlo_err("Failed to get psoc");
return QDF_STATUS_E_FAILURE;
}
status = mlo_dev_ctx_deinit(vdev);
/* Detach DP vdev from DP MLO Device Context */
mld_addr = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev);
if (cdp_mlo_dev_ctxt_detach(wlan_psoc_get_dp_handle(psoc),
wlan_vdev_get_id(vdev),
(uint8_t *)mld_addr)
!= QDF_STATUS_SUCCESS) {
mlo_err("Failed to detach DP vdev (" QDF_MAC_ADDR_FMT ") from"
" MLO Dev ctxt (" QDF_MAC_ADDR_FMT ")",
QDF_MAC_ADDR_REF(wlan_vdev_mlme_get_macaddr(vdev)),
QDF_MAC_ADDR_REF(mld_addr->bytes));
}
wlan_vdev_obj_lock(vdev);
wlan_vdev_mlme_reset_mldaddr(vdev);
wlan_vdev_mlme_op_flags_clear(vdev, WLAN_VDEV_OP_MLO_REMOVE_LINK_VDEV);