Просмотр исходного кода

qcacmn: Add vdev mlme api for spatial reuse

Add vdev mlme APIs for spatial reuse feature.

Change-Id: I34780d1fb33f8806c3cfbc763ac36c6092cce5e7
CRs-Fixed: 3213421
Jayachandran Sreekumaran 3 лет назад
Родитель
Сommit
ff2587248e

+ 3 - 0
umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h

@@ -343,6 +343,9 @@
 #define WLAN_HE_6GHZ_CHWIDTH_80           2 /* 80MHz Oper Ch width */
 #define WLAN_HE_6GHZ_CHWIDTH_160_80_80    3 /* 160/80+80 MHz Oper Ch width */
 
+#define WLAN_HE_NON_SRG_PD_SR_DISALLOWED 0x02
+#define WLAN_HE_NON_SRG_OFFSET_PRESENT 0x04
+
 #ifdef WLAN_FEATURE_11BE
 #define WLAN_EHT_CHWIDTH_20           0 /* 20MHz Oper Ch width */
 #define WLAN_EHT_CHWIDTH_40           1 /* 40MHz Oper Ch width */

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

@@ -341,6 +341,9 @@ struct vdev_mlme_proto {
  * @bssid: bssid
  * @phy_mode: phy mode
  * @special_vdev_mode: indicates special vdev mode
+ * @he_spr_sr_ctrl:     Spatial reuse SR control
+ * @he_spr_non_srg_pd_max_offset: Non-SRG PD max offset
+ * @he_spr_enabled:     Spatial reuse enabled or not
  */
 struct vdev_mlme_mgmt_generic {
 	uint32_t rts_threshold;
@@ -367,6 +370,11 @@ struct vdev_mlme_mgmt_generic {
 	uint8_t bssid[QDF_MAC_ADDR_SIZE];
 	uint32_t phy_mode;
 	bool special_vdev_mode;
+#ifdef WLAN_FEATURE_11AX
+	uint8_t he_spr_sr_ctrl;
+	uint8_t he_spr_non_srg_pd_max_offset;
+	bool he_spr_enabled;
+#endif
 };
 
 /*
@@ -1161,6 +1169,141 @@ static inline uint16_t wlan_vdev_mlme_get_he_mcs_12_13_map(
 
 	return vdev_mlme->mgmt.sta.he_mcs_12_13_map;
 }
+
+/**
+ * wlan_vdev_mlme_get_sr_ctrl() - get spatial reuse SR control
+ * @vdev: VDEV object
+ *
+ * API to retrieve the spatil reuse SR control from VDEV
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return:
+ * @he_spr_sr_ctrl: SR control
+ */
+static inline uint8_t wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev *vdev)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return 0;
+
+	return vdev_mlme->mgmt.generic.he_spr_sr_ctrl;
+}
+
+/**
+ * wlan_vdev_mlme_get_pd_offset() - get spatial reuse pd offset
+ * @vdev: VDEV object
+ *
+ * API to retrieve the spatil reuse pd offset from VDEV
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return:
+ * @he_spr_non_srg_pd_max_offset: max pd offset
+ */
+static inline uint8_t wlan_vdev_mlme_get_pd_offset(
+						struct wlan_objmgr_vdev *vdev)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return 0;
+
+	return vdev_mlme->mgmt.generic.he_spr_non_srg_pd_max_offset;
+}
+
+/**
+ * wlan_vdev_mlme_get_he_spr_enabled() - spatial reuse enabled or not
+ * @vdev: VDEV object
+ *
+ * API to check whether the spatil reuse enabled or not
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return:
+ * @he_spr_enabled: Spatial reuse enabled or not
+ */
+static inline bool wlan_vdev_mlme_get_he_spr_enabled(
+						struct wlan_objmgr_vdev *vdev)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return false;
+
+	return vdev_mlme->mgmt.generic.he_spr_enabled;
+}
+
+/**
+ * wlan_vdev_mlme_set_sr_ctrl() - set spatial reuse SR control
+ * @vdev: VDEV object
+ *
+ * API to set the spatil reuse SR control
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_mlme_set_sr_ctrl(struct wlan_objmgr_vdev *vdev,
+					      uint8_t sr_ctrl)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return;
+
+	vdev_mlme->mgmt.generic.he_spr_sr_ctrl = sr_ctrl;
+}
+
+/**
+ * wlan_vdev_mlme_set_pd_offset() - set spatial reuse pd max offset
+ * @vdev: VDEV object
+ *
+ * API to set the spatil reuse pd max offset
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_mlme_set_pd_offset(struct wlan_objmgr_vdev *vdev,
+						uint8_t pd_max_offset)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return;
+
+	vdev_mlme->mgmt.generic.he_spr_non_srg_pd_max_offset = pd_max_offset;
+}
+
+/**
+ * wlan_vdev_mlme_set_he_spr_enabled() - set spatial reuse enabled
+ * @vdev: VDEV object
+ *
+ * API to set the spatil reuse enabled
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_mlme_set_he_spr_enabled(
+						struct wlan_objmgr_vdev *vdev,
+						bool enable_he_spr)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return;
+
+	vdev_mlme->mgmt.generic.he_spr_enabled = enable_he_spr;
+}
 #else
 static inline void wlan_vdev_mlme_set_he_mcs_12_13_map(
 				struct wlan_objmgr_vdev *vdev,
@@ -1173,6 +1316,39 @@ static inline uint16_t wlan_vdev_mlme_get_he_mcs_12_13_map(
 {
 	return 0;
 }
+
+static inline uint8_t wlan_vdev_mlme_get_sr_ctrl(struct wlan_objmgr_vdev *vdev)
+{
+	return 0;
+}
+
+static inline uint8_t wlan_vdev_mlme_get_pd_offset(
+						struct wlan_objmgr_vdev *vdev)
+{
+	return 0;
+}
+
+static inline bool wlan_vdev_mlme_get_he_spr_enabled(
+						struct wlan_objmgr_vdev *vdev)
+{
+	return 0;
+}
+
+static inline void wlan_vdev_mlme_set_sr_ctrl(struct wlan_objmgr_vdev *vdev,
+					      uint8_t sr_ctrl)
+{
+}
+
+static inline void wlan_vdev_mlme_set_pd_offset(struct wlan_objmgr_vdev *vdev,
+						uint8_t pd_max_offset)
+{
+}
+
+static inline void wlan_vdev_mlme_set_he_spr_enabled(
+						struct wlan_objmgr_vdev *vdev,
+						bool enable_he_spr)
+{
+}
 #endif
 
 /**