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:

committed by
Madan Koyyalamudi

parent
2069b79a16
commit
7eca35c643
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user