/*
- * Copyright (C) 2010-2015 ARM Limited. All rights reserved.
+ * Copyright (C) 2010-2014, 2016 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.
/* The global variable containing the global device data */
static struct ump_device ump_device;
-
+struct device *ump_global_mdev = NULL;
/* Forward declare static functions */
static int ump_file_open(struct inode *inode, struct file *filp);
err = ump_kernel_constructor();
if (_MALI_OSK_ERR_OK != err) {
MSG_ERR(("UMP device driver init failed\n"));
- return map_errcode(err);
+ return ump_map_errcode(err);
}
MSG(("UMP device driver %s loaded\n", SVN_REV_STRING));
if (IS_ERR(ump_device.ump_class)) {
err = PTR_ERR(ump_device.ump_class);
} else {
- struct device *mdev;
- mdev = device_create(ump_device.ump_class, NULL, dev, NULL, ump_dev_name);
- if (!IS_ERR(mdev)) {
+ ump_global_mdev = device_create(ump_device.ump_class, NULL, dev, NULL, ump_dev_name);
+ if (!IS_ERR(ump_global_mdev)) {
return 0;
}
- err = PTR_ERR(mdev);
+ err = PTR_ERR(ump_global_mdev);
}
cdev_del(&ump_device.cdev);
#else
err = _ump_ukk_open((void **) &session_data);
if (_MALI_OSK_ERR_OK != err) {
MSG_ERR(("Ump failed to open a new session\n"));
- return map_errcode(err);
+ return ump_map_errcode(err);
}
filp->private_data = (void *)session_data;
err = _ump_ukk_close((void **) &filp->private_data);
if (_MALI_OSK_ERR_OK != err) {
- return map_errcode(err);
+ return ump_map_errcode(err);
}
return 0; /* success */
err = ump_unlock_wrapper((u32 __user *)argument, session_data);
break;
+ case UMP_IOC_DMABUF_IMPORT:
+ #ifdef CONFIG_DMA_SHARED_BUFFER
+ err = ump_dmabuf_import_wrapper((u32 __user *)argument, session_data);
+ #else
+ err = -EFAULT;
+ DBG_MSG(1, ("User space use dmabuf API, but kernel don't support DMA BUF\n"));
+ #endif
+ break;
+
default:
DBG_MSG(1, ("No handler for IOCTL. cmd: 0x%08x, arg: 0x%08lx\n", cmd, arg));
err = -EFAULT;
return err;
}
-int map_errcode(_mali_osk_errcode_t err)
+int ump_map_errcode(_mali_osk_errcode_t err)
{
switch (err) {
case _MALI_OSK_ERR_OK :
err = _ump_ukk_map_mem(&args);
if (_MALI_OSK_ERR_OK != err) {
MSG_ERR(("_ump_ukk_map_mem() failed in function ump_file_mmap()"));
- return map_errcode(err);
+ return ump_map_errcode(err);
}
return 0; /* success */