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

Commit e11ac7d8 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "diag: Add support for querying the diag transport"

parents 9a5d14a5 a6e34b94
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -144,6 +144,7 @@
#define DIAG_GET_DIAG_ID	0x222
#define DIAG_SWITCH_COMMAND	0x081B
#define DIAG_BUFFERING_MODE	0x080C
#define DIAG_QUERY_TRANSPORT	0x0064

#define DIAG_CMD_OP_LOG_DISABLE		0
#define DIAG_CMD_OP_GET_LOG_RANGE	1
@@ -401,6 +402,15 @@ struct diag_cmd_time_sync_switch_rsp_t {
	uint8_t persist_time_status;
};

struct diag_query_transport_req_t {
	struct diag_pkt_header_t header;
};

struct diag_query_transport_rsp_t {
	struct diag_pkt_header_t header;
	uint8_t transport;
};

struct diag_cmd_reg_entry_t {
	uint16_t cmd_code;
	uint16_t subsys_id;
+36 −0
Original line number Diff line number Diff line
@@ -769,6 +769,30 @@ int diag_process_diag_id_query_cmd(unsigned char *src_buf, int src_len,
	memcpy(dest_buf, &rsp, rsp_len);
	return  write_len;
}

int diag_process_diag_transport_query_cmd(unsigned char *src_buf, int src_len,
				      unsigned char *dest_buf, int dest_len)
{
	struct diag_query_transport_req_t *req;
	struct diag_query_transport_rsp_t rsp;

	if (!src_buf || !dest_buf || src_len <= 0 || dest_len <= 0 ||
		src_len < sizeof(struct diag_query_transport_req_t) ||
		sizeof(rsp) > dest_len) {
		pr_err("diag: Invalid input in %s, src_buf: %pK, src_len: %d, dest_buf: %pK, dest_len: %d",
			__func__, src_buf, src_len, dest_buf, dest_len);
		return -EINVAL;
	}

	req = (struct diag_query_transport_req_t *)src_buf;
	rsp.header.cmd_code = req->header.cmd_code;
	rsp.header.subsys_id = req->header.subsys_id;
	rsp.header.subsys_cmd_code = req->header.subsys_cmd_code;
	rsp.transport = driver->transport_set;
	memcpy(dest_buf, &rsp, sizeof(rsp));
	return sizeof(rsp);
}

int diag_process_time_sync_switch_cmd(unsigned char *src_buf, int src_len,
				      unsigned char *dest_buf, int dest_len)
{
@@ -1158,6 +1182,18 @@ int diag_process_apps_pkt(unsigned char *buf, int len, int pid)
			diag_send_rsp(driver->apps_rsp_buf, write_len, pid);
		return 0;
	}
	/* Check for transport command*/
	else if ((len >= ((2 * sizeof(uint8_t)) + sizeof(uint16_t))) &&
		(*buf == DIAG_CMD_DIAG_SUBSYS) &&
		(*(buf+1) == DIAG_SS_DIAG) &&
		(*(uint16_t *)(buf+2) == DIAG_QUERY_TRANSPORT)) {
		write_len = diag_process_diag_transport_query_cmd(buf, len,
							driver->apps_rsp_buf,
							DIAG_MAX_RSP_SIZE);
		if (write_len > 0)
			diag_send_rsp(driver->apps_rsp_buf, write_len, pid);
		return 0;
	}
	/* Check for download command */
	else if ((len >= sizeof(uint8_t)) && (chk_apps_master()) &&
		(*buf == 0x3A)) {
+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ int diag_cmd_log_on_demand(unsigned char *src_buf, int src_len,
			   unsigned char *dest_buf, int dest_len);
int diag_cmd_get_mobile_id(unsigned char *src_buf, int src_len,
			   unsigned char *dest_buf, int dest_len);
int diag_process_diag_transport_query_cmd(unsigned char *src_buf, int src_len,
				      unsigned char *dest_buf, int dest_len);
int diag_check_common_cmd(struct diag_pkt_header_t *header);
void diag_update_userspace_clients(unsigned int type);
void diag_update_sleeping_process(int process_id, int data_type);