qcacld-3.0: Set eht_capable accordingly for TDLS

Set parameter add_sta_params->eht_capable accordingly whether
the peer STA support it or not.

Change-Id: Ib3664be74ece59804321e187fea889610c0a2a86
CRs-Fixed: 3454661
This commit is contained in:
Paul Zhang
2023-04-04 13:51:54 +08:00
committed by Madan Koyyalamudi
parent 741c1961d2
commit 5f512ff2ec
7 changed files with 161 additions and 0 deletions

View File

@@ -432,6 +432,27 @@ static void tdls_pe_update_peer_he_capa(struct tdls_add_sta_req *addstareq,
{ {
} }
#endif #endif
#ifdef WLAN_FEATURE_11BE
static inline void
tdls_pe_update_peer_eht_capa(struct tdls_add_sta_req *addstareq,
struct tdls_update_peer_params *update_peer)
{
if (update_peer->ehtcap_present) {
addstareq->ehtcap_present = update_peer->ehtcap_present;
addstareq->eht_cap_len = update_peer->eht_cap_len;
qdf_mem_copy(&addstareq->eht_cap,
&update_peer->eht_cap,
sizeof(update_peer->eht_cap));
}
}
#else
static inline void
tdls_pe_update_peer_eht_capa(struct tdls_add_sta_req *addstareq,
struct tdls_update_peer_params *update_peer)
{
}
#endif
/** /**
* tdls_pe_update_peer() - send TDLS update peer request to PE * tdls_pe_update_peer() - send TDLS update peer request to PE
* @req: TDLS update peer request * @req: TDLS update peer request
@@ -493,6 +514,7 @@ static QDF_STATUS tdls_pe_update_peer(struct tdls_update_peer_request *req)
&update_peer->vht_cap, &update_peer->vht_cap,
sizeof(update_peer->vht_cap)); sizeof(update_peer->vht_cap));
tdls_pe_update_peer_he_capa(addstareq, update_peer); tdls_pe_update_peer_he_capa(addstareq, update_peer);
tdls_pe_update_peer_eht_capa(addstareq, update_peer);
addstareq->supported_rates_length = update_peer->supported_rates_len; addstareq->supported_rates_length = update_peer->supported_rates_len;
addstareq->is_pmf = update_peer->is_pmf; addstareq->is_pmf = update_peer->is_pmf;
qdf_mem_copy(&addstareq->supported_rates, qdf_mem_copy(&addstareq->supported_rates,

View File

@@ -843,6 +843,28 @@ struct hecap_6ghz {
}; };
#endif #endif
#ifdef WLAN_FEATURE_11BE
/**
* struct ehtcapfixed - EHT capabilities fixed data
* @mac_cap_info: MAC capabilities
* @phy_cap_info: PHY capabilities
*/
struct ehtcapfixed {
uint8_t mac_cap_info[2];
uint8_t phy_cap_info[9];
};
/**
* struct ehtcap - EHT capabilities
* @eht_cap_fixed: fixed parts, see &ehtcapfixed
* @optional: optional parts
*/
struct ehtcap {
struct ehtcapfixed eht_cap_fixed;
uint8_t optional[];
} qdf_packed;
#endif
struct tdls_update_peer_params { struct tdls_update_peer_params {
uint8_t peer_addr[QDF_MAC_ADDR_SIZE]; uint8_t peer_addr[QDF_MAC_ADDR_SIZE];
uint32_t peer_type; uint32_t peer_type;
@@ -859,6 +881,11 @@ struct tdls_update_peer_params {
uint8_t he_cap_len; uint8_t he_cap_len;
struct hecap he_cap; struct hecap he_cap;
struct hecap_6ghz he_6ghz_cap; struct hecap_6ghz he_6ghz_cap;
#endif
#ifdef WLAN_FEATURE_11BE
uint8_t ehtcap_present;
uint8_t eht_cap_len;
struct ehtcap eht_cap;
#endif #endif
uint8_t uapsd_queues; uint8_t uapsd_queues;
uint8_t max_sp; uint8_t max_sp;
@@ -1395,6 +1422,9 @@ struct tdls_send_mgmt_request {
* @he_cap_len: he capability length * @he_cap_len: he capability length
* @he_cap: he capability * @he_cap: he capability
* @he_6ghz_cap: HE 6 GHz capability * @he_6ghz_cap: HE 6 GHz capability
* @ehtcap_present: eht capability present
* @eht_cap_len: eht capability length
* @eht_cap: eht capability
* @uapsd_queues: uapsd queue as sSirMacQosInfoStation * @uapsd_queues: uapsd queue as sSirMacQosInfoStation
* @max_sp: maximum service period * @max_sp: maximum service period
* @is_pmf: is PMF active * @is_pmf: is PMF active
@@ -1419,6 +1449,11 @@ struct tdls_add_sta_req {
uint8_t he_cap_len; uint8_t he_cap_len;
struct hecap he_cap; struct hecap he_cap;
struct hecap_6ghz he_6ghz_cap; struct hecap_6ghz he_6ghz_cap;
#endif
#ifdef WLAN_FEATURE_11BE
uint8_t ehtcap_present;
uint8_t eht_cap_len;
struct ehtcap eht_cap;
#endif #endif
uint8_t uapsd_queues; uint8_t uapsd_queues;
uint8_t max_sp; uint8_t max_sp;

View File

@@ -2394,6 +2394,10 @@ lim_add_sta(struct mac_context *mac_ctx,
lim_update_sta_eht_capable(mac_ctx, add_sta_params, sta_ds, lim_update_sta_eht_capable(mac_ctx, add_sta_params, sta_ds,
session_entry); session_entry);
lim_update_tdls_sta_eht_capable(mac_ctx, add_sta_params, sta_ds,
session_entry);
lim_update_sta_mlo_info(session_entry, add_sta_params, sta_ds); lim_update_sta_mlo_info(session_entry, add_sta_params, sta_ds);
add_sta_params->maxAmpduDensity = sta_ds->htAMpduDensity; add_sta_params->maxAmpduDensity = sta_ds->htAMpduDensity;

View File

@@ -3420,6 +3420,27 @@ lim_reg_bw_to_ht_ch_width(uint16_t reg_max_bw)
return reg_max_bw > 20 ? CH_WIDTH_40MHZ : CH_WIDTH_20MHZ; return reg_max_bw > 20 ? CH_WIDTH_40MHZ : CH_WIDTH_20MHZ;
} }
#ifdef WLAN_FEATURE_11BE
static void
lim_tdls_populate_dot11f_eht_caps(struct pe_session *pe_session,
tDphHashNode *sta,
struct tdls_add_sta_req *add_sta_req)
{
if (add_sta_req->ehtcap_present) {
pe_debug("copy eht config from pe_session");
qdf_mem_copy(&sta->eht_config, &pe_session->eht_config,
sizeof(sta->eht_config));
}
}
#else
static inline void
lim_tdls_populate_dot11f_eht_caps(struct pe_session *pe_session,
tDphHashNode *sta,
struct tdls_add_sta_req *add_sta_req)
{
}
#endif
/* /*
* update HASH node entry info * update HASH node entry info
*/ */
@@ -3446,6 +3467,8 @@ static void lim_tdls_update_hash_node_info(struct mac_context *mac,
sta->rmfEnabled = add_sta_req->is_pmf; sta->rmfEnabled = add_sta_req->is_pmf;
} }
lim_tdls_populate_dot11f_eht_caps(pe_session, sta, add_sta_req);
reg_max_bw = wlan_reg_get_max_chwidth(mac->pdev, reg_max_bw = wlan_reg_get_max_chwidth(mac->pdev,
pe_session->curr_op_freq); pe_session->curr_op_freq);

View File

@@ -8779,6 +8779,23 @@ void lim_update_stads_eht_capable(tpDphHashNode sta_ds, tpSirAssocReq assoc_req)
sta_ds->mlmStaContext.eht_capable = assoc_req->eht_cap.present; sta_ds->mlmStaContext.eht_capable = assoc_req->eht_cap.present;
} }
#ifdef FEATURE_WLAN_TDLS
#ifdef WLAN_FEATURE_11BE
void lim_update_tdls_sta_eht_capable(struct mac_context *mac,
tpAddStaParams add_sta_params,
tpDphHashNode sta_ds,
struct pe_session *session_entry)
{
if (sta_ds->staType == STA_ENTRY_TDLS_PEER) {
if (!sta_ds->eht_config.present)
add_sta_params->eht_capable = 0;
}
pe_debug("tdls eht_capable: %d", add_sta_params->eht_capable);
}
#endif
#endif
void lim_update_sta_eht_capable(struct mac_context *mac, void lim_update_sta_eht_capable(struct mac_context *mac,
tpAddStaParams add_sta_params, tpAddStaParams add_sta_params,
tpDphHashNode sta_ds, tpDphHashNode sta_ds,

View File

@@ -1963,6 +1963,30 @@ void lim_update_sta_eht_capable(struct mac_context *mac,
tpDphHashNode sta_ds, tpDphHashNode sta_ds,
struct pe_session *session_entry); struct pe_session *session_entry);
#ifdef FEATURE_WLAN_TDLS
/**
* lim_update_tdls_sta_eht_capable(): Update eht_capable in add tdls sta params
* @mac: pointer to MAC context
* @add_sta_params: pointer to add sta params
* @sta_ds: pointer to dph hash table entry
* @session_entry: pointer to PE session
*
* Return: None
*/
void lim_update_tdls_sta_eht_capable(struct mac_context *mac,
tpAddStaParams add_sta_params,
tpDphHashNode sta_ds,
struct pe_session *session_entry);
#else
static inline
void lim_update_tdls_sta_eht_capable(struct mac_context *mac,
tpAddStaParams add_sta_params,
tpDphHashNode sta_ds,
struct pe_session *session_entry)
{
}
#endif
/** /**
* lim_update_session_eht_capable_chan_switch(): Update eht_capable in PE * lim_update_session_eht_capable_chan_switch(): Update eht_capable in PE
* session * session
@@ -2081,6 +2105,14 @@ void lim_update_stads_eht_bw_320mhz(struct pe_session *session,
*/ */
bool lim_is_session_chwidth_320mhz(struct pe_session *session); bool lim_is_session_chwidth_320mhz(struct pe_session *session);
#else #else
static inline
void lim_update_tdls_sta_eht_capable(struct mac_context *mac,
tpAddStaParams add_sta_params,
tpDphHashNode sta_ds,
struct pe_session *session_entry)
{
}
static inline bool lim_is_session_eht_capable(struct pe_session *session) static inline bool lim_is_session_eht_capable(struct pe_session *session)
{ {
return false; return false;

View File

@@ -396,6 +396,30 @@ wlan_cfg80211_tdls_extract_he_params(struct tdls_update_peer_params *req_info,
} }
#endif #endif
#ifdef WLAN_FEATURE_11BE
static void
wlan_cfg80211_tdls_extract_eht_params(struct tdls_update_peer_params *req_info,
struct station_parameters *params)
{
if (params->link_sta_params.eht_capa) {
osif_debug("eht capa is present");
req_info->ehtcap_present = 1;
req_info->eht_cap_len = params->link_sta_params.eht_capa_len;
qdf_mem_copy(&req_info->eht_cap,
params->link_sta_params.eht_capa,
sizeof(struct ehtcap));
} else {
req_info->ehtcap_present = 0;
}
}
#else
static void
wlan_cfg80211_tdls_extract_eht_params(struct tdls_update_peer_params *req_info,
struct station_parameters *params)
{
}
#endif
#ifdef CFG80211_LINK_STA_PARAMS_PRESENT #ifdef CFG80211_LINK_STA_PARAMS_PRESENT
static void static void
wlan_cfg80211_tdls_extract_params(struct wlan_objmgr_vdev *vdev, wlan_cfg80211_tdls_extract_params(struct wlan_objmgr_vdev *vdev,
@@ -489,6 +513,8 @@ wlan_cfg80211_tdls_extract_params(struct wlan_objmgr_vdev *vdev,
tdls_6g_support); tdls_6g_support);
else else
osif_debug("tdls ax disabled"); osif_debug("tdls ax disabled");
wlan_cfg80211_tdls_extract_eht_params(req_info, params);
} }
#else #else
static void static void
@@ -580,6 +606,8 @@ wlan_cfg80211_tdls_extract_params(struct wlan_objmgr_vdev *vdev,
tdls_6g_support); tdls_6g_support);
else else
osif_debug("tdls ax disabled"); osif_debug("tdls ax disabled");
wlan_cfg80211_tdls_extract_eht_params(req_info, params);
} }
#endif #endif