qcacmn: Add support to find ML peer from MLD MAC
Add API to retrieve ML peer context using peer MLD address from the list of MLDs. Change-Id: I7136e6b9cbcc96e897457c01c187965978e85d77 CRs-Fixed: 3422684
This commit is contained in:

committed by
Madan Koyyalamudi

parent
1bce26bfca
commit
aa8703f473
@@ -886,6 +886,30 @@ uint8_t wlan_mlo_get_sta_mld_ctx_count(void);
|
||||
struct wlan_mlo_dev_context
|
||||
*wlan_mlo_get_mld_ctx_by_mldaddr(struct qdf_mac_addr *mldaddr);
|
||||
|
||||
/**
|
||||
* wlan_mlo_list_peek_head() - Returns the head of linked list
|
||||
*
|
||||
* @ml_list: Pointer to the list of MLDs
|
||||
*
|
||||
* API to retrieve the head from the list of active MLDs
|
||||
*
|
||||
* Return: Pointer to mlo device context
|
||||
*/
|
||||
struct wlan_mlo_dev_context *wlan_mlo_list_peek_head(qdf_list_t *ml_list);
|
||||
|
||||
/**
|
||||
* wlan_mlo_get_next_mld_ctx() - Return next mlo dev node from the list
|
||||
*
|
||||
* @ml_list: Pointer to the list of MLDs
|
||||
* @mld_cur: Pointer to the current mlo dev node
|
||||
*
|
||||
* API to retrieve the next node from the list of active MLDs
|
||||
*
|
||||
* Return: Pointer to mlo device context
|
||||
*/
|
||||
struct wlan_mlo_dev_context *wlan_mlo_get_next_mld_ctx(qdf_list_t *ml_list,
|
||||
struct wlan_mlo_dev_context *mld_cur);
|
||||
|
||||
/**
|
||||
* wlan_mlo_check_valid_config() - Check vap config is valid for mld
|
||||
*
|
||||
|
@@ -434,6 +434,19 @@ struct wlan_mlo_peer_context *wlan_mlo_get_mlpeer_by_mld_mac(
|
||||
struct wlan_mlo_dev_context *ml_dev,
|
||||
struct qdf_mac_addr *mld_mac);
|
||||
|
||||
/**
|
||||
* wlan_mlo_get_mlpeer_by_peer_mladdr() - Get ML peer from the list of MLD's
|
||||
* using MLD MAC address
|
||||
*
|
||||
* @mldaddr: MAC address of the ML peer
|
||||
* @mldev: Update corresponding ML dev context in which peer is found
|
||||
*
|
||||
* Return: Pointer to mlo peer context
|
||||
*/
|
||||
struct wlan_mlo_peer_context
|
||||
*wlan_mlo_get_mlpeer_by_peer_mladdr(struct qdf_mac_addr *mldaddr,
|
||||
struct wlan_mlo_dev_context **mldev);
|
||||
|
||||
/**
|
||||
* wlan_mlo_get_mlpeer_by_aid() - find ML peer by AID
|
||||
* @ml_dev: MLO DEV object
|
||||
|
@@ -103,11 +103,16 @@ enum wlan_link_band_caps {
|
||||
* is present.
|
||||
* @pref_order: Preferred links in order.it is in form of hardware link id.
|
||||
* @timeout: timeout values for all the access categories.
|
||||
* @tlt_characterization_params: Bitmask to select Tx-Link Tuple from ordered
|
||||
* list.
|
||||
* Bit 0-15: Each bit maps to the corresponding Link ID
|
||||
* Bit 16-31: Reserved
|
||||
*/
|
||||
struct wlan_link_preference {
|
||||
uint8_t num_pref_links;
|
||||
uint8_t pref_order[MAX_PREFERRED_LINKS];
|
||||
uint32_t timeout[WIFI_AC_MAX];
|
||||
uint32_t tlt_characterization_params;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -179,7 +179,7 @@ QDF_STATUS wlan_mlo_mgr_deinit(void)
|
||||
return status;
|
||||
}
|
||||
|
||||
static inline struct wlan_mlo_dev_context *mlo_list_peek_head(
|
||||
struct wlan_mlo_dev_context *wlan_mlo_list_peek_head(
|
||||
qdf_list_t *ml_list)
|
||||
{
|
||||
struct wlan_mlo_dev_context *mld_ctx;
|
||||
@@ -195,8 +195,7 @@ static inline struct wlan_mlo_dev_context *mlo_list_peek_head(
|
||||
return mld_ctx;
|
||||
}
|
||||
|
||||
static inline
|
||||
struct wlan_mlo_dev_context *mlo_get_next_mld_ctx(qdf_list_t *ml_list,
|
||||
struct wlan_mlo_dev_context *wlan_mlo_get_next_mld_ctx(qdf_list_t *ml_list,
|
||||
struct wlan_mlo_dev_context *mld_cur)
|
||||
{
|
||||
struct wlan_mlo_dev_context *mld_next;
|
||||
@@ -230,13 +229,13 @@ uint8_t wlan_mlo_get_sta_mld_ctx_count(void)
|
||||
ml_link_lock_acquire(mlo_mgr_ctx);
|
||||
ml_list = &mlo_mgr_ctx->ml_dev_list;
|
||||
/* Get first mld context */
|
||||
mld_cur = mlo_list_peek_head(ml_list);
|
||||
mld_cur = wlan_mlo_list_peek_head(ml_list);
|
||||
|
||||
while (mld_cur) {
|
||||
/* get next mld node */
|
||||
if (mld_cur->sta_ctx)
|
||||
count++;
|
||||
mld_next = mlo_get_next_mld_ctx(ml_list, mld_cur);
|
||||
mld_next = wlan_mlo_get_next_mld_ctx(ml_list, mld_cur);
|
||||
mld_cur = mld_next;
|
||||
}
|
||||
ml_link_lock_release(mlo_mgr_ctx);
|
||||
@@ -258,7 +257,7 @@ struct wlan_mlo_dev_context
|
||||
ml_link_lock_acquire(mlo_mgr_ctx);
|
||||
ml_list = &mlo_mgr_ctx->ml_dev_list;
|
||||
/* Get first mld context */
|
||||
mld_cur = mlo_list_peek_head(ml_list);
|
||||
mld_cur = wlan_mlo_list_peek_head(ml_list);
|
||||
/**
|
||||
* Iterate through ml list, till ml mldaddr matches with
|
||||
* entry of list
|
||||
@@ -270,7 +269,7 @@ struct wlan_mlo_dev_context
|
||||
return mld_cur;
|
||||
}
|
||||
/* get next mld node */
|
||||
mld_next = mlo_get_next_mld_ctx(ml_list, mld_cur);
|
||||
mld_next = wlan_mlo_get_next_mld_ctx(ml_list, mld_cur);
|
||||
mld_cur = mld_next;
|
||||
}
|
||||
ml_link_lock_release(mlo_mgr_ctx);
|
||||
@@ -310,7 +309,7 @@ bool mlo_mgr_ml_peer_exist_on_diff_ml_ctx(uint8_t *peer_addr,
|
||||
if (!qdf_list_size(ml_list))
|
||||
goto g_ml_ref;
|
||||
|
||||
mld_cur = mlo_list_peek_head(ml_list);
|
||||
mld_cur = wlan_mlo_list_peek_head(ml_list);
|
||||
while (mld_cur) {
|
||||
mlo_dev_lock_acquire(mld_cur);
|
||||
if (qdf_is_macaddr_equal(&mld_cur->mld_addr,
|
||||
@@ -369,7 +368,7 @@ bool mlo_mgr_ml_peer_exist_on_diff_ml_ctx(uint8_t *peer_addr,
|
||||
}
|
||||
ml_peerlist_lock_release(mlo_peer_list);
|
||||
|
||||
mld_next = mlo_get_next_mld_ctx(ml_list, mld_cur);
|
||||
mld_next = wlan_mlo_get_next_mld_ctx(ml_list, mld_cur);
|
||||
mlo_dev_lock_release(mld_cur);
|
||||
mld_cur = mld_next;
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@@ -294,6 +294,38 @@ struct wlan_mlo_peer_context *wlan_mlo_get_mlpeer_by_mld_mac(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct wlan_mlo_peer_context
|
||||
*wlan_mlo_get_mlpeer_by_peer_mladdr(struct qdf_mac_addr *mldaddr,
|
||||
struct wlan_mlo_dev_context **mldev)
|
||||
{
|
||||
struct wlan_mlo_dev_context *mld_cur;
|
||||
struct wlan_mlo_dev_context *mld_next;
|
||||
struct wlan_mlo_peer_context *ml_peer;
|
||||
qdf_list_t *ml_list;
|
||||
struct mlo_mgr_context *mlo_mgr_ctx = wlan_objmgr_get_mlo_ctx();
|
||||
|
||||
if (!mlo_mgr_ctx)
|
||||
return NULL;
|
||||
|
||||
ml_link_lock_acquire(mlo_mgr_ctx);
|
||||
ml_list = &mlo_mgr_ctx->ml_dev_list;
|
||||
mld_cur = wlan_mlo_list_peek_head(ml_list);
|
||||
|
||||
while (mld_cur) {
|
||||
ml_peer = mlo_get_mlpeer(mld_cur, mldaddr);
|
||||
if (ml_peer != NULL) {
|
||||
*mldev = mld_cur;
|
||||
ml_link_lock_release(mlo_mgr_ctx);
|
||||
return ml_peer;
|
||||
}
|
||||
mld_next = wlan_mlo_get_next_mld_ctx(ml_list, mld_cur);
|
||||
mld_cur = mld_next;
|
||||
}
|
||||
ml_link_lock_release(mlo_mgr_ctx);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct wlan_mlo_peer_context *wlan_mlo_get_mlpeer_by_ml_peerid(
|
||||
struct wlan_mlo_dev_context *ml_dev,
|
||||
uint16_t ml_peerid)
|
||||
|
Reference in New Issue
Block a user