1 /* 2 * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef __MPI_SYS_H__ 17 #define __MPI_SYS_H__ 18 19 #include "hi_type.h" 20 #include "hi_common.h" 21 #include "hi_comm_sys.h" 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif /* End of #ifdef __cplusplus */ 26 27 HI_S32 HI_MPI_SYS_Init(HI_VOID); 28 HI_S32 HI_MPI_SYS_Exit(HI_VOID); 29 30 HI_S32 HI_MPI_SYS_SetConfig(const MPP_SYS_CONFIG_S *pstSysConfig); 31 HI_S32 HI_MPI_SYS_GetConfig(MPP_SYS_CONFIG_S *pstSysConfig); 32 33 HI_S32 HI_MPI_SYS_Bind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn); 34 HI_S32 HI_MPI_SYS_UnBind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn); 35 HI_S32 HI_MPI_SYS_GetBindbyDest(const MPP_CHN_S *pstDestChn, MPP_CHN_S *pstSrcChn); 36 HI_S32 HI_MPI_SYS_GetBindbySrc(const MPP_CHN_S *pstSrcChn, MPP_BIND_DEST_S *pstBindDest); 37 38 HI_S32 HI_MPI_SYS_GetVersion(MPP_VERSION_S *pstVersion); 39 40 HI_S32 HI_MPI_SYS_GetChipId(HI_U32 *pu32ChipId); 41 HI_S32 HI_MPI_SYS_GetUniqueId(HI_UNIQUE_ID_S *pstUniqueId); 42 43 HI_S32 HI_MPI_SYS_GetCustomCode(HI_U32 *pu32CustomCode); 44 45 /* 46 * u64Base is the global PTS of the system. 47 * ADVICE: 48 * 1. Better to call HI_MPI_SYS_GetCurPTS on the host board to get u64Base. 49 * 2. When os start up, call HI_MPI_SYS_InitPTSBase to set the init PTS. 50 * 3. When media bussines is running, synchronize the PTS one time per minute 51 * by calling HI_MPI_SYS_SyncPTS. 52 */ 53 HI_S32 HI_MPI_SYS_GetCurPTS(HI_U64 *pu64CurPTS); 54 HI_S32 HI_MPI_SYS_InitPTSBase(HI_U64 u64PTSBase); 55 HI_S32 HI_MPI_SYS_SyncPTS(HI_U64 u64PTSBase); 56 57 /* alloc mmz memory in user context */ 58 HI_S32 HI_MPI_SYS_MmzAlloc(HI_U64 *pu64PhyAddr, HI_VOID **ppVirAddr, 59 const HI_CHAR *strMmb, const HI_CHAR *strZone, HI_U32 u32Len); 60 61 /* alloc mmz memory with cache */ 62 HI_S32 HI_MPI_SYS_MmzAlloc_Cached(HI_U64 *pu64PhyAddr, HI_VOID **ppVirAddr, 63 const HI_CHAR *pstrMmb, const HI_CHAR *pstrZone, HI_U32 u32Len); 64 65 /* free mmz memory in user context */ 66 HI_S32 HI_MPI_SYS_MmzFree(HI_U64 u64PhyAddr, HI_VOID *pVirAddr); 67 68 /* fulsh cache */ 69 HI_S32 HI_MPI_SYS_MmzFlushCache(HI_U64 u64PhyAddr, HI_VOID *pVirAddr, HI_U32 u32Size); 70 71 /* 72 * Call the mmap function to map physical address to virtual address 73 * The system function mmap is too complicated, so we packge it. 74 */ 75 HI_VOID *HI_MPI_SYS_Mmap(HI_U64 u64PhyAddr, HI_U32 u32Size); 76 HI_VOID *HI_MPI_SYS_MmapCache(HI_U64 u64PhyAddr, HI_U32 u32Size); 77 HI_S32 HI_MPI_SYS_Munmap(HI_VOID *pVirAddr, HI_U32 u32Size); 78 HI_S32 HI_MPI_SYS_MflushCache(HI_U64 u64PhyAddr, HI_VOID *pVirAddr, HI_U32 u32Size); 79 80 HI_S32 HI_MPI_SYS_SetMemConfig(const MPP_CHN_S *pstMppChn, const HI_CHAR *pcMmzName); 81 HI_S32 HI_MPI_SYS_GetMemConfig(const MPP_CHN_S *pstMppChn, HI_CHAR *pcMmzName); 82 83 /* Close all the FD which is used by sys module */ 84 HI_S32 HI_MPI_SYS_CloseFd(HI_VOID); 85 86 /* Get virtual meminfo according to virtual addr, should be in one process */ 87 HI_S32 HI_MPI_SYS_GetVirMemInfo(const void *pVirAddr, SYS_VIRMEM_INFO_S *pstMemInfo); 88 89 /* Set/get Scale coefficient level for VPSS/VGS */ 90 HI_S32 HI_MPI_SYS_SetScaleCoefLevel(const SCALE_RANGE_S *pstScaleRange, 91 const SCALE_COEFF_LEVEL_S *pstScaleCoeffLevel); 92 HI_S32 HI_MPI_SYS_GetScaleCoefLevel(const SCALE_RANGE_S *pstScaleRange, SCALE_COEFF_LEVEL_S *pstScaleCoeffLevel); 93 94 /* Set/Get local timezone, range: [-86400, 86400] seconds (that is: [-24, 24] hours) */ 95 HI_S32 HI_MPI_SYS_SetTimeZone(HI_S32 s32TimeZone); 96 HI_S32 HI_MPI_SYS_GetTimeZone(HI_S32 *ps32TimeZone); 97 98 HI_S32 HI_MPI_SYS_SetGPSInfo(const GPS_INFO_S *pstGPSInfo); 99 HI_S32 HI_MPI_SYS_GetGPSInfo(GPS_INFO_S *pstGPSInfo); 100 101 HI_S32 HI_MPI_SYS_SetTuningConnect(HI_S32 s32Connect); 102 HI_S32 HI_MPI_SYS_GetTuningConnect(HI_S32 *ps32Connect); 103 104 HI_S32 HI_MPI_SYS_SetVIVPSSMode(const VI_VPSS_MODE_S *pstVIVPSSMode); 105 HI_S32 HI_MPI_SYS_GetVIVPSSMode(VI_VPSS_MODE_S *pstVIVPSSMode); 106 107 HI_S32 HI_MPI_SYS_GetVPSSVENCWrapBufferLine(VPSS_VENC_WRAP_PARAM_S *pWrapParam, HI_U32 *pu32BufLine); 108 109 HI_S32 HI_MPI_LOG_SetLevelConf(LOG_LEVEL_CONF_S *pstConf); 110 HI_S32 HI_MPI_LOG_GetLevelConf(LOG_LEVEL_CONF_S *pstConf); 111 112 HI_S32 HI_MPI_SYS_SetRawFrameCompressParam(const RAW_FRAME_COMPRESS_PARAM_S *pstCompressParam); 113 HI_S32 HI_MPI_SYS_GetRawFrameCompressParam(RAW_FRAME_COMPRESS_PARAM_S *pstCompressParam); 114 115 HI_S32 HI_MPI_LOG_SetWaitFlag(HI_BOOL bWait); 116 117 HI_S32 HI_MPI_LOG_Read(HI_CHAR *pBuf, HI_U32 u32Size); 118 119 HI_VOID HI_MPI_LOG_Close(HI_VOID); 120 121 #ifdef __cplusplus 122 } 123 #endif /* End of #ifdef __cplusplus */ 124 125 #endif /* __MPI_SYS_H__ */ 126