Added DRU trigger and event testcases
[processor-sdk/pdk.git] / packages / ti / drv / udma / unit_test / udma_ut / src / udma_test.h
1 /*
2  *  Copyright (c) Texas Instruments Incorporated 2018
3  *
4  *  Redistribution and use in source and binary forms, with or without
5  *  modification, are permitted provided that the following conditions
6  *  are met:
7  *
8  *    Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  *
11  *    Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the
14  *    distribution.
15  *
16  *    Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
33 /**
34  *  \file udma_test.h
35  *
36  *  \brief This file contains all the structures, macros, enums
37  *  used by the UDMA test application.
38  *
39  */
41 #ifndef UDMA_TEST_H_
42 #define UDMA_TEST_H_
44 /* ========================================================================== */
45 /*                             Include Files                                  */
46 /* ========================================================================== */
48 #include <stdint.h>
49 #include <stdio.h>
50 #include <string.h>
52 #include <ti/drv/udma/udma.h>
54 #include <ti/osal/SemaphoreP.h>
55 #include <ti/osal/TaskP.h>
56 #include <ti/drv/uart/UART.h>
57 #include <ti/drv/uart/UART_stdio.h>
58 #include <ti/drv/fvid2/fvid2.h>
59 #include <ti/drv/udma/examples/udma_apputils/udma_apputils.h>
61 #include "utils_mem.h"
62 #include "utils_prf.h"
63 #if defined (SOC_AM65XX)
64 #include "soc/am65xx/udma_test_soc.h"
65 #else
66 #include "soc/j721e/udma_test_soc.h"
67 #endif
69 #ifdef __cplusplus
70 extern "C" {
71 #endif
73 /* ========================================================================== */
74 /*                           Macros & Typedefs                                */
75 /* ========================================================================== */
77 /** \brief Log enable for example application. */
78 #define UdmaUtTrace                     (GT_INFO1 | GT_TraceState_Enable)
80 /* UART read timeout in msec */
81 #define UDMA_TEST_UART_TIMEOUT_MSEC     (10000U)
83 /* Application name string used in print statements */
84 #define APP_NAME                        "UDMA_TEST"
86 /* Default values */
87 #define UDMA_TEST_USE_DEF               (0xFAFAU)
88 #define UDMA_TEST_DEF_LOOP_CNT          (100U)
89 #define UDMA_TEST_DEF_QDEPTH            (1U)
90 #define UDMA_TEST_PERF_LOOP_CNT         (10000U)
91 #define UDMA_TEST_PERF_QDEPTH           (1U)
93 #define UDMA_TEST_DEF_ICNT0             (1000U)
94 #define UDMA_TEST_DEF_DICNT0            (1000U)
96 #define UDMA_TEST_PERF_ICNT0            (10000U)
97 #define UDMA_TEST_PERF_DICNT0           (10000U)
99 #define UDMA_TEST_PRINT_BUFSIZE         (0x4000U)
101 #define UDMA_TEST_MAX_TASKS             (10U)
102 #define UDMA_TEST_MAX_CH                (15U)
103 #define UDMA_TEST_MAX_QDEPTH            (5U)
105 #define UDMA_TEST_MAX_ICNT              (4U)
106 #define UDMA_TEST_MAX_DIM               (3U)
108 /* Defined the following so that it is easy to understand a particular config */
109 #define USE_DEF_LP_CNT                  (UDMA_TEST_USE_DEF)
110 #define USE_DEF_QDEPTH                  (UDMA_TEST_USE_DEF)
111 #define DEF_HEAP_ID                     (UTILS_MEM_HEAP_ID_DDR)
112 #define TEST_ENABLE                     (TRUE)
113 #define TEST_DISABLE                    (FALSE)
114 #define PRF_ENABLE                      (TRUE)
115 #define PRF_DISABLE                     (FALSE)
116 #define PRINT_ENABLE                    (TRUE)
117 #define PRINT_DISABLE                   (FALSE)
118 #define TIMEST_ENABLE                   (TRUE)
119 #define TIMEST_DISABLE                  (FALSE)
120 #define DATA_CHECK_ENABLE               (TRUE)
121 #define DATA_CHECK_DISABLE              (FALSE)
122 #define PACING_NONE                     (0U)
123 #define DEF_PACING                      (20U)
125 #define UDMA_TEST_RF_SOC_AM65XX         ((uint64_t) 0x00000001U)
126 #define UDMA_TEST_RF_SOC_J721E          ((uint64_t) 0x00000002U)
127 #define UDMA_TEST_RF_SOC_J7200          ((uint64_t) 0x00000004U)
128 #define UDMA_TEST_RF_SOC_ALL            ((uint64_t) 0xFFFFFFFFU)
130 #define UDMA_TEST_RF_CORE_MPU1_0        ((uint64_t)(((uint64_t) 0x0001U) << 32U))
131 #define UDMA_TEST_RF_CORE_MCU1_0        ((uint64_t)(((uint64_t) 0x0002U) << 32U))
132 #define UDMA_TEST_RF_CORE_MCU1_1        ((uint64_t)(((uint64_t) 0x0004U) << 32U))
133 #define UDMA_TEST_RF_CORE_MCU2_0        ((uint64_t)(((uint64_t) 0x0008U) << 32U))
134 #define UDMA_TEST_RF_CORE_MCU2_1        ((uint64_t)(((uint64_t) 0x0010U) << 32U))
135 #define UDMA_TEST_RF_CORE_MCU3_0        ((uint64_t)(((uint64_t) 0x0020U) << 32U))
136 #define UDMA_TEST_RF_CORE_MCU3_1        ((uint64_t)(((uint64_t) 0x0040U) << 32U))
137 #define UDMA_TEST_RF_CORE_C7X_1         ((uint64_t)(((uint64_t) 0x0080U) << 32U))
138 #define UDMA_TEST_RF_CORE_C66X_1        ((uint64_t)(((uint64_t) 0x0100U) << 32U))
139 #define UDMA_TEST_RF_CORE_C66X_2        ((uint64_t)(((uint64_t) 0x0200U) << 32U))
140 #define UDMA_TEST_RF_CORE_ALL           ((uint64_t)(((uint64_t) 0xFFFFU) << 32U))
141 #define UDMA_TEST_RF_CORE_MCU_ALL       (UDMA_TEST_RF_CORE_MCU1_0 | UDMA_TEST_RF_CORE_MCU1_1 | \
142                                          UDMA_TEST_RF_CORE_MCU2_0 | UDMA_TEST_RF_CORE_MCU2_1 | \
143                                          UDMA_TEST_RF_CORE_MCU3_0 | UDMA_TEST_RF_CORE_MCU3_1)
145 /* For future when we have dynamic coverage testcases */
146 #define UDMA_TEST_RF_CFG_DEF            ((uint64_t)(((uint64_t) 0x00001U) << 48U))
147 #define UDMA_TEST_RF_CFG_DYN            ((uint64_t)(((uint64_t) 0x00002U) << 48U))
149 /**
150  *  \brief Test types - based on this the different application flow will be
151  *  determined.
152  */
153 typedef enum
155     UDMA_TT_BLK_CPY,
156     UDMA_TT_DRU_DIRECT,
157     UDMA_TT_DRU_INDIRECT,
158     UDMA_TT_PDMA_UART,
159     UDMA_TT_PDMA_OSPI,
160     UDMA_TT_PDMA_MCSPI,
161     UDMA_TT_PDMA_MCASP,
162     UDMA_TT_PDMA_CRC,
163     UDMA_TT_PDMA_ADC,
164     UDMA_TT_MISC,
165     UDMA_TT_CUSTOM
166 } UdmaTestType;
168 /**
169  *  \brief Testcase types.
170  */
171 typedef enum
173     /* Category */
174     UDMA_TCT_SANITY     = 0x01U,
175     UDMA_TCT_REGRESSION = 0x02U,
176     UDMA_TCT_FULL       = 0x04U,
177     /* Adequacy */
178     UDMA_TCT_FUNCTIONAL  = 0x08U,
179     UDMA_TCT_STRESS      = 0x10U,
180     UDMA_TCT_NEGATIVE    = 0x20U,
181     UDMA_TCT_PERFORMANCE = 0x40U,
182     UDMA_TCT_MISC        = 0x80U,
183     UDMA_TCT_API         = 0x100U,
184     /* Used for Test parser dont use in test case */
185     UDMA_TCT_ALL = 0x1FFU
186 } UdmaTestCaseType;
188 /**
189  *  \brief Event types.
190  */
191 typedef enum
193     UDMA_TEST_EVENT_NONE,
194     /**< No events are used - use direct dequeue API to poll for completion */
195     UDMA_TEST_EVENT_INTR,
196     /**< Events with interrupt callback - use sempahore post for completion */
197     UDMA_TEST_EVENT_POLLED,
198     /**< Events with polled mode at IA - use IA status poll for completion */
199 } UdmaTestEventMode;
201 /**
202  *  UDMA UT TX param IDs.
203  */
204 typedef enum
206     UDMA_TEST_TXCH_PRMID_DEF,
207     UDMA_TEST_TXCH_PRMID_DMA_PRIORITY_HIGH,
208     UDMA_TEST_TXCH_PRMID_INVALID,
209 } UdmaTestTxChPrmId;
211 /**
212  *  UDMA UT RX parameter IDs.
213  */
214 typedef enum
216     UDMA_TEST_RXCH_PRMID_DEF,
217     UDMA_TEST_RXCH_PRMID_DMA_PRIORITY_HIGH,
218     UDMA_TEST_RXCH_PRMID_INVALID,
219 } UdmaTestRxChPrmId;
221 /**
222  *  UDMA UT UTC parameter IDs.
223  */
224 typedef enum
226     UDMA_TEST_UTCCH_PRMID_DEF,
227     UDMA_TEST_UTCCH_PRMID_DMA_PRIORITY_HIGH,
228     UDMA_TEST_UTCCH_PRMID_INVALID,
229 } UdmaTestUtcChPrmId;
231 /**
232  *  UDMA UT PDMA parameter IDs.
233  */
234 typedef enum
236     UDMA_TEST_PDMACH_PRMID_DEF,
237     UDMA_TEST_PDMACH_PRMID_ES_16BITS,
238     UDMA_TEST_PDMACH_PRMID_INVALID,
239 } UdmaTestPdmaChPrmId;
241 /**
242  *  UDMA UT channel param IDs.
243  */
244 typedef enum
246     UDMA_TEST_CH_PRMID_DEF,
247     UDMA_TEST_CH_PRMID_INTR_DEF,
248     UDMA_TEST_CH_PRMID_TRIGGER_GLOBAL0,
249     UDMA_TEST_CH_PRMID_TRIGGER_GLOBAL0_INTR,
250     UDMA_TEST_CH_PRMID_EVENTSIZE_ICNT1,
251     UDMA_TEST_CH_PRMID_EVENTSIZE_ICNT2,
252     UDMA_TEST_CH_PRMID_EVENTSIZE_ICNT3,
253     UDMA_TEST_CH_PRMID_DRU_DEF,
254     UDMA_TEST_CH_PRMID_DRU_INTR_DEF,
255     UDMA_TEST_CH_PRMID_DRU_TRIGGER_GLOBAL0,
256     UDMA_TEST_CH_PRMID_DRU_TRIGGER_GLOBAL0_INTR,
257     UDMA_TEST_CH_PRMID_DRU_EVENTSIZE_ICNT1,
258     UDMA_TEST_CH_PRMID_DRU_EVENTSIZE_ICNT2,
259     UDMA_TEST_CH_PRMID_DRU_EVENTSIZE_ICNT3,
260     UDMA_TEST_CH_PRMID_BLKCPY_HC_DEF,
261     UDMA_TEST_CH_PRMID_BLKCPY_HC_INTR_DEF,
262     UDMA_TEST_CH_PRMID_BLKCPY_UHC_DEF,
263     UDMA_TEST_CH_PRMID_BLKCPY_UHC_INTR_DEF,
264     UDMA_TEST_CH_PRMID_INVALID,
265 } UdmaTestChPrmId;
267 /**
268  *  UDMA UT ring param IDs.
269  */
270 typedef enum
272     UDMA_TEST_RING_PRMID_EVENT_NONE,
273     UDMA_TEST_RING_PRMID_EVENT_INTR,
274     UDMA_TEST_RING_PRMID_EVENT_POLLED,
275     UDMA_TEST_RING_PRMID_INVALID,
276 } UdmaTestRingPrmId;
278 /* ========================================================================== */
279 /*                         Structure Declarations                             */
280 /* ========================================================================== */
282 /* Forward declaration. */
283 typedef struct UdmaTestSystemCtrl_t UdmaTestSystemCtrl;
284 typedef struct UdmaTestParams_t     UdmaTestParams;
285 typedef struct UdmaTestTaskObj_t    UdmaTestTaskObj;
286 typedef struct UdmaTestObj_t        UdmaTestObj;
288 /** \brief Typedef for test case type function pointer */
289 typedef int32_t (*UdmaTestFxnPtr)(UdmaTestTaskObj *taskObj);
291 /**
292  *  \brief Test parameters for a TX channel.
293  */
294 typedef struct
296     UdmaTestTxChPrmId       txChPrmId;
297     /**< TX Channel parameter ID. */
298     Udma_ChTxPrms           txPrms;
299     /**< TX channel parameter */
300 } UdmaTestTxChPrm;
302 /**
303  *  \brief Test parameters for a RX channel.
304  */
305 typedef struct
307     UdmaTestRxChPrmId       rxChPrmId;
308     /**< RX Channel parameter ID. */
309     Udma_ChRxPrms           rxPrms;
310     /**< RX channel parameter */
311 } UdmaTestRxChPrm;
313 /**
314  *  \brief Test parameters for a UTC channel.
315  */
316 typedef struct
318     UdmaTestUtcChPrmId      utcChPrmId;
319     /**< UTC Channel parameter ID. */
320     Udma_ChUtcPrms          utcPrms;
321     /**< UTC channel parameter */
322 } UdmaTestUtcChPrm;
324 /**
325  *  \brief Test parameters for a PDMA channel.
326  */
327 typedef struct
329     UdmaTestPdmaChPrmId     pdmaChPrmId;
330     /**< PDMA Channel parameter ID. */
331     Udma_ChPdmaPrms         pdmaPrms;
332     /**< PDMA channel parameter */
333 } UdmaTestPdmaChPrm;
335 /**
336  *  \brief Test parameters for a channel.
337  */
338 typedef struct
340     UdmaTestChPrmId         chPrmId;
341     /**< Channel parameter ID. */
342     uint32_t                chType;
343     /**< UDMA channel type. */
344     uint32_t                utcId;
345     /**< UTC ID incase of DRU/external channel. */
346     uint32_t                eventMode;
347     /**< Use no event, event with interrupt or event with polled mode.
348      *   Refer #UdmaTestEventMode */
349     uint32_t                trigger;
350     /**< Global0 or Global 1 Trigger - refer \ref CSL_UdmapTrFlagsTrigger. */
351     uint32_t                eventSize;
352     /**< Refer \ref CSL_UdmapTrFlagsEventSize. */
353     uint32_t                triggerType;
354     /**< Refer \ref CSL_UdmapTrFlagsTriggerType. */
355     UdmaTestTxChPrmId       txPrmId;
356     /**< TX Channel parameter ID. */
357     UdmaTestRxChPrmId       rxPrmId;
358     /**< RX Channel parameter ID. */
359     UdmaTestUtcChPrmId      utcPrmId;
360     /**< UTC Channel parameter ID. */
361     UdmaTestPdmaChPrmId     pdmaPrmId;
362     /**< PDMA Channel parameter ID. */
363 } UdmaTestChPrm;
365 /**
366  *  \brief Test parameters for a ring.
367  */
368 typedef struct
370     UdmaTestRingPrmId       ringPrmId;
371     /**< Ring parameter ID. */
372     uint32_t                eventMode;
373     /**< Use no event, event with interrupt or event with polled mode.
374      *   Refer #UdmaTestEventMode */
375 } UdmaTestRingPrm;
377 /**
378  *  \brief Test case parameter structure.
379  */
380 struct UdmaTestParams_t
382     bool                    enableTest;
383     /**< Whether test case should be executed or not. */
384     uint32_t                tcId;
385     /**< Test case ID. */
386     char                   *tcName;
387     /**< Test case name. */
388     char                   *disableInfo;
389     /**< Reason string for disabling a test case. */
390     bool                    printEnable;
391     /**< Enable/disable print statements, used for stress testing. */
392     bool                    prfEnable;
393     /**< Enable performance prints. */
394     uint32_t                tcType;
395     /**< Type of testcase  - like BFT, stress etc... */
396     uint32_t                dcEnable;
397     /**< Enable/disable data check - used for performance. */
398     uint32_t                loopCnt;
399     /**< Loop count for test. */
401     uint32_t                numTasks;
402     /**< Number of tasks to test. */
403     uint32_t                testType[UDMA_TEST_MAX_TASKS];
404     /**< Type of test */
405     UdmaTestFxnPtr          testFxnPtr[UDMA_TEST_MAX_TASKS];
406     /**< Type of test case to run. */
407     uint32_t                pacingTime[UDMA_TEST_MAX_TASKS];
408     /**< Pacing Interval in ms. */
409     uint32_t                numCh[UDMA_TEST_MAX_TASKS];
410     /**< Number of channels per task to test. */
411     uint32_t                instId[UDMA_TEST_MAX_CH];
412     /**< NAVSS instance ID. */
413     UdmaTestChPrmId         chPrmId[UDMA_TEST_MAX_CH];
414     /**< Channel config IDs for all the tasks.
415      *   Task 0 channel configs will be first (0 to (numCh[0] - 1)),
416      *   (numCh[0] to (numCh[1] - 1)) and so on. */
417     uint32_t                qdepth[UDMA_TEST_MAX_CH];
418     /**< Queue depth. */
419     uint32_t                icnt[UDMA_TEST_MAX_CH][UDMA_TEST_MAX_ICNT];
420     /**< Source counts. */
421     uint32_t                dicnt[UDMA_TEST_MAX_CH][UDMA_TEST_MAX_ICNT];
422     /**< Destination counts. */
423     uint32_t                dim[UDMA_TEST_MAX_CH][UDMA_TEST_MAX_DIM];
424     /**< Source dims. */
425     uint32_t                ddim[UDMA_TEST_MAX_CH][UDMA_TEST_MAX_DIM];
426     /**< Destination dims. */
427     uint32_t                heapIdSrc[UDMA_TEST_MAX_CH];
428     /**< Heap ID to allocate source buffer. */
429     uint32_t                heapIdDest[UDMA_TEST_MAX_CH];
430     /**< Heap ID to allocate destination buffer. */
431     uint32_t                srcBufSize[UDMA_TEST_MAX_CH];
432     /**< Source buffer size to allocate. */
433     uint32_t                destBufSize[UDMA_TEST_MAX_CH];
434     /**< Destination buffer size to allocate. */
435     uint64_t                runFlag;
436     /**< Flag to indicate whether the test needs to be run on a particular
437      *   SOC, CORE and other configurations. */
438     UdmaTestRingPrmId       ringPrmId;
439     /**< Ring config ID. Applicable only for ring testcases */
441     /*
442      * Below variables are initialized in code and not in table!!
443      */
444     bool                    isRun;
445     /**< Flag to indicate whether the test case is run or not. */
446     int32_t                 testResult;
447     /**< Test result. */
448 };
450 /**
451  *  \brief Structure used for UDMA UT control parameters.
452  */
453 struct UdmaTestSystemCtrl_t
455     uint32_t    loopCnt;
456     /**< Default loop count. */
457     uint32_t    qdepth;
458     /**< Default queue depth for queue and dequeue operation. */
459     uint32_t    rtPrintEnable;
460     /**< Enables runtime remote prints like VENC underflow status etc. */
461 };
463 typedef struct UdmaTestChObj_t
465     int32_t                 chIdx;
467     struct Udma_ChObj       drvChObj;
468     struct Udma_EventObj    cqEventObj;
469     struct Udma_EventObj    tdCqEventObj;
470     struct Udma_EventObj    trEventObj;
472     Udma_ChHandle           chHandle;
473     Udma_EventHandle        cqEventHandle;
474     Udma_EventHandle        tdCqEventHandle;
475     Udma_EventHandle        trEventHandle;
477     Udma_EventPrms          trEventPrms;
479     Udma_DrvHandle          drvHandle;
480     uint32_t                instId;
481     SemaphoreP_Handle       transferDoneSem;
482     /**< Semaphore to indicate transfer completion */
484     uint32_t                queueCnt;
485     uint32_t                dequeueCnt;
487     uint8_t                 *fqRingMem;
488     uint8_t                 *cqRingMem;
489     uint8_t                 *tdCqRingMem;
490     uint8_t                 *trpdMem[UDMA_TEST_MAX_QDEPTH];
492     uint8_t                 *srcBuf;
493     uint8_t                 *destBuf[UDMA_TEST_MAX_QDEPTH];
495     const UdmaTestChPrm     *chPrms;
496     const Udma_ChTxPrms     *txPrms;
497     const Udma_ChRxPrms     *rxPrms;
498     const Udma_ChUtcPrms    *utcPrms;
499     const Udma_ChPdmaPrms   *pdmaPrms;
500     uint32_t                qdepth;
501     uint32_t                icnt[UDMA_TEST_MAX_ICNT];
502     uint32_t                dicnt[UDMA_TEST_MAX_ICNT];
503     uint32_t                dim[UDMA_TEST_MAX_DIM];
504     uint32_t                ddim[UDMA_TEST_MAX_DIM];
505     uint32_t                heapIdSrc;
506     uint32_t                heapIdDest;
507     uint32_t                srcBufSize;
508     uint32_t                destBufSize;
510     uint32_t                ringMemSize;
511     uint32_t                trpdSize;
512 } UdmaTestChObj;
514 /**
515  *  \brief Structure used for UDMA UT task object parameters.
516  */
517 struct UdmaTestTaskObj_t
519     UdmaTestParams         *testPrms;
520     /**< Pointer to test params for reference. */
521     uint32_t                testType;
522     UdmaTestFxnPtr          testFxnPtr;
523     uint32_t                pacingTime;
524     /**< Pacing Interval in ms. */
525     uint32_t                numCh;
526     UdmaTestChObj          *chObj[UDMA_TEST_MAX_CH];
527     uint32_t                traceMask;
528     int32_t                 testResult;
529     uint64_t                totalTransfer;
530     /**< Total bytes transferred */
531     uint32_t                durationMs;
532     /**< Time taken in ms */
533     uint64_t                mps;
534     /**< Mega bytes per second */
535     UdmaTestObj            *testObj;
536     uint32_t                taskId;
537     TaskP_Handle            taskHandle;
538     Utils_PrfTsHndl        *prfTsHandle;
539     char                    prfTsName[15];
540     uint32_t                loopCnt;
541     const UdmaTestRingPrm  *ringPrms;
542 };
544 /**
545  *  \brief Structure used for UDMA test object common for all the tasks.
546  */
547 struct UdmaTestObj_t
549     UdmaTestSystemCtrl  sysCtrl;
550     /**< System control information. */
551     UdmaTestParams     *testPrms;
552     /**< Pointer to test params for reference. */
553     uint32_t            skipCount;
554     /**< Number of test cases skipped because of platform/user settings. */
555     uint32_t            disableCount;
556     /**< Number of test cases disabled because of any bug etc. */
557     uint32_t            traceMask;
558     /**< Masks for the debug prints. */
559     uint64_t            runFlag;
560     /**< Current run flag for a SOC, CORE and other configurations. */
562     struct Udma_DrvObj  drvObj[UDMA_INST_ID_MAX];
564     SemaphoreP_Handle   taskCompleteSem;
565     SemaphoreP_Handle   lockSem;
567     UdmaTestTaskObj     taskObj[UDMA_TEST_MAX_TASKS];
568     UdmaTestChObj       chObjs[UDMA_TEST_MAX_CH];
569 };
571 /* ========================================================================== */
572 /*                          Function Declarations                             */
573 /* ========================================================================== */
575 /*
576  * Parser functions
577  */
578 int32_t udmaTestParser(void);
579 void udmaTestPrint(const char *str, ...);
580 void udmaDrvPrint(const char *str);
582 /*
583  * UDMA block copy test case functions
584  */
585 int32_t udmaTestBlkcpyTc(UdmaTestTaskObj *taskObj);
586 int32_t udmaTestBlkcpyPauseResumeTc(UdmaTestTaskObj *taskObj);
587 int32_t udmaTestBlkcpyChainingTc(UdmaTestTaskObj *taskObj);
588 /*
589  * UDMA ring test functions
590  */
591 int32_t udmaTestRingProxyTc(UdmaTestTaskObj *taskObj);
592 int32_t udmaTestRingFlushTc(UdmaTestTaskObj *taskObj);
593 int32_t udmaTestRingEventTc(UdmaTestTaskObj *taskObj);
594 int32_t udmaTestRingParamCheckTc(UdmaTestTaskObj *taskObj);
595 int32_t udmaTestRingUtilsMemSizeTc(UdmaTestTaskObj *taskObj);
596 int32_t udmaTestRingMemPtrTc(UdmaTestTaskObj *taskObj);
597 int32_t udmaTestRingAttachTc(UdmaTestTaskObj *taskObj);
598 int32_t udmaTestRingResetTc(UdmaTestTaskObj *taskObj);
599 int32_t udmaTestRingPrimeTc(UdmaTestTaskObj *taskObj);
600 /*
601  * UDMA ring monitor test functions
602  */
603 int32_t udmaTestRingMonPushPopTc(UdmaTestTaskObj *taskObj);
604 int32_t udmaTestRingMonLowThresholdTc(UdmaTestTaskObj *taskObj);
605 int32_t udmaTestRingMonHighThresholdTc(UdmaTestTaskObj *taskObj);
606 /*
607  * UDMA proxy test functions
608  */
609 int32_t udmaTestProxyPerformanceTc(UdmaTestTaskObj *taskObj);
610 /*
611  * UDMA flow test functions
612  */
613 int32_t udmaTestFlowAttachTc(UdmaTestTaskObj *taskObj);
614 int32_t udmaTestFlowAllocTc(UdmaTestTaskObj *taskObj);
615 /*
616  * UDMA event test functions
617  */
618 int32_t udmaTestEventOutOfRangeFlow(UdmaTestTaskObj *taskObj);
619 /*
620  * UDMA misc test functions
621  */
622 int32_t udmaTestPsilMacroTc(UdmaTestTaskObj *taskObj);
623 int32_t udmaTestOsalPrmsTc(UdmaTestTaskObj *taskObj);
624 int32_t udmaTestTrMakeTc(UdmaTestTaskObj *taskObj);
625 int32_t udmaTestStructSizeTc(UdmaTestTaskObj *taskObj);
626 /*
627  * UDMA bug test functions
628  */
629 int32_t udmaTestBugTcPDK_3863(UdmaTestTaskObj *taskObj);
630 int32_t udmaTestBugTcPDK_4654(UdmaTestTaskObj *taskObj);
632 /*
633  * UDMA Negative test case functions
634  */
636 /*
637  * UDMA SOC specific functions
638  */
639 int32_t udmaTestPrintPsilMacro(UdmaTestTaskObj *taskObj);
640 int32_t udmaTestPrintPdmaMacro(UdmaTestTaskObj *taskObj);
642 /*
643  * UDMA common functions
644  */
645 int32_t udmaTestInitDriver(UdmaTestObj *testObj);
646 int32_t udmaTestDeinitDriver(UdmaTestObj *testObj);
647 int32_t udmaTestInitVariables(const UdmaTestObj *testObj);
648 void udmaTestFreeVariables(const UdmaTestObj *testObj);
649 void udmaTestLogTestResult(const UdmaTestObj *testObj,
650                            int32_t            testResult,
651                            uint32_t           tcId,
652                            char              *tcInfo);
653 void udmaTestPrintTestResult(const UdmaTestObj *testObj,
654                              uint32_t           skipCount,
655                              uint32_t           disableCount);
656 void udmaTestResetTestResult(void);
657 void udmaTestCalcPerformance(UdmaTestTaskObj *taskObj, uint32_t durationMs);
658 void udmaTestCalcTotalPerformance(UdmaTestObj *testObj, uint32_t durationMs);
659 int32_t udmaTestCompareRingHwOccDriver(Udma_RingHandle ringHandle, uint32_t cnt);
661 char AppUtils_getChar(void);
662 int32_t AppUtils_getCharTimeout(char *ch, uint32_t msec);
663 int32_t AppUtils_getNum(void);
665 uint32_t AppUtils_getCurTimeInMsec(void);
666 uint32_t AppUtils_getElapsedTimeInMsec(uint32_t startTime);
668 /* ========================================================================== */
669 /*      Internal Function Declarations (Needed for other static inlines)      */
670 /* ========================================================================== */
672 /* None */
674 /* ========================================================================== */
675 /*                       Static Function Definitions                          */
676 /* ========================================================================== */
678 /* None */
680 #ifdef __cplusplus
682 #endif
684 #endif /* #ifndef UDMA_TEST_H_ */