فهرست منبع

qcacmn: Send BSS color bit map and partial bssid bitmap

Send BSS color and partial BSSID bitmap to fw when SR
enable is sent to FW, so that FW can classify the srg
and non-srg colors.

Change-Id: I44711fd7e7cc05867d042a04e783ae29b04b388a
CRs-Fixed: 3304796
Sheenam Monga 2 سال پیش
والد
کامیت
8b79320b92
2فایلهای تغییر یافته به همراه186 افزوده شده و 1 حذف شده
  1. 82 1
      target_if/spatial_reuse/src/target_if_spatial_reuse.c
  2. 104 0
      umac/mlme/include/wlan_vdev_mlme.h

+ 82 - 1
target_if/spatial_reuse/src/target_if_spatial_reuse.c

@@ -74,6 +74,75 @@ spatial_reuse_send_sr_prohibit_cfg(struct wlan_objmgr_vdev *vdev,
 	return wmi_unified_vdev_param_sr_prohibit_send(wmi_handle, &srp_param);
 }
 
+#ifdef OBSS_PD
+static QDF_STATUS
+spatial_reuse_send_bss_color_bit_map(struct wlan_objmgr_vdev *vdev,
+				     struct wlan_objmgr_pdev *pdev)
+{
+	uint64_t srg_color_bit_map = 0;
+	uint32_t bit_map_0 = 0;
+	uint32_t bit_map_1 = 0;
+	struct wmi_unified *wmi_handle;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
+	wmi_handle = lmac_get_pdev_wmi_handle(pdev);
+	if (!wmi_handle)
+		return QDF_STATUS_E_INVAL;
+
+	wlan_vdev_obj_lock(vdev);
+	wlan_vdev_mlme_get_srg_bss_color_bit_map(vdev, &srg_color_bit_map);
+	wlan_vdev_obj_unlock(vdev);
+	bit_map_0 = (uint32_t) srg_color_bit_map;
+	bit_map_1 = (uint32_t) (srg_color_bit_map >> 32);
+
+	status = wmi_unified_send_self_srg_bss_color_bitmap_set_cmd(
+					wmi_handle, bit_map_0, bit_map_1,
+					pdev->pdev_objmgr.wlan_pdev_id);
+	return status;
+}
+
+static QDF_STATUS
+spatial_reuse_send_partial_bssid_bit_map(struct wlan_objmgr_vdev *vdev,
+					 struct wlan_objmgr_pdev *pdev)
+{
+	uint64_t partial_bssid_bit_map = 0;
+	uint32_t bit_map_0 = 0;
+	uint32_t bit_map_1 = 0;
+	struct wmi_unified *wmi_handle;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
+	wmi_handle = lmac_get_pdev_wmi_handle(pdev);
+	if (!wmi_handle)
+		return QDF_STATUS_E_INVAL;
+
+	wlan_vdev_obj_lock(vdev);
+	wlan_vdev_mlme_get_srg_partial_bssid_bit_map(vdev,
+						     &partial_bssid_bit_map);
+	wlan_vdev_obj_unlock(vdev);
+	bit_map_0 = (uint32_t) partial_bssid_bit_map;
+	bit_map_1 = (uint32_t) (partial_bssid_bit_map >> 32);
+
+	status = wmi_unified_send_self_srg_partial_bssid_bitmap_set_cmd(
+					wmi_handle, bit_map_0, bit_map_1,
+					pdev->pdev_objmgr.wlan_pdev_id);
+	return status;
+}
+#else
+static QDF_STATUS
+spatial_reuse_send_bss_color_bit_map(struct wlan_objmgr_vdev *vdev,
+				     struct wlan_objmgr_pdev *pdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static QDF_STATUS
+spatial_reuse_send_partial_bssid_bit_map(struct wlan_objmgr_vdev *vdev,
+					 struct wlan_objmgr_pdev *pdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#endif
+
 static QDF_STATUS
 spatial_reuse_send_pd_threshold(struct wlan_objmgr_pdev *pdev,
 				uint8_t vdev_id,
@@ -143,11 +212,23 @@ spatial_reuse_set_sr_enable_disable(struct wlan_objmgr_vdev *vdev,
 			wlan_vdev_obj_unlock(vdev);
 		}
 
-		mlme_debug("non-srg param val: %u, enable: %d",
+		mlme_debug("srp param val: %u, enable: %d",
 			   val, is_sr_enable);
+		if (is_sr_enable) {
+			status = spatial_reuse_send_bss_color_bit_map(vdev,
+								      pdev);
+			if (status != QDF_STATUS_SUCCESS)
+				return status;
+			status = spatial_reuse_send_partial_bssid_bit_map(vdev,
+									  pdev);
+			if (status != QDF_STATUS_SUCCESS)
+				return status;
+		}
 		status =
 		spatial_reuse_send_pd_threshold(pdev, vdev->vdev_objmgr.vdev_id,
 						val);
+		if (status != QDF_STATUS_SUCCESS)
+			return status;
 	} else {
 		mlme_debug("Spatial reuse not enabled");
 	}

+ 104 - 0
umac/mlme/include/wlan_vdev_mlme.h

@@ -348,6 +348,8 @@ struct vdev_mlme_proto {
  * @he_spr_enabled:     Spatial reuse enabled or not
  * @pd_threshold: pd threshold sent by userspace
  * @he_spr_disabled_due_conc: spr disabled due to concurrency
+ * @srg_bss_color: srg bss color
+ * @srg_partial_bssid: srg partial bssid
  */
 struct vdev_mlme_mgmt_generic {
 	uint32_t rts_threshold;
@@ -382,6 +384,8 @@ struct vdev_mlme_mgmt_generic {
 	bool he_spr_enabled;
 	int32_t pd_threshold;
 	bool he_spr_disabled_due_conc;
+	uint64_t srg_bss_color;
+	uint64_t srg_partial_bssid;
 #endif
 };
 
@@ -1416,6 +1420,106 @@ void wlan_vdev_mlme_get_srg_pd_offset(struct wlan_objmgr_vdev *vdev,
 	*srg_max_pd_offset = vdev_mlme->mgmt.generic.he_spr_srg_max_pd_offset;
 	*srg_min_pd_offset = vdev_mlme->mgmt.generic.he_spr_srg_min_pd_offset;
 }
+
+/**
+ * wlan_vdev_mlme_set_srg_bss_color() - set spatial reuse bss
+ *					colorbitmap
+ * @vdev: VDEV object
+ * @srg_bss_color: SRG BSS color bitmap
+ *
+ * API to set the spatial reuse bss color bit map
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: void
+ */
+static inline
+void wlan_vdev_mlme_set_srg_bss_color_bit_map(struct wlan_objmgr_vdev *vdev,
+					      uint64_t srg_bss_color)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return;
+
+	vdev_mlme->mgmt.generic.srg_bss_color = srg_bss_color;
+}
+
+/**
+ * wlan_vdev_mlme_set_srg_partial_bssid_bit_map() - set spatial reuse
+ *						srg partial bitmap
+ * @vdev: VDEV object
+ * @srg_partial_bssid: SRG partial BSSID bitmap
+ *
+ * API to set the spatial reuse partial bssid bitmap
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: void
+ */
+static inline
+void wlan_vdev_mlme_set_srg_partial_bssid_bit_map(struct wlan_objmgr_vdev *vdev,
+						  uint64_t srg_partial_bssid)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return;
+
+	vdev_mlme->mgmt.generic.srg_partial_bssid = srg_partial_bssid;
+}
+
+/**
+ * wlan_vdev_mlme_get_srg_bss_color_bit_map() - get spatial reuse bss
+ *						colorbitmap
+ * @vdev: VDEV object
+ * @srg_bss_color: SRG BSS color bitmap
+ *
+ * API to get the spatial reuse bss color bit map
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: void
+ */
+static inline
+void wlan_vdev_mlme_get_srg_bss_color_bit_map(struct wlan_objmgr_vdev *vdev,
+					      uint64_t *srg_bss_color)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return;
+
+	*srg_bss_color = vdev_mlme->mgmt.generic.srg_bss_color;
+}
+
+/**
+ * wlan_vdev_mlme_get_srg_partial_bssid_bit_map() - get spatial reuse
+ *						    srg partial bitmap
+ * @vdev: VDEV object
+ * @srg_partial_bssid: SRG partial BSSID bitmap
+ *
+ * API to get the spatial reuse partial bssid bitmap
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: void
+ */
+static inline void
+wlan_vdev_mlme_get_srg_partial_bssid_bit_map(struct wlan_objmgr_vdev *vdev,
+					     uint64_t *srg_partial_bssid)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return;
+
+	*srg_partial_bssid = vdev_mlme->mgmt.generic.srg_partial_bssid;
+}
 #else
 static inline uint8_t wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev *vdev)
 {