diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h index fb2395ab97..42911bc54b 100644 --- a/core/mac/src/include/parser_api.h +++ b/core/mac/src/include/parser_api.h @@ -1812,4 +1812,14 @@ void populate_dot11f_rnr_tbtt_info_7(struct mac_context *mac_ctx, struct pe_session *rnr_session, tDot11fIEreduced_neighbor_report *dot11f); +/** + * populate_dot11f_edca_pifs_param_set() - populate edca/pifs param ie + * @mac: Mac context + * @qcn_ie: pointer to tDot11fIEqcn_ie + * + * Return: none + */ +void populate_dot11f_edca_pifs_param_set( + struct mac_context *mac, + tDot11fIEqcn_ie *qcn_ie); #endif /* __PARSE_H__ */ diff --git a/core/mac/src/pe/sch/sch_beacon_gen.c b/core/mac/src/pe/sch/sch_beacon_gen.c index 1f3c866aa1..a0ea76efd9 100644 --- a/core/mac/src/pe/sch/sch_beacon_gen.c +++ b/core/mac/src/pe/sch/sch_beacon_gen.c @@ -1248,6 +1248,15 @@ void lim_update_probe_rsp_template_ie_bitmap_beacon2(struct mac_context *mac, sizeof(beacon2->WMMCaps)); } + /* QCN IE - only for ll sap */ + if (beacon2->qcn_ie.present) { + set_probe_rsp_ie_bitmap(DefProbeRspIeBitmap, + WLAN_ELEMID_VENDOR); + qdf_mem_copy((void *)&prb_rsp->qcn_ie, + (void *)&beacon2->qcn_ie, + sizeof(beacon2->qcn_ie)); + } + /* Extended Capability */ if (beacon2->ExtCap.present) { set_probe_rsp_ie_bitmap(DefProbeRspIeBitmap, DOT11F_EID_EXTCAP); diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index 124eba1285..871909f204 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -1672,6 +1672,34 @@ void populate_dot11f_bss_max_idle(struct mac_context *mac, } } +void populate_dot11f_edca_pifs_param_set(struct mac_context *mac, + tDot11fIEqcn_ie *qcn_ie) +{ + struct wlan_edca_pifs_param_ie param = {0}; + struct edca_param *eparam; + struct pifs_param *pparam; + uint8_t edca_param_type; + + qcn_ie->present = 1; + qcn_ie->edca_pifs_param_attr.present = 1; + + edca_param_type = mac->mlme_cfg->edca_params.edca_param_type; + wlan_mlme_set_edca_pifs_param(¶m, edca_param_type); + qcn_ie->edca_pifs_param_attr.edca_param_type = edca_param_type; + + if (edca_param_type == HOST_EDCA_PARAM_TYPE_AGGRESSIVE) { + qcn_ie->edca_pifs_param_attr.num_data = sizeof(*eparam); + eparam = (struct edca_param *)qcn_ie->edca_pifs_param_attr.data; + qdf_mem_copy(eparam, ¶m.edca_pifs_param.eparam, + sizeof(*eparam)); + } else if (edca_param_type == HOST_EDCA_PARAM_TYPE_PIFS) { + qcn_ie->edca_pifs_param_attr.num_data = sizeof(*pparam); + pparam = (struct pifs_param *)qcn_ie->edca_pifs_param_attr.data; + qdf_mem_copy(pparam, ¶m.edca_pifs_param.pparam, + sizeof(*pparam)); + } +} + void populate_dot11f_qcn_ie(struct mac_context *mac, struct pe_session *pe_session, tDot11fIEqcn_ie *qcn_ie, @@ -1693,6 +1721,15 @@ void populate_dot11f_qcn_ie(struct mac_context *mac, } populate_dot11f_qcn_ie_he_params(mac, pe_session, qcn_ie, attr_id); + if (policy_mgr_is_ll_sap_present( + mac->psoc, + policy_mgr_convert_device_mode_to_qdf_type( + pe_session->opmode), pe_session->vdev_id)) { + pe_debug("Populate edca/pifs param ie for ll sap"); + populate_dot11f_edca_pifs_param_set( + mac, + qcn_ie); + } } QDF_STATUS