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

Commit 04b05b10 authored by Hardik Arya's avatar Hardik Arya
Browse files

diag: Add Multi-sim filtering support



The patch adds support for a mechanism by which
diag clients can do user end side filtering based
upon subscription.

Change-Id: Ife9a845753fcdca604766b7b5f0f1efe18006d51
Signed-off-by: default avatarHardik Arya <harya@codeaurora.org>
parent 4a6d5df1
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ static ssize_t diag_dbgfs_read_status(struct file *file, char __user *ubuf,

	for (i = 0; i < NUM_PERIPHERALS; i++) {
		ret += scnprintf(buf+ret, buf_size-ret,
			"p: %s Feature: %02x %02x |%c%c%c%c%c%c%c%c%c%c%c|\n",
			"p: %s Feature: %02x %02x |%c%c%c%c%c%c%c%c%c%c%c%c|\n",
			PERIPHERAL_STRING(i),
			driver->feature[i].feature_mask[0],
			driver->feature[i].feature_mask[1],
@@ -107,7 +107,8 @@ static ssize_t diag_dbgfs_read_status(struct file *file, char __user *ubuf,
			driver->feature[i].sockets_enabled ? 'S':'s',
			driver->feature[i].sent_feature_mask ? 'T':'t',
			driver->feature[i].untag_header ? 'U':'u',
			driver->feature[i].diagid_v2_feature_mask ? 'V':'v');
			driver->feature[i].diagid_v2_feature_mask ? 'V':'v',
			driver->feature[i].multi_sim_support ? 'D':'d');
	}

#ifdef CONFIG_DIAG_OVER_USB
+1509 −371

File changed.

Preview size limit exceeded, changes collapsed.

+117 −2
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2013-2015, 2017-2018 The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2015, 2017-2019 The Linux Foundation. All rights reserved.
 */

#ifndef DIAG_MASKS_H
@@ -13,6 +13,8 @@ struct diag_log_mask_t {
	uint32_t num_items_tools;
	uint32_t range;
	uint32_t range_tools;
	uint8_t id_valid;
	uint32_t sub_id;
	struct mutex lock;
	uint8_t *ptr;
};
@@ -28,6 +30,8 @@ struct diag_msg_mask_t {
	uint32_t ssid_last_tools;
	uint32_t range;
	uint32_t range_tools;
	uint8_t id_valid;
	uint32_t sub_id;
	struct mutex lock;
	uint32_t *ptr;
};
@@ -128,6 +132,10 @@ struct diag_log_mask_userspace_t {
#define MSG_MASK_CTRL_HEADER_LEN	11
#define EVENT_MASK_CTRL_HEADER_LEN	7

#define LOG_MASK_CTRL_HEADER_LEN_SUB	18
#define MSG_MASK_CTRL_HEADER_LEN_SUB	18
#define EVENT_MASK_CTRL_HEADER_LEN_SUB	14

#define LOG_STATUS_SUCCESS	0
#define LOG_STATUS_INVALID	1
#define LOG_STATUS_FAIL		2
@@ -148,6 +156,113 @@ extern struct diag_mask_info msg_bt_mask;
extern struct diag_mask_info log_mask;
extern struct diag_mask_info event_mask;

#define MAX_SIM_NUM 7
#define INVALID_INDEX -1
#define LEGACY_MASK_CMD 0
#define SUBID_CMD 1

struct diag_build_mask_req_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t sub_cmd;
	uint16_t ssid_first;
	uint16_t ssid_last;
} __packed;

struct diag_msg_build_mask_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t sub_cmd;
	uint8_t reserved;
	uint8_t status;
	uint16_t ssid_first;
	uint16_t ssid_last;
} __packed;

struct diag_msg_ssid_query_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t sub_cmd;
	uint8_t status;
	uint8_t reserved;
	uint32_t count;
} __packed;

struct diag_msg_config_rsp_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t sub_cmd;
	uint8_t preset_id;
	uint8_t status;
	uint32_t rt_mask;
} __packed;

struct diag_msg_config_set_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t sub_cmd;
	uint8_t preset_id;
	uint8_t status;
	uint16_t ssid_first;
	uint16_t ssid_last;
	uint32_t rt_mask;
} __packed;

struct diag_log_config_req_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t operation_code;
} __packed;

struct diag_log_config_rsp_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t operation_code;
	uint8_t preset_id;
	uint8_t status;
} __packed;

struct diag_logging_range_t {
	uint32_t equip_id;
	uint32_t num_items;
} __packed;

struct diag_event_mask_config_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t sub_cmd;
	uint8_t preset_id;
	uint8_t status;
	uint16_t num_bits;
} __packed;

struct diag_event_mask_req_sub_t {
	struct diag_pkt_header_t header;
	uint8_t version;
	uint8_t id_valid;
	uint32_t sub_id;
	uint8_t sub_cmd;
	uint8_t preset_id;
	uint8_t status;
} __packed;

int diag_check_subid_mask_index(uint32_t subid, int pid);
int diag_masks_init(void);
void diag_masks_exit(void);
int diag_log_mask_copy(struct diag_mask_info *dest,
@@ -164,7 +279,7 @@ int diag_process_apps_masks(unsigned char *buf, int len, int pid);
void diag_send_updates_peripheral(uint8_t peripheral);

extern int diag_create_msg_mask_table_entry(struct diag_msg_mask_t *msg_mask,
					    struct diag_ssid_range_t *range);
			struct diag_ssid_range_t *range, int subid_index);
extern int diag_copy_to_user_msg_mask(char __user *buf, size_t count,
				      struct diag_md_session_t *info);
extern int diag_copy_to_user_log_mask(char __user *buf, size_t count,
+24 −0
Original line number Diff line number Diff line
@@ -54,6 +54,11 @@
#define DIAG_CTRL_MSG_LOG_MASK	9
#define DIAG_CTRL_MSG_EVENT_MASK	10
#define DIAG_CTRL_MSG_F3_MASK	11

#define DIAG_CTRL_MSG_F3_MS_MASK	36
#define DIAG_CTRL_MSG_LOG_MS_MASK	37
#define DIAG_CTRL_MSG_EVENT_MS_MASK	38

#define CONTROL_CHAR	0x7E

#define DIAG_ID_ROOT_STRING "root"
@@ -150,6 +155,10 @@
#define DIAG_CMD_OP_SET_MSG_MASK	4
#define DIAG_CMD_OP_SET_ALL_MSG_MASK	5

#define DIAG_CMD_OP_GET_EVENT_MSK	1
#define DIAG_CMD_OP_SET_EVENT_MSK	2
#define DIAG_CMD_OP_EVENT_TOGGLE	3

#define DIAG_CMD_OP_GET_MSG_ALLOC       0x33
#define DIAG_CMD_OP_GET_MSG_DROP	0x30
#define DIAG_CMD_OP_RESET_MSG_STATS	0x2F
@@ -162,6 +171,10 @@

#define DIAG_CMD_OP_HDLC_DISABLE	0x218

#define DIAG_SUB_SYS_CMD_MSG	0x6D
#define DIAG_SUB_SYS_CMD_LOG	0x6E
#define DIAG_SUB_SYS_CMD_EVENT	0x6F

#define BAD_PARAM_RESPONSE_MESSAGE 20

#define PERSIST_TIME_SUCCESS 0
@@ -532,14 +545,23 @@ struct diag_md_session_t {
 * High level structure for storing Diag masks.
 *
 * @ptr: Pointer to the buffer that stores the masks
 * @ms_ptr: Pointer to the list having mask based upon subscription
 * @mask_len: Length of the buffer pointed by ptr
 * @update_buf: Buffer for performing mask updates to peripherals
 * @update_buf_len: Length of the buffer pointed by buf
 * @status: status of the mask - all enable, disabled, valid
 * @lock: To protect access to the mask variables
 */

struct diag_multisim_masks {
	uint8_t *sub_ptr;
	uint8_t status;
	struct diag_multisim_masks *next;
};

struct diag_mask_info {
	uint8_t *ptr;
	struct diag_multisim_masks *ms_ptr;
	int mask_len;
	uint8_t *update_buf;
	int update_buf_len;
@@ -569,6 +591,7 @@ struct diag_feature_t {
	uint8_t sent_feature_mask;
	uint8_t diag_id_support;
	uint8_t diagid_v2_feature_mask;
	uint8_t multi_sim_support;
};

struct diagchar_dev {
@@ -716,6 +739,7 @@ struct diagchar_dev {
	struct diag_mask_info *log_mask;
	struct diag_mask_info *event_mask;
	struct diag_mask_info *build_time_mask;
	uint8_t multisim_feature_rcvd;
	uint8_t set_mask_cmd;
	uint8_t msg_mask_tbl_count;
	uint8_t bt_msg_mask_tbl_count;
+1 −0
Original line number Diff line number Diff line
@@ -1972,6 +1972,7 @@ int diagfwd_init(void)
		driver->feature[i].sent_feature_mask = 0;
		driver->feature[i].diag_id_support = 0;
		driver->feature[i].diagid_v2_feature_mask = 0;
		driver->feature[i].multi_sim_support = 0;
	}

	diag_init_apps_feature();
Loading