1 /*******************************************************************************
2 * Copyright (C) 2018 Cadence Design Systems, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 * "Software"), to use this Software with Cadence processor cores only and
7 * not with any other processors and platforms, subject to
8 * the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included
11 * in all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
17 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
18 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
19 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 
21 ******************************************************************************/
22 
23 
24 /* ...number of max input buffers */
25 #define XAF_MAX_INBUFS                      2
26 #define XAF_INBUF_SIZE                      8192
27 
28 typedef enum {
29     XAF_DECODER         = 0,
30     XAF_ENCODER         = 1,
31     XAF_MIXER           = 2,
32     XAF_PRE_PROC        = 3,
33     XAF_POST_PROC       = 4,
34 } xaf_comp_type;
35 
36 typedef enum {
37     XAF_STARTING        = 0,
38     XAF_INIT_DONE       = 1,
39     XAF_NEED_INPUT      = 2,
40     XAF_OUTPUT_READY    = 3,
41     XAF_EXEC_DONE       = 4,
42 } xaf_comp_status;
43 
44 typedef enum {
45     XAF_START_FLAG          = 1,
46     XAF_EXEC_FLAG           = 2,
47     XAF_INPUT_OVER_FLAG     = 3,
48     XAF_INPUT_READY_FLAG    = 4,
49     XAF_NEED_OUTPUT_FLAG    = 5,
50 } xaf_comp_flag;
51 
52 typedef enum {
53     XAF_NO_ERROR        =  0,
54     XAF_PTR_ERROR       = -1,
55     XAF_INVALID_VALUE   = -2,
56     XAF_ROUTING_ERROR   = -3,
57     /*XAF_XOS_ERROR       = -4,*/
58     XAF_API_ERR         = -5,
59 } XAF_ERR_CODE;
60 
61 typedef enum {
62     XAF_MEM_ID_DEV  = 0,
63     XAF_MEM_ID_COMP = 1,
64 } XAF_MEM_ID;
65 
66 /* structure for component memory sizes */
67 typedef struct xaf_mem_size_s{
68     u32 persist;
69     u32 scratch;
70     u32 input;
71     u32 output;
72 }xaf_mem_size_t;
73 
74 /* structure for host-side utility handles */
75 typedef struct xaf_ap_utils_s{
76   int            xf_cfg_remote_ipc_pool_size;
77   xaf_mem_size_t mem_size;
78 }xaf_ap_utils_t;
79 
80 typedef struct xaf_format_s {
81     u32             sample_rate;
82     u32             channels;
83     u32             pcm_width;
84     u32             input_length;
85     u32             output_length;
86 } xaf_format_t;
87 
88 #ifndef XAF_HOSTLESS
89 typedef struct xaf_info_s {
90     void *          buf;
91     u32             length;
92 } xaf_info_t;
93 #endif
94 
95 XAF_ERR_CODE xaf_adev_open(void **pp_adev, s32 audio_frmwk_buf_size, s32 audio_comp_buf_size, xaf_mem_malloc_fxn_t mm_malloc, xaf_mem_free_fxn_t mm_free);
96 XAF_ERR_CODE xaf_adev_close(void *adev_ptr, xaf_comp_flag flag);
97 
98 XAF_ERR_CODE xaf_comp_create(void* p_adev, void **p_comp, xf_id_t comp_id, u32 ninbuf, u32 noutbuf, void *pp_inbuf[], xaf_comp_type comp_type);
99 XAF_ERR_CODE xaf_comp_delete(void* p_comp);
100 XAF_ERR_CODE xaf_comp_set_config(void *p_comp, s32 num_param, s32 *p_param);
101 XAF_ERR_CODE xaf_comp_get_config(void *p_comp, s32 num_param, s32 *p_param);
102 XAF_ERR_CODE xaf_comp_process(void *p_adev, void *p_comp, void *p_buf, u32 length, xaf_comp_flag flag);
103 XAF_ERR_CODE xaf_connect(void *p_src, void *p_dest, s32 num_buf);
104 
105 /* Not available in this version yet.
106 XAF_ERR_CODE xaf_disconnect(xaf_comp_t *p_comp);
107 */
108 
109 XAF_ERR_CODE xaf_comp_get_status(void *p_adev, void *p_comp, xaf_comp_status *p_status, xaf_info_t *p_info);
110 
111 /* ...check null pointer */
112 #define XAF_CHK_PTR(ptr)                                     \
113 ({                                                          \
114     int __ret;                                              \
115                                                             \
116     if ((__ret = (int)(ptr)) == 0)                          \
117     {                                                       \
118         TRACE(ERROR, _x("Null pointer error: %d"), __ret);  \
119         return XAF_PTR_ERROR;                               \
120     }                                                       \
121     __ret;                                                  \
122 })
123 
124 /* ...check range */
125 #define XAF_CHK_RANGE(val, min, max)                         \
126 ({                                                          \
127     int __ret = val;                                        \
128                                                             \
129     if ((__ret < (int)min) || (__ret > (int)max))           \
130     {                                                       \
131         TRACE(ERROR, _x("Invalid value: %d"), __ret);       \
132         return XAF_INVALID_VALUE;                           \
133     }                                                       \
134     __ret;                                                  \
135 })
136 
137 
138 
139 
140