Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  *  compress_offload.h - compress offload header definations
0004  *
0005  *  Copyright (C) 2011 Intel Corporation
0006  *  Authors:    Vinod Koul <vinod.koul@linux.intel.com>
0007  *      Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
0008  *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0009  *
0010  *  This program is free software; you can redistribute it and/or modify
0011  *  it under the terms of the GNU General Public License as published by
0012  *  the Free Software Foundation; version 2 of the License.
0013  *
0014  *  This program is distributed in the hope that it will be useful, but
0015  *  WITHOUT ANY WARRANTY; without even the implied warranty of
0016  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0017  *  General Public License for more details.
0018  *
0019  *  You should have received a copy of the GNU General Public License along
0020  *  with this program; if not, write to the Free Software Foundation, Inc.,
0021  *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
0022  *
0023  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0024  *
0025  */
0026 #ifndef __COMPRESS_OFFLOAD_H
0027 #define __COMPRESS_OFFLOAD_H
0028 
0029 #include <linux/types.h>
0030 #include <sound/asound.h>
0031 #include <sound/compress_params.h>
0032 
0033 
0034 #define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 2, 0)
0035 /**
0036  * struct snd_compressed_buffer - compressed buffer
0037  * @fragment_size: size of buffer fragment in bytes
0038  * @fragments: number of such fragments
0039  */
0040 struct snd_compressed_buffer {
0041     __u32 fragment_size;
0042     __u32 fragments;
0043 } __attribute__((packed, aligned(4)));
0044 
0045 /**
0046  * struct snd_compr_params - compressed stream params
0047  * @buffer: buffer description
0048  * @codec: codec parameters
0049  * @no_wake_mode: dont wake on fragment elapsed
0050  */
0051 struct snd_compr_params {
0052     struct snd_compressed_buffer buffer;
0053     struct snd_codec codec;
0054     __u8 no_wake_mode;
0055 } __attribute__((packed, aligned(4)));
0056 
0057 /**
0058  * struct snd_compr_tstamp - timestamp descriptor
0059  * @byte_offset: Byte offset in ring buffer to DSP
0060  * @copied_total: Total number of bytes copied from/to ring buffer to/by DSP
0061  * @pcm_frames: Frames decoded or encoded by DSP. This field will evolve by
0062  *  large steps and should only be used to monitor encoding/decoding
0063  *  progress. It shall not be used for timing estimates.
0064  * @pcm_io_frames: Frames rendered or received by DSP into a mixer or an audio
0065  * output/input. This field should be used for A/V sync or time estimates.
0066  * @sampling_rate: sampling rate of audio
0067  */
0068 struct snd_compr_tstamp {
0069     __u32 byte_offset;
0070     __u32 copied_total;
0071     __u32 pcm_frames;
0072     __u32 pcm_io_frames;
0073     __u32 sampling_rate;
0074 } __attribute__((packed, aligned(4)));
0075 
0076 /**
0077  * struct snd_compr_avail - avail descriptor
0078  * @avail: Number of bytes available in ring buffer for writing/reading
0079  * @tstamp: timestamp information
0080  */
0081 struct snd_compr_avail {
0082     __u64 avail;
0083     struct snd_compr_tstamp tstamp;
0084 } __attribute__((packed, aligned(4)));
0085 
0086 enum snd_compr_direction {
0087     SND_COMPRESS_PLAYBACK = 0,
0088     SND_COMPRESS_CAPTURE
0089 };
0090 
0091 /**
0092  * struct snd_compr_caps - caps descriptor
0093  * @codecs: pointer to array of codecs
0094  * @direction: direction supported. Of type snd_compr_direction
0095  * @min_fragment_size: minimum fragment supported by DSP
0096  * @max_fragment_size: maximum fragment supported by DSP
0097  * @min_fragments: min fragments supported by DSP
0098  * @max_fragments: max fragments supported by DSP
0099  * @num_codecs: number of codecs supported
0100  * @reserved: reserved field
0101  */
0102 struct snd_compr_caps {
0103     __u32 num_codecs;
0104     __u32 direction;
0105     __u32 min_fragment_size;
0106     __u32 max_fragment_size;
0107     __u32 min_fragments;
0108     __u32 max_fragments;
0109     __u32 codecs[MAX_NUM_CODECS];
0110     __u32 reserved[11];
0111 } __attribute__((packed, aligned(4)));
0112 
0113 /**
0114  * struct snd_compr_codec_caps - query capability of codec
0115  * @codec: codec for which capability is queried
0116  * @num_descriptors: number of codec descriptors
0117  * @descriptor: array of codec capability descriptor
0118  */
0119 struct snd_compr_codec_caps {
0120     __u32 codec;
0121     __u32 num_descriptors;
0122     struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS];
0123 } __attribute__((packed, aligned(4)));
0124 
0125 /**
0126  * enum sndrv_compress_encoder - encoder metadata key
0127  * @SNDRV_COMPRESS_ENCODER_PADDING: no of samples appended by the encoder at the
0128  * end of the track
0129  * @SNDRV_COMPRESS_ENCODER_DELAY: no of samples inserted by the encoder at the
0130  * beginning of the track
0131  */
0132 enum sndrv_compress_encoder {
0133     SNDRV_COMPRESS_ENCODER_PADDING = 1,
0134     SNDRV_COMPRESS_ENCODER_DELAY = 2,
0135 };
0136 
0137 /**
0138  * struct snd_compr_metadata - compressed stream metadata
0139  * @key: key id
0140  * @value: key value
0141  */
0142 struct snd_compr_metadata {
0143      __u32 key;
0144      __u32 value[8];
0145 } __attribute__((packed, aligned(4)));
0146 
0147 /*
0148  * compress path ioctl definitions
0149  * SNDRV_COMPRESS_GET_CAPS: Query capability of DSP
0150  * SNDRV_COMPRESS_GET_CODEC_CAPS: Query capability of a codec
0151  * SNDRV_COMPRESS_SET_PARAMS: Set codec and stream parameters
0152  * Note: only codec params can be changed runtime and stream params cant be
0153  * SNDRV_COMPRESS_GET_PARAMS: Query codec params
0154  * SNDRV_COMPRESS_TSTAMP: get the current timestamp value
0155  * SNDRV_COMPRESS_AVAIL: get the current buffer avail value.
0156  * This also queries the tstamp properties
0157  * SNDRV_COMPRESS_PAUSE: Pause the running stream
0158  * SNDRV_COMPRESS_RESUME: resume a paused stream
0159  * SNDRV_COMPRESS_START: Start a stream
0160  * SNDRV_COMPRESS_STOP: stop a running stream, discarding ring buffer content
0161  * and the buffers currently with DSP
0162  * SNDRV_COMPRESS_DRAIN: Play till end of buffers and stop after that
0163  * SNDRV_COMPRESS_IOCTL_VERSION: Query the API version
0164  */
0165 #define SNDRV_COMPRESS_IOCTL_VERSION    _IOR('C', 0x00, int)
0166 #define SNDRV_COMPRESS_GET_CAPS     _IOWR('C', 0x10, struct snd_compr_caps)
0167 #define SNDRV_COMPRESS_GET_CODEC_CAPS   _IOWR('C', 0x11,\
0168                         struct snd_compr_codec_caps)
0169 #define SNDRV_COMPRESS_SET_PARAMS   _IOW('C', 0x12, struct snd_compr_params)
0170 #define SNDRV_COMPRESS_GET_PARAMS   _IOR('C', 0x13, struct snd_codec)
0171 #define SNDRV_COMPRESS_SET_METADATA _IOW('C', 0x14,\
0172                          struct snd_compr_metadata)
0173 #define SNDRV_COMPRESS_GET_METADATA _IOWR('C', 0x15,\
0174                          struct snd_compr_metadata)
0175 #define SNDRV_COMPRESS_TSTAMP       _IOR('C', 0x20, struct snd_compr_tstamp)
0176 #define SNDRV_COMPRESS_AVAIL        _IOR('C', 0x21, struct snd_compr_avail)
0177 #define SNDRV_COMPRESS_PAUSE        _IO('C', 0x30)
0178 #define SNDRV_COMPRESS_RESUME       _IO('C', 0x31)
0179 #define SNDRV_COMPRESS_START        _IO('C', 0x32)
0180 #define SNDRV_COMPRESS_STOP     _IO('C', 0x33)
0181 #define SNDRV_COMPRESS_DRAIN        _IO('C', 0x34)
0182 #define SNDRV_COMPRESS_NEXT_TRACK   _IO('C', 0x35)
0183 #define SNDRV_COMPRESS_PARTIAL_DRAIN    _IO('C', 0x36)
0184 /*
0185  * TODO
0186  * 1. add mmap support
0187  *
0188  */
0189 #define SND_COMPR_TRIGGER_DRAIN 7 /*FIXME move this to pcm.h */
0190 #define SND_COMPR_TRIGGER_NEXT_TRACK 8
0191 #define SND_COMPR_TRIGGER_PARTIAL_DRAIN 9
0192 #endif