/* * Copyright (c) 2008-2016 Allwinner Technology Co. Ltd. * All rights reserved. * * File : ve_interface.h * Description : * History : * Author : xyliu * Date : 2016/04/13 * Comment : * * */ #ifndef VE_INTERFACE_H #define VE_INTERFACE_H #include #include #ifdef __cplusplus extern "C" { #endif typedef enum VE_REGISTER_GROUP { REG_GROUP_VETOP = 0, REG_GROUP_MPEG_DECODER = 1, REG_GROUP_H264_DECODER = 2, REG_GROUP_VC1_DECODER = 3, REG_GROUP_RV_DECODER = 4, REG_GROUP_H265_DECODER = 5, REG_GROUP_JPEG_DECODER = 6, REG_GROUP_AVS_DECODER = 2 }ve_register_group_e; enum EVEOPSTYPE{ VE_OPS_TYPE_NORMAL = 0, VE_OPS_TYPE_VP9 = 1, }; enum DRAMTYPE { DDRTYPE_DDR1_16BITS = 0, DDRTYPE_DDR1_32BITS = 1, DDRTYPE_DDR2_16BITS = 2, DDRTYPE_DDR2_32BITS = 3, DDRTYPE_DDR3_16BITS = 4, DDRTYPE_DDR3_32BITS = 5, DDRTYPE_DDR3_64BITS = 6, DDRTYPE_MIN = DDRTYPE_DDR1_16BITS, DDRTYPE_MAX = DDRTYPE_DDR3_64BITS, }; enum CHIPID_ { CHIP_UNKNOWN = 0, CHIP_H3s = 1, CHIP_H3 = 2, CHIP_H2 = 3, CHIP_H2PLUS = 4, }; enum RESET_VE_MODE { RESET_VE_NORMAL = 0, RESET_VE_SPECIAL = 1, // for dtmb, we should reset ve not reset decode }; enum VE_WORK_MODE { VE_NORMAL_MODE = 0, VE_DEC_MODE = 1, VE_ENC_MODE = 2, VE_JPG_DEC_MODE = 3, }; struct user_iommu_param { int fd; unsigned int iommu_addr; }; typedef struct VE_PROC_INFO { unsigned char channel_id; unsigned int proc_info_len; }ve_proc_info_t; typedef struct VeConfig { int nDecoderFlag; int nEncoderFlag; int nFormat; int nWidth; int nEnableAfbcFlag; int nResetVeMode; unsigned int nVeFreq; }VeConfig; typedef struct VeOpsS { void *(*init)(VeConfig*); void (*release)(void*); int (*lock)(void*); int (*unlock)(void*); void (*reset)(void*); int (*waitInterrupt)(void*); int (*getChipId)(void*); uint64_t (*getIcVeVersion)(void*); void* (*getGroupRegAddr)(void*, int); int (*getDramType)(void*); unsigned int (*getPhyOffset)(void*); void (*setDramType)(void*); void (*setDdrMode)(void*, int); int (*setSpeed)(void*, int); void (*setEnableAfbcFlag)(void*, int); void (*setAdjustDramSpeedFlag)(void*, int); void (*enableVe)(void*); void (*disableVe)(void*); void (*initEncoderPerformance)(void*, int); void (*unInitEncoderPerformance)(void*, int); int (*getIommuAddr)(void* , struct user_iommu_param *); int (*freeIommuAddr)(void* , struct user_iommu_param *); int (*setProcInfo)(void*, char*, unsigned int, unsigned char); int (*stopProcInfo)(void*, unsigned char); }VeOpsS; static inline void* CdcVeInit(VeOpsS *veops, VeConfig* pVeConfig) { return veops->init(pVeConfig); } static inline void CdcVeRelease(VeOpsS *veops, void *p) { veops->release(p); } static inline int CdcVeLock(VeOpsS *veops, void *p) { return veops->lock(p); } static inline int CdcVeUnLock(VeOpsS *veops, void *p) { return veops->unlock(p); } static inline void CdcVeReset(VeOpsS *veops, void *p) { veops->reset(p); } static inline int CdcVeWaitInterrupt(VeOpsS *veops, void *p) { return veops->waitInterrupt(p); } static inline int CdcVeGetChipId(VeOpsS *veops, void *p) { return veops->getChipId(p); } static inline uint64_t CdcVeGetIcVeVersion(VeOpsS *veops, void *p) { return veops->getIcVeVersion(p); } static inline void* CdcVeGetGroupRegAddr(VeOpsS *veops, void *p, int nGroupId) { return veops->getGroupRegAddr(p, nGroupId); } static inline int CdcVeGetDramType(VeOpsS *veops, void *p) { return veops->getDramType(p); } static inline unsigned int CdcVeGetPhyOffset(VeOpsS *veops, void *p) { return veops->getPhyOffset(p); } static inline void CdcVeSetDramType(VeOpsS *veops, void *p) { veops->setDramType(p); } static inline void CdcVeSetDdrMode(VeOpsS *veops, void *p, int ddr_mode) { veops->setDdrMode(p, ddr_mode); } static inline int CdcVeSetSpeed(VeOpsS *veops, void *p, int nSpeedMHz) { return veops->setSpeed(p, nSpeedMHz); } static inline void CdcVeSetEnableAfbcFlag(VeOpsS *veops, void *p, int bEnableFlag) { veops->setEnableAfbcFlag(p, bEnableFlag); } static inline void CdcVeSetAdjustDramSpeedFlag(VeOpsS *veops, void *p, int bEnableFlag) { veops->setAdjustDramSpeedFlag(p, bEnableFlag); } static inline void CdcVeEnableVe(VeOpsS *veops, void *p) { veops->enableVe(p); } static inline void CdcVeDisableVe(VeOpsS *veops, void *p) { veops->disableVe(p); } static inline void CdcVeInitEncoderPerformance(VeOpsS *veops, void *p, int nMode) { veops->initEncoderPerformance(p, nMode); } static inline void CdcVeUnInitEncoderPerformance(VeOpsS *veops, void *p, int nMode) { veops->unInitEncoderPerformance(p, nMode); } static inline int CdcVeGetIommuAddr(VeOpsS *veops, void *p, struct user_iommu_param *iommu_buffer) { return veops->getIommuAddr(p, iommu_buffer); } static inline int CdcVeFreeIommuAddr(VeOpsS *veops, void *p, struct user_iommu_param *iommu_buffer) { return veops->freeIommuAddr(p, iommu_buffer); } static inline int CdcVeSetProcInfo(VeOpsS *veops, void *p, char *proc_info_buf, unsigned int buf_len, unsigned char cChannelNum) { return veops->setProcInfo(p, proc_info_buf, buf_len, cChannelNum); } static inline int CdcVeStopProcInfo(VeOpsS *veops, void *p, unsigned char cChannelNum) { return veops->stopProcInfo(p, cChannelNum); } #ifdef __cplusplus } #endif #endif