Browse Source

qcacmn: Add original vdev info for NSS update API

Add original hw mode change request vdev id to
NSS update APIs, so that the correct vdev to be
used to do post processing after hw mode change,
such as doing connect for hidden SSID case.

Change-Id: Ie7f7b55a100ec4e23be2fc710d9b0d83cb33088d
CRs-Fixed: 2336439
Liangwei Dong 6 years ago
parent
commit
35501bf452

+ 6 - 3
umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h

@@ -1021,6 +1021,7 @@ typedef void (*policy_mgr_pdev_set_hw_mode_cback)(uint32_t status,
  * @next_action: next action to happen at policy mgr after
  *		beacon update
  * @reason: Reason for nss update
+ * @original_vdev_id: original request hwmode change vdev id
  *
  * This function is the callback registered with SME at nss
  * update request time
@@ -1031,7 +1032,8 @@ typedef void (*policy_mgr_nss_update_cback)(struct wlan_objmgr_psoc *psoc,
 		uint8_t tx_status,
 		uint8_t vdev_id,
 		uint8_t next_action,
-		enum policy_mgr_conn_update_reason reason);
+		enum policy_mgr_conn_update_reason reason,
+		uint32_t original_vdev_id);
 
 /**
  * struct policy_mgr_sme_cbacks - SME Callbacks to be invoked
@@ -1055,9 +1057,10 @@ struct policy_mgr_sme_cbacks {
 	QDF_STATUS (*sme_pdev_set_hw_mode)(struct policy_mgr_hw_mode msg);
 	QDF_STATUS (*sme_pdev_set_pcl)(struct policy_mgr_pcl_list *msg);
 	QDF_STATUS (*sme_nss_update_request)(uint32_t vdev_id,
-		uint8_t  new_nss, policy_mgr_nss_update_cback cback,
+		uint8_t new_nss, policy_mgr_nss_update_cback cback,
 		uint8_t next_action, struct wlan_objmgr_psoc *psoc,
-		enum policy_mgr_conn_update_reason reason);
+		enum policy_mgr_conn_update_reason reason,
+		uint32_t original_vdev_id);
 	QDF_STATUS (*sme_change_mcc_beacon_interval)(uint8_t session_id);
 	QDF_STATUS (*sme_get_ap_channel_from_scan)(
 		void *roam_profile,

+ 8 - 4
umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c

@@ -1066,7 +1066,8 @@ QDF_STATUS policy_mgr_next_actions(
 		 * intially. If yes, update the beacon template & notify FW.
 		 */
 		status = policy_mgr_nss_update(psoc, POLICY_MGR_RX_NSS_1,
-					PM_NOP, POLICY_MGR_ANY, reason);
+					PM_NOP, POLICY_MGR_ANY, reason,
+					session_id);
 		break;
 	case PM_UPGRADE:
 		/*
@@ -1074,7 +1075,8 @@ QDF_STATUS policy_mgr_next_actions(
 		 * intially. If yes, update the beacon template & notify FW.
 		 */
 		status = policy_mgr_nss_update(psoc, POLICY_MGR_RX_NSS_2,
-					PM_NOP, POLICY_MGR_ANY, reason);
+					PM_NOP, POLICY_MGR_ANY, reason,
+					session_id);
 		break;
 	case PM_DBS1_DOWNGRADE:
 		status = policy_mgr_complete_action(psoc, POLICY_MGR_RX_NSS_1,
@@ -1133,12 +1135,14 @@ QDF_STATUS policy_mgr_next_actions(
 	case PM_UPGRADE_5G:
 		status = policy_mgr_nss_update(
 					psoc, POLICY_MGR_RX_NSS_2,
-					PM_NOP, POLICY_MGR_BAND_5, reason);
+					PM_NOP, POLICY_MGR_BAND_5, reason,
+					session_id);
 		break;
 	case PM_UPGRADE_2G:
 		status = policy_mgr_nss_update(
 					psoc, POLICY_MGR_RX_NSS_2,
-					PM_NOP, POLICY_MGR_BAND_24, reason);
+					PM_NOP, POLICY_MGR_BAND_24, reason,
+					session_id);
 		break;
 	default:
 		policy_mgr_err("unexpected action value %d", action);

+ 15 - 7
umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c

@@ -2517,6 +2517,7 @@ bool policy_mgr_is_5g_channel_allowed(struct wlan_objmgr_psoc *psoc,
  * @next_action: next action to happen at policy mgr after
  *		beacon update
  * @reason: Reason for nss update
+ * @original_vdev_id: original request hwmode change vdev id
  *
  * This function is the callback registered with SME at nss
  * update request time
@@ -2527,7 +2528,8 @@ static void policy_mgr_nss_update_cb(struct wlan_objmgr_psoc *psoc,
 		uint8_t tx_status,
 		uint8_t vdev_id,
 		uint8_t next_action,
-		enum policy_mgr_conn_update_reason reason)
+		enum policy_mgr_conn_update_reason reason,
+		uint32_t original_vdev_id)
 {
 	uint32_t conn_index = 0;
 	QDF_STATUS ret;
@@ -2545,9 +2547,11 @@ static void policy_mgr_nss_update_cb(struct wlan_objmgr_psoc *psoc,
 		return;
 	}
 
-	policy_mgr_debug("nss update successful for vdev:%d", vdev_id);
+	policy_mgr_debug("nss update successful for vdev:%d ori %d reason %d",
+			 vdev_id, original_vdev_id, reason);
 	if (PM_NOP != next_action)
-		policy_mgr_next_actions(psoc, vdev_id, next_action, reason);
+		policy_mgr_next_actions(psoc, original_vdev_id, next_action,
+					reason);
 	else {
 		policy_mgr_debug("No action needed right now");
 		ret = policy_mgr_set_opportunistic_update(psoc);
@@ -2561,7 +2565,8 @@ static void policy_mgr_nss_update_cb(struct wlan_objmgr_psoc *psoc,
 QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc,
 		uint8_t  new_nss, uint8_t next_action,
 		enum policy_mgr_band band,
-		enum policy_mgr_conn_update_reason reason)
+		enum policy_mgr_conn_update_reason reason,
+		uint32_t original_vdev_id)
 {
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	uint32_t index, count;
@@ -2604,7 +2609,8 @@ QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc,
 			status = pm_ctx->sme_cbacks.sme_nss_update_request(
 					vdev_id, new_nss,
 					policy_mgr_nss_update_cb,
-					next_action, psoc, reason);
+					next_action, psoc, reason,
+					original_vdev_id);
 			if (!QDF_IS_STATUS_SUCCESS(status)) {
 				policy_mgr_err("sme_nss_update_request() failed for vdev %d",
 				vdev_id);
@@ -2637,7 +2643,8 @@ QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc,
 			status = pm_ctx->sme_cbacks.sme_nss_update_request(
 					vdev_id, new_nss,
 					policy_mgr_nss_update_cb,
-					next_action, psoc, reason);
+					next_action, psoc, reason,
+					original_vdev_id);
 			if (!QDF_IS_STATUS_SUCCESS(status)) {
 				policy_mgr_err("sme_nss_update_request() failed for vdev %d",
 				vdev_id);
@@ -2690,7 +2697,8 @@ QDF_STATUS policy_mgr_complete_action(struct wlan_objmgr_psoc *psoc,
 		downgrade_band = POLICY_MGR_ANY;
 
 	status = policy_mgr_nss_update(psoc, new_nss, next_action,
-				       downgrade_band, reason);
+				       downgrade_band, reason,
+				       session_id);
 	if (!QDF_IS_STATUS_SUCCESS(status))
 		status = policy_mgr_next_actions(psoc, session_id,
 						next_action, reason);

+ 3 - 1
umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h

@@ -534,6 +534,7 @@ void policy_mgr_reg_chan_change_callback(struct wlan_objmgr_psoc *psoc,
  * @next_action: Next action after nss update
  * @band: update AP vdev on the Band.
  * @reason: action reason
+ * @original_vdev_id: original request hwmode change vdev id
  *
  * The function will update AP vdevs on specific band.
  *  eg. band = POLICY_MGR_ANY will request to update all band (2g and 5g)
@@ -543,7 +544,8 @@ void policy_mgr_reg_chan_change_callback(struct wlan_objmgr_psoc *psoc,
 QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc,
 		uint8_t  new_nss, uint8_t next_action,
 		enum policy_mgr_band band,
-		enum policy_mgr_conn_update_reason reason);
+		enum policy_mgr_conn_update_reason reason,
+		uint32_t original_vdev_id);
 
 /**
  * policy_mgr_is_concurrency_allowed() - Check for allowed