summaryrefslogtreecommitdiff
path: root/vmeta_lib.h
diff options
context:
space:
mode:
Diffstat (limited to 'vmeta_lib.h')
-rwxr-xr-xvmeta_lib.h105
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);