ed34518ae1990224bcf481930864da4b8a4999b9
[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>
53 #include <ti/drv/udma/src/udma_priv.h>
55 #include <ti/osal/SemaphoreP.h>
56 #include <ti/osal/TaskP.h>
57 #include <ti/drv/uart/UART.h>
58 #include <ti/drv/uart/UART_stdio.h>
59 #include <ti/drv/udma/examples/udma_apputils/udma_apputils.h>
61 #include "utils_mem.h"
62 #include "utils_prf.h"
63 #include "utils_trace.h"
65 #include "udma_test_soc.h"
67 #ifdef __cplusplus
68 extern "C" {
69 #endif
71 /* ========================================================================== */
72 /*                           Macros & Typedefs                                */
73 /* ========================================================================== */
75 /** \brief Log enable for example application. */
76 #define UdmaUtTrace                     (GT_INFO1 | GT_TraceState_Enable)
78 /* UART read timeout in msec */
79 #define UDMA_TEST_UART_TIMEOUT_MSEC     (10000U)
81 /* Application name string used in print statements */
82 #define APP_NAME                        "UDMA_TEST"
84 /* Default values */
85 #define UDMA_TEST_USE_DEF               (0xFAFAU)
86 #define UDMA_TEST_DEF_LOOP_CNT          (100U)
87 #define UDMA_TEST_DEF_QDEPTH            (1U)
88 #define UDMA_TEST_PERF_LOOP_CNT         (10000U)
89 #define UDMA_TEST_PERF_QDEPTH           (1U)
91 #define UDMA_TEST_DEF_ICNT0             (1000U)
92 #define UDMA_TEST_DEF_DICNT0            (1000U)
94 #define UDMA_TEST_PERF_ICNT0            (10000U)
95 #define UDMA_TEST_PERF_DICNT0           (10000U)
97 #define UDMA_TEST_PRINT_BUFSIZE         (0x4000U)
99 #define UDMA_TEST_MAX_TASKS             (10U)
100 #define UDMA_TEST_MAX_CH                (15U)
101 #define UDMA_TEST_MAX_QDEPTH            (500U)
103 #define UDMA_TEST_MAX_ICNT              (4U)
104 #define UDMA_TEST_MAX_DIM               (3U)
106 /* Defined the following so that it is easy to understand a particular config */
107 #define USE_DEF_LP_CNT                  (UDMA_TEST_USE_DEF)
108 #define USE_DEF_QDEPTH                  (UDMA_TEST_USE_DEF)
109 #define DEF_HEAP_ID                     (UTILS_MEM_HEAP_ID_DDR)
110 #define TEST_ENABLE                     (TRUE)
111 #define TEST_DISABLE                    (FALSE)
112 #define PRF_ENABLE                      (TRUE)
113 #define PRF_DISABLE                     (FALSE)
114 #define PRINT_ENABLE                    (TRUE)
115 #define PRINT_DISABLE                   (FALSE)
116 #define TIMEST_ENABLE                   (TRUE)
117 #define TIMEST_DISABLE                  (FALSE)
118 #define DATA_CHECK_ENABLE               (TRUE)
119 #define DATA_CHECK_DISABLE              (FALSE)
120 #define PACING_NONE                     (0U)
121 #define DEF_PACING                      (20U)
123 #define UDMA_TEST_RING_ACC_DIRECTION_FORWARD    (0U)
124 #define UDMA_TEST_RING_ACC_DIRECTION_REVERSE    (1U)
126 #define UDMA_TEST_INST_ID_MAIN_0        (UDMA_INST_ID_0)
127 #define UDMA_TEST_INST_ID_MCU_0         (UDMA_INST_ID_1)
128 #define UDMA_TEST_INST_ID_BCDMA_0       (UDMA_INST_ID_2)
129 #define UDMA_TEST_INST_ID_PKTDMA_0      (UDMA_INST_ID_3)
131 #define UDMA_TEST_RF_SOC_AM65XX         ((uint64_t) 0x00000001U)
132 #define UDMA_TEST_RF_SOC_J721E          ((uint64_t) 0x00000002U)
133 #define UDMA_TEST_RF_SOC_J7200          ((uint64_t) 0x00000004U)
134 #define UDMA_TEST_RF_SOC_AM64X          ((uint64_t) 0x00000008U)
135 #define UDMA_TEST_RF_SOC_ALL            ((uint64_t) 0xFFFFFFFFU)
137 #define UDMA_TEST_RF_CORE_MPU1_0        ((uint64_t)(((uint64_t) 0x0001U) << 32U))
138 #define UDMA_TEST_RF_CORE_MCU1_0        ((uint64_t)(((uint64_t) 0x0002U) << 32U))
139 #define UDMA_TEST_RF_CORE_MCU1_1        ((uint64_t)(((uint64_t) 0x0004U) << 32U))
140 #define UDMA_TEST_RF_CORE_MCU2_0        ((uint64_t)(((uint64_t) 0x0008U) << 32U))
141 #define UDMA_TEST_RF_CORE_MCU2_1        ((uint64_t)(((uint64_t) 0x0010U) << 32U))
142 #define UDMA_TEST_RF_CORE_MCU3_0        ((uint64_t)(((uint64_t) 0x0020U) << 32U))
143 #define UDMA_TEST_RF_CORE_MCU3_1        ((uint64_t)(((uint64_t) 0x0040U) << 32U))
144 #define UDMA_TEST_RF_CORE_C7X_1         ((uint64_t)(((uint64_t) 0x0080U) << 32U))
145 #define UDMA_TEST_RF_CORE_C66X_1        ((uint64_t)(((uint64_t) 0x0100U) << 32U))
146 #define UDMA_TEST_RF_CORE_C66X_2        ((uint64_t)(((uint64_t) 0x0200U) << 32U))
147 #define UDMA_TEST_RF_CORE_M4F_0         ((uint64_t)(((uint64_t) 0x0400U) << 32U))
148 #define UDMA_TEST_RF_CORE_ALL           ((uint64_t)(((uint64_t) 0xFFFFU) << 32U))
149 #define UDMA_TEST_RF_CORE_MCU_ALL       (UDMA_TEST_RF_CORE_MCU1_0 | UDMA_TEST_RF_CORE_MCU1_1 | \
150                                          UDMA_TEST_RF_CORE_MCU2_0 | UDMA_TEST_RF_CORE_MCU2_1 | \
151                                          UDMA_TEST_RF_CORE_MCU3_0 | UDMA_TEST_RF_CORE_MCU3_1)
153 /* For future when we have dynamic coverage testcases */
154 #define UDMA_TEST_RF_CFG_DEF            ((uint64_t)(((uint64_t) 0x00001U) << 48U))
155 #define UDMA_TEST_RF_CFG_DYN            ((uint64_t)(((uint64_t) 0x00002U) << 48U))
157 /**
158  *  \brief Test types - based on this the different application flow will be
159  *  determined.
160  */
161 typedef enum
163     UDMA_TT_BLK_CPY,
164     UDMA_TT_DRU_DIRECT,
165     UDMA_TT_DRU_INDIRECT,
166     UDMA_TT_PDMA_UART,
167     UDMA_TT_PDMA_OSPI,
168     UDMA_TT_PDMA_MCSPI,
169     UDMA_TT_PDMA_MCASP,
170     UDMA_TT_PDMA_CRC,
171     UDMA_TT_PDMA_ADC,
172     UDMA_TT_MISC,
173     UDMA_TT_CUSTOM
174 } UdmaTestType;
176 /**
177  *  \brief Testcase types.
178  */
179 typedef enum
181     /* Category */
182     UDMA_TCT_SANITY     = 0x01U,
183     UDMA_TCT_REGRESSION = 0x02U,
184     UDMA_TCT_FULL       = 0x04U,
185     /* Adequacy */
186     UDMA_TCT_FUNCTIONAL  = 0x08U,
187     UDMA_TCT_STRESS      = 0x10U,
188     UDMA_TCT_NEGATIVE    = 0x20U,
189     UDMA_TCT_PERFORMANCE = 0x40U,
190     UDMA_TCT_MISC        = 0x80U,
191     UDMA_TCT_API         = 0x100U,
192     /* Used for Test parser dont use in test case */
193     UDMA_TCT_ALL = 0x1FFU
194 } UdmaTestCaseType;
196 /**
197  *  \brief Event types.
198  */
199 typedef enum
201     UDMA_TEST_EVENT_NONE,
202     /**< No events are used - use direct dequeue API to poll for completion */
203     UDMA_TEST_EVENT_INTR,
204     /**< Events with interrupt callback - use sempahore post for completion */
205     UDMA_TEST_EVENT_POLLED,
206     /**< Events with polled mode at IA - use IA status poll for completion */
207 } UdmaTestEventMode;
209 /**
210  *  UDMA UT TX param IDs.
211  */
212 typedef enum
214     UDMA_TEST_TXCH_PRMID_DEF,
215     UDMA_TEST_TXCH_PRMID_DMA_PRIORITY_HIGH,
216     UDMA_TEST_TXCH_PRMID_INVALID,
217 } UdmaTestTxChPrmId;
219 /**
220  *  UDMA UT RX parameter IDs.
221  */
222 typedef enum
224     UDMA_TEST_RXCH_PRMID_DEF,
225     UDMA_TEST_RXCH_PRMID_DMA_PRIORITY_HIGH,
226     UDMA_TEST_RXCH_PRMID_INVALID,
227 } UdmaTestRxChPrmId;
229 /**
230  *  UDMA UT UTC parameter IDs.
231  */
232 typedef enum
234     UDMA_TEST_UTCCH_PRMID_DEF,
235     UDMA_TEST_UTCCH_PRMID_DMA_PRIORITY_HIGH,
236     UDMA_TEST_UTCCH_PRMID_INVALID,
237 } UdmaTestUtcChPrmId;
239 /**
240  *  UDMA UT PDMA parameter IDs.
241  */
242 typedef enum
244     UDMA_TEST_PDMACH_PRMID_DEF,
245     UDMA_TEST_PDMACH_PRMID_ES_16BITS,
246     UDMA_TEST_PDMACH_PRMID_INVALID,
247 } UdmaTestPdmaChPrmId;
249 /**
250  *  UDMA UT channel param IDs.
251  */
252 typedef enum
254     UDMA_TEST_CH_PRMID_DEF,
255     UDMA_TEST_CH_PRMID_INTR_DEF,
256     UDMA_TEST_CH_PRMID_TRIGGER_GLOBAL0,
257     UDMA_TEST_CH_PRMID_TRIGGER_GLOBAL0_INTR,
258     UDMA_TEST_CH_PRMID_EVENTSIZE_ICNT1,
259     UDMA_TEST_CH_PRMID_EVENTSIZE_ICNT2,
260     UDMA_TEST_CH_PRMID_EVENTSIZE_ICNT3,
261     UDMA_TEST_CH_PRMID_DRU_DEF,
262     UDMA_TEST_CH_PRMID_DRU_INTR_DEF,
263     UDMA_TEST_CH_PRMID_DRU_TRIGGER_GLOBAL0,
264     UDMA_TEST_CH_PRMID_DRU_TRIGGER_GLOBAL0_INTR,
265     UDMA_TEST_CH_PRMID_DRU_EVENTSIZE_ICNT1,
266     UDMA_TEST_CH_PRMID_DRU_EVENTSIZE_ICNT2,
267     UDMA_TEST_CH_PRMID_DRU_EVENTSIZE_ICNT3,
268     UDMA_TEST_CH_PRMID_BLKCPY_HC_DEF,
269     UDMA_TEST_CH_PRMID_BLKCPY_HC_INTR_DEF,
270     UDMA_TEST_CH_PRMID_BLKCPY_UHC_DEF,
271     UDMA_TEST_CH_PRMID_BLKCPY_UHC_INTR_DEF,
272     UDMA_TEST_CH_PRMID_INVALID,
273 } UdmaTestChPrmId;
275 /**
276  *  UDMA UT ring param IDs.
277  */
278 typedef enum
280     UDMA_TEST_RING_PRMID_EVENT_NONE,
281     UDMA_TEST_RING_PRMID_EVENT_INTR,
282     UDMA_TEST_RING_PRMID_EVENT_POLLED,
283     UDMA_TEST_RING_PRMID_INVALID,
284 } UdmaTestRingPrmId;
286 #if (UDMA_SOC_CFG_RA_LCDMA_PRESENT == 1)
287 /**
288  *  UDMA UT PKTDMA channel param IDs.
289  */
290 typedef enum
292     UDMA_TEST_PKTDMA_CH_PRMID_UNMAPPED_TX,
293     UDMA_TEST_PKTDMA_CH_PRMID_CPSW_TX,
294     UDMA_TEST_PKTDMA_CH_PRMID_SAUL_TX,
295     UDMA_TEST_PKTDMA_CH_PRMID_ICSSG_0_TX,
296     UDMA_TEST_PKTDMA_CH_PRMID_ICSSG_1_TX,
297     UDMA_TEST_PKTDMA_CH_PRMID_UNMAPPED_RX,
298     UDMA_TEST_PKTDMA_CH_PRMID_CPSW_RX,
299     UDMA_TEST_PKTDMA_CH_PRMID_SAUL_RX,
300     UDMA_TEST_PKTDMA_CH_PRMID_ICSSG_0_RX,
301     UDMA_TEST_PKTDMA_CH_PRMID_ICSSG_1_RX,
302 } UdmaTestPktdmaChPrmId;
303 #endif
305 /* ========================================================================== */
306 /*                         Structure Declarations                             */
307 /* ========================================================================== */
309 /* Forward declaration. */
310 typedef struct UdmaTestSystemCtrl_t UdmaTestSystemCtrl;
311 typedef struct UdmaTestParams_t     UdmaTestParams;
312 typedef struct UdmaTestTaskObj_t    UdmaTestTaskObj;
313 typedef struct UdmaTestObj_t        UdmaTestObj;
315 /** \brief Typedef for test case type function pointer */
316 typedef int32_t (*UdmaTestFxnPtr)(UdmaTestTaskObj *taskObj);
318 /**
319  *  \brief Test parameters for a TX channel.
320  */
321 typedef struct
323     UdmaTestTxChPrmId       txChPrmId;
324     /**< TX Channel parameter ID. */
325     Udma_ChTxPrms           txPrms;
326     /**< TX channel parameter */
327 } UdmaTestTxChPrm;
329 /**
330  *  \brief Test parameters for a RX channel.
331  */
332 typedef struct
334     UdmaTestRxChPrmId       rxChPrmId;
335     /**< RX Channel parameter ID. */
336     Udma_ChRxPrms           rxPrms;
337     /**< RX channel parameter */
338 } UdmaTestRxChPrm;
340 /**
341  *  \brief Test parameters for a UTC channel.
342  */
343 typedef struct
345     UdmaTestUtcChPrmId      utcChPrmId;
346     /**< UTC Channel parameter ID. */
347     Udma_ChUtcPrms          utcPrms;
348     /**< UTC channel parameter */
349 } UdmaTestUtcChPrm;
351 /**
352  *  \brief Test parameters for a PDMA channel.
353  */
354 typedef struct
356     UdmaTestPdmaChPrmId     pdmaChPrmId;
357     /**< PDMA Channel parameter ID. */
358     Udma_ChPdmaPrms         pdmaPrms;
359     /**< PDMA channel parameter */
360 } UdmaTestPdmaChPrm;
362 /**
363  *  \brief Test parameters for a channel.
364  */
365 typedef struct
367     UdmaTestChPrmId         chPrmId;
368     /**< Channel parameter ID. */
369     uint32_t                chType;
370     /**< UDMA channel type. */
371     uint32_t                utcId;
372     /**< UTC ID incase of DRU/external channel. */
373     uint32_t                eventMode;
374     /**< Use no event, event with interrupt or event with polled mode.
375      *   Refer #UdmaTestEventMode */
376     uint32_t                trigger;
377     /**< Global0 or Global 1 Trigger - refer \ref CSL_UdmapTrFlagsTrigger. */
378     uint32_t                eventSize;
379     /**< Refer \ref CSL_UdmapTrFlagsEventSize. */
380     uint32_t                triggerType;
381     /**< Refer \ref CSL_UdmapTrFlagsTriggerType. */
382     UdmaTestTxChPrmId       txPrmId;
383     /**< TX Channel parameter ID. */
384     UdmaTestRxChPrmId       rxPrmId;
385     /**< RX Channel parameter ID. */
386     UdmaTestUtcChPrmId      utcPrmId;
387     /**< UTC Channel parameter ID. */
388     UdmaTestPdmaChPrmId     pdmaPrmId;
389     /**< PDMA Channel parameter ID. */
390 } UdmaTestChPrm;
392 /**
393  *  \brief Test parameters for a ring.
394  */
395 typedef struct
397     UdmaTestRingPrmId       ringPrmId;
398     /**< Ring parameter ID. */
399     uint32_t                eventMode;
400     /**< Use no event, event with interrupt or event with polled mode.
401      *   Refer #UdmaTestEventMode */
402 } UdmaTestRingPrm;
404 #if (UDMA_SOC_CFG_RA_LCDMA_PRESENT == 1)
405 /**
406  *  \brief Test parameters for a PKTDMA Channel.
407  */
408 typedef struct
410     UdmaTestPktdmaChPrmId   pktdmachPrmId;
411     /**< PKTDMA Channel parameter ID. */
412     uint32_t                chType;
413     /**< UDMA channel type. */
414     uint32_t                mappedChGrp;
415     /**< UDMA mapped channel group. */
416     uint32_t                peerChNum;
417     /**< UDMA peer channel to link the #chNum using PSILCFG.*/
418 } UdmaTestPktdmaChPrm;
419 #endif
421 /**
422  *  \brief Test case parameter structure.
423  */
424 struct UdmaTestParams_t
426     bool                    enableTest;
427     /**< Whether test case should be executed or not. */
428     uint32_t                tcId;
429     /**< Test case ID. */
430     char                   *tcName;
431     /**< Test case name. */
432     char                   *disableInfo;
433     /**< Reason string for disabling a test case. */
434     bool                    printEnable;
435     /**< Enable/disable print statements, used for stress testing. */
436     bool                    prfEnable;
437     /**< Enable performance prints. */
438     uint32_t                tcType;
439     /**< Type of testcase  - like BFT, stress etc... */
440     uint32_t                dcEnable;
441     /**< Enable/disable data check - used for performance. */
442     uint32_t                loopCnt;
443     /**< Loop count for test. */
445     uint32_t                numTasks;
446     /**< Number of tasks to test. */
447     uint32_t                testType[UDMA_TEST_MAX_TASKS];
448     /**< Type of test */
449     UdmaTestFxnPtr          testFxnPtr[UDMA_TEST_MAX_TASKS];
450     /**< Type of test case to run. */
451     uint32_t                pacingTime[UDMA_TEST_MAX_TASKS];
452     /**< Pacing Interval in ms. */
453     uint32_t                numCh[UDMA_TEST_MAX_TASKS];
454     /**< Number of channels per task to test. */
455     uint32_t                instId[UDMA_TEST_MAX_CH];
456     /**< NAVSS/DMSS instance ID. */
457     UdmaTestChPrmId         chPrmId[UDMA_TEST_MAX_CH];
458     /**< Channel config IDs for all the tasks.
459      *   Task 0 channel configs will be first (0 to (numCh[0] - 1)),
460      *   (numCh[0] to (numCh[1] - 1)) and so on. */
461     uint32_t                qdepth[UDMA_TEST_MAX_CH];
462     /**< Queue depth. */
463     uint32_t                icnt[UDMA_TEST_MAX_CH][UDMA_TEST_MAX_ICNT];
464     /**< Source counts. */
465     uint32_t                dicnt[UDMA_TEST_MAX_CH][UDMA_TEST_MAX_ICNT];
466     /**< Destination counts. */
467     uint32_t                dim[UDMA_TEST_MAX_CH][UDMA_TEST_MAX_DIM];
468     /**< Source dims. */
469     uint32_t                ddim[UDMA_TEST_MAX_CH][UDMA_TEST_MAX_DIM];
470     /**< Destination dims. */
471     uint32_t                heapIdSrc[UDMA_TEST_MAX_CH];
472     /**< Heap ID to allocate source buffer. */
473     uint32_t                heapIdDest[UDMA_TEST_MAX_CH];
474     /**< Heap ID to allocate destination buffer. */
475     uint32_t                srcBufSize[UDMA_TEST_MAX_CH];
476     /**< Source buffer size to allocate. */
477     uint32_t                destBufSize[UDMA_TEST_MAX_CH];
478     /**< Destination buffer size to allocate. */
479     uint64_t                runFlag;
480     /**< Flag to indicate whether the test needs to be run on a particular
481      *   SOC, CORE and other configurations. */
482     UdmaTestRingPrmId       ringPrmId;
483     /**< Ring config ID. Applicable only for ring testcases */
485     /*
486      * Below variables are initialized in code and not in table!!
487      */
488     bool                    isRun;
489     /**< Flag to indicate whether the test case is run or not. */
490     int32_t                 testResult;
491     /**< Test result. */
492 };
494 /**
495  *  \brief Structure used for UDMA UT control parameters.
496  */
497 struct UdmaTestSystemCtrl_t
499     uint32_t    loopCnt;
500     /**< Default loop count. */
501     uint32_t    qdepth;
502     /**< Default queue depth for queue and dequeue operation. */
503     uint32_t    rtPrintEnable;
504     /**< Enables runtime remote prints like VENC underflow status etc. */
505 };
507 typedef struct UdmaTestChObj_t
509     int32_t                 chIdx;
511     struct Udma_ChObj       drvChObj;
512     struct Udma_EventObj    cqEventObj;
513     struct Udma_EventObj    tdCqEventObj;
514     struct Udma_EventObj    trEventObj;
516     Udma_ChHandle           chHandle;
517     Udma_EventHandle        cqEventHandle;
518     Udma_EventHandle        tdCqEventHandle;
519     Udma_EventHandle        trEventHandle;
521     Udma_EventPrms          trEventPrms;
523     Udma_DrvHandle          drvHandle;
524     uint32_t                instId;
525     SemaphoreP_Handle       transferDoneSem;
526     /**< Semaphore to indicate transfer completion */
528     uint32_t                queueCnt;
529     uint32_t                dequeueCnt;
531     uint8_t                 *fqRingMem;
532     uint8_t                 *cqRingMem;
533     uint8_t                 *tdCqRingMem;
534     uint8_t                 *trpdMem[UDMA_TEST_MAX_QDEPTH];
536     uint8_t                 *srcBuf;
537     uint8_t                 *destBuf[UDMA_TEST_MAX_QDEPTH];
539     const UdmaTestChPrm     *chPrms;
540     const Udma_ChTxPrms     *txPrms;
541     const Udma_ChRxPrms     *rxPrms;
542     const Udma_ChUtcPrms    *utcPrms;
543     const Udma_ChPdmaPrms   *pdmaPrms;
544     uint32_t                qdepth;
545     uint32_t                icnt[UDMA_TEST_MAX_ICNT];
546     uint32_t                dicnt[UDMA_TEST_MAX_ICNT];
547     uint32_t                dim[UDMA_TEST_MAX_DIM];
548     uint32_t                ddim[UDMA_TEST_MAX_DIM];
549     uint32_t                heapIdSrc;
550     uint32_t                heapIdDest;
551     uint32_t                srcBufSize;
552     uint32_t                destBufSize;
554     uint32_t                ringMemSize;
555     uint32_t                trpdSize;
556 } UdmaTestChObj;
558 /**
559  *  \brief Structure used for UDMA UT task object parameters.
560  */
561 struct UdmaTestTaskObj_t
563     UdmaTestParams         *testPrms;
564     /**< Pointer to test params for reference. */
565     uint32_t                testType;
566     UdmaTestFxnPtr          testFxnPtr;
567     uint32_t                pacingTime;
568     /**< Pacing Interval in ms. */
569     uint32_t                numCh;
570     UdmaTestChObj          *chObj[UDMA_TEST_MAX_CH];
571     uint32_t                traceMask;
572     int32_t                 testResult;
573     uint64_t                totalTransfer;
574     /**< Total bytes transferred */
575     uint32_t                durationMs;
576     /**< Time taken in ms */
577     uint64_t                mps;
578     /**< Mega bytes per second */
579     UdmaTestObj            *testObj;
580     uint32_t                taskId;
581     TaskP_Handle            taskHandle;
582     Utils_PrfTsHndl        *prfTsHandle;
583     char                    prfTsName[15];
584     uint32_t                loopCnt;
585     const UdmaTestRingPrm  *ringPrms;
586 };
588 /**
589  *  \brief Structure used for UDMA test object common for all the tasks.
590  */
591 struct UdmaTestObj_t
593     UdmaTestSystemCtrl  sysCtrl;
594     /**< System control information. */
595     UdmaTestParams     *testPrms;
596     /**< Pointer to test params for reference. */
597     uint32_t            skipCount;
598     /**< Number of test cases skipped because of platform/user settings. */
599     uint32_t            disableCount;
600     /**< Number of test cases disabled because of any bug etc. */
601     uint32_t            traceMask;
602     /**< Masks for the debug prints. */
603     uint64_t            runFlag;
604     /**< Current run flag for a SOC, CORE and other configurations. */
606     struct Udma_DrvObj  drvObj[UDMA_INST_ID_MAX + 1U];
607     /**< Driver Object for all applicable instances. (max+1 since instance index starts from 0) */
609     SemaphoreP_Handle   taskCompleteSem;
610     SemaphoreP_Handle   lockSem;
612     UdmaTestTaskObj     taskObj[UDMA_TEST_MAX_TASKS];
613     UdmaTestChObj       chObjs[UDMA_TEST_MAX_CH];
614 };
616 /* ========================================================================== */
617 /*                          Function Declarations                             */
618 /* ========================================================================== */
620 /*
621  * Parser functions
622  */
623 int32_t udmaTestParser(void);
624 void udmaTestPrint(const char *str, ...);
625 void udmaDrvPrint(const char *str);
627 /*
628  * UDMA block copy test case functions
629  */
630 int32_t udmaTestBlkcpyTc(UdmaTestTaskObj *taskObj);
631 int32_t udmaTestBlkcpyPauseResumeTc(UdmaTestTaskObj *taskObj);
632 int32_t udmaTestBlkcpyChainingTc(UdmaTestTaskObj *taskObj);
633 /*
634  * UDMA ring test functions
635  */
636 int32_t udmaTestRingProxyTc(UdmaTestTaskObj *taskObj);
637 int32_t udmaTestRingFlushTc(UdmaTestTaskObj *taskObj);
638 int32_t udmaTestRingEventTc(UdmaTestTaskObj *taskObj);
639 int32_t udmaTestRingParamCheckTc(UdmaTestTaskObj *taskObj);
640 int32_t udmaTestRingUtilsMemSizeTc(UdmaTestTaskObj *taskObj);
641 int32_t udmaTestRingMemPtrTc(UdmaTestTaskObj *taskObj);
642 int32_t udmaTestRingAttachTc(UdmaTestTaskObj *taskObj);
643 int32_t udmaTestRingResetTc(UdmaTestTaskObj *taskObj);
644 int32_t udmaTestRingPrimeTc(UdmaTestTaskObj *taskObj);
645 int32_t udmaTestRingPrimeLcdmaTc(UdmaTestTaskObj *taskObj);
646 /*
647  * UDMA ring monitor test functions
648  */
649 int32_t udmaTestRingMonPushPopTc(UdmaTestTaskObj *taskObj);
650 int32_t udmaTestRingMonLowThresholdTc(UdmaTestTaskObj *taskObj);
651 int32_t udmaTestRingMonHighThresholdTc(UdmaTestTaskObj *taskObj);
652 /*
653  * UDMA proxy test functions
654  */
655 int32_t udmaTestProxyPerformanceTc(UdmaTestTaskObj *taskObj);
656 /*
657  * UDMA flow test functions
658  */
659 int32_t udmaTestFlowAttachTc(UdmaTestTaskObj *taskObj);
660 int32_t udmaTestFlowAttachMappedTc(UdmaTestTaskObj *taskObj);
661 int32_t udmaTestFlowAllocTc(UdmaTestTaskObj *taskObj);
662 /*
663  * UDMA event test functions
664  */
665 int32_t udmaTestEventOutOfRangeFlow(UdmaTestTaskObj *taskObj);
666 /*
667  * UDMA misc test functions
668  */
669 int32_t udmaTestPsilMacroTc(UdmaTestTaskObj *taskObj);
670 int32_t udmaTestOsalPrmsTc(UdmaTestTaskObj *taskObj);
671 int32_t udmaTestTrMakeTc(UdmaTestTaskObj *taskObj);
672 int32_t udmaTestStructSizeTc(UdmaTestTaskObj *taskObj);
673 /*
674  * UDMA bug test functions
675  */
676 int32_t udmaTestBugTcPDK_3863(UdmaTestTaskObj *taskObj);
677 int32_t udmaTestBugTcPDK_4654(UdmaTestTaskObj *taskObj);
678 /*
679  * UDMA channel test functions
680  */
681 int32_t udmaTestChPktdmaParamCheckTc(UdmaTestTaskObj *taskObj);
682 int32_t udmaTestChPktdmaChApiTc(UdmaTestTaskObj *taskObj);
684 /*
685  * UDMA Negative test case functions
686  */
688 /*
689  * UDMA SOC specific functions
690  */
691 int32_t udmaTestPrintPsilMacro(UdmaTestTaskObj *taskObj);
692 int32_t udmaTestPrintPdmaMacro(UdmaTestTaskObj *taskObj);
694 /*
695  * UDMA common functions
696  */
697 int32_t udmaTestInitDriver(UdmaTestObj *testObj);
698 int32_t udmaTestDeinitDriver(UdmaTestObj *testObj);
699 int32_t udmaTestInitVariables(const UdmaTestObj *testObj);
700 void udmaTestFreeVariables(const UdmaTestObj *testObj);
701 void udmaTestLogTestResult(const UdmaTestObj *testObj,
702                            int32_t            testResult,
703                            uint32_t           tcId,
704                            char              *tcInfo);
705 void udmaTestPrintTestResult(const UdmaTestObj *testObj,
706                              uint32_t           skipCount,
707                              uint32_t           disableCount);
708 void udmaTestResetTestResult(void);
709 void udmaTestCalcPerformance(UdmaTestTaskObj *taskObj, uint32_t durationMs);
710 void udmaTestCalcTotalPerformance(UdmaTestObj *testObj, uint32_t durationMs);
711 int32_t udmaTestCompareRingHwOccDriver(Udma_RingHandle ringHandle, uint32_t cnt, uint32_t direction);
712 uint32_t udmaTestGetRingHwOccDriver(Udma_RingHandle ringHandle, uint32_t direction);
713 int32_t udmaTestBlkCpyRingPrimeLcdmaTest(UdmaTestTaskObj *taskObj);
715 char AppUtils_getChar(void);
716 int32_t AppUtils_getCharTimeout(char *ch, uint32_t msec);
717 int32_t AppUtils_getNum(void);
719 uint32_t AppUtils_getCurTimeInMsec(void);
720 uint32_t AppUtils_getElapsedTimeInMsec(uint32_t startTime);
722 /* ========================================================================== */
723 /*      Internal Function Declarations (Needed for other static inlines)      */
724 /* ========================================================================== */
726 /* None */
728 /* ========================================================================== */
729 /*                       Static Function Definitions                          */
730 /* ========================================================================== */
732 /* None */
734 #ifdef __cplusplus
736 #endif
738 #endif /* #ifndef UDMA_TEST_H_ */