/* * Copyright 2020 Rockchip Electronics Co. LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef INCLUDE_RT_MPI_RK_COMM_MB_H_ #define INCLUDE_RT_MPI_RK_COMM_MB_H_ #include "rk_type.h" #include "rk_errno.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif typedef enum rkMB_UID_E { MB_UID_VI = 0, MB_UID_VO = 1, MB_UID_VGS = 2, MB_UID_VENC = 3, MB_UID_VDEC = 4, MB_UID_VPSS = 5, MB_UID_AI = 6, MB_UID_AENC = 7, MB_UID_ADEC = 8, MB_UID_AVS = 9, MB_UID_BUTT = 10 } MB_UID_E; #define MB_INVALID_POOLID (-1U) #define MB_INVALID_HANDLE NULL #define MB_MAX_COMM_POOLS 16 #define MB_MAX_MOD_COMM_POOLS 16 #define MB_MAX_COUNT 10240 /* Generall common pool use this owner id, module common pool use VB_UID as owner id */ #define POOL_OWNER_COMMON -1 /* Private pool use this owner id */ #define POOL_OWNER_PRIVATE -2 typedef RK_U32 MB_POOL; typedef void * MB_BLK; typedef enum rkMB_BUF_SYNC_TYPE_E { MB_BUF_SYNC_TYPE_READ = 0, MB_BUF_SYNC_TYPE_WRITE, MB_BUF_SYNC_TYPE_RW, } MB_BUF_SYNC_TYPE_E; typedef enum rkMB_ALLOC_TYPE { MB_ALLOC_TYPE_UNUSED = -1, MB_ALLOC_TYPE_DMA = 0, MB_ALLOC_TYPE_MALLOC, MB_ALLOC_TYPE_MAX, } MB_ALLOC_TYPE_E; typedef enum rkMB_REMAP_MODE_E { MB_REMAP_MODE_NONE = 0, /* no remap */ MB_REMAP_MODE_NOCACHE = 1 << 8, /* no cache remap */ MB_REMAP_MODE_CACHED = 1 << 9, /* cache remap, if you use this mode, you should flush cache by yourself */ MB_REMAP_MODE_BUTT } MB_REMAP_MODE_E; typedef enum rkMB_DMA_TYPE_E { MB_DMA_TYPE_NONE = 0, /* Physically Non-Continuous memory default */ MB_DMA_TYPE_CMA = 1 << 12, /* Physically Continuous memory */ MB_DMA_TYPE_BUTT } MB_DMA_TYPE_E; typedef struct rkMB_POOL_CONFIG_S { RK_U64 u64MBSize; RK_U32 u32MBCnt; MB_REMAP_MODE_E enRemapMode; MB_ALLOC_TYPE_E enAllocType; MB_DMA_TYPE_E enDmaType; RK_BOOL bPreAlloc; } MB_POOL_CONFIG_S; typedef struct rkMB_CONFIG_S { RK_U32 u32MaxPoolCnt; MB_POOL_CONFIG_S astCommPool[MB_MAX_COMM_POOLS]; } MB_CONFIG_S; typedef RK_S32 (*RK_MPI_MB_FREE_CB)(void *); typedef struct _rkMB_EXT_CONFIG_S { RK_U8 *pu8VirAddr; RK_U64 u64PhyAddr; RK_S32 s32Fd; RK_U64 u64Size; RK_MPI_MB_FREE_CB pFreeCB; RK_VOID *pOpaque; } MB_EXT_CONFIG_S; #define RK_ERR_MB_NULL_PTR RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) #define RK_ERR_MB_NOMEM RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM) #define RK_ERR_MB_NOBUF RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF) #define RK_ERR_MB_UNEXIST RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST) #define RK_ERR_MB_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) #define RK_ERR_MB_NOTREADY RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY) #define RK_ERR_MB_BUSY RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY) #define RK_ERR_MB_NOT_PERM RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) #define RK_ERR_MB_SIZE_NOT_ENOUGH RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_SIZE_NOT_ENOUGH) #define RK_ERR_MB_2MPOOLS RK_DEF_ERR(RK_ID_MB, RK_ERR_LEVEL_ERROR, RK_ERR_BUTT + 1) #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif /* INCLUDE_RT_MPI_RK_COMM_MB_H_ */