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
Tento commit je obsažen v:

odevzdal
Rahul Choudhary

rodič
c92389fe5f
revize
4251e4ac67
@@ -245,6 +245,8 @@
|
||||
* from non-DFS channel
|
||||
*/
|
||||
#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 */
|
||||
#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_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
|
||||
* @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,
|
||||
uint8_t *frame,
|
||||
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
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
|
@@ -1167,3 +1167,40 @@ QDF_STATUS wlan_mlo_mgr_update_mld_addr(struct qdf_mac_addr *old_mac,
|
||||
|
||||
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;
|
||||
}
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele