소스 검색

qcacmn: Add 11be puncturing support

Add puncturing bitmap along with channel parameters
in vdev structures for filling during vdev start.

Change-Id: I5e5afd6e118ed9933e4d9c30e2ad65cd4259bca0
CRs-Fixed: 2958389
Venkateswara Swamy Bandaru 4 년 전
부모
커밋
8bc0945029

+ 4 - 0
umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h

@@ -266,6 +266,7 @@ struct wlan_vdev_create_params {
  * @ch_cfreq2:    channel center frequency for secondary
  * @ch_width:     Channel width.
  * @ch_phymode:   Channel phymode.
+ * @puncture_bitmap:   Puncture bitmap per 20MHz.
  */
 struct wlan_channel {
 	uint16_t     ch_freq;
@@ -279,6 +280,9 @@ struct wlan_channel {
 	uint32_t     ch_cfreq2;
 	enum phy_ch_width ch_width;
 	enum wlan_phymode ch_phymode;
+#ifdef WLAN_FEATURE_11BE
+	uint16_t     puncture_bitmap;
+#endif
 };
 
 /**

+ 19 - 1
umac/cmn_services/utils/src/wlan_utility.c

@@ -410,10 +410,28 @@ QDF_STATUS wlan_pdev_chan_change_pending_ap_vdevs_down(
 	return QDF_STATUS_SUCCESS;
 }
 
+#ifdef WLAN_FEATURE_11BE
+static inline bool
+wlan_chan_puncture_eq(struct wlan_channel *chan1, struct wlan_channel *chan2)
+{
+	if (chan1->puncture_bitmap == chan2->puncture_bitmap)
+		return true;
+
+	return false;
+}
+#else
+static inline bool
+wlan_chan_puncture_eq(struct wlan_channel *chan1, struct wlan_channel *chan2)
+{
+	return true;
+}
+#endif /* WLAN_FEATURE_11BE */
+
 QDF_STATUS wlan_chan_eq(struct wlan_channel *chan1, struct wlan_channel *chan2)
 {
 	if ((chan1->ch_ieee == chan2->ch_ieee) &&
-	    (chan1->ch_freq_seg2 == chan2->ch_freq_seg2))
+	    (chan1->ch_freq_seg2 == chan2->ch_freq_seg2) &&
+	    wlan_chan_puncture_eq(chan1, chan2))
 		return QDF_STATUS_SUCCESS;
 
 	return QDF_STATUS_E_FAILURE;

+ 6 - 3
umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c

@@ -121,14 +121,17 @@ static inline bool vdev_mgr_is_49G_5G_6G_chan_freq(uint16_t chan_freq)
 #ifdef WLAN_FEATURE_11BE
 static void
 vdev_mgr_start_param_update_11be(struct vdev_mlme_obj *mlme_obj,
-				 struct vdev_start_params *param)
+				 struct vdev_start_params *param,
+				 struct wlan_channel *des_chan)
 {
 	param->eht_ops = mlme_obj->proto.eht_ops_info.eht_ops;
+	param->channel.puncture_pattern = des_chan->puncture_bitmap;
 }
 #else
 static void
 vdev_mgr_start_param_update_11be(struct vdev_mlme_obj *mlme_obj,
-				 struct vdev_start_params *param)
+				 struct vdev_start_params *param,
+				 struct wlan_channel *des_chan)
 {
 }
 #endif
@@ -206,7 +209,7 @@ static QDF_STATUS vdev_mgr_start_param_update(
 	param->regdomain = dfs_reg;
 	param->he_ops = mlme_obj->proto.he_ops_info.he_ops;
 
-	vdev_mgr_start_param_update_11be(mlme_obj, param);
+	vdev_mgr_start_param_update_11be(mlme_obj, param, des_chan);
 
 	param->channel.chan_id = des_chan->ch_ieee;
 	param->channel.pwr = mlme_obj->mgmt.generic.tx_power;

+ 4 - 0
umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_defs.h

@@ -287,6 +287,7 @@ struct fils_discovery_tmpl_params {
  * @maxreqpower: Max regulatory power
  * @antennamac: Max antenna
  * @reg_class_id: Regulatory class id.
+ * @puncture_pattern: 11be static puncture pattern
  */
 struct mlme_channel_param {
 	uint8_t chan_id;
@@ -309,6 +310,9 @@ struct mlme_channel_param {
 	int8_t   maxregpower;
 	uint8_t  antennamax;
 	uint8_t  reg_class_id;
+#ifdef WLAN_FEATURE_11BE
+	uint16_t puncture_pattern;
+#endif
 };
 
 /**