1772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/* 2772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * compress_offload.h - compress offload header definations 3772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 4772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * Copyright (C) 2011 Intel Corporation 5772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * Authors: Vinod Koul <vinod.koul@linux.intel.com> 6772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> 7772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 9772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * This program is free software; you can redistribute it and/or modify 10772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * it under the terms of the GNU General Public License as published by 11772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * the Free Software Foundation; version 2 of the License. 12772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 13772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * This program is distributed in the hope that it will be useful, but 14772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * WITHOUT ANY WARRANTY; without even the implied warranty of 15772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * General Public License for more details. 17772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 18772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * You should have received a copy of the GNU General Public License along 19772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * with this program; if not, write to the Free Software Foundation, Inc., 20772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 21772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 22772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 24772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 25772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#ifndef __COMPRESS_OFFLOAD_H 26772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define __COMPRESS_OFFLOAD_H 27772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 28772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#include <linux/types.h> 29772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#include <sound/asound.h> 30772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#include <sound/compress_params.h> 31772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 32772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 33772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 1, 2) 34772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 35772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * struct snd_compressed_buffer: compressed buffer 36772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @fragment_size: size of buffer fragment in bytes 37772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @fragments: number of such fragments 38772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 39772b7facf972926b14fe303d0348c200cb20a313Prashant Malanistruct snd_compressed_buffer { 40772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 fragment_size; 41772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 fragments; 42464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry} __attribute__((packed, aligned(4))); 43772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 44772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 45772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * struct snd_compr_params: compressed stream params 46772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @buffer: buffer description 47772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @codec: codec parameters 48772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @no_wake_mode: dont wake on fragment elapsed 49772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 50772b7facf972926b14fe303d0348c200cb20a313Prashant Malanistruct snd_compr_params { 51772b7facf972926b14fe303d0348c200cb20a313Prashant Malani struct snd_compressed_buffer buffer; 52772b7facf972926b14fe303d0348c200cb20a313Prashant Malani struct snd_codec codec; 53772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u8 no_wake_mode; 54464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry} __attribute__((packed, aligned(4))); 55772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 56772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 57772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * struct snd_compr_tstamp: timestamp descriptor 58772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @byte_offset: Byte offset in ring buffer to DSP 59772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @copied_total: Total number of bytes copied from/to ring buffer to/by DSP 60772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @pcm_frames: Frames decoded or encoded by DSP. This field will evolve by 61772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * large steps and should only be used to monitor encoding/decoding 62772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * progress. It shall not be used for timing estimates. 63772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @pcm_io_frames: Frames rendered or received by DSP into a mixer or an audio 64772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * output/input. This field should be used for A/V sync or time estimates. 65772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @sampling_rate: sampling rate of audio 66772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 67772b7facf972926b14fe303d0348c200cb20a313Prashant Malanistruct snd_compr_tstamp { 68772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 byte_offset; 69464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry __u64 copied_total; 70772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 pcm_frames; 71772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 pcm_io_frames; 72772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 sampling_rate; 73772b7facf972926b14fe303d0348c200cb20a313Prashant Malani uint64_t timestamp; 74464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry} __attribute__((packed, aligned(4))); 75772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 76772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 77772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * struct snd_compr_avail: avail descriptor 78772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @avail: Number of bytes available in ring buffer for writing/reading 79772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @tstamp: timestamp infomation 80772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 81772b7facf972926b14fe303d0348c200cb20a313Prashant Malanistruct snd_compr_avail { 82772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u64 avail; 83772b7facf972926b14fe303d0348c200cb20a313Prashant Malani struct snd_compr_tstamp tstamp; 84464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry} __attribute__((packed, aligned(4))); 85772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 86772b7facf972926b14fe303d0348c200cb20a313Prashant Malanienum snd_compr_direction { 87772b7facf972926b14fe303d0348c200cb20a313Prashant Malani SND_COMPRESS_PLAYBACK = 0, 88772b7facf972926b14fe303d0348c200cb20a313Prashant Malani SND_COMPRESS_CAPTURE 89772b7facf972926b14fe303d0348c200cb20a313Prashant Malani}; 90772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 91772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 92772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * struct snd_compr_caps: caps descriptor 93772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @codecs: pointer to array of codecs 94772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @direction: direction supported. Of type snd_compr_direction 95772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @min_fragment_size: minimum fragment supported by DSP 96772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @max_fragment_size: maximum fragment supported by DSP 97772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @min_fragments: min fragments supported by DSP 98772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @max_fragments: max fragments supported by DSP 99772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @num_codecs: number of codecs supported 100772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @reserved: reserved field 101772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 102772b7facf972926b14fe303d0348c200cb20a313Prashant Malanistruct snd_compr_caps { 103772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 num_codecs; 104772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 direction; 105772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 min_fragment_size; 106772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 max_fragment_size; 107772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 min_fragments; 108772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 max_fragments; 109772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 codecs[MAX_NUM_CODECS]; 110772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 reserved[11]; 111464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry} __attribute__((packed, aligned(4))); 112772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 113772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 114772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * struct snd_compr_codec_caps: query capability of codec 115772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @codec: codec for which capability is queried 116772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @num_descriptors: number of codec descriptors 117772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @descriptor: array of codec capability descriptor 118772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 119772b7facf972926b14fe303d0348c200cb20a313Prashant Malanistruct snd_compr_codec_caps { 120772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 codec; 121772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 num_descriptors; 122772b7facf972926b14fe303d0348c200cb20a313Prashant Malani struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS]; 123464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry} __attribute__((packed, aligned(4))); 124772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 125772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 126772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * struct snd_compr_audio_info: compressed input audio information 127772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @frame_size: legth of the encoded frame with valid data 128772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @reserved: reserved for furture use 129772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 130772b7facf972926b14fe303d0348c200cb20a313Prashant Malanistruct snd_compr_audio_info { 131772b7facf972926b14fe303d0348c200cb20a313Prashant Malani uint32_t frame_size; 132772b7facf972926b14fe303d0348c200cb20a313Prashant Malani uint32_t reserved[15]; 133464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry} __attribute__((packed, aligned(4))); 134772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 135772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 136772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @SNDRV_COMPRESS_ENCODER_PADDING: no of samples appended by the encoder at the 137772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * end of the track 138772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @SNDRV_COMPRESS_ENCODER_DELAY: no of samples inserted by the encoder at the 139772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * beginning of the track 140772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 141772b7facf972926b14fe303d0348c200cb20a313Prashant Malanienum { 142772b7facf972926b14fe303d0348c200cb20a313Prashant Malani SNDRV_COMPRESS_ENCODER_PADDING = 1, 143772b7facf972926b14fe303d0348c200cb20a313Prashant Malani SNDRV_COMPRESS_ENCODER_DELAY = 2, 144772b7facf972926b14fe303d0348c200cb20a313Prashant Malani SNDRV_COMPRESS_MIN_BLK_SIZE = 3, 145772b7facf972926b14fe303d0348c200cb20a313Prashant Malani SNDRV_COMPRESS_MAX_BLK_SIZE = 4, 146772b7facf972926b14fe303d0348c200cb20a313Prashant Malani}; 147772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 148772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 149772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * struct snd_compr_metadata: compressed stream metadata 150772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @key: key id 151772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * @value: key value 152772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 153772b7facf972926b14fe303d0348c200cb20a313Prashant Malanistruct snd_compr_metadata { 154772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 key; 155772b7facf972926b14fe303d0348c200cb20a313Prashant Malani __u32 value[8]; 156464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry} __attribute__((packed, aligned(4))); 157772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 158772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/** 159772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * compress path ioctl definitions 160772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_GET_CAPS: Query capability of DSP 161772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_GET_CODEC_CAPS: Query capability of a codec 162772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_SET_PARAMS: Set codec and stream parameters 163772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * Note: only codec params can be changed runtime and stream params cant be 164772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_GET_PARAMS: Query codec params 165772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_TSTAMP: get the current timestamp value 166772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_AVAIL: get the current buffer avail value. 167772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * This also queries the tstamp properties 168772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_PAUSE: Pause the running stream 169772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_RESUME: resume a paused stream 170772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_START: Start a stream 171772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_STOP: stop a running stream, discarding ring buffer content 172772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * and the buffers currently with DSP 173772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_DRAIN: Play till end of buffers and stop after that 174464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry * SNDRV_COMPRESS_SET_NEXT_TRACK_PARAM: send codec specific data for the next 175464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry * track in gapless 176772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * SNDRV_COMPRESS_IOCTL_VERSION: Query the API version 177772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 178772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_IOCTL_VERSION _IOR('C', 0x00, int) 179772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_GET_CAPS _IOWR('C', 0x10, struct snd_compr_caps) 180772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_GET_CODEC_CAPS _IOWR('C', 0x11,\ 181772b7facf972926b14fe303d0348c200cb20a313Prashant Malani struct snd_compr_codec_caps) 182772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_SET_PARAMS _IOW('C', 0x12, struct snd_compr_params) 183772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_GET_PARAMS _IOR('C', 0x13, struct snd_codec) 184772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_SET_METADATA _IOW('C', 0x14,\ 185772b7facf972926b14fe303d0348c200cb20a313Prashant Malani struct snd_compr_metadata) 186772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_GET_METADATA _IOWR('C', 0x15,\ 187772b7facf972926b14fe303d0348c200cb20a313Prashant Malani struct snd_compr_metadata) 188772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_TSTAMP _IOR('C', 0x20, struct snd_compr_tstamp) 189772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_AVAIL _IOR('C', 0x21, struct snd_compr_avail) 190772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_PAUSE _IO('C', 0x30) 191772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_RESUME _IO('C', 0x31) 192772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_START _IO('C', 0x32) 193772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_STOP _IO('C', 0x33) 194772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_DRAIN _IO('C', 0x34) 195772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_NEXT_TRACK _IO('C', 0x35) 196772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_PARTIAL_DRAIN _IO('C', 0x36) 197772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_SET_NEXT_TRACK_PARAM\ 198464aadab995fc0ef1616362ad795e9a3ba6c4f16Tom Cherry _IOW('C', 0x80, union snd_codec_options) 199772b7facf972926b14fe303d0348c200cb20a313Prashant Malani/* 200772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * TODO 201772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 1. add mmap support 202772b7facf972926b14fe303d0348c200cb20a313Prashant Malani * 203772b7facf972926b14fe303d0348c200cb20a313Prashant Malani */ 204772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SND_COMPR_TRIGGER_DRAIN 7 /*FIXME move this to pcm.h */ 205772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SND_COMPR_TRIGGER_NEXT_TRACK 8 206772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SND_COMPR_TRIGGER_PARTIAL_DRAIN 9 207772b7facf972926b14fe303d0348c200cb20a313Prashant Malani 208772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#define SNDRV_COMPRESS_METADATA_MODE _IOW('C', 0x99, bool) 209772b7facf972926b14fe303d0348c200cb20a313Prashant Malani#endif 210