/* * This header file describes the public interface of the libvmeta library. */ #ifndef VDEC_OS_DRIVER_H #define VDEC_OS_DRIVER_H #ifdef __cplusplus extern "C" { #endif //--------------------------------------------------------------------------- // Macros //--------------------------------------------------------------------------- #ifndef UNSG32 #define UNSG32 unsigned int #endif #ifndef SIGN32 #define SIGN32 int #endif #ifndef UNSG16 #define UNSG16 unsigned short #endif #ifndef SIGN16 #define SIGN16 short #endif #ifndef UNSG8 #define UNSG8 unsigned char #endif #ifndef SIGN8 #define SIGN8 char #endif enum dma_data_direction { DMA_BIDIRECTIONAL = 0, DMA_TO_DEVICE = 1, DMA_FROM_DEVICE = 2, DMA_NONE = 3, }; //--------------------------------------------------------------------------- // Driver initialization API //--------------------------------------------------------------------------- SIGN32 vdec_os_driver_init(void); SIGN32 vdec_os_driver_clean(void); SIGN32 vdec_os_driver_version(SIGN8 *ver_str); SIGN32 vdec_os_api_force_ini(void); //--------------------------------------------------------------------------- // Memory operation API //--------------------------------------------------------------------------- void * vdec_os_api_dma_alloc(UNSG32 size, UNSG32 align, UNSG32 * pPhysical); void * vdec_os_api_dma_alloc_writecombine(UNSG32 size, UNSG32 align, UNSG32 * pPhysical); void * vdec_os_api_dma_alloc_cached(UNSG32 size, UNSG32 align, UNSG32 * pPhysical); void vdec_os_api_dma_free(void *ptr); void *vdec_os_api_vmalloc(UNSG32 size, UNSG32 align); // always return VA and can't be translated to PA void vdec_os_api_vfree(void *ptr); UNSG32 vdec_os_api_get_va(UNSG32 paddr); UNSG32 vdec_os_api_get_pa(UNSG32 vaddr); UNSG32 vdec_os_api_flush_cache(UNSG32 vaddr, UNSG32 size, enum dma_data_direction direction); SIGN32 vdec_os_api_get_hw_obj_addr(UNSG32* vaddr, UNSG32 size); SIGN32 vdec_os_api_get_hw_context_addr(UNSG32* paddr, UNSG32* vaddr, UNSG32 size, SIGN32 flag); int vdec_os_api_dmabuf_import(int fd, unsigned long *phys, size_t *size); void vdec_os_api_dmabuf_release(unsigned long phys); //--------------------------------------------------------------------------- // Mem/IO R/W API //--------------------------------------------------------------------------- UNSG8 vdec_os_api_rd8(UNSG32 addr); UNSG16 vdec_os_api_rd16(UNSG32 addr); UNSG32 vdec_os_api_rd32(UNSG32 addr); void vdec_os_api_wr8(UNSG32 addr, UNSG8 data); void vdec_os_api_wr16(UNSG32 addr, UNSG16 data); void vdec_os_api_wr32(UNSG32 addr, UNSG32 data); UNSG32 vdec_os_api_get_regbase_addr(void); // return VA //--------------------------------------------------------------------------- // Interrupt register API //--------------------------------------------------------------------------- SIGN32 vdec_os_api_set_sync_timeout_isr(UNSG32 timeout); SIGN32 vdec_os_api_sync_event(void); //--------------------------------------------------------------------------- // multi-instance operation APIs //--------------------------------------------------------------------------- SIGN32 vdec_os_api_get_user_id(void); SIGN32 vdec_os_api_free_user_id(SIGN32 user_id); SIGN32 vdec_os_api_register_user_id(SIGN32 user_id); SIGN32 vdec_os_api_unregister_user_id(SIGN32 user_id); SIGN32 vdec_os_api_get_user_count(void); //return: Former user unlock vmeta normally/abnormally/forced SIGN32 vdec_os_api_lock(SIGN32 user_id, long to_ms); SIGN32 vdec_os_api_unlock(SIGN32 user_id); //--------------------------------------------------------------------------- // Power operation APIs //--------------------------------------------------------------------------- SIGN32 vdec_os_api_power_on(void); SIGN32 vdec_os_api_power_off(void); SIGN32 vdec_os_api_suspend_check(void); SIGN32 vdec_os_api_suspend_ready(void); SIGN32 vdec_os_api_clock_on(void); SIGN32 vdec_os_api_clock_off(void); typedef enum _VMETA_CLOCK_OP{ VMETA_CLOCK_L0 = 0, VMETA_CLOCK_L1 }VMETA_CLOCK_OP; SIGN32 vdec_os_api_clock_switch(VMETA_CLOCK_OP vco); typedef enum _VPRO_CODEC_ERROR_CODE_ { VDEC_OS_DRIVER_OK = 0, VDEC_OS_DRIVER_INIT_FAIL, VDEC_OS_DRIVER_OPEN_FAIL, VDEC_OS_DRIVER_NO_SYS_MEM_FAIL, VDEC_OS_DRIVER_MEM_POOL_INIT_FAIL, VDEC_OS_DRIVER_MMAP_FAIL, VDEC_OS_DRIVER_SYNC_TIMEOUT_FAIL, VDEC_OS_DRIVER_IO_CONTROL_FAIL, VDEC_OS_DRIVER_ALREADY_INIT_FAIL, VDEC_OS_DRIVER_CLEAN_FAIL, VDEC_OS_DRIVER_USER_ID_FAIL, VDEC_OS_DRIVER_VER_FAIL }VPRO_DEC_ERROR_CODE; typedef enum _LOCK_RET_CODE { LOCK_RET_ERROR_TIMEOUT = -9999, LOCK_RET_ERROR_UNKNOWN, LOCK_RET_OHTERS_NORM = 0, LOCK_RET_NULL, LOCK_RET_ME, LOCK_RET_FORCE_INIT, }LOCK_RET_CODE; #ifdef __cplusplus } #endif #endif