root/include/uapi/sound/compress_offload.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */