qcacld-3.0: Handle t2lm action response frame

Add support to handle t2lm action response frame.

Change-Id: Ia7072d3050f6ee6eb078233c6129e532144740f4
CRs-Fixed: 3468073
This commit is contained in:
Amruta Kulkarni
2023-04-14 19:21:21 -07:00
committed by Madan Koyyalamudi
parent 2069b79a16
commit 7eca35c643
3 changed files with 62 additions and 10 deletions

View File

@@ -120,6 +120,7 @@ QDF_STATUS t2lm_handle_tx_req(struct wlan_objmgr_vdev *vdev,
/**
* t2lm_handle_rx_resp - Handler for parsing T2LM action frame
* @vdev: vdev pointer
* @peer: peer pointer
* @event_data: T2LM event data pointer
* @token: Dialog token
*
@@ -128,6 +129,7 @@ QDF_STATUS t2lm_handle_tx_req(struct wlan_objmgr_vdev *vdev,
* Return: qdf_status
*/
QDF_STATUS t2lm_handle_rx_resp(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer,
void *event_data, uint8_t *token);
/**
@@ -220,6 +222,7 @@ t2lm_handle_tx_req(struct wlan_objmgr_vdev *vdev,
static inline QDF_STATUS
t2lm_handle_rx_resp(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer,
void *event_data, uint8_t *token)
{
return QDF_STATUS_E_NOSUPPORT;

View File

@@ -22,6 +22,7 @@
#include "wlan_t2lm_api.h"
#include <wlan_mlo_t2lm.h>
#include "wlan_cm_api.h"
#include "wlan_mlo_mgr_roam.h"
static
const char *t2lm_get_event_str(enum wlan_t2lm_evt event)
@@ -173,9 +174,58 @@ QDF_STATUS t2lm_handle_tx_req(struct wlan_objmgr_vdev *vdev,
}
QDF_STATUS t2lm_handle_rx_resp(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer,
void *event_data, uint8_t *token)
{
return QDF_STATUS_SUCCESS;
struct wlan_t2lm_onging_negotiation_info t2lm_rsp = {0};
struct wlan_t2lm_onging_negotiation_info *t2lm_req;
QDF_STATUS status;
struct wlan_mlo_peer_context *ml_peer;
struct wlan_t2lm_info *t2lm_info;
uint8_t dir;
if (!peer) {
t2lm_err("peer is null");
return QDF_STATUS_E_NULL_VALUE;
}
ml_peer = peer->mlo_peer_ctx;
if (!ml_peer) {
t2lm_err("ml peer is null");
return QDF_STATUS_E_NULL_VALUE;
}
/* ignore the frame if all links are not connected */
if (!mlo_check_if_all_links_up(vdev))
return QDF_STATUS_SUCCESS;
status = wlan_mlo_parse_t2lm_action_frame(&t2lm_rsp, event_data,
WLAN_T2LM_CATEGORY_RESPONSE);
if (status != QDF_STATUS_SUCCESS) {
mlme_err("Unable to parse T2LM request action frame");
return QDF_STATUS_E_FAILURE;
}
t2lm_req = &ml_peer->t2lm_policy.ongoing_tid_to_link_mapping;
/* match dialog token and send t2lm mapping */
for (dir = 0; dir < WLAN_T2LM_MAX_DIRECTION; dir++) {
t2lm_info = &ml_peer->t2lm_policy.ongoing_tid_to_link_mapping.t2lm_info[dir];
if (t2lm_info &&
t2lm_info->direction != WLAN_T2LM_INVALID_DIRECTION) {
if (t2lm_rsp.dialog_token == t2lm_req->dialog_token &&
t2lm_rsp.t2lm_resp_type == WLAN_T2LM_RESP_TYPE_SUCCESS) {
status = wlan_send_tid_to_link_mapping(vdev,
t2lm_info);
if (QDF_IS_STATUS_ERROR(status)) {
t2lm_err("sending t2lm wmi failed");
break;
}
}
}
}
return status;
}
QDF_STATUS t2lm_handle_rx_teardown(struct wlan_objmgr_vdev *vdev,
@@ -246,7 +296,7 @@ QDF_STATUS t2lm_deliver_event(struct wlan_objmgr_vdev *vdev,
status = t2lm_handle_tx_req(vdev, event_data, token);
break;
case WLAN_T2LM_EV_ACTION_FRAME_RX_RESP:
status = t2lm_handle_rx_resp(vdev, event_data, token);
status = t2lm_handle_rx_resp(vdev, peer, event_data, token);
break;
case WLAN_T2LM_EV_ACTION_FRAME_RX_TEARDOWN:
status = t2lm_handle_rx_teardown(vdev, peer, event_data);

View File

@@ -2152,19 +2152,18 @@ void lim_process_action_frame(struct mac_context *mac_ctx,
case ACTION_CATEGORY_PROTECTED_EHT:
pe_debug("EHT T2LM action category: %d action: %d",
action_hdr->category, action_hdr->actionID);
peer = wlan_objmgr_get_peer_by_mac(mac_ctx->psoc,
mac_hdr->sa,
WLAN_LEGACY_MAC_ID);
if (!peer) {
pe_err("Peer is null");
break;
}
switch (action_hdr->actionID) {
case EHT_T2LM_REQUEST:
mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
body_ptr = WMA_GET_RX_MPDU_DATA(rx_pkt_info);
frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info);
peer = wlan_objmgr_get_peer_by_mac(mac_ctx->psoc,
mac_hdr->sa,
WLAN_LEGACY_MAC_ID);
if (!peer) {
pe_err("Peer is null");
break;
}
if (wlan_t2lm_deliver_event(
session->vdev, peer,
WLAN_T2LM_EV_ACTION_FRAME_RX_REQ,