blob: 53966e58284cbb2d54db667d516ffa86ee5e1af4 [file] [log] [blame]
/* Copyright (c) 2013-2015, 2017-2019 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
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef DIAG_MASKS_H
#define DIAG_MASKS_H
#include "diagfwd.h"
struct diag_log_mask_t {
uint8_t equip_id;
uint32_t num_items;
uint32_t num_items_tools;
uint32_t range;
uint32_t range_tools;
struct mutex lock;
uint8_t *ptr;
};
struct diag_ssid_range_t {
uint16_t ssid_first;
uint16_t ssid_last;
} __packed;
struct diag_msg_mask_t {
uint32_t ssid_first;
uint32_t ssid_last;
uint32_t ssid_last_tools;
uint32_t range;
uint32_t range_tools;
struct mutex lock;
uint32_t *ptr;
};
struct diag_log_config_get_req_t {
uint8_t cmd_code;
uint8_t padding[3];
uint32_t sub_cmd;
uint32_t equip_id;
} __packed;
struct diag_log_config_req_t {
uint8_t cmd_code;
uint8_t padding[3];
uint32_t sub_cmd;
uint32_t equip_id;
uint32_t num_items;
} __packed;
struct diag_log_config_rsp_t {
uint8_t cmd_code;
uint8_t padding[3];
uint32_t sub_cmd;
uint32_t status;
} __packed;
struct diag_log_config_set_rsp_t {
uint8_t cmd_code;
uint8_t padding[3];
uint32_t sub_cmd;
uint32_t status;
uint32_t equip_id;
uint32_t num_items;
} __packed;
struct diag_log_on_demand_rsp_t {
uint8_t cmd_code;
uint16_t log_code;
uint8_t status;
} __packed;
struct diag_event_report_t {
uint8_t cmd_code;
uint16_t padding;
} __packed;
struct diag_event_mask_config_t {
uint8_t cmd_code;
uint8_t status;
uint16_t padding;
uint16_t num_bits;
} __packed;
struct diag_msg_config_rsp_t {
uint8_t cmd_code;
uint8_t sub_cmd;
uint8_t status;
uint8_t padding;
uint32_t rt_mask;
} __packed;
struct diag_msg_ssid_query_t {
uint8_t cmd_code;
uint8_t sub_cmd;
uint8_t status;
uint8_t padding;
uint32_t count;
} __packed;
struct diag_build_mask_req_t {
uint8_t cmd_code;
uint8_t sub_cmd;
uint16_t ssid_first;
uint16_t ssid_last;
} __packed;
struct diag_msg_build_mask_t {
uint8_t cmd_code;
uint8_t sub_cmd;
uint16_t ssid_first;
uint16_t ssid_last;
uint8_t status;
uint8_t padding;
} __packed;
struct diag_msg_mask_userspace_t {
uint32_t ssid_first;
uint32_t ssid_last;
uint32_t range;
} __packed;
struct diag_log_mask_userspace_t {
uint8_t equip_id;
uint32_t num_items;
} __packed;
#define MAX_EQUIP_ID 16
#define MSG_MASK_SIZE (MSG_MASK_TBL_CNT * sizeof(struct diag_msg_mask_t))
#define LOG_MASK_SIZE (MAX_EQUIP_ID * sizeof(struct diag_log_mask_t))
#define EVENT_MASK_SIZE 513
#define MAX_ITEMS_PER_EQUIP_ID 512
#define MAX_ITEMS_ALLOWED 0xFFF
#define LOG_MASK_CTRL_HEADER_LEN 11
#define MSG_MASK_CTRL_HEADER_LEN 11
#define EVENT_MASK_CTRL_HEADER_LEN 7
#define LOG_STATUS_SUCCESS 0
#define LOG_STATUS_INVALID 1
#define LOG_STATUS_FAIL 2
#define MSG_STATUS_FAIL 0
#define MSG_STATUS_SUCCESS 1
#define EVENT_STATUS_SUCCESS 0
#define EVENT_STATUS_FAIL 1
#define DIAG_CTRL_MASK_INVALID 0
#define DIAG_CTRL_MASK_ALL_DISABLED 1
#define DIAG_CTRL_MASK_ALL_ENABLED 2
#define DIAG_CTRL_MASK_VALID 3
extern struct diag_mask_info msg_mask;
extern struct diag_mask_info msg_bt_mask;
extern struct diag_mask_info log_mask;
extern struct diag_mask_info event_mask;
int diag_masks_init(void);
void diag_masks_exit(void);
int diag_log_mask_copy(struct diag_mask_info *dest,
struct diag_mask_info *src);
int diag_msg_mask_copy(struct diag_md_session_t *new_session,
struct diag_mask_info *dest, struct diag_mask_info *src);
int diag_event_mask_copy(struct diag_mask_info *dest,
struct diag_mask_info *src);
void diag_log_mask_free(struct diag_mask_info *mask_info);
void diag_msg_mask_free(struct diag_mask_info *mask_info,
struct diag_md_session_t *session_info);
void diag_event_mask_free(struct diag_mask_info *mask_info);
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);
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,
struct diag_md_session_t *info);
#endif