qcacmn: Add/Remove VDEV from MLD
This change adds APIs 1) remove VDEV from MLD 2) add VDEV to MLD CRs-Fixed: 3579048 Change-Id: I5a81d7a50b0c3865c3ab914a3e10906e3010cb91
This commit is contained in:

committed by
Rahul Choudhary

parent
c92389fe5f
commit
4251e4ac67
@@ -245,6 +245,8 @@
|
|||||||
* from non-DFS channel
|
* from non-DFS channel
|
||||||
*/
|
*/
|
||||||
#define WLAN_VDEV_OP_MLME_LEGACY_PEER_DISCON_TRIG 0x02000000
|
#define WLAN_VDEV_OP_MLME_LEGACY_PEER_DISCON_TRIG 0x02000000
|
||||||
|
/* for mlo reconfig link removal functionality */
|
||||||
|
#define WLAN_VDEV_OP_MLO_REMOVE_LINK_VDEV 0x04000000
|
||||||
|
|
||||||
/* CAPABILITY: IBSS available */
|
/* CAPABILITY: IBSS available */
|
||||||
#define WLAN_VDEV_C_IBSS 0x00000001
|
#define WLAN_VDEV_C_IBSS 0x00000001
|
||||||
@@ -895,6 +897,22 @@ static inline void wlan_vdev_mlme_set_mldaddr(struct wlan_objmgr_vdev *vdev,
|
|||||||
WLAN_ADDR_COPY(vdev->vdev_mlme.mldaddr, mldaddr);
|
WLAN_ADDR_COPY(vdev->vdev_mlme.mldaddr, mldaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_vdev_mlme_reset_mldaddr() - clear vdev mldaddr
|
||||||
|
* @vdev: VDEV object
|
||||||
|
*
|
||||||
|
* API to clear MLD addr in vdev object
|
||||||
|
*
|
||||||
|
* Caller need to acquire lock with wlan_vdev_obj_lock()
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
static inline void wlan_vdev_mlme_reset_mldaddr(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
/* This API is invoked with lock acquired, do not add log prints */
|
||||||
|
qdf_zero_macaddr((struct qdf_mac_addr *)vdev->vdev_mlme.mldaddr);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_vdev_mlme_get_linkaddr() - get vdev linkaddr
|
* wlan_vdev_mlme_get_linkaddr() - get vdev linkaddr
|
||||||
* @vdev: VDEV object
|
* @vdev: VDEV object
|
||||||
|
@@ -978,6 +978,28 @@ void wlan_mlo_update_action_frame_from_user(struct wlan_objmgr_vdev *vdev,
|
|||||||
void wlan_mlo_update_action_frame_to_user(struct wlan_objmgr_vdev *vdev,
|
void wlan_mlo_update_action_frame_to_user(struct wlan_objmgr_vdev *vdev,
|
||||||
uint8_t *frame,
|
uint8_t *frame,
|
||||||
uint32_t frame_len);
|
uint32_t frame_len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlo_mgr_mld_vdev_attach() - Attach VDEV to MLD
|
||||||
|
* @vdev: VDEV object
|
||||||
|
* @mld_addr: MLD address of MLD, where this VDEV should be attached
|
||||||
|
*
|
||||||
|
* API to set MLD MAC address and Attaches VDEV to existing MLD.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_mlo_mgr_mld_vdev_attach(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *mld_addr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlo_mgr_mld_vdev_detach() - Detach VDEV from MLD
|
||||||
|
* @vdev: VDEV object
|
||||||
|
*
|
||||||
|
* API to reset MLD MAC address and Detaches VDEV from its MLD.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_mlo_mgr_mld_vdev_detach(struct wlan_objmgr_vdev *vdev);
|
||||||
#else
|
#else
|
||||||
static inline QDF_STATUS wlan_mlo_mgr_init(void)
|
static inline QDF_STATUS wlan_mlo_mgr_init(void)
|
||||||
{
|
{
|
||||||
@@ -1022,5 +1044,19 @@ uint8_t wlan_mlo_get_sta_mld_ctx_count(void)
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
QDF_STATUS wlan_mlo_mgr_mld_vdev_attach(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *mld_addr)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
QDF_STATUS wlan_mlo_mgr_mld_vdev_detach(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1167,3 +1167,40 @@ QDF_STATUS wlan_mlo_mgr_update_mld_addr(struct qdf_mac_addr *old_mac,
|
|||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
wlan_vdev_obj_lock(vdev);
|
||||||
|
wlan_vdev_mlme_set_mldaddr(vdev, (uint8_t *)&mld_addr->bytes[0]);
|
||||||
|
wlan_vdev_obj_unlock(vdev);
|
||||||
|
|
||||||
|
status = mlo_dev_ctx_init(vdev);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_mlo_mgr_mld_vdev_detach(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
struct wlan_mlo_dev_context *ml_dev;
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
ml_dev = vdev->mlo_dev_ctx;
|
||||||
|
/*
|
||||||
|
* Atleast one VAP should be part of MLD for dynamic link vap
|
||||||
|
* addition and deletion, so rejecting VDEV detach
|
||||||
|
*/
|
||||||
|
if (ml_dev->wlan_vdev_count <= 1)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
status = mlo_dev_ctx_deinit(vdev);
|
||||||
|
|
||||||
|
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);
|
||||||
|
wlan_vdev_obj_unlock(vdev);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user