qcacld-3.0: Save client operation class IE

SAP's client operation class IE shows the supported band and
bandwidth of the peer. Driver will use the information
to identify the peer's band capabilities. Save operation class
IE to sta_ds peer struct.

Change-Id: Idf0b40cdd85b3da07f9db2e8de0ee2a86b307f40
CRs-Fixed: 2592870
This commit is contained in:
Liangwei Dong 2019-12-25 13:14:40 +08:00 • committed by nshrivas
commit 57ef9a3da1
7 changed files with 46 additions and 3 deletions

View file

@ -10574,6 +10574,7 @@ typedef struct sDot11fReAssocRequest{
tDot11fIEFTInfo FTInfo;
uint16_t num_RICDataDesc;
tDot11fIERICDataDesc RICDataDesc[2];
tDot11fIESuppOperatingClasses SuppOperatingClasses;
tDot11fIEWPAOpaque WPAOpaque;
tDot11fIEHTCaps HTCaps;
tDot11fIEWMMCaps WMMCaps;

View file

@ -184,7 +184,8 @@ typedef struct sDphHashNode {
#ifdef WLAN_FEATURE_11AX
tDot11fIEhe_cap he_config;
#endif
/* Peer operation class, extracted from ASSOC request frame*/
tDot11fIESuppOperatingClasses supp_operating_classes;
/*
* When a station with already an existing dph entry tries to
* associate again, the old dph entry will be zeroed out except

View file

@ -329,6 +329,7 @@ typedef struct sSirAssocReq {
tSirMacSupportedChannelIE supportedChannels;
tDot11fIEHTCaps HTCaps;
tDot11fIEWMMInfoStation WMMInfoStation;
tDot11fIESuppOperatingClasses supp_operating_classes;
/* / This is set if the frame is a reassoc request: */
uint8_t reassocRequest;
uint8_t ssidPresent;

View file

@ -1424,6 +1424,14 @@ static bool lim_chk_wmm(struct mac_context *mac_ctx, tpSirMacMgmtHdr hdr,
return true;
}
static void lim_update_sta_ds_op_classes(tpSirAssocReq assoc_req,
tpDphHashNode sta_ds)
{
qdf_mem_copy(&sta_ds->supp_operating_classes,
&assoc_req->supp_operating_classes,
sizeof(tDot11fIESuppOperatingClasses));
}
/**
* lim_update_sta_ds() - updates ds dph entry
* @mac_ctx: pointer to Global MAC structure
@ -1705,7 +1713,7 @@ static bool lim_update_sta_ds(struct mac_context *mac_ctx, tpSirMacMgmtHdr hdr,
== MCSMAPMASK2x2) ? 1 : 2;
}
lim_update_stads_he_6ghz_op(session, sta_ds);
lim_update_sta_ds_op_classes(assoc_req, sta_ds);
/* Add STA context at MAC HW (BMU, RHP & TFP) */
sta_ds->qosMode = false;
sta_ds->lleEnabled = false;

View file

@ -6035,6 +6035,9 @@ QDF_STATUS lim_strip_supp_op_class_update_struct(struct mac_context *mac_ctx,
pe_err("dot11f_unpack Parse Error");
return QDF_STATUS_E_FAILURE;
}
if (dst->num_classes)
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG,
&dst->classes[0], dst->num_classes);
return QDF_STATUS_SUCCESS;
}

View file

@ -11603,6 +11603,10 @@ static const tIEDefn IES_ReAssocRequest[] = {
offsetof(tDot11fReAssocRequest, num_RICDataDesc), "RICDataDesc",
2, 2, 550, SigIeRICDataDesc, {0, 0, 0, 0, 0},
0, DOT11F_EID_RICDATADESC, 0, 0, },
{ offsetof(tDot11fReAssocRequest, SuppOperatingClasses),
offsetof(tDot11fIESuppOperatingClasses, present), 0,
"SuppOperatingClasses", 0, 3, 34, SigIeSuppOperatingClasses,
{0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, 0, },
{ offsetof(tDot11fReAssocRequest, WPAOpaque),
offsetof(tDot11fIEWPAOpaque, present), 0, "WPAOpaque",
0, 8, 255, SigIeWPAOpaque, {0, 80, 242, 1, 0},

View file

@ -2762,6 +2762,19 @@ sir_convert_assoc_req_frame2_struct(struct mac_context *mac,
ext_cap->timing_meas, ext_cap->fine_time_meas_initiator,
ext_cap->fine_time_meas_responder);
}
if (ar->SuppOperatingClasses.present) {
uint8_t num_classes = ar->SuppOperatingClasses.num_classes;
if (num_classes > sizeof(ar->SuppOperatingClasses.classes))
num_classes =
sizeof(ar->SuppOperatingClasses.classes);
qdf_mem_copy(&pAssocReq->supp_operating_classes,
&ar->SuppOperatingClasses,
sizeof(tDot11fIESuppOperatingClasses));
QDF_TRACE_HEX_DUMP(
QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG,
ar->SuppOperatingClasses.classes, num_classes);
}
pAssocReq->vendor_vht_ie.present = ar->vendor_vht_ie.present;
if (ar->vendor_vht_ie.present) {
@ -3413,7 +3426,19 @@ sir_convert_reassoc_req_frame2_struct(struct mac_context *mac,
convert_wfd_opaque(mac, &pAssocReq->addIE, &ar->WFDIEOpaque);
}
#endif
if (ar->SuppOperatingClasses.present) {
uint8_t num_classes = ar->SuppOperatingClasses.num_classes;
if (num_classes > sizeof(ar->SuppOperatingClasses.classes))
num_classes =
sizeof(ar->SuppOperatingClasses.classes);
qdf_mem_copy(&pAssocReq->supp_operating_classes,
&ar->SuppOperatingClasses,
sizeof(tDot11fIESuppOperatingClasses));
QDF_TRACE_HEX_DUMP(
QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG,
ar->SuppOperatingClasses.classes, num_classes);
}
if (ar->VHTCaps.present) {
qdf_mem_copy(&pAssocReq->VHTCaps, &ar->VHTCaps,
sizeof(tDot11fIEVHTCaps));