blob: 1a52f946bb09ceabb08d6fcffac6e8fab3bb5d95 [file] [log] [blame]
Sreelakshmi Gownipallicb8893d2016-10-19 16:02:34 -07001/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#ifndef DIAG_MASKS_H
14#define DIAG_MASKS_H
15
16#include "diagfwd.h"
17
18struct diag_log_mask_t {
19 uint8_t equip_id;
20 uint32_t num_items;
21 uint32_t num_items_tools;
22 uint32_t range;
23 uint32_t range_tools;
24 struct mutex lock;
25 uint8_t *ptr;
26};
27
28struct diag_ssid_range_t {
29 uint16_t ssid_first;
30 uint16_t ssid_last;
31} __packed;
32
33struct diag_msg_mask_t {
34 uint32_t ssid_first;
35 uint32_t ssid_last;
36 uint32_t ssid_last_tools;
37 uint32_t range;
38 uint32_t range_tools;
39 struct mutex lock;
40 uint32_t *ptr;
41};
42
43struct diag_log_config_req_t {
44 uint8_t cmd_code;
45 uint8_t padding[3];
46 uint32_t sub_cmd;
47 uint32_t equip_id;
48 uint32_t num_items;
49} __packed;
50
51struct diag_log_config_rsp_t {
52 uint8_t cmd_code;
53 uint8_t padding[3];
54 uint32_t sub_cmd;
55 uint32_t status;
56} __packed;
57
58struct diag_log_config_set_rsp_t {
59 uint8_t cmd_code;
60 uint8_t padding[3];
61 uint32_t sub_cmd;
62 uint32_t status;
63 uint32_t equip_id;
64 uint32_t num_items;
65} __packed;
66
67struct diag_log_on_demand_rsp_t {
68 uint8_t cmd_code;
69 uint16_t log_code;
70 uint8_t status;
71} __packed;
72
73struct diag_event_report_t {
74 uint8_t cmd_code;
75 uint16_t padding;
76} __packed;
77
78struct diag_event_mask_config_t {
79 uint8_t cmd_code;
80 uint8_t status;
81 uint16_t padding;
82 uint16_t num_bits;
83} __packed;
84
85struct diag_msg_config_rsp_t {
86 uint8_t cmd_code;
87 uint8_t sub_cmd;
88 uint8_t status;
89 uint8_t padding;
90 uint32_t rt_mask;
91} __packed;
92
93struct diag_msg_ssid_query_t {
94 uint8_t cmd_code;
95 uint8_t sub_cmd;
96 uint8_t status;
97 uint8_t padding;
98 uint32_t count;
99} __packed;
100
101struct diag_build_mask_req_t {
102 uint8_t cmd_code;
103 uint8_t sub_cmd;
104 uint16_t ssid_first;
105 uint16_t ssid_last;
106} __packed;
107
108struct diag_msg_build_mask_t {
109 uint8_t cmd_code;
110 uint8_t sub_cmd;
111 uint16_t ssid_first;
112 uint16_t ssid_last;
113 uint8_t status;
114 uint8_t padding;
115} __packed;
116
117struct diag_msg_mask_userspace_t {
118 uint32_t ssid_first;
119 uint32_t ssid_last;
120 uint32_t range;
121} __packed;
122
123struct diag_log_mask_userspace_t {
124 uint8_t equip_id;
125 uint32_t num_items;
126} __packed;
127
128#define MAX_EQUIP_ID 16
129#define MSG_MASK_SIZE (MSG_MASK_TBL_CNT * sizeof(struct diag_msg_mask_t))
130#define LOG_MASK_SIZE (MAX_EQUIP_ID * sizeof(struct diag_log_mask_t))
131#define EVENT_MASK_SIZE 513
132#define MAX_ITEMS_PER_EQUIP_ID 512
133#define MAX_ITEMS_ALLOWED 0xFFF
134
135#define LOG_MASK_CTRL_HEADER_LEN 11
136#define MSG_MASK_CTRL_HEADER_LEN 11
137#define EVENT_MASK_CTRL_HEADER_LEN 7
138
139#define LOG_STATUS_SUCCESS 0
140#define LOG_STATUS_INVALID 1
141#define LOG_STATUS_FAIL 2
142
143#define MSG_STATUS_FAIL 0
144#define MSG_STATUS_SUCCESS 1
145
146#define EVENT_STATUS_SUCCESS 0
147#define EVENT_STATUS_FAIL 1
148
149#define DIAG_CTRL_MASK_INVALID 0
150#define DIAG_CTRL_MASK_ALL_DISABLED 1
151#define DIAG_CTRL_MASK_ALL_ENABLED 2
152#define DIAG_CTRL_MASK_VALID 3
153
154extern struct diag_mask_info msg_mask;
155extern struct diag_mask_info msg_bt_mask;
156extern struct diag_mask_info log_mask;
157extern struct diag_mask_info event_mask;
158
159int diag_masks_init(void);
160void diag_masks_exit(void);
161int diag_log_mask_copy(struct diag_mask_info *dest,
162 struct diag_mask_info *src);
163int diag_msg_mask_copy(struct diag_mask_info *dest,
164 struct diag_mask_info *src);
165int diag_event_mask_copy(struct diag_mask_info *dest,
166 struct diag_mask_info *src);
167void diag_log_mask_free(struct diag_mask_info *mask_info);
168void diag_msg_mask_free(struct diag_mask_info *mask_info);
169void diag_event_mask_free(struct diag_mask_info *mask_info);
170int diag_process_apps_masks(unsigned char *buf, int len,
171 struct diag_md_session_t *info);
172void diag_send_updates_peripheral(uint8_t peripheral);
173
174extern int diag_create_msg_mask_table_entry(struct diag_msg_mask_t *msg_mask,
175 struct diag_ssid_range_t *range);
176extern int diag_copy_to_user_msg_mask(char __user *buf, size_t count,
177 struct diag_md_session_t *info);
178extern int diag_copy_to_user_log_mask(char __user *buf, size_t count,
179 struct diag_md_session_t *info);
180#endif