diff options
author | Joseph Lo <jlo@marvell.com> | 2010-10-26 12:12:56 +0800 |
---|---|---|
committer | Joseph Lo <jlo@marvell.com> | 2010-10-26 12:12:56 +0800 |
commit | 9014dc8b10cda10477cfae228979b12f2fa92132 (patch) | |
tree | e0e4f5722b05cfa4405b2f5165cd4388c7aa66af /vmeta_lib.h | |
parent | fc9c3fd4ff0e1b9b81843d41c0831c49a0093ff8 (diff) |
update libvmeta to "build-004" version
Diffstat (limited to 'vmeta_lib.h')
-rwxr-xr-x | vmeta_lib.h | 105 |
1 files changed, 82 insertions, 23 deletions
diff --git a/vmeta_lib.h b/vmeta_lib.h index 3c44412..dd9a262 100755 --- a/vmeta_lib.h +++ b/vmeta_lib.h @@ -1,6 +1,8 @@ #ifndef VDEC_OS_DRIVER_H #define VDEC_OS_DRIVER_H #include <sys/poll.h> +#include <semaphore.h> +#include "uio_vmeta.h" #ifdef __cplusplus extern "C" @@ -9,12 +11,30 @@ extern "C" #define VDEC_DEBUG_ALL 0x1 #define VDEC_DEBUG_MEM 0x2 -#define VDEC_DEBUG_NONE 0x80 +#define VDEC_DEBUG_LOCK 0x4 +#define VDEC_DEBUG_VER 0x8 +#define VDEC_DEBUG_NONE 0x0 #define UIO_DEV "/dev/uio0" #define UIO_IO_MEM_SIZE "/sys/class/uio/uio0/maps/map0/size" #define UIO_IO_MEM_ADDR "/sys/class/uio/uio0/maps/map0/addr" +#define UIO_IO_VERSION "/sys/class/uio/uio0/version" +#define UIO_IO_HW_CONTEXT_SIZE "/sys/class/uio/uio0/maps/map1/size" +#define UIO_IO_HW_CONTEXT_ADDR "/sys/class/uio/uio0/maps/map1/addr" + +#define UIO_IO_VMETA_OBJ_SIZE "/sys/class/uio/uio0/maps/map2/size" +#define UIO_IO_VMETA_OBJ_ADDR "/sys/class/uio/uio0/maps/map2/addr" +#define UIO_IO_VMETA_OBJ_INDEX 2 + +#define UIO_IO_KERNEL_SHARE_SIZE "/sys/class/uio/uio0/maps/map3/size" +#define UIO_IO_KERNEL_SHARE_ADDR "/sys/class/uio/uio0/maps/map3/addr" +#define UIO_IO_KERNEL_SHARE_INDEX 3 + +#define VMETA_SHARED_LOCK_HANDLE "vmeta_shared_lock" + +#define VMETA_KERN_MIN_VER 4 +#define VMETA_USER_VER "build-004" //--------------------------------------------------------------------------- // Macros //--------------------------------------------------------------------------- @@ -38,6 +58,10 @@ extern "C" #define UNSG8 unsigned char #endif +#ifndef SIGN8 +#define SIGN8 char +#endif + enum dma_data_direction { DMA_BIDIRECTIONAL = 0, DMA_TO_DEVICE = 1, @@ -45,11 +69,15 @@ enum dma_data_direction { DMA_NONE = 3, }; +#define VMETA_STATUS_BIT_USED 0 +#define VMETA_STATUS_BIT_REGISTED 1 + //--------------------------------------------------------------------------- // Driver initialization API //--------------------------------------------------------------------------- SIGN32 vdec_os_driver_init(void); SIGN32 vdec_os_driver_clean(void); +SIGN32 vdec_os_driver_version(SIGN8 *ver_str); //--------------------------------------------------------------------------- // Memory operation API @@ -66,6 +94,9 @@ 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); + //--------------------------------------------------------------------------- // Mem/IO R/W API //--------------------------------------------------------------------------- @@ -84,12 +115,36 @@ SIGN32 vdec_os_api_set_sync_timeout_isr(UNSG32 timeout); SIGN32 vdec_os_api_sync_event(); //--------------------------------------------------------------------------- -// Power Management API +// multi-instance operation APIs //--------------------------------------------------------------------------- -void vdec_os_api_power_on(void); -void vdec_os_api_power_off(void); +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_update_user_info(SIGN32 user_id, void* info); +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); -void vdec_os_api_suspend_ready(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, @@ -101,29 +156,24 @@ typedef enum _VPRO_CODEC_ERROR_CODE_ { 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_CLEAN_FAIL, + VDEC_OS_DRIVER_USER_ID_FAIL, + VDEC_OS_DRIVER_VER_FAIL }VPRO_DEC_ERROR_CODE; -/************************* - * Vmeta ioctl Define * - *************************/ -#define IOP_MAGIC 'v' - -#define UIO_VPRO_IRQ_ENABLE _IO(IOP_MAGIC, 2) -#define UIO_VPRO_IRQ_DISABLE _IO(IOP_MAGIC, 3) -#define UIO_VPRO_XV_IN_QUEUE _IOW(IOP_MAGIC, 4, struct vpro_xv_frame) // used for vpro decoder to put a video frame in queue -#define UIO_VPRO_XV_DQUEUE _IOR(IOP_MAGIC, 5, struct vpro_xv_frame) // used for vpro decoder to free a video frame in queue -#define UIO_VPRO_XV_QUERY_VIDEO _IOR(IOP_MAGIC, 6, struct vpro_xv_frame) // used for vo xv interface to query a video frame that from vpro -#define UIO_VPRO_XV_FREE_VIDEO _IOW(IOP_MAGIC, 7, struct vpro_xv_frame) // used for vo xv interface to free a video frame -#define UIO_VPRO_XV_INIT_QUEUE _IO(IOP_MAGIC, 8) -#define UIO_VMETA_POWER_ON _IO(IOP_MAGIC, 9) -#define UIO_VMETA_POWER_OFF _IO(IOP_MAGIC, 10) -#define UIO_VMETA_SUSPEND_CHECK _IOR(IOP_MAGIC, 11, int) -#define UIO_VMETA_SUSPEND_READY _IO(IOP_MAGIC, 12) +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; /* display debug message */ int dbg_printf(UNSG32 dbglevel, const char* format, ...); +typedef sem_t lock_t; //--------------------------------------------------------------------------- // the control block of vdec os driver //--------------------------------------------------------------------------- @@ -133,9 +183,18 @@ typedef struct vdec_os_driver_cb_s UNSG32 io_mem_phy_addr; // the physical addr of io register base SIGN32 io_mem_virt_addr; // the reg base addr that maped from kernel UNSG32 io_mem_size; // the size of io mem area - int refcount; // reference count + int refcount; // reference count in current process + UNSG32 vdec_obj_va; + UNSG32 hw_context_pa; + UNSG32 kernel_share_va; + int kern_ver; //vmeta kernel version } vdec_os_driver_cb_t; +struct monitor_data{ + pthread_t pt; + SIGN32 user_id; +}; + /* vdec driver get cb */ vdec_os_driver_cb_t *vdec_driver_get_cb(void); |