qcacmn: Add new wrapper API to send peer-level T2LM

Add a new wrapper API to send peer-level negotiated
tid-to-link mapping to FW as the existing API to send
the mapping received from the beacon/probe response
uses ML dev context whereas the new API uses ML peer
context.

Change-Id: Ifada5600e9524585c69847f332ed0280fd316813
CRs-Fixed: 3423127
This commit is contained in:
Gururaj Pandurangi
2023-03-02 03:12:08 -08:00
committed by Madan Koyyalamudi
parent 28f7114375
commit 1958f62e8a
2 changed files with 57 additions and 0 deletions

View File

@@ -720,6 +720,20 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
*/
QDF_STATUS wlan_get_t2lm_mapping_status(struct wlan_objmgr_vdev *vdev,
struct wlan_t2lm_info *t2lm);
/**
* wlan_send_peer_level_tid_to_link_mapping() - API to send peer level T2LM info
* negotiated using action frames to FW.
*
* @vdev: Pointer to vdev
* @peer: pointer to peer
*
* Return QDF_STATUS
*/
QDF_STATUS
wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer);
#else
static inline QDF_STATUS wlan_mlo_parse_t2lm_ie(
struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie)
@@ -842,5 +856,12 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_FEATURE_11BE */
#endif /* _WLAN_MLO_T2LM_H_ */

View File

@@ -926,6 +926,42 @@ peer_release:
return status;
}
QDF_STATUS
wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer)
{
uint8_t dir, idx = 0;
struct wlan_mlo_peer_context *ml_peer;
struct wlan_t2lm_info *t2lm_info;
QDF_STATUS status = QDF_STATUS_E_NULL_VALUE;
if (!peer) {
t2lm_err("peer is null");
return status;
}
ml_peer = peer->mlo_peer_ctx;
if (!ml_peer) {
t2lm_err("ml peer is null");
return status;
}
for (dir = 0; dir < WLAN_T2LM_MAX_DIRECTION; dir++) {
t2lm_info = &ml_peer->t2lm_policy.t2lm_negotiated_info.t2lm_info[dir];
if (t2lm_info && t2lm_info->direction !=
WLAN_T2LM_INVALID_DIRECTION) {
t2lm_debug("send peer-level mapping to FW for dir: %d", dir);
status = wlan_send_tid_to_link_mapping(vdev, t2lm_info);
idx++;
}
}
if (!idx)
t2lm_debug("No peer-level mapping present");
return status;
}
void wlan_mlo_t2lm_timer_expiry_handler(void *vdev)
{
struct wlan_objmgr_vdev *vdev_ctx = (struct wlan_objmgr_vdev *)vdev;