/** Header file for TS MUXER/TS DEMUXER/HWCOPY Engine Integration module This file is the header file for TS MUXER/TS DEMUXER/HWCOPY Engine Integration module driver The user can reference this section for the detail description of the each driver API usage and also the parameter descriptions and its limitations. The overall combinational usage flow is introduced in the application note document, and the user must reference to the application note for the driver usage flow. @file tse.h @ingroup mIDrvMisc_TSE @note Nothing Copyright Novatek Microelectronics Corp. 2016. All rights reserved. */ /** @addtogroup mIDrvMisc_TSE */ //@{ #ifndef _TSE_H #define _TSE_H #include "kwrap/type.h" #define DRV_LIMIT_ALIGN_BYTE 0x00000001 // Byte alignment #define DRV_LIMIT_ALIGN_HALFWORD 0x00000002 // Half-word (2 Bytes) alignment #define DRV_LIMIT_ALIGN_WORD 0x00000004 // Word ( 4 bytes) alignment #define DRV_LIMIT_ALIGN_2WORD 0x00000008 // 2 words ( 8 bytes) alignment #define DRV_LIMIT_ALIGN_4WORD 0x00000010 // 4 words (16 bytes) alignment #define DRV_LIMIT_ALIGN_8WORD 0x00000020 // 8 words (32 bytes) alignment /**************** TSE_MODE_TSMUX ****************/ #define TSE_MUX_SRC_ADDR_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_MUX_SRC_BUF_BLK_SIZE_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_MUX_SRC_BUF_LAST_BLK_SIZE_ALIGN DRV_LIMIT_ALIGN_BYTE #define TSE_MUX_DST_ADDR_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_MUX_DST_BUF_BLK_SIZE_ALIGN DRV_LIMIT_ALIGN_WORD /**************** TSE_MODE_TSDEMUX ****************/ #define TSE_DEMUX_SRC_ADDR_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_DEMUX_SRC_BUF_BLK_SIZE_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_DEMUX_SRC_BUF_LAST_BLK_SIZE_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_DEMUX_DST_ADDR_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_DEMUX_DST_BUF_BLK_SIZE_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_DEMUX_DST_BUF_LAST_BLK_SIZE_ALIGN DRV_LIMIT_ALIGN_BYTE /**************** TSE_MODE_HWCOPY ****************/ //HWCOPY_LINEAR_COPY #define TSE_LINEAR_CPY_SRC_ADDR_ALIGN DRV_LIMIT_ALIGN_BYTE #define TSE_LINEAR_CPY_SRC_SIZE_ALIGN DRV_LIMIT_ALIGN_BYTE #define TSE_LINEAR_CPY_DST_ADDR_ALIGN DRV_LIMIT_ALIGN_BYTE //HWCOPY_LINEAR_SET #define TSE_LINEAR_SET_DST_ADDR_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_LINEAR_SET_DST_SIZE_ALIGN DRV_LIMIT_ALIGN_WORD #define TSE_CFG_MASK 0x10000000 #define TSE_MUX_MASK 0x20000000 #define TSE_DEMUX_MASK 0x40000000 #define TSE_HWCPY_MASK 0x80000000 /** TSE module general configuration Selection This is used in tse_setConfig()/tse_getConfig() to specify which of the function is selected to assign new configuration. */ typedef enum { TSE_CFG_ID_FREQ = TSE_CFG_MASK, ///< TSE operating frequency (unit: MHz). Context can be: ///< - @b 240 MHz ///< - @b 320 MHz ///< - @b 360 MHz TSE_CFG_ID_MAX, TSMUX_CFG_ID_PAYLOADSIZE = TSE_MUX_MASK, ///< Configure the TS packet payload size. ///< - @b 184 bytes ///< - @b 176 bytes ///< - @b 160 bytes TSMUX_CFG_ID_SRC_INFO, ///< Muxing input buffer information. data type TSE_BUF_INFO TSMUX_CFG_ID_DST_INFO, ///< Muxing output buffer information. data type TSE_BUF_INFO ///< it would output warning messages as notifications. TSMUX_CFG_ID_MUXING_LEN, ///< Get Last Mux output size. TSMUX_CFG_ID_SYNC_BYTE, ///< TS Stream header's Field: Sync Byte. TSMUX_CFG_ID_CONTINUITY_CNT, ///< TS Stream header's Field: continuity counter initial value. Valid value 0x0 ~ 0xF. TSMUX_CFG_ID_PID, ///< TS Stream header's Field: 13-bits Packet ID. Valid value 0x0 ~ 0x1FFF. TSMUX_CFG_ID_TEI, ///< TS Stream header's Field: Transport Error Indicator. Valid value 0 or 1. TSMUX_CFG_ID_TP, ///< TS Stream header's Field: Transport Priority. Valid value 0 or 1. TSMUX_CFG_ID_SCRAMBLECTRL, ///< TS Stream header's Field: Scrambling Control. Valid value 0~3. The value 0 means Not Scrambled. TSMUX_CFG_ID_START_INDICTOR, ///< TS Stream header's Field: Payload Unit Start Indicator bit. TSMUX_CFG_ID_STUFF_VAL, ///< Set Stuff values. Default value is 0x00. TSMUX_CFG_ID_ADAPT_FLAGS, ///< Set 8bits adaptation field flags. TSMUX_CFG_ID_CON_CURR_CNT, ///< Get continue current counter value. TSMUX_CFG_ID_LAST_DATA_MUX_MODE, ///< Select muxing data into 1 or 2 TS packet, only valid at remaining data is equal to 183 bytes(528) ///< - @b 0: 2ts packets ///< - @b 1: 1ts packets TSMUX_CFG_ID_PHY_ADDR_EN, ///< Set PHY address enable TSMUX_CFG_ID_MAX, TSDEMUX_CFG_ID_SYNC_BYTE = TSE_DEMUX_MASK, ///< Set SYNC Byte checking value. Default is 0x47. TSDEMUX_CFG_ID_ADAPTATION_FLAG, ///< Set Adaptation Flag checking value. Default is 0x00. TSDEMUX_CFG_ID_PID0_ENABLE, ///< Enable/Disable of the filtering for TS packet's payload with PID0. TSDEMUX_CFG_ID_PID1_ENABLE, ///< Enable/Disable of the filtering for TS packet's payload with PID1. TSDEMUX_CFG_ID_PID2_ENABLE, ///< Enable/Disable of the filtering for TS packet's payload with PID2. TSDEMUX_CFG_ID_PID0_VALUE, ///< 13bits PID-0 value. TSDEMUX_CFG_ID_PID1_VALUE, ///< 13bits PID-1 value. TSDEMUX_CFG_ID_PID2_VALUE, ///< 13bits PID-2 value. TSDEMUX_CFG_ID_CONTINUITY0_MODE, ///< TSDEMUX_CFG_ID_CONTINUITY1_MODE, ///< TSDEMUX_CFG_ID_CONTINUITY2_MODE, ///< TSDEMUX_CFG_ID_CONTINUITY0_VALUE, ///< TSDEMUX_CFG_ID_CONTINUITY1_VALUE, ///< TSDEMUX_CFG_ID_CONTINUITY2_VALUE, ///< TSDEMUX_CFG_ID_CONTINUITY0_LAST, ///< Get the last continuity counter value after previous operation done. TSDEMUX_CFG_ID_CONTINUITY1_LAST, ///< Get the last continuity counter value after previous operation done. TSDEMUX_CFG_ID_CONTINUITY2_LAST, ///< Get the last continuity counter value after previous operation done. TSDEMUX_CFG_ID_IN_INFO, ///< Set Input buffer info. data type TSE_BUF_INFO TSDEMUX_CFG_ID_OUT0_INFO, ///< Set Out0 buffer info. data type TSE_BUF_INFO TSDEMUX_CFG_ID_OUT1_INFO, ///< Set Out1 buffer info. data type TSE_BUF_INFO TSDEMUX_CFG_ID_OUT2_INFO, ///< Set Out2 buffer info. data type TSE_BUF_INFO TSDEMUX_CFG_ID_OUT0_TOTAL_LEN, ///< Get Last output size. TSDEMUX_CFG_ID_OUT1_TOTAL_LEN, ///< Get Last output size. TSDEMUX_CFG_ID_OUT2_TOTAL_LEN, ///< Get Last output size. TSDEMUX_CFG_ID_PHY_ADDR_EN, ///< Set PHY address enable TSDEMUX_CFG_ID_MAX, HWCOPY_CFG_ID_CMD = TSE_HWCPY_MASK, ///< Set hwcopy command HWCOPY_CFG_ID_CTEX, ///< Set constant value HWCOPY_CFG_ID_SRC_ADDR, ///< Set Input Start Address HWCOPY_CFG_ID_DST_ADDR, ///< Set Output Start Address HWCOPY_CFG_ID_SRC_LEN, ///< Set Input Size HWCOPY_CFG_ID_TOTAL_LEN, ///< Get Output Size HWCOPY_CFG_ID_CACHE_FLUSH, ///< Set cache flush HWCOPY_CFG_ID_PHY_ADDR_EN, ///< Set PHY address enable HWCOPY_CFG_ID_MAX, ENUM_DUMMY4WORD(TSE_CFG_ID) } TSE_CFG_ID; /** HwCopy operation cmmand Select which HwCopy operation command for HwCopy engine operation. */ typedef enum { HWCOPY_LINEAR_SET, //0x0 ///< linear set constant to addressed memory HWCOPY_LINEAR_COPY, //0x1 ///< linear copy to addressed memory ENUM_DUMMY4WORD(HWCOPY_CMD) } HWCOPY_CMD; typedef struct _TSE_BUF_INFO { UINT32 addr; UINT32 size; struct _TSE_BUF_INFO *pnext; ///< Link to next property description. (Fill NULL if this is last item) } TSE_BUF_INFO; /* TSE_MODE */ typedef enum { TSE_MODE_TSMUX, TSE_MODE_TSDEMUX, TSE_MODE_HWCOPY, TSE_MODE_MAX_NUM, ENUM_DUMMY4WORD(TSE_MODE_NUM) } TSE_MODE_NUM; typedef enum { INT_STS_COMPLETE = (1 << 0), INT_STS_INPUT_END = (1 << 1), INT_STS_OUT0_FULL = (1 << 4), INT_STS_OUT1_FULL = (1 << 5), INT_STS_OUT2_FULL = (1 << 6), INT_STS_CONTY0_ERR = (1 << 8), INT_STS_TEI0 = (1 << 9), INT_STS_SYNC0_ERR = (1 << 10), INT_STS_ADAPFLG0_ERR = (1 << 11), INT_STS_CONTY1_ERR = (1 << 16), INT_STS_TEI1 = (1 << 17), INT_STS_SYNC1_ERR = (1 << 18), INT_STS_ADAPFLG1_ERR = (1 << 19), INT_STS_CONTY2_ERR = (1 << 24), INT_STS_TEI2 = (1 << 25), INT_STS_SYNC2_ERR = (1 << 26), INT_STS_ADAPFLG2_ERR = (1 << 27), ENUM_DUMMY4WORD(TSE_INT_STS) } TSE_INT_STS; #define TSE_INT_ERR0_STS (INT_STS_CONTY0_ERR | INT_STS_TEI0 | INT_STS_SYNC0_ERR | INT_STS_ADAPFLG0_ERR) #define TSE_INT_ERR1_STS (INT_STS_CONTY1_ERR | INT_STS_TEI1 | INT_STS_SYNC1_ERR | INT_STS_ADAPFLG1_ERR) #define TSE_INT_ERR2_STS (INT_STS_CONTY2_ERR | INT_STS_TEI2 | INT_STS_SYNC2_ERR | INT_STS_ADAPFLG2_ERR) // // Extern APIs // extern ER tse_open(void); extern ER tse_close(void); extern BOOL tse_isOpened(void); extern ER tse_start(BOOL bWait, TSE_MODE_NUM OP_MODE); extern ER tse_waitDone(void); extern ER tse_setConfig(TSE_CFG_ID CfgID, UINT32 uiCfgValue); extern UINT32 tse_getConfig(TSE_CFG_ID CfgID); extern UINT32 tse_getIntStatus(void); extern UINT32 tse_init(void); extern UINT32 tse_uninit(void); //@} #endif