6a1d0cf1cb56bcde902868b5cba13178e3bb6258
[linux-3.10.git] / sound / soc / tegra / tegra_offload.h
1 /*
2  * tegra_offload.h - Definitions for Tegra offload platform driver interface
3  *
4  * Author: Sumit Bhattacharya <sumitb@nvidia.com>
5  * Copyright (c) 2014, NVIDIA CORPORATION.  All rights reserved.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * version 2 as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  */
16
17 #ifndef __TEGRA_OFFLOAD_H__
18 #define __TEGRA_OFFLOAD_H__
19
20 struct tegra_offload_dma_params {
21         unsigned long   addr;
22         unsigned long   width;
23         unsigned long   req_sel;
24         unsigned long   max_burst;
25 };
26
27 struct tegra_offload_mem {
28         struct device   *dev;
29         unsigned char   *virt_addr;
30         dma_addr_t      phys_addr;
31         size_t          bytes;
32 };
33
34 struct tegra_offload_pcm_params {
35         int                             rate;
36         int                             channels;
37         int                             bits_per_sample;
38         int                             buffer_size;    /* bytes */
39         int                             period_size;    /* bytes */
40         struct tegra_offload_mem        source_buf;
41         struct tegra_offload_dma_params dma_params;
42         void    (*period_elapsed_cb)(void *args, unsigned int is_eos);
43         void    *period_elapsed_args;
44 };
45
46 struct tegra_offload_compr_params {
47         unsigned int                    codec_type; /* SND_AUDIOCODEC_* type */
48         int                             rate;
49         int                             channels;
50         int                             bits_per_sample;
51         int                             fragment_size;  /* bytes */
52         int                             fragments;
53         struct tegra_offload_dma_params dma_params;
54         void    (*fragments_elapsed_cb)(void *args, unsigned int is_eos);
55         void    *fragments_elapsed_args;
56 };
57
58 struct tegra_offload_pcm_ops {
59         int     (*stream_open)(int *id);
60         void    (*stream_close)(int id);
61         int     (*set_stream_params)(int id,
62                         struct tegra_offload_pcm_params *params);
63         int     (*set_stream_state)(int id, int state);
64         size_t  (*get_stream_position)(int id);
65         void    (*data_ready)(int id, int bytes);
66 };
67
68 struct tegra_offload_compr_ops {
69         int     (*stream_open)(int *id);
70         void    (*stream_close)(int id);
71         int     (*set_stream_params)(int id,
72                         struct tegra_offload_compr_params *params);
73         int     (*set_stream_state)(int id, int state);
74         int     (*get_stream_position)(int id, struct snd_compr_tstamp *tstamp);
75         void    (*data_ready)(int id, int bytes);
76         int     (*write)(int id, char __user *buf, int bytes);
77         int     (*get_caps)(struct snd_compr_caps *caps);
78         int     (*get_codec_caps)(struct snd_compr_codec_caps *codec);
79         int     (*set_stream_volume)(int id, int left, int right);
80 };
81
82 struct tegra_offload_device_ops {
83         int     (*set_hw_rate)(int rate);
84         int     (*alloc_shared_mem)(struct tegra_offload_mem *mem, int bytes);
85         void    (*free_shared_mem)(struct tegra_offload_mem *mem);
86 };
87
88 struct tegra_offload_ops {
89         struct tegra_offload_device_ops device_ops;
90         struct tegra_offload_pcm_ops    pcm_ops;
91         struct tegra_offload_compr_ops  compr_ops;
92 };
93
94 int tegra_register_offload_ops(struct tegra_offload_ops *ops);
95 #endif