qcacmn: Add new APIs to get t2lm info from vdev or peer obj
Add new APIs to get t2lm info from vdev or peer obj Change-Id: Id1d3bf9ec88cb14574803ac952304a3103397799 CRs-Fixed: 3431479
This commit is contained in:

committed by
Madan Koyyalamudi

parent
74c7a8d542
commit
28f7114375
@@ -711,6 +711,15 @@ QDF_STATUS wlan_process_bcn_prbrsp_t2lm_ie(struct wlan_objmgr_vdev *vdev,
|
|||||||
*/
|
*/
|
||||||
QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
|
QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
|
||||||
struct wlan_t2lm_info *t2lm);
|
struct wlan_t2lm_info *t2lm);
|
||||||
|
/**
|
||||||
|
* wlan_get_t2lm_mapping_status() - API to get T2LM info
|
||||||
|
* @vdev: Pointer to vdev
|
||||||
|
* @t2lm: T2LM info
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_get_t2lm_mapping_status(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_t2lm_info *t2lm);
|
||||||
#else
|
#else
|
||||||
static inline QDF_STATUS wlan_mlo_parse_t2lm_ie(
|
static inline QDF_STATUS wlan_mlo_parse_t2lm_ie(
|
||||||
struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie)
|
struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie)
|
||||||
|
@@ -831,6 +831,101 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_get_vdev_t2lm_mapping_status() - API to get vdev level T2LM info
|
||||||
|
* @vdev: vdev object
|
||||||
|
* @t2lm: T2LM info
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static
|
||||||
|
QDF_STATUS wlan_get_vdev_t2lm_mapping_status(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_t2lm_info *t2lm)
|
||||||
|
{
|
||||||
|
struct wlan_t2lm_context *t2lm_ctx;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
t2lm_ctx = &vdev->mlo_dev_ctx->t2lm_ctx;
|
||||||
|
|
||||||
|
t2lm_dev_lock_acquire(t2lm_ctx);
|
||||||
|
qdf_mem_copy(&t2lm[i++], &t2lm_ctx->established_t2lm.t2lm,
|
||||||
|
sizeof(struct wlan_t2lm_info));
|
||||||
|
t2lm_dev_lock_release(t2lm_ctx);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_get_peer_t2lm_mapping_status() - API to get peer level T2LM info
|
||||||
|
* @peer: peer object
|
||||||
|
* @t2lm: T2LM info
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static
|
||||||
|
QDF_STATUS wlan_get_peer_t2lm_mapping_status(struct wlan_objmgr_peer *peer,
|
||||||
|
struct wlan_t2lm_info *t2lm)
|
||||||
|
{
|
||||||
|
enum wlan_t2lm_direction dir = WLAN_T2LM_INVALID_DIRECTION;
|
||||||
|
struct wlan_mlo_peer_context *ml_peer;
|
||||||
|
struct wlan_prev_t2lm_negotiated_info *t2lm_req;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
ml_peer = peer->mlo_peer_ctx;
|
||||||
|
if (!ml_peer)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
t2lm_req = &ml_peer->t2lm_policy.t2lm_negotiated_info;
|
||||||
|
if ((t2lm_req->t2lm_info[WLAN_T2LM_DL_DIRECTION].direction ==
|
||||||
|
WLAN_T2LM_DL_DIRECTION ||
|
||||||
|
t2lm_req->t2lm_info[WLAN_T2LM_UL_DIRECTION].direction ==
|
||||||
|
WLAN_T2LM_UL_DIRECTION) &&
|
||||||
|
t2lm_req->t2lm_info[WLAN_T2LM_BIDI_DIRECTION].direction ==
|
||||||
|
WLAN_T2LM_BIDI_DIRECTION) {
|
||||||
|
t2lm_err("Both DL/UL and BIDI T2LM IEs should not be present at the same time");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (dir = 0; dir < WLAN_T2LM_MAX_DIRECTION; dir++) {
|
||||||
|
if (t2lm_req->t2lm_info[dir].direction !=
|
||||||
|
WLAN_T2LM_INVALID_DIRECTION)
|
||||||
|
qdf_mem_copy(&t2lm[i++], &t2lm_req->t2lm_info[dir],
|
||||||
|
sizeof(struct wlan_t2lm_info));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
return QDF_STATUS_E_EMPTY;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_get_t2lm_mapping_status(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_t2lm_info *t2lm)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_peer *peer;
|
||||||
|
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
peer = wlan_objmgr_vdev_try_get_bsspeer(vdev, WLAN_MLO_MGR_ID);
|
||||||
|
if (!peer) {
|
||||||
|
t2lm_err("peer not found");
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = wlan_get_peer_t2lm_mapping_status(peer, t2lm);
|
||||||
|
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||||
|
t2lm_debug("peer level T2LM info");
|
||||||
|
goto peer_release;
|
||||||
|
}
|
||||||
|
|
||||||
|
t2lm_debug("vdev level T2LM info");
|
||||||
|
status = wlan_get_vdev_t2lm_mapping_status(vdev, t2lm);
|
||||||
|
|
||||||
|
peer_release:
|
||||||
|
wlan_objmgr_peer_release_ref(peer, WLAN_MLO_MGR_ID);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
void wlan_mlo_t2lm_timer_expiry_handler(void *vdev)
|
void wlan_mlo_t2lm_timer_expiry_handler(void *vdev)
|
||||||
{
|
{
|
||||||
struct wlan_objmgr_vdev *vdev_ctx = (struct wlan_objmgr_vdev *)vdev;
|
struct wlan_objmgr_vdev *vdev_ctx = (struct wlan_objmgr_vdev *)vdev;
|
||||||
|
Reference in New Issue
Block a user