diff options
author | Lea Li <lea.li@marvell.com> | 2010-04-19 18:16:47 +0800 |
---|---|---|
committer | Lea Li <lea.li@marvell.com> | 2010-04-19 18:16:47 +0800 |
commit | d22406f55aa68562b23cc64d3249255f608eccd7 (patch) | |
tree | 1e58f82539ce661b81ebaa10dc8cd9eed1a5a44e /vmeta_lib.h |
initial commit
Signed-off-by: Lea Li <lea.li@marvell.com>
Diffstat (limited to 'vmeta_lib.h')
-rwxr-xr-x | vmeta_lib.h | 144 |
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 |