/** @note munmap handler is done by vma close handler */ static int mali_mmap(struct file * filp, struct vm_area_struct * vma) { struct mali_session_data * session_data; _mali_uk_mem_mmap_s args = {0, }; session_data = (struct mali_session_data *)filp->private_data; if (NULL == session_data) { MALI_PRINT_ERROR(("mmap called without any session data available\n")); return -EFAULT; } MALI_DEBUG_PRINT(4, ("MMap() handler: start=0x%08X, phys=0x%08X, size=0x%08X\n", (unsigned int)vma->vm_start, (unsigned int)(vma->vm_pgoff << PAGE_SHIFT), (unsigned int)(vma->vm_end - vma->vm_start)) ); /* Re-pack the arguments that mmap() packed for us */ args.ctx = session_data; args.phys_addr = vma->vm_pgoff << PAGE_SHIFT; args.size = vma->vm_end - vma->vm_start; args.ukk_private = vma; /* Call the common mmap handler */ MALI_CHECK(_MALI_OSK_ERR_OK ==_mali_ukk_mem_mmap( &args ), -EFAULT); return 0; }
/** @note munmap handler is done by vma close handler */ static int mali_mmap(struct file * filp, struct vm_area_struct * vma) { struct mali_session_data * session_data; _mali_uk_mem_mmap_s args = {0, }; session_data = (struct mali_session_data *)filp->private_data; if (NULL == session_data) { MALI_PRINT_ERROR(("mmap called without any session data available\n")); return -EFAULT; } MALI_DEBUG_PRINT(4, ("MMap() handler: start=0x%08X, phys=0x%08X, size=0x%08X vma->flags 0x%08x\n", (unsigned int)vma->vm_start, (unsigned int)(vma->vm_pgoff << PAGE_SHIFT), (unsigned int)(vma->vm_end - vma->vm_start), vma->vm_flags)); /* Re-pack the arguments that mmap() packed for us */ args.ctx = session_data; args.phys_addr = vma->vm_pgoff << PAGE_SHIFT; args.size = vma->vm_end - vma->vm_start; args.ukk_private = vma; if ( VM_SHARED== (VM_SHARED & vma->vm_flags)) { args.cache_settings = MALI_CACHE_STANDARD ; MALI_DEBUG_PRINT(3,("Allocate - Standard - Size: %d kb\n", args.size/1024)); } else { args.cache_settings = MALI_CACHE_GP_READ_ALLOCATE; MALI_DEBUG_PRINT(3,("Allocate - GP Cached - Size: %d kb\n", args.size/1024)); } /* Setting it equal to VM_SHARED and not Private, which would have made the later io_remap fail for MALI_CACHE_GP_READ_ALLOCATE */ vma->vm_flags = 0x000000fb; /* Call the common mmap handler */ MALI_CHECK(_MALI_OSK_ERR_OK ==_mali_ukk_mem_mmap( &args ), -EFAULT); return 0; }