summaryrefslogtreecommitdiff
path: root/original-kernel-headers/sound/lsm_params.h
blob: eafdc117413a56f642af3c6732bf1186ffcc00f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#ifndef _UAPI_LSM_PARAMS_H__
#define _UAPI_LSM_PARAMS_H__

#include <linux/types.h>
#include <sound/asound.h>

#define SNDRV_LSM_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 0)

#define LSM_OUT_FORMAT_PCM (0)
#define LSM_OUT_FORMAT_ADPCM (1 << 0)

#define LSM_OUT_DATA_RAW (0)
#define LSM_OUT_DATA_PACKED (1)

#define LSM_OUT_DATA_EVENTS_DISABLED (0)
#define LSM_OUT_DATA_EVENTS_ENABLED (1)

#define LSM_OUT_TRANSFER_MODE_RT (0)
#define LSM_OUT_TRANSFER_MODE_FTRT (1)

enum lsm_app_id {
	LSM_VOICE_WAKEUP_APP_ID = 1,
	LSM_VOICE_WAKEUP_APP_ID_V2 = 2,
};

enum lsm_detection_mode {
	LSM_MODE_KEYWORD_ONLY_DETECTION = 1,
	LSM_MODE_USER_KEYWORD_DETECTION
};

enum lsm_vw_status {
	LSM_VOICE_WAKEUP_STATUS_RUNNING = 1,
	LSM_VOICE_WAKEUP_STATUS_DETECTED,
	LSM_VOICE_WAKEUP_STATUS_END_SPEECH,
	LSM_VOICE_WAKEUP_STATUS_REJECTED
};

enum LSM_PARAM_TYPE {
	LSM_ENDPOINT_DETECT_THRESHOLD = 0,
	LSM_OPERATION_MODE,
	LSM_GAIN,
	LSM_MIN_CONFIDENCE_LEVELS,
	LSM_REG_SND_MODEL,
	LSM_DEREG_SND_MODEL,
	LSM_CUSTOM_PARAMS,
	/* driver ioctl will parse only so many params */
	LSM_PARAMS_MAX,
};

/*
 * Data for LSM_ENDPOINT_DETECT_THRESHOLD param_type
 * @epd_begin: Begin threshold
 * @epd_end: End threshold
 */
struct snd_lsm_ep_det_thres {
	__u32 epd_begin;
	__u32 epd_end;
};

/*
 * Data for LSM_OPERATION_MODE param_type
 * @mode: The detection mode to be used
 * @detect_failure: Setting to enable failure detections.
 */
struct snd_lsm_detect_mode {
	enum lsm_detection_mode mode;
	bool detect_failure;
};

/*
 * Data for LSM_GAIN param_type
 * @gain: The gain to be applied on LSM
 */
struct snd_lsm_gain {
	__u16 gain;
};


struct snd_lsm_sound_model_v2 {
	__u8 __user *data;
	__u8 *confidence_level;
	__u32 data_size;
	enum lsm_detection_mode detection_mode;
	__u8 num_confidence_levels;
	bool detect_failure;
};

struct snd_lsm_session_data {
	enum lsm_app_id app_id;
};

struct snd_lsm_event_status {
	__u16 status;
	__u16 payload_size;
	__u8 payload[0];
};

struct snd_lsm_detection_params {
	__u8 *conf_level;
	enum lsm_detection_mode detect_mode;
	__u8 num_confidence_levels;
	bool detect_failure;
};

/*
 * Param info for each parameter type
 * @module_id: Module to which parameter is to be set
 * @param_id: Parameter that is to be set
 * @param_size: size (in number of bytes) for the data
 *		in param_data.
 *		For confidence levels, this is num_conf_levels
 *		For REG_SND_MODEL, this is size of sound model
 *		For CUSTOM_PARAMS, this is size of the entire blob of data
 * @param_data: Data for the parameter.
 *		For some param_types this is a structure defined, ex: LSM_GAIN
 *		For CONFIDENCE_LEVELS, this is array of confidence levels
 *		For REG_SND_MODEL, this is the sound model data
 *		For CUSTOM_PARAMS, this is the blob of custom data.
 */
struct lsm_params_info {
	__u32 module_id;
	__u32 param_id;
	__u32 param_size;
	__u8 __user *param_data;
	enum LSM_PARAM_TYPE param_type;
};

/*
 * Data passed to the SET_PARAM_V2 IOCTL
 * @num_params: Number of params that are to be set
 *		should not be greater than LSM_PARAMS_MAX
 * @params: Points to an array of lsm_params_info
 *	    Each entry points to one parameter to set
 * @data_size: size (in bytes) for params
 *	       should be equal to
 *	       num_params * sizeof(struct lsm_parms_info)
 */
struct snd_lsm_module_params {
	__u8 __user *params;
	__u32 num_params;
	__u32 data_size;
};

/*
 * Data passed to LSM_OUT_FORMAT_CFG IOCTL
 * @format: The media format enum
 * @packing: indicates the packing method used for data path
 * @events: indicates whether data path events need to be enabled
 * @transfer_mode: indicates whether FTRT mode or RT mode.
 */
struct snd_lsm_output_format_cfg {
	__u8 format;
	__u8 packing;
	__u8 events;
	__u8 mode;
};

#define SNDRV_LSM_DEREG_SND_MODEL _IOW('U', 0x01, int)
#define SNDRV_LSM_EVENT_STATUS	_IOW('U', 0x02, struct snd_lsm_event_status)
#define SNDRV_LSM_ABORT_EVENT	_IOW('U', 0x03, int)
#define SNDRV_LSM_START		_IOW('U', 0x04, int)
#define SNDRV_LSM_STOP		_IOW('U', 0x05, int)
#define SNDRV_LSM_SET_SESSION_DATA _IOW('U', 0x06, struct snd_lsm_session_data)
#define SNDRV_LSM_REG_SND_MODEL_V2 _IOW('U', 0x07,\
					struct snd_lsm_sound_model_v2)
#define SNDRV_LSM_LAB_CONTROL	_IOW('U', 0x08, uint32_t)
#define SNDRV_LSM_STOP_LAB	_IO('U', 0x09)
#define SNDRV_LSM_SET_PARAMS	_IOW('U', 0x0A, \
					struct snd_lsm_detection_params)
#define SNDRV_LSM_SET_MODULE_PARAMS	_IOW('U', 0x0B, \
					struct snd_lsm_module_params)
#define SNDRV_LSM_OUT_FORMAT_CFG _IOW('U', 0x0C, \
				      struct snd_lsm_output_format_cfg)

#endif