/* * Copyright (C) 2010-2011 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. * * A copy of the licence is included with the program, and can also be obtained from Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include "mali_osk.h" #include "mali_ukk.h" #include "mali_kernel_common.h" /** * @file mali_osk_specific.c * Implementation of per-OS Kernel level specifics */ _mali_osk_errcode_t _mali_osk_specific_indirect_mmap( _mali_uk_mem_mmap_s *args ) { /* args->ctx ignored here; args->ukk_private required instead */ /* we need to lock the mmap semaphore before calling the do_mmap function */ down_write(¤t->mm->mmap_sem); args->mapping = (void __user *)do_mmap( (struct file *)args->ukk_private, 0, /* start mapping from any address after NULL */ args->size, PROT_READ | PROT_WRITE, MAP_SHARED, args->phys_addr ); /* and unlock it after the call */ up_write(¤t->mm->mmap_sem); /* No cookie required here */ args->cookie = 0; /* uku_private meaningless, so zero */ args->uku_private = NULL; if ( (NULL == args->mapping) || IS_ERR((void *)args->mapping) ) { return _MALI_OSK_ERR_FAULT; } /* Success */ return _MALI_OSK_ERR_OK; } _mali_osk_errcode_t _mali_osk_specific_indirect_munmap( _mali_uk_mem_munmap_s *args ) { /* args->ctx and args->cookie ignored here */ if ((NULL != current) && (NULL != current->mm)) { /* remove mapping of mali memory from the process' view */ /* lock mmap semaphore before call */ /* lock mmap_sem before calling do_munmap */ down_write(¤t->mm->mmap_sem); do_munmap( current->mm, (unsigned long)args->mapping, args->size ); /* and unlock after call */ up_write(¤t->mm->mmap_sem); MALI_DEBUG_PRINT(5, ("unmapped\n")); } else { MALI_DEBUG_PRINT(2, ("Freeing of a big block while no user process attached, assuming crash cleanup in progress\n")); } return _MALI_OSK_ERR_OK; /* always succeeds */ }