qcacld-3.0: Send Peer TWT caps in PEER ASSOC
Parse the association response frame to read the peer TWT extended capabilities and fill them in the WMI PEER ASSOC command and send it to the firmware. Change-Id: I07f21010abbdaa20e212abae127009dd11e6ab7d CRs-Fixed: 2264690
这个提交包含在:
@@ -1215,7 +1215,7 @@ static inline QDF_STATUS populate_dot11f_he_bss_color_change(
|
|||||||
* populate_dot11f_twt_extended_caps() - populate TWT extended capabilities
|
* populate_dot11f_twt_extended_caps() - populate TWT extended capabilities
|
||||||
* @mac_ctx: Global MAC context.
|
* @mac_ctx: Global MAC context.
|
||||||
* @pe_session: Pointer to the PE session.
|
* @pe_session: Pointer to the PE session.
|
||||||
* @p_ext_cap: Pointer to the extended capabilities of the session.
|
* @dot11f: Pointer to the extended capabilities of the session.
|
||||||
*
|
*
|
||||||
* Populate the TWT extended capabilities based on the target and INI support.
|
* Populate the TWT extended capabilities based on the target and INI support.
|
||||||
*
|
*
|
||||||
@@ -1223,12 +1223,12 @@ static inline QDF_STATUS populate_dot11f_he_bss_color_change(
|
|||||||
*/
|
*/
|
||||||
tSirRetStatus populate_dot11f_twt_extended_caps(tpAniSirGlobal mac_ctx,
|
tSirRetStatus populate_dot11f_twt_extended_caps(tpAniSirGlobal mac_ctx,
|
||||||
tpPESession pe_session,
|
tpPESession pe_session,
|
||||||
struct s_ext_cap *p_ext_cap);
|
tDot11fIEExtCap *dot11f);
|
||||||
#else
|
#else
|
||||||
static inline tSirRetStatus
|
static inline tSirRetStatus
|
||||||
populate_dot11f_twt_extended_caps(tpAniSirGlobal mac_ctx,
|
populate_dot11f_twt_extended_caps(tpAniSirGlobal mac_ctx,
|
||||||
tpPESession pe_session,
|
tpPESession pe_session,
|
||||||
struct s_ext_cap *p_ext_cap)
|
tDot11fIEExtCap *dot11f)
|
||||||
{
|
{
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -555,6 +555,10 @@ typedef struct sPESession /* Added to Support BT-AMP */
|
|||||||
enum wmi_obss_color_collision_evt_type obss_color_collision_dec_evt;
|
enum wmi_obss_color_collision_evt_type obss_color_collision_dec_evt;
|
||||||
bool is_session_obss_color_collision_det_enabled;
|
bool is_session_obss_color_collision_det_enabled;
|
||||||
int8_t def_max_tx_pwr;
|
int8_t def_max_tx_pwr;
|
||||||
|
#ifdef WLAN_SUPPORT_TWT
|
||||||
|
uint8_t peer_twt_requestor;
|
||||||
|
uint8_t peer_twt_responder;
|
||||||
|
#endif
|
||||||
} tPESession, *tpPESession;
|
} tPESession, *tpPESession;
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
|
@@ -3554,6 +3554,26 @@ static void lim_update_vht_oper_assoc_resp(tpAniSirGlobal mac_ctx,
|
|||||||
pe_debug("Updating VHT Operation in assoc Response");
|
pe_debug("Updating VHT Operation in assoc Response");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_SUPPORT_TWT
|
||||||
|
/**
|
||||||
|
* lim_set_sta_ctx_twt() - Save the TWT settings in STA context
|
||||||
|
* @sta_ctx: Pointer to Station Context
|
||||||
|
* @session: Pointer to PE session
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void lim_set_sta_ctx_twt(tAddStaParams *sta_ctx, tpPESession session)
|
||||||
|
{
|
||||||
|
sta_ctx->twt_requestor = session->peer_twt_requestor;
|
||||||
|
sta_ctx->twt_responder = session->peer_twt_responder;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void lim_set_sta_ctx_twt(tAddStaParams *sta_ctx,
|
||||||
|
tpPESession session)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* limSendAddBss()
|
* limSendAddBss()
|
||||||
*
|
*
|
||||||
@@ -4098,6 +4118,7 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,
|
|||||||
pAddBssParams->ch_width = CH_WIDTH_10MHZ;
|
pAddBssParams->ch_width = CH_WIDTH_10MHZ;
|
||||||
pAddBssParams->staContext.ch_width = CH_WIDTH_10MHZ;
|
pAddBssParams->staContext.ch_width = CH_WIDTH_10MHZ;
|
||||||
}
|
}
|
||||||
|
lim_set_sta_ctx_twt(&pAddBssParams->staContext, psessionEntry);
|
||||||
|
|
||||||
msgQ.type = WMA_ADD_BSS_REQ;
|
msgQ.type = WMA_ADD_BSS_REQ;
|
||||||
/** @ToDo : Update the Global counter to keeptrack of the PE <--> HAL messages*/
|
/** @ToDo : Update the Global counter to keeptrack of the PE <--> HAL messages*/
|
||||||
|
@@ -454,6 +454,7 @@ static void lim_update_stads_ext_cap(tpAniSirGlobal mac_ctx,
|
|||||||
ext_cap->tdls_prohibited,
|
ext_cap->tdls_prohibited,
|
||||||
ext_cap->tdls_chan_swit_prohibited);
|
ext_cap->tdls_chan_swit_prohibited);
|
||||||
#endif
|
#endif
|
||||||
|
lim_set_peer_twt_cap(session_entry, ext_cap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1955,6 +1955,14 @@ lim_send_assoc_req_mgmt_frame(tpAniSirGlobal mac_ctx,
|
|||||||
lim_merge_extcap_struct(&frm->ExtCap, &bcn_ext_cap,
|
lim_merge_extcap_struct(&frm->ExtCap, &bcn_ext_cap,
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* TWT extended capabilities should be populated after the
|
||||||
|
* intersection of beacon caps and self caps is done because
|
||||||
|
* the bits for TWT are unique to STA and AP and cannot be
|
||||||
|
* intersected.
|
||||||
|
*/
|
||||||
|
populate_dot11f_twt_extended_caps(mac_ctx, pe_session,
|
||||||
|
&frm->ExtCap);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eSIR_SUCCESS != lim_strip_supp_op_class_update_struct(mac_ctx,
|
if (eSIR_SUCCESS != lim_strip_supp_op_class_update_struct(mac_ctx,
|
||||||
|
@@ -6308,6 +6308,18 @@ void lim_set_stads_rtt_cap(tpDphHashNode sta_ds, struct s_ext_cap *ext_cap,
|
|||||||
ext_cap->fine_time_meas_responder);
|
ext_cap->fine_time_meas_responder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_SUPPORT_TWT
|
||||||
|
void lim_set_peer_twt_cap(tpPESession session, struct s_ext_cap *ext_cap)
|
||||||
|
{
|
||||||
|
session->peer_twt_requestor = ext_cap->twt_requestor_support;
|
||||||
|
session->peer_twt_responder = ext_cap->twt_responder_support;
|
||||||
|
|
||||||
|
pe_debug("Ext Cap peer TWT requestor: %d, responder: %d",
|
||||||
|
ext_cap->twt_requestor_support,
|
||||||
|
ext_cap->twt_responder_support);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lim_send_ie() - sends IE to wma
|
* lim_send_ie() - sends IE to wma
|
||||||
* @mac_ctx: global MAC context
|
* @mac_ctx: global MAC context
|
||||||
|
@@ -1413,4 +1413,13 @@ QDF_STATUS lim_obss_generate_detection_config(tpAniSirGlobal mac_ctx,
|
|||||||
void lim_enable_obss_detection_config(tpAniSirGlobal mac_ctx,
|
void lim_enable_obss_detection_config(tpAniSirGlobal mac_ctx,
|
||||||
tpPESession session);
|
tpPESession session);
|
||||||
|
|
||||||
|
#ifdef WLAN_SUPPORT_TWT
|
||||||
|
void lim_set_peer_twt_cap(tpPESession session, struct s_ext_cap *ext_cap);
|
||||||
|
#else
|
||||||
|
static inline void lim_set_peer_twt_cap(tpPESession session,
|
||||||
|
struct s_ext_cap *ext_cap)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __LIM_UTILS_H */
|
#endif /* __LIM_UTILS_H */
|
||||||
|
@@ -1215,10 +1215,6 @@ populate_dot11f_ext_cap(tpAniSirGlobal pMac,
|
|||||||
if (psessionEntry && psessionEntry->enable_bcast_probe_rsp)
|
if (psessionEntry && psessionEntry->enable_bcast_probe_rsp)
|
||||||
p_ext_cap->fils_capability = 1;
|
p_ext_cap->fils_capability = 1;
|
||||||
|
|
||||||
if (psessionEntry)
|
|
||||||
populate_dot11f_twt_extended_caps(pMac, psessionEntry,
|
|
||||||
p_ext_cap);
|
|
||||||
|
|
||||||
/* Need to calculate the num_bytes based on bits set */
|
/* Need to calculate the num_bytes based on bits set */
|
||||||
if (pDot11f->present)
|
if (pDot11f->present)
|
||||||
pDot11f->num_bytes = lim_compute_ext_cap_ie_length(pDot11f);
|
pDot11f->num_bytes = lim_compute_ext_cap_ie_length(pDot11f);
|
||||||
@@ -6411,10 +6407,14 @@ QDF_STATUS populate_dot11f_he_bss_color_change(tpAniSirGlobal mac_ctx,
|
|||||||
#ifdef WLAN_SUPPORT_TWT
|
#ifdef WLAN_SUPPORT_TWT
|
||||||
tSirRetStatus populate_dot11f_twt_extended_caps(tpAniSirGlobal mac_ctx,
|
tSirRetStatus populate_dot11f_twt_extended_caps(tpAniSirGlobal mac_ctx,
|
||||||
tpPESession pe_session,
|
tpPESession pe_session,
|
||||||
struct s_ext_cap *p_ext_cap)
|
tDot11fIEExtCap *dot11f)
|
||||||
{
|
{
|
||||||
uint32_t value = 0;
|
uint32_t value = 0;
|
||||||
tSirRetStatus status;
|
tSirRetStatus status;
|
||||||
|
struct s_ext_cap *p_ext_cap;
|
||||||
|
|
||||||
|
dot11f->num_bytes = DOT11F_IE_EXTCAP_MAX_LEN;
|
||||||
|
p_ext_cap = (struct s_ext_cap *)dot11f->bytes;
|
||||||
|
|
||||||
if (pe_session->pePersona == QDF_STA_MODE) {
|
if (pe_session->pePersona == QDF_STA_MODE) {
|
||||||
CFG_GET_INT(status, mac_ctx, WNI_CFG_TWT_REQUESTOR, value);
|
CFG_GET_INT(status, mac_ctx, WNI_CFG_TWT_REQUESTOR, value);
|
||||||
@@ -6424,6 +6424,7 @@ tSirRetStatus populate_dot11f_twt_extended_caps(tpAniSirGlobal mac_ctx,
|
|||||||
CFG_GET_INT(status, mac_ctx, WNI_CFG_TWT_RESPONDER, value);
|
CFG_GET_INT(status, mac_ctx, WNI_CFG_TWT_RESPONDER, value);
|
||||||
p_ext_cap->twt_responder_support = value;
|
p_ext_cap->twt_responder_support = value;
|
||||||
}
|
}
|
||||||
|
dot11f->num_bytes = lim_compute_ext_cap_ie_length(dot11f);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@@ -309,6 +309,10 @@ typedef struct {
|
|||||||
#endif
|
#endif
|
||||||
uint8_t stbc_capable;
|
uint8_t stbc_capable;
|
||||||
uint8_t max_amsdu_num;
|
uint8_t max_amsdu_num;
|
||||||
|
#ifdef WLAN_SUPPORT_TWT
|
||||||
|
uint8_t twt_requestor;
|
||||||
|
uint8_t twt_responder;
|
||||||
|
#endif
|
||||||
} tAddStaParams, *tpAddStaParams;
|
} tAddStaParams, *tpAddStaParams;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -30,12 +30,27 @@
|
|||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
void wma_send_twt_enable_cmd(uint32_t pdev_id, uint32_t congestion_timeout);
|
void wma_send_twt_enable_cmd(uint32_t pdev_id, uint32_t congestion_timeout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wma_set_twt_peer_caps() - Fill the peer TWT capabilities
|
||||||
|
* @params: STA context params which will store the capabilities
|
||||||
|
* @cmd: Command in which the capabilities should be populated
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
void wma_set_twt_peer_caps(tpAddStaParams params,
|
||||||
|
struct peer_assoc_params *cmd);
|
||||||
#else
|
#else
|
||||||
static inline void wma_send_twt_enable_cmd(uint32_t pdev_id,
|
static inline void wma_send_twt_enable_cmd(uint32_t pdev_id,
|
||||||
uint32_t congestion_timeout)
|
uint32_t congestion_timeout)
|
||||||
{
|
{
|
||||||
WMA_LOGD(FL("TWT not supported as WLAN_SUPPORT_TWT is disabled"));
|
WMA_LOGD(FL("TWT not supported as WLAN_SUPPORT_TWT is disabled"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void wma_set_twt_peer_caps(tpAddStaParams params,
|
||||||
|
struct peer_assoc_params *cmd)
|
||||||
|
{
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __WMA_HE_H */
|
#endif /* __WMA_HE_H */
|
||||||
|
@@ -71,6 +71,7 @@
|
|||||||
#include <cdp_txrx_handle.h>
|
#include <cdp_txrx_handle.h>
|
||||||
#include "wma_he.h"
|
#include "wma_he.h"
|
||||||
#include <qdf_crypto.h>
|
#include <qdf_crypto.h>
|
||||||
|
#include "wma_twt.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wma_send_bcn_buf_ll() - prepare and send beacon buffer to fw for LL
|
* wma_send_bcn_buf_ll() - prepare and send beacon buffer to fw for LL
|
||||||
@@ -1373,6 +1374,7 @@ QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wma_set_twt_peer_caps(params, cmd);
|
||||||
#ifdef FEATURE_WLAN_TDLS
|
#ifdef FEATURE_WLAN_TDLS
|
||||||
if (STA_ENTRY_TDLS_PEER == params->staType)
|
if (STA_ENTRY_TDLS_PEER == params->staType)
|
||||||
cmd->peer_flags |= WMI_PEER_AUTH;
|
cmd->peer_flags |= WMI_PEER_AUTH;
|
||||||
|
@@ -72,3 +72,11 @@ int wma_twt_en_complete_event_handler(void *handle,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wma_set_twt_peer_caps(tpAddStaParams params, struct peer_assoc_params *cmd)
|
||||||
|
{
|
||||||
|
if (params->twt_requestor)
|
||||||
|
cmd->peer_flags |= WMI_PEER_TWT_REQ;
|
||||||
|
if (params->twt_responder)
|
||||||
|
cmd->peer_flags |= WMI_PEER_TWT_RESP;
|
||||||
|
}
|
||||||
|
|
||||||
|
在新工单中引用
屏蔽一个用户