Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42f4db37 authored by Ravi Aravamudhan's avatar Ravi Aravamudhan Committed by Matt Wagantall
Browse files

diag: Separate feature mask into a different structure



Peripheral features are embdedded in the diag core logic.
Refactor the code to separate the peripheral features into a
different structure.

Change-Id: I302d6523722d29e874337a032ea39df26d439d2e
Signed-off-by: default avatarRavi Aravamudhan <aravamud@codeaurora.org>
parent 2ea8a88e
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -1029,7 +1029,7 @@ void extract_dci_pkt_rsp(unsigned char *buf, int len, int data_source,
	rsp_buf->data_source = data_source;

	if (token == DCI_LOCAL_PROC && data_source < NUM_SMD_DCI_CHANNELS) {
		if (driver->separate_cmdrsp[data_source] &&
		if (driver->feature[data_source].separate_cmd_rsp &&
					data_source < NUM_SMD_DCI_CMD_CHANNELS)
			driver->smd_dci_cmd[data_source].in_busy_1 = 1;
		else
@@ -3012,7 +3012,8 @@ int diag_dci_deinit_client(struct diag_dci_client_tbl *entry)
			if (peripheral == APPS_DATA)
				continue;
			mutex_lock(&buf_entry->data_mutex);
			smd_info = driver->separate_cmdrsp[peripheral] ?
			smd_info =
				driver->feature[peripheral].separate_cmd_rsp ?
				&driver->smd_dci_cmd[peripheral] :
				&driver->smd_dci[peripheral];
			smd_info->in_busy_1 = 0;
@@ -3080,14 +3081,14 @@ int diag_dci_write_proc(int peripheral, int pkt_type, char *buf, int len)
	int err = 0;

	if (!buf || (peripheral < 0 || peripheral >= NUM_SMD_DCI_CHANNELS)
		|| !driver->rcvd_feature_mask[peripheral] || len < 0) {
		|| !driver->feature[peripheral].rcvd_feature_mask || len < 0) {
		pr_err("diag: In %s, invalid data 0x%p, peripheral: %d, len: %d\n",
				__func__, buf, peripheral, len);
		return -EINVAL;
	}

	if (pkt_type == DIAG_DATA_TYPE) {
		smd_info = driver->separate_cmdrsp[peripheral] ?
		smd_info = driver->feature[peripheral].separate_cmd_rsp ?
			&driver->smd_dci_cmd[peripheral] :
			&driver->smd_dci[peripheral];
	} else if (pkt_type == DIAG_CNTL_TYPE) {
+24 −32
Original line number Diff line number Diff line
@@ -126,10 +126,6 @@ static ssize_t diag_dbgfs_read_status(struct file *file, char __user *ubuf,
		"Lpass hdlc encoding: %d\n"
		"RIVA hdlc encoding: %d\n"
		"SENSORS hdlc encoding: %d\n"
		"Modem CMD hdlc encoding: %d\n"
		"ADSP CMD hdlc encoding: %d\n"
		"RIVA CMD hdlc encoding: %d\n"
		"SENSORS CMD hdlc encoding: %d\n"
		"Modem DATA in_buf_1_size: %d\n"
		"Modem DATA in_buf_2_size: %d\n"
		"ADSP DATA in_buf_1_size: %d\n"
@@ -212,10 +208,10 @@ static ssize_t diag_dbgfs_read_status(struct file *file, char __user *ubuf,
		driver->polling_reg_flag,
		driver->use_device_tree,
		driver->supports_separate_cmdrsp,
		driver->separate_cmdrsp[MODEM_DATA],
		driver->separate_cmdrsp[LPASS_DATA],
		driver->separate_cmdrsp[WCNSS_DATA],
		driver->separate_cmdrsp[SENSORS_DATA],
		driver->feature[MODEM_DATA].separate_cmd_rsp,
		driver->feature[LPASS_DATA].separate_cmd_rsp,
		driver->feature[WCNSS_DATA].separate_cmd_rsp,
		driver->feature[SENSORS_DATA].separate_cmd_rsp,
		driver->smd_data[MODEM_DATA].in_busy_1,
		driver->smd_data[MODEM_DATA].in_busy_2,
		driver->smd_data[LPASS_DATA].in_busy_1,
@@ -240,10 +236,10 @@ static ssize_t diag_dbgfs_read_status(struct file *file, char __user *ubuf,
		driver->smd_dci_cmd[LPASS_DATA].in_busy_1,
		driver->smd_dci_cmd[WCNSS_DATA].in_busy_1,
		driver->smd_dci_cmd[SENSORS_DATA].in_busy_1,
		driver->peripheral_supports_stm[MODEM_DATA],
		driver->peripheral_supports_stm[LPASS_DATA],
		driver->peripheral_supports_stm[WCNSS_DATA],
		driver->peripheral_supports_stm[SENSORS_DATA],
		driver->feature[MODEM_DATA].stm_support,
		driver->feature[LPASS_DATA].stm_support,
		driver->feature[WCNSS_DATA].stm_support,
		driver->feature[SENSORS_DATA].stm_support,
		driver->stm_state[MODEM_DATA],
		driver->stm_state[LPASS_DATA],
		driver->stm_state[WCNSS_DATA],
@@ -255,14 +251,10 @@ static ssize_t diag_dbgfs_read_status(struct file *file, char __user *ubuf,
		driver->stm_state_requested[SENSORS_DATA],
		driver->stm_state_requested[APPS_DATA],
		driver->supports_apps_hdlc_encoding,
		driver->smd_data[MODEM_DATA].encode_hdlc,
		driver->smd_data[LPASS_DATA].encode_hdlc,
		driver->smd_data[WCNSS_DATA].encode_hdlc,
		driver->smd_data[SENSORS_DATA].encode_hdlc,
		driver->smd_cmd[MODEM_DATA].encode_hdlc,
		driver->smd_cmd[LPASS_DATA].encode_hdlc,
		driver->smd_cmd[WCNSS_DATA].encode_hdlc,
		driver->smd_cmd[SENSORS_DATA].encode_hdlc,
		driver->feature[MODEM_DATA].encode_hdlc,
		driver->feature[LPASS_DATA].encode_hdlc,
		driver->feature[WCNSS_DATA].encode_hdlc,
		driver->feature[SENSORS_DATA].encode_hdlc,
		(unsigned int)driver->smd_data[MODEM_DATA].buf_in_1_size,
		(unsigned int)driver->smd_data[MODEM_DATA].buf_in_2_size,
		(unsigned int)driver->smd_data[LPASS_DATA].buf_in_1_size,
@@ -299,18 +291,18 @@ static ssize_t diag_dbgfs_read_status(struct file *file, char __user *ubuf,
		(unsigned int)driver->smd_dci_cmd[WCNSS_DATA].buf_in_1_size,
		(unsigned int)driver->smd_dci[SENSORS_DATA].buf_in_1_size,
		(unsigned int)driver->smd_dci_cmd[SENSORS_DATA].buf_in_1_size,
		driver->rcvd_feature_mask[MODEM_DATA],
		driver->rcvd_feature_mask[LPASS_DATA],
		driver->rcvd_feature_mask[WCNSS_DATA],
		driver->rcvd_feature_mask[SENSORS_DATA],
		driver->mask_centralization[MODEM_DATA],
		driver->mask_centralization[LPASS_DATA],
		driver->mask_centralization[WCNSS_DATA],
		driver->mask_centralization[SENSORS_DATA],
		driver->peripheral_buffering_support[MODEM_DATA],
		driver->peripheral_buffering_support[LPASS_DATA],
		driver->peripheral_buffering_support[WCNSS_DATA],
		driver->peripheral_buffering_support[SENSORS_DATA],
		driver->feature[MODEM_DATA].rcvd_feature_mask,
		driver->feature[LPASS_DATA].rcvd_feature_mask,
		driver->feature[WCNSS_DATA].rcvd_feature_mask,
		driver->feature[SENSORS_DATA].rcvd_feature_mask,
		driver->feature[MODEM_DATA].mask_centralization,
		driver->feature[LPASS_DATA].mask_centralization,
		driver->feature[WCNSS_DATA].mask_centralization,
		driver->feature[SENSORS_DATA].mask_centralization,
		driver->feature[MODEM_DATA].peripheral_buffering,
		driver->feature[LPASS_DATA].peripheral_buffering,
		driver->feature[WCNSS_DATA].peripheral_buffering,
		driver->feature[SENSORS_DATA].peripheral_buffering,
		driver->buffering_mode[MODEM_DATA].mode,
		driver->buffering_mode[LPASS_DATA].mode,
		driver->buffering_mode[WCNSS_DATA].mode,
+3 −3
Original line number Diff line number Diff line
/* Copyright (c) 2008-2014, The Linux Foundation. All rights reserved.
/* Copyright (c) 2008-2015, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -67,8 +67,8 @@ static int diag_apps_responds(void)
	 */
	if (chk_apps_only()) {
		if (driver->smd_data[MODEM_DATA].ch &&
			driver->rcvd_feature_mask[MODEM_DATA]) {
			if (driver->mask_centralization[MODEM_DATA])
			driver->feature[MODEM_DATA].rcvd_feature_mask) {
			if (driver->feature[MODEM_DATA].mask_centralization)
				return 1;
			return 0;
		}
+11 −8
Original line number Diff line number Diff line
@@ -369,7 +369,6 @@ struct diag_smd_info {
	int peripheral;	/* The peripheral this smd channel communicates with */
	int type;	/* The type of smd channel (data, control, dci) */
	uint16_t peripheral_mask;
	int encode_hdlc; /* Whether data is raw and needs to be hdlc encoded */

	smd_channel_t *ch;
	smd_channel_t *ch_save;
@@ -419,6 +418,16 @@ struct diag_md_proc_info {
	struct task_struct *callback_process;
};

struct diag_feature_t {
	uint8_t feature_mask[FEATURE_MASK_LEN];
	uint8_t rcvd_feature_mask;
	uint8_t separate_cmd_rsp;
	uint8_t encode_hdlc;
	uint8_t peripheral_buffering;
	uint8_t mask_centralization;
	uint8_t stm_support;
};

struct diagchar_dev {

	/* State for the char driver */
@@ -444,8 +453,6 @@ struct diagchar_dev {
	int stm_state_requested[NUM_STM_PROCESSORS];
	/* The current STM state */
	int stm_state[NUM_STM_PROCESSORS];
	/* Whether or not the peripheral supports STM */
	int peripheral_supports_stm[NUM_SMD_CONTROL_CHANNELS];
	/* Delayed response Variables */
	uint16_t delayed_rsp_id;
	struct mutex delayed_rsp_mutex;
@@ -481,11 +488,7 @@ struct diagchar_dev {
	struct diag_smd_info smd_dci[NUM_SMD_DCI_CHANNELS];
	struct diag_smd_info smd_cmd[NUM_SMD_CMD_CHANNELS];
	struct diag_smd_info smd_dci_cmd[NUM_SMD_DCI_CMD_CHANNELS];
	int rcvd_feature_mask[NUM_SMD_CONTROL_CHANNELS];
	int separate_cmdrsp[NUM_SMD_CONTROL_CHANNELS];
	uint8_t peripheral_feature[NUM_SMD_CONTROL_CHANNELS][FEATURE_MASK_LEN];
	uint8_t mask_centralization[NUM_SMD_CONTROL_CHANNELS];
	uint8_t peripheral_buffering_support[NUM_SMD_CONTROL_CHANNELS];
	struct diag_feature_t feature[NUM_SMD_CONTROL_CHANNELS];
	struct diag_buffering_mode_t buffering_mode[NUM_SMD_CONTROL_CHANNELS];
	struct mutex mode_lock;
	unsigned char *user_space_data_buf;
+5 −5
Original line number Diff line number Diff line
@@ -791,8 +791,8 @@ drop:
					mutex_unlock(&buf_entry->data_mutex);
					continue;
				}
				if (driver->separate_cmdrsp[
						buf_entry->data_source]) {
				if (driver->feature[buf_entry->data_source].
				    separate_cmd_rsp) {
					smd_info = &driver->smd_dci_cmd[
						buf_entry->data_source];
				} else {
@@ -1252,7 +1252,7 @@ static int diag_ioctl_get_real_time(unsigned long ioarg)
	 */
	if (rt_query.proc == DIAG_LOCAL_PROC) {
		for (i = 0; i < NUM_SMD_CONTROL_CHANNELS; i++) {
			if (!driver->peripheral_buffering_support[i])
			if (!driver->feature[i].peripheral_buffering)
				continue;
			switch (driver->buffering_mode[i].mode) {
			case DIAG_BUFFERING_MODE_CIRCULAR:
@@ -1294,7 +1294,7 @@ static int diag_ioctl_peripheral_drain_immediate(unsigned long ioarg)
		return -EINVAL;
	}

	if (!driver->peripheral_buffering_support[peripheral]) {
	if (!driver->feature[peripheral].peripheral_buffering) {
		pr_err("diag: In %s, peripheral %d doesn't support buffering\n",
		       __func__, peripheral);
		return -EIO;
@@ -2351,7 +2351,7 @@ static ssize_t diagchar_read(struct file *file, char __user *buf, size_t count,
		}
		if (driver->supports_separate_cmdrsp) {
			for (i = 0; i < NUM_SMD_DCI_CMD_CHANNELS; i++) {
				if (!driver->separate_cmdrsp[i])
				if (!driver->feature[i].separate_cmd_rsp)
					continue;
				if (driver->smd_dci_cmd[i].ch) {
					queue_work(driver->diag_dci_wq,
Loading