1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
2 | /* |
3 | * compress_offload.h - compress offload header definations |
4 | * |
5 | * Copyright (C) 2011 Intel Corporation |
6 | * Authors: Vinod Koul <vinod.koul@linux.intel.com> |
7 | * Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
8 | */ |
9 | #ifndef __COMPRESS_OFFLOAD_H |
10 | #define __COMPRESS_OFFLOAD_H |
11 | |
12 | #include <linux/types.h> |
13 | #include <sound/asound.h> |
14 | #include <sound/compress_params.h> |
15 | |
16 | |
17 | #define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 2, 0) |
18 | /** |
19 | * struct snd_compressed_buffer - compressed buffer |
20 | * @fragment_size: size of buffer fragment in bytes |
21 | * @fragments: number of such fragments |
22 | */ |
23 | struct snd_compressed_buffer { |
24 | __u32 fragment_size; |
25 | __u32 fragments; |
26 | } __attribute__((packed, aligned(4))); |
27 | |
28 | /** |
29 | * struct snd_compr_params - compressed stream params |
30 | * @buffer: buffer description |
31 | * @codec: codec parameters |
32 | * @no_wake_mode: dont wake on fragment elapsed |
33 | */ |
34 | struct snd_compr_params { |
35 | struct snd_compressed_buffer buffer; |
36 | struct snd_codec codec; |
37 | __u8 no_wake_mode; |
38 | } __attribute__((packed, aligned(4))); |
39 | |
40 | /** |
41 | * struct snd_compr_tstamp - timestamp descriptor |
42 | * @byte_offset: Byte offset in ring buffer to DSP |
43 | * @copied_total: Total number of bytes copied from/to ring buffer to/by DSP |
44 | * @pcm_frames: Frames decoded or encoded by DSP. This field will evolve by |
45 | * large steps and should only be used to monitor encoding/decoding |
46 | * progress. It shall not be used for timing estimates. |
47 | * @pcm_io_frames: Frames rendered or received by DSP into a mixer or an audio |
48 | * output/input. This field should be used for A/V sync or time estimates. |
49 | * @sampling_rate: sampling rate of audio |
50 | */ |
51 | struct snd_compr_tstamp { |
52 | __u32 byte_offset; |
53 | __u32 copied_total; |
54 | __u32 pcm_frames; |
55 | __u32 pcm_io_frames; |
56 | __u32 sampling_rate; |
57 | } __attribute__((packed, aligned(4))); |
58 | |
59 | /** |
60 | * struct snd_compr_avail - avail descriptor |
61 | * @avail: Number of bytes available in ring buffer for writing/reading |
62 | * @tstamp: timestamp information |
63 | */ |
64 | struct snd_compr_avail { |
65 | __u64 avail; |
66 | struct snd_compr_tstamp tstamp; |
67 | } __attribute__((packed, aligned(4))); |
68 | |
69 | enum snd_compr_direction { |
70 | SND_COMPRESS_PLAYBACK = 0, |
71 | SND_COMPRESS_CAPTURE |
72 | }; |
73 | |
74 | /** |
75 | * struct snd_compr_caps - caps descriptor |
76 | * @codecs: pointer to array of codecs |
77 | * @direction: direction supported. Of type snd_compr_direction |
78 | * @min_fragment_size: minimum fragment supported by DSP |
79 | * @max_fragment_size: maximum fragment supported by DSP |
80 | * @min_fragments: min fragments supported by DSP |
81 | * @max_fragments: max fragments supported by DSP |
82 | * @num_codecs: number of codecs supported |
83 | * @reserved: reserved field |
84 | */ |
85 | struct snd_compr_caps { |
86 | __u32 num_codecs; |
87 | __u32 direction; |
88 | __u32 min_fragment_size; |
89 | __u32 max_fragment_size; |
90 | __u32 min_fragments; |
91 | __u32 max_fragments; |
92 | __u32 codecs[MAX_NUM_CODECS]; |
93 | __u32 reserved[11]; |
94 | } __attribute__((packed, aligned(4))); |
95 | |
96 | /** |
97 | * struct snd_compr_codec_caps - query capability of codec |
98 | * @codec: codec for which capability is queried |
99 | * @num_descriptors: number of codec descriptors |
100 | * @descriptor: array of codec capability descriptor |
101 | */ |
102 | struct snd_compr_codec_caps { |
103 | __u32 codec; |
104 | __u32 num_descriptors; |
105 | struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS]; |
106 | } __attribute__((packed, aligned(4))); |
107 | |
108 | /** |
109 | * enum sndrv_compress_encoder - encoder metadata key |
110 | * @SNDRV_COMPRESS_ENCODER_PADDING: no of samples appended by the encoder at the |
111 | * end of the track |
112 | * @SNDRV_COMPRESS_ENCODER_DELAY: no of samples inserted by the encoder at the |
113 | * beginning of the track |
114 | */ |
115 | enum sndrv_compress_encoder { |
116 | SNDRV_COMPRESS_ENCODER_PADDING = 1, |
117 | SNDRV_COMPRESS_ENCODER_DELAY = 2, |
118 | }; |
119 | |
120 | /** |
121 | * struct snd_compr_metadata - compressed stream metadata |
122 | * @key: key id |
123 | * @value: key value |
124 | */ |
125 | struct snd_compr_metadata { |
126 | __u32 key; |
127 | __u32 value[8]; |
128 | } __attribute__((packed, aligned(4))); |
129 | |
130 | /* |
131 | * compress path ioctl definitions |
132 | * SNDRV_COMPRESS_GET_CAPS: Query capability of DSP |
133 | * SNDRV_COMPRESS_GET_CODEC_CAPS: Query capability of a codec |
134 | * SNDRV_COMPRESS_SET_PARAMS: Set codec and stream parameters |
135 | * Note: only codec params can be changed runtime and stream params cant be |
136 | * SNDRV_COMPRESS_GET_PARAMS: Query codec params |
137 | * SNDRV_COMPRESS_TSTAMP: get the current timestamp value |
138 | * SNDRV_COMPRESS_AVAIL: get the current buffer avail value. |
139 | * This also queries the tstamp properties |
140 | * SNDRV_COMPRESS_PAUSE: Pause the running stream |
141 | * SNDRV_COMPRESS_RESUME: resume a paused stream |
142 | * SNDRV_COMPRESS_START: Start a stream |
143 | * SNDRV_COMPRESS_STOP: stop a running stream, discarding ring buffer content |
144 | * and the buffers currently with DSP |
145 | * SNDRV_COMPRESS_DRAIN: Play till end of buffers and stop after that |
146 | * SNDRV_COMPRESS_IOCTL_VERSION: Query the API version |
147 | */ |
148 | #define SNDRV_COMPRESS_IOCTL_VERSION _IOR('C', 0x00, int) |
149 | #define SNDRV_COMPRESS_GET_CAPS _IOWR('C', 0x10, struct snd_compr_caps) |
150 | #define SNDRV_COMPRESS_GET_CODEC_CAPS _IOWR('C', 0x11,\ |
151 | struct snd_compr_codec_caps) |
152 | #define SNDRV_COMPRESS_SET_PARAMS _IOW('C', 0x12, struct snd_compr_params) |
153 | #define SNDRV_COMPRESS_GET_PARAMS _IOR('C', 0x13, struct snd_codec) |
154 | #define SNDRV_COMPRESS_SET_METADATA _IOW('C', 0x14,\ |
155 | struct snd_compr_metadata) |
156 | #define SNDRV_COMPRESS_GET_METADATA _IOWR('C', 0x15,\ |
157 | struct snd_compr_metadata) |
158 | #define SNDRV_COMPRESS_TSTAMP _IOR('C', 0x20, struct snd_compr_tstamp) |
159 | #define SNDRV_COMPRESS_AVAIL _IOR('C', 0x21, struct snd_compr_avail) |
160 | #define SNDRV_COMPRESS_PAUSE _IO('C', 0x30) |
161 | #define SNDRV_COMPRESS_RESUME _IO('C', 0x31) |
162 | #define SNDRV_COMPRESS_START _IO('C', 0x32) |
163 | #define SNDRV_COMPRESS_STOP _IO('C', 0x33) |
164 | #define SNDRV_COMPRESS_DRAIN _IO('C', 0x34) |
165 | #define SNDRV_COMPRESS_NEXT_TRACK _IO('C', 0x35) |
166 | #define SNDRV_COMPRESS_PARTIAL_DRAIN _IO('C', 0x36) |
167 | /* |
168 | * TODO |
169 | * 1. add mmap support |
170 | * |
171 | */ |
172 | #define SND_COMPR_TRIGGER_DRAIN 7 /*FIXME move this to pcm.h */ |
173 | #define SND_COMPR_TRIGGER_NEXT_TRACK 8 |
174 | #define SND_COMPR_TRIGGER_PARTIAL_DRAIN 9 |
175 | #endif |
176 | |