소스 검색

qcacld-3.0: Refactor RSSI/SNR get APIs

Modify the following functions to take link info as function
argument to get the RSSI and SNR values from FW on per link.
The existing callers moved to deflink pointer in adapter.
1) wlan_hdd_get_rssi()
2) wlan_hdd_get_snr()

Change-Id: I2ebefab54192ca7e7672794d446b41a6d0dffec6
CRs-Fixed: 3520838
Vinod Kumar Pirla 2 년 전
부모
커밋
58f28eb092
4개의 변경된 파일24개의 추가작업 그리고 36개의 파일을 삭제
  1. 1 1
      core/hdd/src/wlan_hdd_ioctl.c
  2. 16 29
      core/hdd/src/wlan_hdd_stats.c
  3. 5 4
      core/hdd/src/wlan_hdd_stats.h
  4. 2 2
      core/hdd/src/wlan_hdd_wext.c

+ 1 - 1
core/hdd/src/wlan_hdd_ioctl.c

@@ -5467,7 +5467,7 @@ static int drv_cmd_get_rssi(struct hdd_adapter *adapter,
 
 
 	uint8_t len = 0;
 	uint8_t len = 0;
 
 
-	wlan_hdd_get_rssi(adapter, &rssi);
+	wlan_hdd_get_rssi(adapter->deflink, &rssi);
 
 
 	len = scnprintf(extra, sizeof(extra), "%s %d", command, rssi);
 	len = scnprintf(extra, sizeof(extra), "%s %d", command, rssi);
 	len = QDF_MIN(priv_data->total_len, len + 1);
 	len = QDF_MIN(priv_data->total_len, len + 1);

+ 16 - 29
core/hdd/src/wlan_hdd_stats.c

@@ -7364,45 +7364,39 @@ QDF_STATUS wlan_hdd_get_mib_stats(struct hdd_adapter *adapter)
 }
 }
 #endif
 #endif
 
 
-QDF_STATUS wlan_hdd_get_rssi(struct hdd_adapter *adapter, int8_t *rssi_value)
+QDF_STATUS wlan_hdd_get_rssi(struct wlan_hdd_link_info *link_info,
+			     int8_t *rssi_value)
 {
 {
 	int ret = 0, i;
 	int ret = 0, i;
 	struct hdd_station_ctx *sta_ctx;
 	struct hdd_station_ctx *sta_ctx;
 	struct stats_event *rssi_info;
 	struct stats_event *rssi_info;
 	struct wlan_objmgr_vdev *vdev;
 	struct wlan_objmgr_vdev *vdev;
 
 
-	if (!adapter) {
-		hdd_err("Invalid context, adapter");
-		return QDF_STATUS_E_FAULT;
-	}
-
-	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter->deflink);
-
 	if (cds_is_driver_recovering() || cds_is_driver_in_bad_state()) {
 	if (cds_is_driver_recovering() || cds_is_driver_in_bad_state()) {
 		hdd_err("Recovery in Progress. State: 0x%x Ignore!!!",
 		hdd_err("Recovery in Progress. State: 0x%x Ignore!!!",
 			cds_get_driver_state());
 			cds_get_driver_state());
 		/* return a cached value */
 		/* return a cached value */
-		*rssi_value = adapter->deflink->rssi;
+		*rssi_value = link_info->rssi;
 		return QDF_STATUS_SUCCESS;
 		return QDF_STATUS_SUCCESS;
 	}
 	}
 
 
-	if (!hdd_cm_is_vdev_associated(adapter->deflink)) {
+	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
+	if (!hdd_cm_is_vdev_associated(link_info)) {
 		hdd_debug("Not associated!, rssi on disconnect %d",
 		hdd_debug("Not associated!, rssi on disconnect %d",
-			  adapter->deflink->rssi_on_disconnect);
-		*rssi_value = adapter->deflink->rssi_on_disconnect;
+			  link_info->rssi_on_disconnect);
+		*rssi_value = link_info->rssi_on_disconnect;
 		return QDF_STATUS_SUCCESS;
 		return QDF_STATUS_SUCCESS;
 	}
 	}
 
 
-	if (hdd_cm_is_vdev_roaming(adapter->deflink)) {
+	if (hdd_cm_is_vdev_roaming(link_info)) {
 		hdd_debug("Roaming in progress, return cached RSSI");
 		hdd_debug("Roaming in progress, return cached RSSI");
-		*rssi_value = adapter->deflink->rssi;
+		*rssi_value = link_info->rssi;
 		return QDF_STATUS_SUCCESS;
 		return QDF_STATUS_SUCCESS;
 	}
 	}
 
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink,
-					   WLAN_OSIF_STATS_ID);
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_STATS_ID);
 	if (!vdev) {
 	if (!vdev) {
-		*rssi_value = adapter->deflink->rssi;
+		*rssi_value = link_info->rssi;
 		return QDF_STATUS_SUCCESS;
 		return QDF_STATUS_SUCCESS;
 	}
 	}
 
 
@@ -7462,9 +7456,9 @@ static void hdd_get_snr_cb(int8_t snr, void *context)
 	osif_request_put(request);
 	osif_request_put(request);
 }
 }
 
 
-QDF_STATUS wlan_hdd_get_snr(struct hdd_adapter *adapter, int8_t *snr)
+QDF_STATUS wlan_hdd_get_snr(struct wlan_hdd_link_info *link_info, int8_t *snr)
 {
 {
-	struct hdd_context *hdd_ctx;
+	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
 	struct hdd_station_ctx *sta_ctx;
 	struct hdd_station_ctx *sta_ctx;
 	QDF_STATUS status;
 	QDF_STATUS status;
 	int ret;
 	int ret;
@@ -7478,18 +7472,11 @@ QDF_STATUS wlan_hdd_get_snr(struct hdd_adapter *adapter, int8_t *snr)
 
 
 	hdd_enter();
 	hdd_enter();
 
 
-	if (!adapter) {
-		hdd_err("Invalid context, adapter");
-		return QDF_STATUS_E_FAULT;
-	}
-
-	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
-
 	ret = wlan_hdd_validate_context(hdd_ctx);
 	ret = wlan_hdd_validate_context(hdd_ctx);
 	if (ret)
 	if (ret)
 		return QDF_STATUS_E_FAULT;
 		return QDF_STATUS_E_FAULT;
 
 
-	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter->deflink);
+	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
 
 
 	request = osif_request_alloc(&params);
 	request = osif_request_alloc(&params);
 	if (!request) {
 	if (!request) {
@@ -7512,7 +7499,7 @@ QDF_STATUS wlan_hdd_get_snr(struct hdd_adapter *adapter, int8_t *snr)
 		} else {
 		} else {
 			/* update the adapter with the fresh results */
 			/* update the adapter with the fresh results */
 			priv = osif_request_priv(request);
 			priv = osif_request_priv(request);
-			adapter->deflink->snr = priv->snr;
+			link_info->snr = priv->snr;
 		}
 		}
 	}
 	}
 
 
@@ -7523,7 +7510,7 @@ QDF_STATUS wlan_hdd_get_snr(struct hdd_adapter *adapter, int8_t *snr)
 	 */
 	 */
 	osif_request_put(request);
 	osif_request_put(request);
 
 
-	*snr = adapter->deflink->snr;
+	*snr = link_info->snr;
 	hdd_exit();
 	hdd_exit();
 	return QDF_STATUS_SUCCESS;
 	return QDF_STATUS_SUCCESS;
 }
 }

+ 5 - 4
core/hdd/src/wlan_hdd_stats.h

@@ -453,21 +453,22 @@ QDF_STATUS wlan_hdd_get_mib_stats(struct hdd_adapter *adapter);
 
 
 /**
 /**
  * wlan_hdd_get_rssi() - Get the current RSSI
  * wlan_hdd_get_rssi() - Get the current RSSI
- * @adapter: adapter upon which the measurement is requested
+ * @link_info: Link info pointer in HDD adapter
  * @rssi_value: pointer to where the RSSI should be returned
  * @rssi_value: pointer to where the RSSI should be returned
  *
  *
  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
  */
  */
-QDF_STATUS wlan_hdd_get_rssi(struct hdd_adapter *adapter, int8_t *rssi_value);
+QDF_STATUS wlan_hdd_get_rssi(struct wlan_hdd_link_info *link_info,
+			     int8_t *rssi_value);
 
 
 /**
 /**
  * wlan_hdd_get_snr() - Get the current SNR
  * wlan_hdd_get_snr() - Get the current SNR
- * @adapter: adapter upon which the measurement is requested
+ * @link_info: Link info pointer in HDD adapter
  * @snr: pointer to where the SNR should be returned
  * @snr: pointer to where the SNR should be returned
  *
  *
  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
  */
  */
-QDF_STATUS wlan_hdd_get_snr(struct hdd_adapter *adapter, int8_t *snr);
+QDF_STATUS wlan_hdd_get_snr(struct wlan_hdd_link_info *link_info, int8_t *snr);
 
 
 /**
 /**
  * wlan_hdd_get_linkspeed_for_peermac() - Get link speed for a peer
  * wlan_hdd_get_linkspeed_for_peermac() - Get link speed for a peer

+ 2 - 2
core/hdd/src/wlan_hdd_wext.c

@@ -6085,7 +6085,7 @@ static int __iw_get_char_setnone(struct net_device *dev,
 	{
 	{
 		int8_t s7Rssi = 0;
 		int8_t s7Rssi = 0;
 
 
-		wlan_hdd_get_rssi(adapter, &s7Rssi);
+		wlan_hdd_get_rssi(link_info, &s7Rssi);
 		snprintf(extra, WE_MAX_STR_LEN, "rssi=%d", s7Rssi);
 		snprintf(extra, WE_MAX_STR_LEN, "rssi=%d", s7Rssi);
 		wrqu->data.length = strlen(extra) + 1;
 		wrqu->data.length = strlen(extra) + 1;
 		break;
 		break;
@@ -6352,7 +6352,7 @@ static int __iw_get_char_setnone(struct net_device *dev,
 				enable_snr_monitoring);
 				enable_snr_monitoring);
 			return -ENONET;
 			return -ENONET;
 		}
 		}
-		wlan_hdd_get_snr(adapter, &s7snr);
+		wlan_hdd_get_snr(link_info, &s7snr);
 		snprintf(extra, WE_MAX_STR_LEN, "snr=%d", s7snr);
 		snprintf(extra, WE_MAX_STR_LEN, "snr=%d", s7snr);
 		wrqu->data.length = strlen(extra) + 1;
 		wrqu->data.length = strlen(extra) + 1;
 		break;
 		break;