Explorar el Código

qcacld-3.0: Add edca_pifs_param_ie in OTA frames for ll sap

For LL SAP, add edca_pifs_param vendor ie in assoc rsp, beacon
and probe rsp and send it to earbud via OTA frames.

Change-Id: I7641e8c98d57acf600fe2137a04b34625e29c3e0
CRs-Fixed: 3344888
Jyoti Kumari hace 2 años
padre
commit
e6921ffc40

+ 10 - 0
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__ */

+ 9 - 0
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);

+ 37 - 0
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(&param, 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, &param.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, &param.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