qcacld-3.0: Enable Flex. TWT based on TWT Req/Resp Capability

Enable Flexible TWT when TWT feature is enable and either of
the TWT Requestor or Responder capability is enable.

Change-Id: I2f2b1c311d9aba6e09d309e83f37098175b80767
CRs-Fixed: 3422493
This commit is contained in:
nakul kachhwaha
2023-06-06 00:34:59 +05:30
committed by Rahul Choudhary
parent 125eb5841d
commit 1ac61ce509
3 changed files with 45 additions and 9 deletions

View File

@@ -847,7 +847,7 @@ QDF_STATUS mlme_update_tgt_he_caps_in_cfg(struct wlan_objmgr_psoc *psoc,
QDF_STATUS status = QDF_STATUS_SUCCESS;
tDot11fIEhe_cap *he_cap = &wma_cfg->he_cap;
struct wlan_mlme_psoc_ext_obj *mlme_obj = mlme_get_psoc_ext_obj(psoc);
uint8_t value;
uint8_t value, twt_req, twt_resp;
uint16_t tx_mcs_map = 0;
uint16_t rx_mcs_map = 0;
uint8_t nss;
@@ -858,9 +858,13 @@ QDF_STATUS mlme_update_tgt_he_caps_in_cfg(struct wlan_objmgr_psoc *psoc,
mlme_obj->cfg.he_caps.dot11_he_cap.present = 1;
mlme_obj->cfg.he_caps.dot11_he_cap.htc_he = he_cap->htc_he;
value = QDF_MIN(he_cap->twt_request,
mlme_obj->cfg.he_caps.dot11_he_cap.twt_request);
mlme_obj->cfg.he_caps.dot11_he_cap.twt_request = value;
twt_req = QDF_MIN(he_cap->twt_request,
mlme_obj->cfg.he_caps.dot11_he_cap.twt_request);
mlme_obj->cfg.he_caps.dot11_he_cap.twt_request = twt_req;
twt_resp = QDF_MIN(he_cap->twt_responder,
mlme_obj->cfg.he_caps.dot11_he_cap.twt_responder);
mlme_obj->cfg.he_caps.dot11_he_cap.twt_responder = twt_resp;
value = QDF_MIN(he_cap->fragmentation,
mlme_obj->cfg.he_caps.he_dynamic_fragmentation);
@@ -897,8 +901,16 @@ QDF_STATUS mlme_update_tgt_he_caps_in_cfg(struct wlan_objmgr_psoc *psoc,
mlme_obj->cfg.he_caps.dot11_he_cap.broadcast_twt);
mlme_obj->cfg.he_caps.dot11_he_cap.broadcast_twt = value;
mlme_obj->cfg.he_caps.dot11_he_cap.flex_twt_sched =
he_cap->flex_twt_sched;
/*
* As per 802.11ax spec, Flexible TWT capability can be set
* independent of TWT Requestor/Responder capability.
* But currently we don't have any such usecase and firmware
* does not support it. Hence enabling Flexible TWT only when
* either or both of the TWT Requestor/Responder capability
* is set/enabled.
*/
value = QDF_MIN(he_cap->flex_twt_sched, (twt_req || twt_resp));
mlme_obj->cfg.he_caps.dot11_he_cap.flex_twt_sched = value;
mlme_obj->cfg.he_caps.dot11_he_cap.ba_32bit_bitmap =
he_cap->ba_32bit_bitmap;

View File

@@ -71,6 +71,7 @@
#include <lim_assoc_utils.h>
#include "wlan_mlme_ucfg_api.h"
#include "nan_ucfg_api.h"
#include "wlan_twt_ucfg_ext_cfg.h"
#ifdef WLAN_FEATURE_11BE
#include "wma_eht.h"
#endif
@@ -7957,7 +7958,7 @@ QDF_STATUS lim_send_he_caps_ie(struct mac_context *mac_ctx,
HE_CAP_80P80_MCS_MAP_LEN;
uint8_t num_ppe_th = 0;
bool nan_beamforming_supported;
bool disable_nan_tx_bf = false;
bool disable_nan_tx_bf = false, value = false;
/* Sending only minimal info(no PPET) to FW now, update if required */
qdf_mem_zero(he_caps, he_cap_total_len);
@@ -8001,6 +8002,24 @@ QDF_STATUS lim_send_he_caps_ie(struct mac_context *mac_ctx,
num_ppe_th = lim_set_he_caps_ppet(mac_ctx, he_caps,
CDS_BAND_5GHZ);
if ((device_mode == QDF_STA_MODE) ||
(device_mode == QDF_P2P_CLIENT_MODE)) {
ucfg_twt_cfg_get_requestor(mac_ctx->psoc, &value);
if (!value) {
he_cap->twt_request = false;
he_cap->flex_twt_sched = false;
}
he_cap->twt_responder = false;
} else if ((device_mode == QDF_SAP_MODE) ||
(device_mode == QDF_P2P_GO_MODE)) {
ucfg_twt_cfg_get_responder(mac_ctx->psoc, &value);
if (!value) {
he_cap->twt_responder = false;
he_cap->flex_twt_sched = false;
}
he_cap->twt_request = false;
}
status_5g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HE_CAP,
CDS_BAND_5GHZ, &he_caps[2],
he_caps[1] + 1 + num_ppe_th);

View File

@@ -1869,9 +1869,14 @@ void csr_update_session_he_cap(struct mac_context *mac_ctx,
*/
persona = wlan_vdev_mlme_get_opmode(vdev);
if (persona == QDF_SAP_MODE || persona == QDF_P2P_GO_MODE) {
he_cap->twt_request = 0;
he_cap->twt_request = false;
if (!he_cap->twt_responder)
he_cap->flex_twt_sched = false;
} else if (persona == QDF_STA_MODE || persona == QDF_P2P_CLIENT_MODE) {
he_cap->twt_responder = 0;
he_cap->twt_responder = false;
if (!he_cap->twt_request)
he_cap->flex_twt_sched = false;
}
if (he_cap->ppet_present) {