qcacld-3.0: Stop t2lm timer during disconnection

Add support to stop t2lm timer during sta disconnection
and clear t2lm mapping.

Change-Id: I59e724331eda8b67fd1405031bdb00d12805ad09
CRs-Fixed: 3479496
这个提交包含在:
Amruta Kulkarni
2023-04-25 16:02:10 -07:00
提交者 Madan Koyyalamudi
父节点 0d75e27c4e
当前提交 adef8d5e58
修改 3 个文件,包含 102 行新增1 行删除

查看文件

@@ -34,6 +34,7 @@
#include "connection_mgr/core/src/wlan_cm_roam.h"
#include <wlan_mlo_mgr_sta.h>
#include "wlan_mlo_mgr_roam.h"
#include "wlan_t2lm_api.h"
static void cm_abort_connect_request_timers(struct wlan_objmgr_vdev *vdev)
{
@@ -92,6 +93,8 @@ QDF_STATUS cm_disconnect_start_ind(struct wlan_objmgr_vdev *vdev,
mlo_roam_free_copied_reassoc_rsp(vdev);
}
wlan_t2lm_clear_all_tid_mapping(vdev);
return QDF_STATUS_SUCCESS;
}

查看文件

@@ -188,6 +188,16 @@ QDF_STATUS wlan_t2lm_deliver_event(struct wlan_objmgr_vdev *vdev,
void *event_data,
uint8_t *dialog_token);
/**
* wlan_t2lm_clear_ongoing_negotiation - Clear ongoing
* negotiation peer level TID-to-link-mapping.
* @peer: pointer to peer
*
* Return: none
*/
void
wlan_t2lm_clear_ongoing_negotiation(struct wlan_objmgr_peer *peer);
/**
* wlan_t2lm_clear_peer_negotiation - Clear previously
* negotiated peer level TID-to-link-mapping.
@@ -197,6 +207,17 @@ QDF_STATUS wlan_t2lm_deliver_event(struct wlan_objmgr_vdev *vdev,
*/
void
wlan_t2lm_clear_peer_negotiation(struct wlan_objmgr_peer *peer);
/**
* wlan_t2lm_clear_all_tid_mapping - Clear all tid mapping
* @vdev: pointer to vdev
*
* This api will clear peer level and beacon t2lm mapping.
* Return: none
*/
void
wlan_t2lm_clear_all_tid_mapping(struct wlan_objmgr_vdev *vdev);
#else
static inline QDF_STATUS
t2lm_handle_rx_req(struct wlan_objmgr_vdev *vdev,
@@ -250,10 +271,18 @@ wlan_t2lm_validate_candidate(struct cnx_mgr *cm_ctx,
return QDF_STATUS_E_NOSUPPORT;
}
static inline void
wlan_t2lm_clear_ongoing_negotiation(struct wlan_objmgr_peer *peer)
{}
static inline void
wlan_t2lm_clear_peer_negotiation(struct wlan_objmgr_peer *peer)
{}
static inline void
wlan_t2lm_clear_all_tid_mapping(struct wlan_objmgr_vdev *vdev)
{}
static inline
QDF_STATUS wlan_t2lm_deliver_event(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer,

查看文件

@@ -429,12 +429,43 @@ end:
return status;
}
void
wlan_t2lm_clear_ongoing_negotiation(struct wlan_objmgr_peer *peer)
{
struct wlan_mlo_peer_context *ml_peer;
struct wlan_t2lm_onging_negotiation_info *ongoing_tid_to_link_mapping;
uint8_t i;
ml_peer = peer->mlo_peer_ctx;
if (!ml_peer) {
t2lm_err("ml peer is null");
return;
}
ongoing_tid_to_link_mapping = &ml_peer->t2lm_policy.ongoing_tid_to_link_mapping;
if (!ongoing_tid_to_link_mapping) {
t2lm_err("ongoing tid mapping is null");
return;
}
qdf_mem_zero(&ongoing_tid_to_link_mapping->t2lm_info,
sizeof(struct wlan_t2lm_info) * WLAN_T2LM_MAX_DIRECTION);
ongoing_tid_to_link_mapping->dialog_token = 0;
ongoing_tid_to_link_mapping->category = WLAN_T2LM_CATEGORY_NONE;
ongoing_tid_to_link_mapping->t2lm_resp_type = WLAN_T2LM_RESP_TYPE_INVALID;
ongoing_tid_to_link_mapping->t2lm_tx_status = WLAN_T2LM_TX_STATUS_NONE;
for (i = 0; i < WLAN_T2LM_MAX_DIRECTION; i++)
ongoing_tid_to_link_mapping->t2lm_info[i].direction =
WLAN_T2LM_INVALID_DIRECTION;
}
void
wlan_t2lm_clear_peer_negotiation(struct wlan_objmgr_peer *peer)
{
struct wlan_mlo_peer_context *ml_peer;
struct wlan_prev_t2lm_negotiated_info *t2lm_negotiated_info;
uint8_t i;
ml_peer = peer->mlo_peer_ctx;
@@ -453,6 +484,44 @@ wlan_t2lm_clear_peer_negotiation(struct wlan_objmgr_peer *peer)
WLAN_T2LM_INVALID_DIRECTION;
}
void
wlan_t2lm_clear_all_tid_mapping(struct wlan_objmgr_vdev *vdev)
{
struct wlan_objmgr_peer *peer;
struct wlan_t2lm_context *t2lm_ctx;
if (!vdev) {
t2lm_err("Vdev is null");
return;
}
if (!wlan_vdev_mlme_is_mlo_vdev(vdev))
return;
if (!vdev->mlo_dev_ctx) {
t2lm_err("mlo dev ctx is null");
return;
}
t2lm_ctx = &vdev->mlo_dev_ctx->t2lm_ctx;
peer = wlan_vdev_get_bsspeer(vdev);
if (!peer) {
t2lm_err("peer is null");
return;
}
qdf_mem_zero(&t2lm_ctx->established_t2lm,
sizeof(struct wlan_mlo_t2lm_ie));
t2lm_ctx->established_t2lm.t2lm.direction = WLAN_T2LM_INVALID_DIRECTION;
qdf_mem_zero(&t2lm_ctx->upcoming_t2lm,
sizeof(struct wlan_mlo_t2lm_ie));
t2lm_ctx->upcoming_t2lm.t2lm.direction = WLAN_T2LM_INVALID_DIRECTION;
wlan_t2lm_clear_peer_negotiation(peer);
wlan_t2lm_clear_ongoing_negotiation(peer);
wlan_mlo_t2lm_timer_stop(vdev);
}
QDF_STATUS wlan_t2lm_deliver_event(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer,
enum wlan_t2lm_evt event,