qcacld-3.0: Add support to cache peer capability info

Currently connected peer capability information is not getting
cached for SAP.

Add support to cache the capability info from assoc request

Change-Id: I0088bd20a98e2491f6ffb452417bc73f21e69e63
CRs-Fixed: 2392939
This commit is contained in:
Ashish Kumar Dhanotiya
2019-01-22 21:55:01 +05:30
committed by nshrivas
parent 7f1e1b8530
commit c617106eea
9 changed files with 29 additions and 3 deletions

View File

@@ -913,6 +913,7 @@ enum dhcp_nego_status {
* @vht_caps: VHT capabilities of current station * @vht_caps: VHT capabilities of current station
* @reason_code: Disconnection reason code for current station * @reason_code: Disconnection reason code for current station
* @rssi: RSSI of the current station reported from F/W * @rssi: RSSI of the current station reported from F/W
* @capability: Capability information of current station
*/ */
struct hdd_station_info { struct hdd_station_info {
bool in_use; bool in_use;
@@ -956,6 +957,7 @@ struct hdd_station_info {
int8_t rssi; int8_t rssi;
enum dhcp_phase dhcp_phase; enum dhcp_phase dhcp_phase;
enum dhcp_nego_status dhcp_nego_status; enum dhcp_nego_status dhcp_nego_status;
uint16_t capability;
}; };
/** /**

View File

@@ -1413,6 +1413,8 @@ static void hdd_fill_station_info(struct hdd_adapter *adapter,
return; return;
} }
qdf_mem_copy(&stainfo->capability, &event->capability_info,
sizeof(uint16_t));
stainfo->freq = cds_chan_to_freq(event->chan_info.chan_id); stainfo->freq = cds_chan_to_freq(event->chan_info.chan_id);
stainfo->sta_type = event->staType; stainfo->sta_type = event->staType;
stainfo->dot11_mode = stainfo->dot11_mode =

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved. * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -675,6 +675,11 @@ static uint32_t hdd_add_tx_bitrate_sap_get_len(void)
return ((NLA_HDRLEN) + (sizeof(uint8_t) + NLA_HDRLEN)); return ((NLA_HDRLEN) + (sizeof(uint8_t) + NLA_HDRLEN));
} }
static uint32_t hdd_add_sta_capability_get_len(void)
{
return nla_total_size(sizeof(uint16_t));
}
/** /**
* hdd_add_tx_bitrate_sap - add vhs nss info attribute * hdd_add_tx_bitrate_sap - add vhs nss info attribute
* @skb: pointer to response skb buffer * @skb: pointer to response skb buffer
@@ -717,7 +722,8 @@ fail:
static uint32_t hdd_add_sta_info_sap_get_len(void) static uint32_t hdd_add_sta_info_sap_get_len(void)
{ {
return ((NLA_HDRLEN) + (sizeof(uint8_t) + NLA_HDRLEN) + return ((NLA_HDRLEN) + (sizeof(uint8_t) + NLA_HDRLEN) +
hdd_add_tx_bitrate_sap_get_len()); hdd_add_tx_bitrate_sap_get_len() +
hdd_add_sta_capability_get_len());
} }
/** /**
@@ -797,7 +803,11 @@ static int hdd_add_link_standard_info_sap(struct sk_buff *skb, int8_t rssi,
hdd_err("Reason code put fail"); hdd_err("Reason code put fail");
goto fail; goto fail;
} }
if (nla_put_u16(skb, NL80211_ATTR_STA_CAPABILITY,
stainfo->capability)) {
hdd_err("put fail");
goto fail;
}
nla_nest_end(skb, nla_attr); nla_nest_end(skb, nla_attr);
return 0; return 0;
fail: fail:

View File

@@ -1128,6 +1128,7 @@ typedef struct sSirSmeAssocInd {
uint8_t ecsa_capable; uint8_t ecsa_capable;
tDot11fIEHTCaps HTCaps; tDot11fIEHTCaps HTCaps;
tDot11fIEVHTCaps VHTCaps; tDot11fIEVHTCaps VHTCaps;
tSirMacCapabilityInfo capability_info;
} tSirSmeAssocInd, *tpSirSmeAssocInd; } tSirSmeAssocInd, *tpSirSmeAssocInd;
/* / Definition for Association confirm */ /* / Definition for Association confirm */

View File

@@ -756,6 +756,7 @@ lim_fill_assoc_ind_params(struct mac_context *mac_ctx,
sme_assoc_ind->HTCaps = assoc_ind->ht_caps; sme_assoc_ind->HTCaps = assoc_ind->ht_caps;
if (assoc_ind->vht_caps.present) if (assoc_ind->vht_caps.present)
sme_assoc_ind->VHTCaps = assoc_ind->vht_caps; sme_assoc_ind->VHTCaps = assoc_ind->vht_caps;
sme_assoc_ind->capability_info = assoc_ind->capabilityInfo;
} }
/** /**

View File

@@ -280,6 +280,7 @@ typedef struct sap_StationAssocReassocCompleteEvent_s {
uint8_t ecsa_capable; uint8_t ecsa_capable;
tDot11fIEHTCaps ht_caps; tDot11fIEHTCaps ht_caps;
tDot11fIEVHTCaps vht_caps; tDot11fIEVHTCaps vht_caps;
tSirMacCapabilityInfo capability_info;
} tSap_StationAssocReassocCompleteEvent; } tSap_StationAssocReassocCompleteEvent;
typedef struct sap_StationDisassocCompleteEvent_s { typedef struct sap_StationDisassocCompleteEvent_s {

View File

@@ -1562,6 +1562,8 @@ QDF_STATUS sap_signal_hdd_event(struct sap_context *sap_ctx,
reassoc_complete->ht_caps = csr_roaminfo->ht_caps; reassoc_complete->ht_caps = csr_roaminfo->ht_caps;
if (csr_roaminfo->vht_caps.present) if (csr_roaminfo->vht_caps.present)
reassoc_complete->vht_caps = csr_roaminfo->vht_caps; reassoc_complete->vht_caps = csr_roaminfo->vht_caps;
reassoc_complete->capability_info =
csr_roaminfo->capability_info;
break; break;

View File

@@ -1173,6 +1173,7 @@ struct csr_roam_info {
int rssi; int rssi;
int tx_rate; int tx_rate;
int rx_rate; int rx_rate;
tSirMacCapabilityInfo capability_info;
#ifdef WLAN_FEATURE_SAE #ifdef WLAN_FEATURE_SAE
struct sir_sae_info *sae_info; struct sir_sae_info *sae_info;
#endif #endif
@@ -1211,6 +1212,7 @@ typedef struct sSirSmeAssocIndToUpperLayerCnf {
tDot11fIEHTCaps ht_caps; tDot11fIEHTCaps ht_caps;
tDot11fIEVHTCaps vht_caps; tDot11fIEVHTCaps vht_caps;
tSirMacCapabilityInfo capability_info;
} tSirSmeAssocIndToUpperLayerCnf, *tpSirSmeAssocIndToUpperLayerCnf; } tSirSmeAssocIndToUpperLayerCnf, *tpSirSmeAssocIndToUpperLayerCnf;
typedef struct tagCsrSummaryStatsInfo { typedef struct tagCsrSummaryStatsInfo {

View File

@@ -9638,6 +9638,9 @@ void csr_roam_joined_state_msg_processor(struct mac_context *mac, void *pMsgBuf)
roam_info->ht_caps = pUpperLayerAssocCnf->ht_caps; roam_info->ht_caps = pUpperLayerAssocCnf->ht_caps;
if (pUpperLayerAssocCnf->vht_caps.present) if (pUpperLayerAssocCnf->vht_caps.present)
roam_info->vht_caps = pUpperLayerAssocCnf->vht_caps; roam_info->vht_caps = pUpperLayerAssocCnf->vht_caps;
roam_info->capability_info =
pUpperLayerAssocCnf->capability_info;
if (CSR_IS_INFRA_AP(roam_info->u.pConnectedProfile)) { if (CSR_IS_INFRA_AP(roam_info->u.pConnectedProfile)) {
mac->roam.roamSession[sessionId].connectState = mac->roam.roamSession[sessionId].connectState =
eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED; eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED;
@@ -10584,6 +10587,7 @@ csr_roam_chk_lnk_assoc_ind(struct mac_context *mac_ctx, tSirSmeRsp *msg_ptr)
qdf_mem_copy(&roam_info_ptr->vht_caps, qdf_mem_copy(&roam_info_ptr->vht_caps,
&pAssocInd->VHTCaps, &pAssocInd->VHTCaps,
sizeof(tDot11fIEVHTCaps)); sizeof(tDot11fIEVHTCaps));
roam_info_ptr->capability_info = pAssocInd->capability_info;
if (CSR_IS_INFRA_AP(roam_info_ptr->u.pConnectedProfile)) { if (CSR_IS_INFRA_AP(roam_info_ptr->u.pConnectedProfile)) {
if (session->pCurRoamProfile && if (session->pCurRoamProfile &&
@@ -15623,6 +15627,7 @@ QDF_STATUS csr_send_assoc_ind_to_upper_layer_cnf_msg(struct mac_context *mac,
pMsg->ht_caps = pAssocInd->HTCaps; pMsg->ht_caps = pAssocInd->HTCaps;
if (pAssocInd->VHTCaps.present) if (pAssocInd->VHTCaps.present)
pMsg->vht_caps = pAssocInd->VHTCaps; pMsg->vht_caps = pAssocInd->VHTCaps;
pMsg->capability_info = pAssocInd->capability_info;
msgQ.type = eWNI_SME_UPPER_LAYER_ASSOC_CNF; msgQ.type = eWNI_SME_UPPER_LAYER_ASSOC_CNF;
msgQ.bodyptr = pMsg; msgQ.bodyptr = pMsg;