J722S MCU+ SDK  09.02.00
csirx/v1/csirx.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) Texas Instruments Incorporated 2018-2019
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the
15  * distribution.
16  *
17  * Neither the name of Texas Instruments Incorporated nor the names of
18  * its contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
60 #ifndef CSIRX_H_
61 #define CSIRX_H_
62 
63 /* ========================================================================== */
64 /* Include Files */
65 /* ========================================================================== */
66 
67 #include <drivers/hw_include/csl_csirx.h>
68 #include <drivers/fvid2.h>
69 #include <drivers/csirx/v1/soc/csirx_soc.h>
70 #include <drivers/csirx/v1/include/csirx_cfg.h>
71 #include <drivers/csirx/v1/include/csirx_event.h>
72 #include <drivers/udma.h>
73 
74 #ifdef __cplusplus
75 extern "C" {
76 #endif
77 
78 /* ========================================================================== */
79 /* Macros & Typedefs */
80 /* ========================================================================== */
81 
83 #define CSIRX_CAPT_DRV_ID (FVID2_CSIRX_DRV_BASE + 0x00000000U)
84 
85 /* Capture IOCTL's */
101 #define IOCTL_CSIRX_GET_INST_STATUS (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0000U)
102 
116 #define IOCTL_CSIRX_PRINT_DEBUG_LOGS (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0100U)
117 
129 #define IOCTL_CSIRX_SET_DPHY_CONFIG (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0200U)
130 
145 #define IOCTL_CSIRX_REGISTER_EVENT (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0300U)
146 
161 #define IOCTL_CSIRX_UNREGISTER_EVENT (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0400U)
162 
178 #define IOCTL_CSIRX_GET_INST_CH_NUM (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0500U)
179 
194 #define IOCTL_CSIRX_CH_START (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0600U)
195 
210 #define IOCTL_CSIRX_CH_STOP (FVID2_CSIRX_DRV_IOCTL_BASE + 0x0700U)
211 
222 #define CSIRX_CH_TYPE_CAPT ((uint32_t) 0x0U)
223 
225 #define CSIRX_CH_TYPE_OTF ((uint32_t) 0x1U)
226 
228 #define CSIRX_CH_TYPE_LPBK ((uint32_t) 0x2U)
229 
240 #define CSIRX_CAPT_STREAM_ID ((uint32_t) 0x0U)
241 
243 #define CSIRX_LPBK_STREAM_ID ((uint32_t) 0x1U)
244 
246 #define CSIRX_OTF_STREAM0_ID ((uint32_t) 0x2U)
247 
249 #define CSIRX_OTF_STREAM1_ID ((uint32_t) 0x3U)
250 
253 #define CSIRX_BUF_ALIGNMENT (UDMA_CACHELINE_ALIGNMENT)
254 
255 /* ========================================================================== */
256 /* Structure Declarations */
257 /* ========================================================================== */
258 
262 typedef struct
263 {
264  uint32_t chId;
268  uint32_t chType;
271  uint32_t vcNum;
275  uint32_t inCsiDataType;
318  uint8_t ringOrderId;
321 } Csirx_ChCfg;
322 
326 typedef struct
327 {
336  uint32_t numDataLanes;
338  uint32_t dataLanesMap[CSIRX_CAPT_DATA_LANES_MAX];
345  uint32_t enableErrbypass;
351  uint32_t numPixelsStrm0;
382  uint32_t enableStrm[CSIRX_NUM_STREAM_MAX];
389 } Csirx_InstCfg;
390 
395 typedef struct
396 {
397  uint32_t numCh;
400  Csirx_ChCfg chCfg[CSIRX_NUM_CH];
405  uint64_t frameDropBuf;
410  uint32_t frameDropBufLen;
413  uint32_t enableChDq;
422 
427 typedef struct
428 {
432 
436 typedef struct
437 {
438  int32_t retVal;
441 
445 typedef struct
446 {
447  uint32_t queueCount[CSIRX_NUM_CH];
451  uint32_t dequeueCount[CSIRX_NUM_CH];
455  uint32_t dropCount[CSIRX_NUM_CH];
459  uint32_t errorFrameCount[CSIRX_NUM_CH];
463  uint32_t overflowCount;
475  uint32_t crcCount;
479  uint32_t eccCount;
495  uint32_t invalidSpCount;
500  uint32_t strmFIFOOvflCount[CSIRX_NUM_STREAM_MAX];
505 
506 /* ========================================================================== */
507 /* Internal/Private Function Declarations */
508 /* ========================================================================== */
509 
510 /* None */
511 
512 /* ========================================================================== */
513 /* Function Declarations */
514 /* ========================================================================== */
522 int32_t Csirx_init(const Csirx_InitParams *initParams);
523 
529 int32_t Csirx_deInit(void);
530 /* ========================================================================== */
531 /* Internal Function Declarations (Needed for other static inlines) */
532 /* ========================================================================== */
533 
540 static inline void Csirx_initParamsInit(Csirx_InitParams *initPrms);
541 
548 static inline void Csirx_createParamsInit(Csirx_CreateParams *createPrms);
549 
556 static inline void Csirx_chCfgInit(Csirx_ChCfg *chCfg);
557 
564 static inline void Csirx_instCfgInit(Csirx_InstCfg *instCfg);
565 
572 static inline void Csirx_instStatusInit(Csirx_InstStatus *status);
573 
574 /* ========================================================================== */
575 /* Static Function Definitions */
576 /* ========================================================================== */
577 
578 static inline void Csirx_initParamsInit(Csirx_InitParams *initPrms)
579 {
580  initPrms->drvHandle = NULL;
581 }
582 
583 static inline void Csirx_createParamsInit(Csirx_CreateParams *createPrms)
584 {
585  uint32_t loopCnt;
586 
587  if (NULL != createPrms)
588  {
589  createPrms->numCh = 0U;
590  for (loopCnt = 0U ; loopCnt < CSIRX_NUM_CH ; loopCnt++)
591  {
592  Csirx_chCfgInit(&createPrms->chCfg[loopCnt]);
593  }
594  Csirx_instCfgInit(&createPrms->instCfg);
595  createPrms->frameDropBufLen = 0U;
596  createPrms->frameDropBuf = 0U;
597  createPrms->enableChDq = 0U;
598  }
599 }
600 
601 static inline void Csirx_chCfgInit(Csirx_ChCfg *chCfgPrms)
602 {
603  chCfgPrms->chId = CSIRX_CH_ID_DEFAULT;
604  chCfgPrms->chType = CSIRX_CH_TYPE_CAPT;
605  chCfgPrms->vcNum = CSIRX_VC_NUM_DEFAULT;
606  chCfgPrms->inCsiDataType = CSIRX_IN_DT_DEFAULT;
607  Fvid2Format_init(&chCfgPrms->outFmt);
608  chCfgPrms->outFmt.width = 0U;
609  chCfgPrms->outFmt.height = 0U;
610  Fvid2Utils_memset(&chCfgPrms->outFmt.pitch[0U],
611  0x0,
612  sizeof (chCfgPrms->outFmt.pitch));
613 
614  /* Initialization of UDMA channel params */
616  /* Make CSI2RX DMA channels as highest priority,
617  it is assumed that order 8-15 is mapped as RT at system level */
618  chCfgPrms->rxChParams.busPriority = 0U;
619  chCfgPrms->rxChParams.busQos = 0U;
620  chCfgPrms->rxChParams.busOrderId = 8U;
621  chCfgPrms->rxChParams.dmaPriority =
623 }
624 
625 static inline void Csirx_instCfgInit(Csirx_InstCfg *modCfgPrms)
626 {
627  uint32_t loopCnt;
628 
629  modCfgPrms->enableCsiv2p0Support = (uint32_t)TRUE;
630  modCfgPrms->numDataLanes = CSIRX_CAPT_DATA_LANES_MAX;
631  modCfgPrms->enableErrbypass = (uint32_t)TRUE;
632  modCfgPrms->numPixelsStrm0 = (uint32_t)0U;
633  for(loopCnt = 0U ; loopCnt < CSIRX_CAPT_DATA_LANES_MAX ; loopCnt++)
634  {
635  modCfgPrms->dataLanesMap[loopCnt] = (loopCnt + 1U);
636  }
637  for(loopCnt = 0U ; loopCnt < CSIRX_NUM_STREAM ; loopCnt++)
638  {
639  modCfgPrms->enableStrm[loopCnt] = 0;
640  }
641 }
642 
643 static inline void Csirx_instStatusInit(Csirx_InstStatus *captStatus)
644 {
645  uint32_t loopCnt, strmIdx;
646 
647  captStatus->overflowCount = 0U;
648  captStatus->spuriousUdmaIntrCount = 0U;
649  captStatus->spuriousUdmaIntrCount = 0U;
650  captStatus->frontFIFOOvflCount = 0U;
651  captStatus->crcCount = 0U;
652  captStatus->eccCount = 0U;
653  captStatus->correctedEccCount = 0U;
654  captStatus->dataIdErrorCount = 0U;
655  captStatus->invalidAccessCount = 0U;
656  captStatus->invalidSpCount = 0U;
657  for (strmIdx = 0U ; strmIdx < CSIRX_NUM_STREAM ; strmIdx++)
658  {
659  captStatus->strmFIFOOvflCount[strmIdx]= 0U;
660  }
661  for(loopCnt = 0U ; loopCnt < CSIRX_NUM_CH ; loopCnt++)
662  {
663  captStatus->queueCount[loopCnt] = 0U;
664  captStatus->dequeueCount[loopCnt] = 0U;
665  captStatus->dropCount[loopCnt] = 0U;
666  captStatus->errorFrameCount[loopCnt] = 0U;
667  }
668 }
669 
670 #ifdef __cplusplus
671 }
672 #endif
673 
674 #endif /* #ifndef CSIRX_H_ */
675 
Csirx_InstStatus::frontFIFOOvflCount
uint32_t frontFIFOOvflCount
Definition: csirx/v1/csirx.h:471
Csirx_InstStatus::eccCount
uint32_t eccCount
Definition: csirx/v1/csirx.h:479
Csirx_CreateStatus::retVal
int32_t retVal
Definition: csirx/v1/csirx.h:438
Csirx_CreateParams::enableChDq
uint32_t enableChDq
Definition: csirx/v1/csirx.h:413
Csirx_InstCfg::numPixelsStrm0
uint32_t numPixelsStrm0
Definition: csirx/v1/csirx.h:351
Csirx_InstCfg::enableStrm
uint32_t enableStrm[CSIRX_NUM_STREAM_MAX]
Definition: csirx/v1/csirx.h:382
Fvid2_Format::pitch
uint32_t pitch[FVID2_MAX_PLANES]
Definition: fvid2_dataTypes.h:1119
UDMA_CH_TYPE_RX_TR
#define UDMA_CH_TYPE_RX_TR
RX channel type.
Definition: udma_ch.h:179
Csirx_ChCfg::ringOrderId
uint8_t ringOrderId
Definition: csirx/v1/csirx.h:318
Csirx_InstStatus::overflowCount
uint32_t overflowCount
Definition: csirx/v1/csirx.h:463
Csirx_chCfgInit
static void Csirx_chCfgInit(Csirx_ChCfg *chCfg)
Csirx_ChCfg structure init function.
Definition: csirx/v1/csirx.h:601
Udma_ChRxPrms
UDMA RX channel parameters.
Definition: udma_ch.h:385
Csirx_InstStatus::correctedEccCount
uint32_t correctedEccCount
Definition: csirx/v1/csirx.h:483
NULL
#define NULL
Define NULL if not defined.
Definition: csl_types.h:100
fvid2.h
Csirx_ChCfg::chId
uint32_t chId
Definition: csirx/v1/csirx.h:264
Fvid2Format_init
static void Fvid2Format_init(Fvid2_Format *fmt)
Fvid2_Format structure init function.
Definition: fvid2_dataTypes.h:2195
Csirx_ChCfg
Structure containing Channels configurations.
Definition: csirx/v1/csirx.h:263
Fvid2_Format::width
uint32_t width
Definition: fvid2_dataTypes.h:1113
Csirx_CreateParams::frameDropBuf
uint64_t frameDropBuf
Definition: csirx/v1/csirx.h:405
Csirx_InstStatus::strmFIFOOvflCount
uint32_t strmFIFOOvflCount[CSIRX_NUM_STREAM_MAX]
Definition: csirx/v1/csirx.h:500
Csirx_InstStatus::crcCount
uint32_t crcCount
Definition: csirx/v1/csirx.h:475
Udma_ChRxPrms::busPriority
uint8_t busPriority
Definition: udma_ch.h:395
Csirx_CreateStatus
Capture driver create status. Returned after calling Fvid2_create().
Definition: csirx/v1/csirx.h:437
Csirx_InstStatus::spuriousUdmaIntrCount
uint32_t spuriousUdmaIntrCount
Definition: csirx/v1/csirx.h:467
Csirx_InstCfg::enableErrbypass
uint32_t enableErrbypass
Definition: csirx/v1/csirx.h:345
Csirx_instStatusInit
static void Csirx_instStatusInit(Csirx_InstStatus *status)
Csirx_InstStatus structure init function.
Definition: csirx/v1/csirx.h:643
Csirx_CreateParams::instCfg
Csirx_InstCfg instCfg
Definition: csirx/v1/csirx.h:402
Csirx_createParamsInit
static void Csirx_createParamsInit(Csirx_CreateParams *createPrms)
Csirx_CreateParams structure init function.
Definition: csirx/v1/csirx.h:583
Csirx_InitParams::drvHandle
Udma_DrvHandle drvHandle
Definition: csirx/v1/csirx.h:429
CSIRX_CH_TYPE_CAPT
#define CSIRX_CH_TYPE_CAPT
Stream type: capture mode, frames will captured to internal memory or DDR.
Definition: csirx/v1/csirx.h:222
Csirx_initParamsInit
static void Csirx_initParamsInit(Csirx_InitParams *initPrms)
Csirx_InitParams structure init function.
Definition: csirx/v1/csirx.h:578
Csirx_deInit
int32_t Csirx_deInit(void)
CSIRX Driver de-Init function.
Csirx_ChCfg::rxChParams
Udma_ChRxPrms rxChParams
Definition: csirx/v1/csirx.h:316
Fvid2_Format
FVID2 video buffer format specification.
Definition: fvid2_dataTypes.h:1109
Csirx_InstCfg
Structure containing csirx module initialization arguments.
Definition: csirx/v1/csirx.h:327
Csirx_InstStatus::invalidAccessCount
uint32_t invalidAccessCount
Definition: csirx/v1/csirx.h:491
Csirx_InstStatus
Capture status structure used to get the current status.
Definition: csirx/v1/csirx.h:446
UdmaChRxPrms_init
void UdmaChRxPrms_init(Udma_ChRxPrms *rxPrms, uint32_t chType)
Udma_ChRxPrms structure init function.
Csirx_ChCfg::outFmt
Fvid2_Format outFmt
Definition: csirx/v1/csirx.h:277
Udma_ChRxPrms::dmaPriority
uint8_t dmaPriority
Definition: udma_ch.h:401
TRUE
#define TRUE
Definition: csl_types.h:61
Csirx_InstCfg::dataLanesMap
uint32_t dataLanesMap[CSIRX_CAPT_DATA_LANES_MAX]
Definition: csirx/v1/csirx.h:338
udma.h
UDMA Driver API/interface file.
TISCI_MSG_VALUE_RM_UDMAP_CH_SCHED_PRIOR_HIGH
#define TISCI_MSG_VALUE_RM_UDMAP_CH_SCHED_PRIOR_HIGH
Definition: tisci_rm_udmap.h:210
Csirx_InstCfg::enableCsiv2p0Support
uint32_t enableCsiv2p0Support
Definition: csirx/v1/csirx.h:328
Udma_DrvHandle
void * Udma_DrvHandle
UDMA driver handle.
Definition: udma_types.h:65
Csirx_InstStatus::dataIdErrorCount
uint32_t dataIdErrorCount
Definition: csirx/v1/csirx.h:487
Csirx_InstCfg::numDataLanes
uint32_t numDataLanes
Definition: csirx/v1/csirx.h:336
Csirx_InitParams
Capture driver create arguments, used when calling Fvid2_create(). Structure containing Streams confi...
Definition: csirx/v1/csirx.h:428
Csirx_init
int32_t Csirx_init(const Csirx_InitParams *initParams)
CSIRX Driver Init function.
Fvid2_Format::height
uint32_t height
Definition: fvid2_dataTypes.h:1116
Csirx_ChCfg::vcNum
uint32_t vcNum
Definition: csirx/v1/csirx.h:271
Csirx_InstStatus::queueCount
uint32_t queueCount[CSIRX_NUM_CH]
Definition: csirx/v1/csirx.h:447
Csirx_ChCfg::chType
uint32_t chType
Definition: csirx/v1/csirx.h:268
Csirx_CreateParams::numCh
uint32_t numCh
Definition: csirx/v1/csirx.h:397
Csirx_instCfgInit
static void Csirx_instCfgInit(Csirx_InstCfg *instCfg)
Csirx_InstCfg structure init function.
Definition: csirx/v1/csirx.h:625
Udma_ChRxPrms::busOrderId
uint8_t busOrderId
Definition: udma_ch.h:399
Csirx_CreateParams
Capture driver create arguments, used when calling Fvid2_create(). Structure containing Streams confi...
Definition: csirx/v1/csirx.h:396
Csirx_InstStatus::invalidSpCount
uint32_t invalidSpCount
Definition: csirx/v1/csirx.h:495
Csirx_CreateParams::frameDropBufLen
uint32_t frameDropBufLen
Definition: csirx/v1/csirx.h:410
Csirx_InstStatus::dropCount
uint32_t dropCount[CSIRX_NUM_CH]
Definition: csirx/v1/csirx.h:455
Csirx_InstStatus::dequeueCount
uint32_t dequeueCount[CSIRX_NUM_CH]
Definition: csirx/v1/csirx.h:451
Csirx_ChCfg::inCsiDataType
uint32_t inCsiDataType
Definition: csirx/v1/csirx.h:275
Csirx_InstStatus::errorFrameCount
uint32_t errorFrameCount[CSIRX_NUM_CH]
Definition: csirx/v1/csirx.h:459
Udma_ChRxPrms::busQos
uint8_t busQos
Definition: udma_ch.h:397
Csirx_CreateParams::chCfg
Csirx_ChCfg chCfg[CSIRX_NUM_CH]
Definition: csirx/v1/csirx.h:400