Merge pull request #34 in PROCESSOR-SDK/edma3_lld from review_edma_release_prasad...
[keystone-rtos/edma3_lld.git] / examples / edma3_driver / src / sample.h
1 /*
2 * bios6_edma3_drv_sample.h
3 *
4 * Header file for the Demo application for the EDMA3 Driver.
5 *
6 * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
7 *
8 *
9 *  Redistribution and use in source and binary forms, with or without
10 *  modification, are permitted provided that the following conditions
11 *  are met:
12 *
13 *    Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 *
16 *    Redistributions in binary form must reproduce the above copyright
17 *    notice, this list of conditions and the following disclaimer in the
18 *    documentation and/or other materials provided with the
19 *    distribution.
20 *
21 *    Neither the name of Texas Instruments Incorporated nor the names of
22 *    its contributors may be used to endorse or promote products derived
23 *    from this software without specific prior written permission.
24 *
25 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 */
39 #ifndef _SAMPLE_H_
40 #define _SAMPLE_H_
42 #include <stdio.h>
43 #include <xdc/std.h>
44 #include <ti/sysbios/knl/Task.h>
46 /* Include EDMA3 Driver */
47 #include <ti/sdo/edma3/drv/sample/bios6_edma3_drv_sample.h>
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
53     /* MAX ACOUNT */
54 #define MAX_ACOUNT                  (64u)
55     /* MAX BCOUNT */
56 #define MAX_BCOUNT                  (1u)
57     /* MAX CCOUNT */
58 #define MAX_CCOUNT                  (1u)
59     /**
60     * Buffers (src and dest) are needed for mem-2-mem data transfers.
61     * This define is for the MAXIMUM size and hence the maximum data
62     * which could be transferred using the sample test cases below.
63     */
64 #define MAX_BUFFER_SIZE             (MAX_ACOUNT * MAX_BCOUNT * MAX_CCOUNT)
66 #ifndef BUILD_TDA2XX_MPU
67     /* To enable/disable the cache .*/
68 #define EDMA3_ENABLE_DCACHE                 (1u)
69 #endif
71     /* OPT Field specific defines */
72 #define OPT_SYNCDIM_SHIFT                   (0x00000002u)
73 #define OPT_TCC_MASK                        (0x0003F000u)
74 #define OPT_TCC_SHIFT                       (0x0000000Cu)
75 #define OPT_ITCINTEN_SHIFT                  (0x00000015u)
76 #define OPT_TCINTEN_SHIFT                   (0x00000014u)
78     extern void callback1 (uint32_t tcc, EDMA3_RM_TccStatus status,
79         void *appData);
81     extern void callback2 (uint32_t tcc, EDMA3_RM_TccStatus status,
82         void *appData);
84     extern signed char*  getGlobalAddr(signed char* addr);
85     /* Flag variable to check transfer completion on channel 1 */
86     extern volatile short irqRaised1;
87     /* Flag variable to check transfer completion on channel 2 */
88     extern volatile short irqRaised2;
90 #define MAX_NUM_EDMA_INSTANCES  5
92     /* Define to verify the default RM config.
93     * Additional configuration required. Update the 
94     * gblCfgReqdArray[] to reflect the master/slave config.
95     * In the case of multiple instances default configuration
96     * may require more than one cores other than core 0 to be master. 
97     * #define EDMA3_DRV_USE_DEF_RM_CFG 
98     */
100 #define GLOBAL_ADDR(addr) (getGlobalAddr(addr))
102     /**
103     *  \brief   EDMA3 mem-to-mem data copy test case, using a DMA channel.
104     *
105     *
106     *  \param  acnt        [IN]      Number of bytes in an array
107     *  \param  bcnt        [IN]      Number of arrays in a frame
108     *  \param  ccnt        [IN]      Number of frames in a block
109     *  \param  syncType    [IN]      Synchronization type (A/AB Sync)
110     *
111     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
112     */
113     EDMA3_DRV_Result edma3_test(
114         EDMA3_DRV_Handle hEdma,
115         uint32_t acnt,
116         uint32_t bcnt,
117         uint32_t ccnt,
118         EDMA3_DRV_SyncType syncType);
122     /**
123     *  \brief   EDMA3 mem-to-mem data copy test case, using two DMA
124     *              channels, linked to each other.
125     *
126     *  \param  acnt        [IN]      Number of bytes in an array
127     *  \param  bcnt        [IN]      Number of arrays in a frame
128     *  \param  ccnt        [IN]      Number of frames in a block
129     *  \param  syncType    [IN]      Synchronization type (A/AB Sync)
130     *
131     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
132     */
133     EDMA3_DRV_Result edma3_test_with_link(
134         EDMA3_DRV_Handle hEdma,
135         uint32_t acnt,
136         uint32_t bcnt,
137         uint32_t ccnt,
138         EDMA3_DRV_SyncType syncType);
142     /**
143     *  \brief   EDMA3 mem-to-mem data copy test case, using a QDMA channel.
144     *
145     *
146     *  \param  acnt        [IN]      Number of bytes in an array
147     *  \param  bcnt        [IN]      Number of arrays in a frame
148     *  \param  ccnt        [IN]      Number of frames in a block
149     *  \param  syncType    [IN]      Synchronization type (A/AB Sync)
150     *
151     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
152     */
153     EDMA3_DRV_Result qdma_test(
154         EDMA3_DRV_Handle hEdma,
155         uint32_t acnt,
156         uint32_t bcnt,
157         uint32_t ccnt,
158         EDMA3_DRV_SyncType syncType);
162     /**
163     *  \brief   EDMA3 misc test cases.
164     *              This test case will read/write to some CC registers.
165     *
166     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
167     */
168     EDMA3_DRV_Result edma3_misc_test(EDMA3_DRV_Handle hEdma);
171     /**
172     *  \brief   EDMA3 mem-to-mem data copy test case, using a QDMA channel,
173     *              linked to another LINK channel.
174     *
175     *  \param  acnt        [IN]      Number of bytes in an array
176     *  \param  bcnt        [IN]      Number of arrays in a frame
177     *  \param  ccnt        [IN]      Number of frames in a block
178     *  \param  syncType    [IN]      Synchronization type (A/AB Sync)
179     *
180     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
181     */
182     EDMA3_DRV_Result qdma_test_with_link(
183         EDMA3_DRV_Handle hEdma,
184         uint32_t acnt,
185         uint32_t bcnt,
186         uint32_t ccnt,
187         EDMA3_DRV_SyncType syncType);
190     /**
191     *  \brief   EDMA3 mem-to-mem data copy test case, using two DMA channels,
192     *              chained to each other.
193     *
194     *  \param  acnt        [IN]      Number of bytes in an array
195     *  \param  bcnt        [IN]      Number of arrays in a frame
196     *  \param  ccnt        [IN]      Number of frames in a block
197     *  \param  syncType    [IN]      Synchronization type (A/AB Sync)
198     *
199     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
200     */
201     EDMA3_DRV_Result edma3_test_with_chaining(
202         EDMA3_DRV_Handle hEdma,
203         uint32_t acnt,
204         uint32_t bcnt,
205         uint32_t ccnt,
206         EDMA3_DRV_SyncType syncType);
209     /**
210     *  \brief   EDMA3 mem-to-mem data copy test case, using a DMA channel.
211     *              This test case doesnot rely on the callback mechanism.
212     *              Instead, it Polls the IPR register to check the transfer
213     *              completion status.
214     *
215     *  \param  acnt        [IN]      Number of bytes in an array
216     *  \param  bcnt        [IN]      Number of arrays in a frame
217     *  \param  ccnt        [IN]      Number of frames in a block
218     *  \param  syncType    [IN]      Synchronization type (A/AB Sync)
219     *
220     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
221     */
222     EDMA3_DRV_Result edma3_test_poll_mode(
223         EDMA3_DRV_Handle hEdma,
224         uint32_t acnt,
225         uint32_t bcnt,
226         uint32_t ccnt,
227         EDMA3_DRV_SyncType syncType);
229     /**
230     *  \brief   EDMA3 mem-to-mem data copy test case with user requested paRAMId
231     *           using a DMA channel.
232     *           This test case doesnot rely on the callback mechanism.
233     *           Instead, it Polls the IPR register to check the transfer
234     *           completion status.
235     *
236     *  \param  edmaInstance [IN]    EDMA3 Instance number
237     *  \param  acnt        [IN]      Number of bytes in an array
238     *  \param  bcnt        [IN]      Number of arrays in a frame
239     *  \param  ccnt        [IN]      Number of frames in a block
240     *  \param  syncType    [IN]      Synchronization type (A/AB Sync)
241     *
242     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
243     */
244     EDMA3_DRV_Result edma3_test_user_req_paRAMId(
245         EDMA3_DRV_Handle hEdma,
246         uint32_t edmaInstance,
247         uint32_t acnt,
248         uint32_t bcnt,
249         uint32_t ccnt,
250         EDMA3_DRV_SyncType syncType);
252     /**
253     *  \brief   EDMA3 ping-pong based data copy test case, using a DMA and
254     *              a link channel.
255     *
256     *  \return  EDMA3_DRV_SOK or EDMA3_DRV Error Code
257     */
258     EDMA3_DRV_Result edma3_test_ping_pong_mode(EDMA3_DRV_Handle hEdma);
260 #ifdef __cplusplus
262 #endif /* extern "C" */
264 #endif  /* _SAMPLE_H_ */