1*4882a593Smuzhiyun /* GPL-2.0 WITH Linux-syscall-note OR Apache 2.0 */ 2*4882a593Smuzhiyun /* Copyright (c) 2021 Fuzhou Rockchip Electronics Co., Ltd */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef INCLUDE_RT_MPI_RK_COMM_MB_H_ 5*4882a593Smuzhiyun #define INCLUDE_RT_MPI_RK_COMM_MB_H_ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include "rk_type.h" 8*4882a593Smuzhiyun #include "rk_errno.h" 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifdef __cplusplus 11*4882a593Smuzhiyun #if __cplusplus 12*4882a593Smuzhiyun extern "C" { 13*4882a593Smuzhiyun #endif 14*4882a593Smuzhiyun #endif 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun typedef enum rkMB_UID_E { 17*4882a593Smuzhiyun MB_UID_VI = 0, 18*4882a593Smuzhiyun MB_UID_VO = 1, 19*4882a593Smuzhiyun MB_UID_VGS = 2, 20*4882a593Smuzhiyun MB_UID_VENC = 3, 21*4882a593Smuzhiyun MB_UID_VDEC = 4, 22*4882a593Smuzhiyun MB_UID_VPSS = 5, 23*4882a593Smuzhiyun MB_UID_AI = 6, 24*4882a593Smuzhiyun MB_UID_AENC = 7, 25*4882a593Smuzhiyun MB_UID_ADEC = 8, 26*4882a593Smuzhiyun MB_UID_AVS = 9, 27*4882a593Smuzhiyun MB_UID_BUTT = 10 28*4882a593Smuzhiyun } MB_UID_E; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #define MB_INVALID_POOLID (-1U) 31*4882a593Smuzhiyun #define MB_INVALID_HANDLE NULL 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #define MB_MAX_COMM_POOLS 16 34*4882a593Smuzhiyun #define MB_MAX_MOD_COMM_POOLS 16 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define MB_MAX_COUNT 10240 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* Generall common pool use this owner id, module common pool use VB_UID as owner id */ 39*4882a593Smuzhiyun #define POOL_OWNER_COMMON -1 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* Private pool use this owner id */ 42*4882a593Smuzhiyun #define POOL_OWNER_PRIVATE -2 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun typedef RK_U32 MB_POOL; 45*4882a593Smuzhiyun typedef void * MB_BLK; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun typedef enum rkMB_BUF_SYNC_TYPE_E { 48*4882a593Smuzhiyun MB_BUF_SYNC_TYPE_READ = 0, 49*4882a593Smuzhiyun MB_BUF_SYNC_TYPE_WRITE, 50*4882a593Smuzhiyun MB_BUF_SYNC_TYPE_RW, 51*4882a593Smuzhiyun } MB_BUF_SYNC_TYPE_E; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun typedef enum rkMB_ALLOC_TYPE { 54*4882a593Smuzhiyun MB_ALLOC_TYPE_UNUSED = -1, 55*4882a593Smuzhiyun MB_ALLOC_TYPE_DMA = 0, 56*4882a593Smuzhiyun MB_ALLOC_TYPE_MALLOC, 57*4882a593Smuzhiyun MB_ALLOC_TYPE_MAX, 58*4882a593Smuzhiyun } MB_ALLOC_TYPE_E; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun typedef enum rkMB_REMAP_MODE_E { 61*4882a593Smuzhiyun MB_REMAP_MODE_NONE = 0, /* no remap */ 62*4882a593Smuzhiyun MB_REMAP_MODE_NOCACHE = 1 << 8, /* no cache remap */ 63*4882a593Smuzhiyun MB_REMAP_MODE_CACHED = 1 << 9, /* cache remap, if you use this mode, you should flush cache by yourself */ 64*4882a593Smuzhiyun MB_REMAP_MODE_BUTT 65*4882a593Smuzhiyun } MB_REMAP_MODE_E; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun typedef enum rkMB_DMA_TYPE_E { 68*4882a593Smuzhiyun MB_DMA_TYPE_NONE = 0, /* Physically Non-Continuous memory default */ 69*4882a593Smuzhiyun MB_DMA_TYPE_CMA = 1 << 12, /* Physically Continuous memory */ 70*4882a593Smuzhiyun MB_DMA_TYPE_BUTT 71*4882a593Smuzhiyun } MB_DMA_TYPE_E; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun typedef struct rkMB_POOL_CONFIG_S { 74*4882a593Smuzhiyun RK_U64 u64MBSize; 75*4882a593Smuzhiyun RK_U32 u32MBCnt; 76*4882a593Smuzhiyun MB_REMAP_MODE_E enRemapMode; 77*4882a593Smuzhiyun MB_ALLOC_TYPE_E enAllocType; 78*4882a593Smuzhiyun MB_DMA_TYPE_E enDmaType; 79*4882a593Smuzhiyun RK_BOOL bPreAlloc; 80*4882a593Smuzhiyun } MB_POOL_CONFIG_S; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun typedef struct rkMB_CONFIG_S { 83*4882a593Smuzhiyun RK_U32 u32MaxPoolCnt; 84*4882a593Smuzhiyun MB_POOL_CONFIG_S astCommPool[MB_MAX_COMM_POOLS]; 85*4882a593Smuzhiyun } MB_CONFIG_S; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun typedef RK_S32 (*RK_MPI_MB_FREE_CB)(void *); 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun typedef struct _rkMB_EXT_CONFIG_S { 90*4882a593Smuzhiyun RK_U8 *pu8VirAddr; 91*4882a593Smuzhiyun RK_U64 u64PhyAddr; 92*4882a593Smuzhiyun RK_S32 s32Fd; 93*4882a593Smuzhiyun RK_U64 u64Size; 94*4882a593Smuzhiyun RK_MPI_MB_FREE_CB pFreeCB; 95*4882a593Smuzhiyun RK_VOID *pOpaque; 96*4882a593Smuzhiyun } MB_EXT_CONFIG_S; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #define RK_ERR_MB_NULL_PTR RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) 99*4882a593Smuzhiyun #define RK_ERR_MB_NOMEM RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM) 100*4882a593Smuzhiyun #define RK_ERR_MB_NOBUF RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF) 101*4882a593Smuzhiyun #define RK_ERR_MB_UNEXIST RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST) 102*4882a593Smuzhiyun #define RK_ERR_MB_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) 103*4882a593Smuzhiyun #define RK_ERR_MB_NOTREADY RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY) 104*4882a593Smuzhiyun #define RK_ERR_MB_BUSY RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY) 105*4882a593Smuzhiyun #define RK_ERR_MB_NOT_PERM RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) 106*4882a593Smuzhiyun #define RK_ERR_MB_SIZE_NOT_ENOUGH RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_SIZE_NOT_ENOUGH) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #define RK_ERR_MB_2MPOOLS RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_BUTT + 1) 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #ifdef __cplusplus 111*4882a593Smuzhiyun #if __cplusplus 112*4882a593Smuzhiyun } 113*4882a593Smuzhiyun #endif 114*4882a593Smuzhiyun #endif /* __cplusplus */ 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun #endif /* INCLUDE_RT_MPI_RK_COMM_MB_H_ */ 117*4882a593Smuzhiyun 118