1feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#ifndef _UAPI_LSM_PARAMS_H__
2feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define _UAPI_LSM_PARAMS_H__
3feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
4feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#include <linux/types.h>
5feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#include <sound/asound.h>
6feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
7feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 0)
8feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
9feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchevenum lsm_app_id {
10feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	LSM_VOICE_WAKEUP_APP_ID = 1,
11feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	LSM_VOICE_WAKEUP_APP_ID_V2 = 2,
12feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev};
13feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
14feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchevenum lsm_detection_mode {
15feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	LSM_MODE_KEYWORD_ONLY_DETECTION = 1,
16feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	LSM_MODE_USER_KEYWORD_DETECTION
17feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev};
18feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
19feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchevstruct snd_lsm_sound_model {
20feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u8 __user *data;
21feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u32 data_size;
22feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	enum lsm_detection_mode detection_mode;
23feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u16 min_keyw_confidence;
24feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u16 min_user_confidence;
25feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	bool detect_failure;
26feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev};
27feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
28feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchevstruct snd_lsm_sound_model_v2 {
29feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u8 __user *data;
30feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u8 *confidence_level;
31feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u32 data_size;
32feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	enum lsm_detection_mode detection_mode;
33feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u8 num_confidence_levels;
34feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	bool detect_failure;
35feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev};
36feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
37feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchevstruct snd_lsm_session_data {
38feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	enum lsm_app_id app_id;
39feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev};
40feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
41feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchevstruct snd_lsm_event_status {
42feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u16 status;
43feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u16 payload_size;
44feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev	__u8 payload[0];
45feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev};
46feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev
47feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_REG_SND_MODEL	 _IOW('U', 0x00, struct snd_lsm_sound_model)
48feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_DEREG_SND_MODEL _IOW('U', 0x01, int)
49feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_EVENT_STATUS	_IOW('U', 0x02, struct snd_lsm_event_status)
50feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_ABORT_EVENT	_IOW('U', 0x03, int)
51feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_START		_IOW('U', 0x04, int)
52feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_STOP		_IOW('U', 0x05, int)
53feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_SET_SESSION_DATA _IOW('U', 0x06, struct snd_lsm_session_data)
54feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#define SNDRV_LSM_REG_SND_MODEL_V2 _IOW('U', 0x07,\
55feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev					struct snd_lsm_sound_model_v2)
56feae2e49081dac3166adff95e2d5f00b0e8f85daIliyan Malchev#endif
57