Parcourir la source

qcacld-3.0: Add new driver commands

TPUT_DEBUG_MODE_ENABLE and TPUT_DEBUG_MODE_DISABLE are two new driver
commands. So when this commands will get issue, host needs to send
setUnitTestcmd with different arguments for different target to
enable/disable the module logging.

Change-Id: I5deb18f08f59ce936696e00b6537b0acf7c846a1
CRs-Fixed: 2842740
Abdul Muqtadeer Ahmed il y a 4 ans
Parent
commit
a83d049659
1 fichiers modifiés avec 160 ajouts et 0 suppressions
  1. 160 0
      core/hdd/src/wlan_hdd_ioctl.c

+ 160 - 0
core/hdd/src/wlan_hdd_ioctl.c

@@ -38,6 +38,7 @@
 #include "wma.h"
 #include "wlan_hdd_napi.h"
 #include "wlan_mlme_ucfg_api.h"
+#include "target_type.h"
 #ifdef FEATURE_WLAN_ESE
 #include <sme_api.h>
 #include <sir_api.h>
@@ -2286,6 +2287,145 @@ static int hdd_conc_set_dwell_time(struct hdd_adapter *adapter,
 	return retval;
 }
 
+static int hdd_enable_unit_test_commands(struct hdd_adapter *adapter,
+					 struct hdd_context *hdd_ctx)
+{
+	enum pld_bus_type bus_type = pld_get_bus_type(hdd_ctx->parent_dev);
+	u32 arg[2];
+	QDF_STATUS status;
+
+	if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE ||
+	    hdd_get_conparam() == QDF_GLOBAL_MISSION_MODE)
+		return -EPERM;
+
+	if (adapter->vdev_id >= WLAN_MAX_VDEVS) {
+		hdd_err_rl("Invalid vdev id");
+		return -EINVAL;
+	}
+
+	if (bus_type == PLD_BUS_TYPE_PCIE) {
+		arg[0] = 360;
+		arg[1] = 3;
+
+		status = sme_send_unit_test_cmd(adapter->vdev_id,
+						WLAN_MODULE_TX,
+						2,
+						arg);
+		if (status != QDF_STATUS_SUCCESS)
+			return qdf_status_to_os_return(status);
+
+		arg[0] = 361;
+		arg[1] = 1;
+
+		status = sme_send_unit_test_cmd(adapter->vdev_id,
+						WLAN_MODULE_TX,
+						2,
+						arg);
+		if (status != QDF_STATUS_SUCCESS)
+			return qdf_status_to_os_return(status);
+
+		if (hdd_ctx->target_type == TARGET_TYPE_QCA6390) {
+			arg[0] = 37;
+			arg[1] = 3000;
+
+			status = sme_send_unit_test_cmd(adapter->vdev_id,
+							WLAN_MODULE_RX,
+							2,
+							arg);
+			if (status != QDF_STATUS_SUCCESS)
+				return qdf_status_to_os_return(status);
+		}
+
+		if (hdd_ctx->target_type == TARGET_TYPE_QCA6490) {
+			arg[0] = 39;
+			arg[1] = 3000;
+
+			status = sme_send_unit_test_cmd(adapter->vdev_id,
+							WLAN_MODULE_RX,
+							2,
+							arg);
+			if (status != QDF_STATUS_SUCCESS)
+				return qdf_status_to_os_return(status);
+		}
+	} else if (bus_type == PLD_BUS_TYPE_SNOC) {
+		arg[0] = 7;
+		arg[1] = 1;
+
+		status = sme_send_unit_test_cmd(adapter->vdev_id,
+						0x44,
+						2,
+						arg);
+		if (status != QDF_STATUS_SUCCESS)
+			return qdf_status_to_os_return(status);
+	} else {
+		return -EINVAL;
+	}
+	return 0;
+}
+
+static int hdd_disable_unit_test_commands(struct hdd_adapter *adapter,
+					  struct hdd_context *hdd_ctx)
+{
+	enum pld_bus_type bus_type = pld_get_bus_type(hdd_ctx->parent_dev);
+	u32 arg[2];
+	QDF_STATUS status;
+
+	if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE ||
+	    hdd_get_conparam() == QDF_GLOBAL_MISSION_MODE)
+		return -EPERM;
+
+	if (adapter->vdev_id >= WLAN_MAX_VDEVS) {
+		hdd_err_rl("Invalid vdev id");
+		return -EINVAL;
+	}
+
+	if (bus_type == PLD_BUS_TYPE_PCIE) {
+		arg[0] = 360;
+		arg[1] = 0;
+
+		status = sme_send_unit_test_cmd(adapter->vdev_id,
+						WLAN_MODULE_TX,
+						2,
+						arg);
+		if (status != QDF_STATUS_SUCCESS)
+			return qdf_status_to_os_return(status);
+
+		arg[0] = 361;
+		arg[1] = 0;
+
+		status = sme_send_unit_test_cmd(adapter->vdev_id,
+						WLAN_MODULE_TX,
+						2,
+						arg);
+		if (status != QDF_STATUS_SUCCESS)
+			return qdf_status_to_os_return(status);
+
+		arg[0] = 39;
+		arg[1] = 0;
+
+		status = sme_send_unit_test_cmd(adapter->vdev_id,
+						WLAN_MODULE_RX,
+						2,
+						arg);
+		if (status != QDF_STATUS_SUCCESS)
+			return qdf_status_to_os_return(status);
+
+	} else if (bus_type == PLD_BUS_TYPE_SNOC) {
+		arg[0] = 7;
+		arg[1] = 0;
+
+		status = sme_send_unit_test_cmd(adapter->vdev_id,
+						0x44,
+						2,
+						arg);
+		if (status != QDF_STATUS_SUCCESS)
+			return qdf_status_to_os_return(status);
+	} else {
+		return -EINVAL;
+	}
+	return 0;
+}
+
 static void hdd_get_link_status_cb(uint8_t status, void *context)
 {
 	struct osif_request *request;
@@ -4757,6 +4897,24 @@ exit:
 	return ret;
 }
 
+static int drv_cmd_tput_debug_mode_enable(struct hdd_adapter *adapter,
+					  struct hdd_context *hdd_ctx,
+					  u8 *command,
+					  u8 command_len,
+					  struct hdd_priv_data *priv_data)
+{
+	return hdd_enable_unit_test_commands(adapter, hdd_ctx);
+}
+
+static int drv_cmd_tput_debug_mode_disable(struct hdd_adapter *adapter,
+					   struct hdd_context *hdd_ctx,
+					   u8 *command,
+					   u8 command_len,
+					   struct hdd_priv_data *priv_data)
+{
+	return hdd_disable_unit_test_commands(adapter, hdd_ctx);
+}
+
 #ifdef FEATURE_WLAN_ESE
 static int drv_cmd_set_ccx_roam_scan_channels(struct hdd_adapter *adapter,
 					      struct hdd_context *hdd_ctx,
@@ -7034,6 +7192,8 @@ static const struct hdd_drv_cmd hdd_drv_cmds[] = {
 	{"GETDWELLTIME",              drv_cmd_get_dwell_time, false},
 	{"SETDWELLTIME",              drv_cmd_set_dwell_time, true},
 	{"MIRACAST",                  drv_cmd_miracast, true},
+	{"TPUT_DEBUG_MODE_ENABLE",    drv_cmd_tput_debug_mode_enable, false},
+	{"TPUT_DEBUG_MODE_DISABLE",   drv_cmd_tput_debug_mode_disable, false},
 #ifdef FEATURE_WLAN_ESE
 	{"SETCCXROAMSCANCHANNELS",    drv_cmd_set_ccx_roam_scan_channels, true},
 	{"GETTSMSTATS",               drv_cmd_get_tsm_stats, true},