From a09619acbaf96c36ef3b7bdae9837548ee904439 Mon Sep 17 00:00:00 2001 From: John Fredriksson Date: Thu, 30 Jun 2011 13:27:52 +0200 Subject: mali: Add mali400 kernel module Add mali400ko from tag SNOWBALL_BSP_111012_2.1. Signed-off-by: John Fredriksson Change-Id: I82d24760247f8a5a5b786fc10187f32d9048f9a9 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/33811 Reviewed-by: Philippe LANGLAIS --- .../src/devicedrv/mali/linux/mali_osk_indir_mmap.c | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/linux/mali_osk_indir_mmap.c (limited to 'drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/linux/mali_osk_indir_mmap.c') diff --git a/drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/linux/mali_osk_indir_mmap.c b/drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/linux/mali_osk_indir_mmap.c new file mode 100644 index 00000000000..b60bf825897 --- /dev/null +++ b/drivers/gpu/mali/mali400ko/driver/src/devicedrv/mali/linux/mali_osk_indir_mmap.c @@ -0,0 +1,86 @@ +/* + * 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 */ +} -- cgit v1.2.3