From 801a0d599a227430a9b2b5fd48e1602368d4736f Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 11 Nov 2012 10:14:08 +0000 Subject: Convert to use shmem for shared software context --- debian/changelog | 6 ++++++ uio_vmeta.h | 8 +++++++- vmeta_lib.c | 13 +++++++++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index 80dad5f..28b8a8c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +libvmeta (1.0ubuntu2.rmk3) precise; urgency=low + + * update for shmem backed shared software context + + -- Russell King Sun, 11 Oct 2012 10:18:01 +0100 + libvmeta (1.0ubuntu2.rmk2) precise; urgency=low * update for aligned malloc in libbmm diff --git a/uio_vmeta.h b/uio_vmeta.h index 6f262a7..08ebaa1 100644 --- a/uio_vmeta.h +++ b/uio_vmeta.h @@ -55,7 +55,12 @@ struct vmeta_info { struct { uint32_t phys; uint32_t size; - } map[3]; + } map[2]; +}; + +struct vmeta_mmap { + uint64_t addr; + uint32_t size; }; #define VMETA_STATUS_BIT_USED 0 @@ -87,5 +92,6 @@ struct vmeta_info { #define VMETA_CMD_FORCE_INI _IO(IOP_MAGIC, 19) #define VMETA_CMD_GET_USER_NUM _IOR(IOP_MAGIC, 20, unsigned) #define VMETA_CMD_GET_INFO _IOR(IOP_MAGIC, 21, struct vmeta_info) +#define VMETA_CMD_MAP_SW_CONTEXT _IOWR(IOP_MAGIC, 22, struct vmeta_mmap) #endif /* __UIO_VMETA_H */ diff --git a/vmeta_lib.c b/vmeta_lib.c index 9fccd3c..01ae124 100644 --- a/vmeta_lib.c +++ b/vmeta_lib.c @@ -49,7 +49,6 @@ #define MAP_IO_MEM 0 #define MAP_IO_HW_CONTEXT 1 -#define MAP_IO_VMETA_OBJ 2 #define VMETA_KERN_MIN_VER 104 #define VMETA_USER_VER "build-004" @@ -520,6 +519,7 @@ static void dbg_printf(UNSG32 dbglevel, const char* format, ...) SIGN32 vdec_os_api_get_hw_obj_addr(UNSG32* vaddr,UNSG32 size) { vdec_os_driver_cb_t *vdec = vdec_iface; + struct vmeta_mmap arg; void *addr; int ret; @@ -529,12 +529,17 @@ SIGN32 vdec_os_api_get_hw_obj_addr(UNSG32* vaddr,UNSG32 size) return VDEC_OS_DRIVER_OK; } - ret = vmeta_get_map(vdec, MAP_IO_VMETA_OBJ, size, &addr, NULL); + memset(&arg, 0, sizeof(arg)); + arg.size = size; + + ret = ioctl(vdec->fd, VMETA_CMD_MAP_SW_CONTEXT, &arg); if (ret < 0) return ret; - dbg_printf(VDEC_DEBUG_MEM, "MAP_IO_VMETA_OBJ virtual 0x%p size=%d\n", - addr, size); + addr = (void *)(uintptr_t)arg.addr; + + dbg_printf(VDEC_DEBUG_MEM, "%s: virtual %p size=%d\n", + __FUNCTION__, addr, size); *vaddr = (UNSG32)addr; vdec->vdec_obj_va = addr; -- cgit