summaryrefslogtreecommitdiff
path: root/vmeta_lib.h
diff options
context:
space:
mode:
authorLea Li <lea.li@marvell.com>2010-04-19 18:16:47 +0800
committerLea Li <lea.li@marvell.com>2010-04-19 18:16:47 +0800
commitd22406f55aa68562b23cc64d3249255f608eccd7 (patch)
tree1e58f82539ce661b81ebaa10dc8cd9eed1a5a44e /vmeta_lib.h
initial commit
Signed-off-by: Lea Li <lea.li@marvell.com>
Diffstat (limited to 'vmeta_lib.h')
-rwxr-xr-xvmeta_lib.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/vmeta_lib.h b/vmeta_lib.h
new file mode 100755
index 0000000..561e855
--- /dev/null
+++ b/vmeta_lib.h
@@ -0,0 +1,144 @@
+#ifndef VDEC_OS_DRIVER_H
+#define VDEC_OS_DRIVER_H
+#include <sys/poll.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define VDEC_DEBUG_ALL 0x1
+#define VDEC_DEBUG_MEM 0x2
+#define VDEC_DEBUG_NONE 0x80
+
+#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"
+
+//---------------------------------------------------------------------------
+// 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
+
+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);
+
+//---------------------------------------------------------------------------
+// Memory operation API
+//---------------------------------------------------------------------------
+void * vdec_os_api_dma_alloc(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);
+
+//---------------------------------------------------------------------------
+// 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();
+
+//---------------------------------------------------------------------------
+// Power Management API
+//---------------------------------------------------------------------------
+void vdec_os_api_power_on(void);
+void vdec_os_api_power_off(void);
+SIGN32 vdec_os_api_suspend_check(void);
+void vdec_os_api_suspend_ready(void);
+
+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
+}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)
+
+/* display debug message */
+int dbg_printf(UNSG32 dbglevel, const char* format, ...);
+
+//---------------------------------------------------------------------------
+// the control block of vdec os driver
+//---------------------------------------------------------------------------
+typedef struct vdec_os_driver_cb_s
+{
+ int uiofd; // the uio file descriptor
+ 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
+} vdec_os_driver_cb_t;
+
+/* vdec driver get cb */
+vdec_os_driver_cb_t *vdec_driver_get_cb(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif