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:

committed by
nshrivas

parent
7f1e1b8530
commit
c617106eea
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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 =
|
||||||
|
@@ -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:
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user