Browse Source

qcacmn: Add vdev-mlme caps MASK for restrict_offchannel

Adds new vdev-mlme caps mask WLAN_VDEV_C_RESTRICT_OFFCHAN for
tracking restrict offchannel setting.
When this bit is set any operations which can cause the AP/GO
to leave the operating channel are avoided.

Also reads vdev-mlme caps:WLAN_VDEV_C_RESTRICT_OFFCHAN in function
policy_mgr_is_dnsc_set() to determine if Do_Not_Switch_Channel
is enabled.
Moves declaration of policy_mgr_is_dnsc_set() to
wlan_policy_mgr_api.h so that it can be used outside of policy manager.

Change-Id: I53013af5f4c72917f862630e63333951ec75ce8c
CRs-Fixed: 2050999
Ajit Pal Singh 8 years ago
parent
commit
8c63d04d3b

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

@@ -210,6 +210,8 @@
 #define WLAN_VDEV_C_WME_TKIPMIC          0x00000080
   /* CAPABILITY: bg scanning */
 #define WLAN_VDEV_C_BGSCAN               0x00000100
+  /* CAPABILITY: Restrict offchannel */
+#define WLAN_VDEV_C_RESTRICT_OFFCHAN     0x00000200
 
 /* Invalid VDEV identifier */
 #define WLAN_INVALID_VDEV_ID 255

+ 11 - 0
umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h

@@ -1895,4 +1895,15 @@ QDF_STATUS policy_mgr_is_chan_ok_for_dnbs(struct wlan_objmgr_psoc *psoc,
  */
 uint32_t policy_mgr_get_hw_dbs_nss(struct wlan_objmgr_psoc *psoc,
 				   struct dbs_nss *nss_dbs);
+
+/**
+ * policy_mgr_is_dnsc_set - Check if user has set
+ * "Do_Not_Switch_Channel" for the vdev passed
+ * @vdev: vdev pointer
+ *
+ * Get "Do_Not_Switch_Channel" setting for the vdev passed.
+ *
+ * Return: true for success, else false
+ */
+bool policy_mgr_is_dnsc_set(struct wlan_objmgr_vdev *vdev);
 #endif /* __WLAN_POLICY_MGR_API_H */

+ 17 - 4
umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c

@@ -2408,10 +2408,23 @@ bool policy_mgr_is_hw_mode_change_after_vdev_up(struct wlan_objmgr_psoc *psoc)
 	return flag;
 }
 
-bool policy_mgr_vdev_mlme_is_dnsc_set(struct wlan_objmgr_vdev *vdev)
+bool policy_mgr_is_dnsc_set(struct wlan_objmgr_vdev *vdev)
 {
-	/* TODO : Check Dont_Switch_Channel status from vdev mlme caps*/
-	return false;
+	bool roffchan;
+
+	if (!vdev) {
+		policy_mgr_err("Invalid parameter");
+		return false;
+	}
+
+	wlan_vdev_obj_lock(vdev);
+	roffchan = wlan_vdev_mlme_cap_get(vdev, WLAN_VDEV_C_RESTRICT_OFFCHAN);
+	wlan_vdev_obj_unlock(vdev);
+
+	policy_mgr_debug("Restrict offchannel:%s",
+			 roffchan  ? "set" : "clear");
+
+	return roffchan;
 }
 
 QDF_STATUS policy_mgr_is_chan_ok_for_dnbs(struct wlan_objmgr_psoc *psoc,
@@ -2456,7 +2469,7 @@ QDF_STATUS policy_mgr_is_chan_ok_for_dnbs(struct wlan_objmgr_psoc *psoc,
 	 *   return true.
 	 */
 	/* TODO: To be enhanced for SBS */
-	if (policy_mgr_vdev_mlme_is_dnsc_set(vdev)) {
+	if (policy_mgr_is_dnsc_set(vdev)) {
 		if (operating_channel == channel)
 			*ok = true;
 		else if (WLAN_REG_IS_SAME_BAND_CHANNELS(operating_channel,

+ 0 - 12
umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h

@@ -414,16 +414,4 @@ bool policy_mgr_get_sap_conn_info(struct wlan_objmgr_psoc *psoc,
 bool policy_mgr_get_mode_specific_conn_info(struct wlan_objmgr_psoc *psoc,
 				  uint8_t *channel, uint8_t *vdev_id,
 				  enum policy_mgr_con_mode mode);
-
-/**
- * policy_mgr_vdev_mlme_is_dnsc_set - Check if user has set
- * "Do_Not_Switch_Channel" for this vdev
- * @vdev: vdev pointer
- *
- * Get "Do_Not_Switch_Channel" setting for this vdev
- *
- * Return: true for success, else false
- */
-bool policy_mgr_vdev_mlme_is_dnsc_set(struct wlan_objmgr_vdev *vdev);
-
 #endif