import OT_8063_20170412 mali driver
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / misc / mediatek / gpu / mt8127 / mali / mali / linux / mali_ukk_core.c
CommitLineData
6fa3eb70
S
1/*
2 * This confidential and proprietary software may be used only as
3 * authorised by a licensing agreement from ARM Limited
bdc132d7 4 * (C) COPYRIGHT 2008-2015 ARM Limited
6fa3eb70
S
5 * ALL RIGHTS RESERVED
6 * The entire notice above must be reproduced on all authorised
7 * copies and copies may only be made to the extent permitted
8 * by a licensing agreement from ARM Limited.
9 */
10#include <linux/fs.h> /* file system operations */
11#include <linux/slab.h> /* memort allocation functions */
12#include <asm/uaccess.h> /* user space access */
13
14#include "mali_ukk.h"
15#include "mali_osk.h"
16#include "mali_kernel_common.h"
17#include "mali_session.h"
18#include "mali_ukk_wrappers.h"
19
20int get_api_version_wrapper(struct mali_session_data *session_data, _mali_uk_get_api_version_s __user *uargs)
21{
22 _mali_uk_get_api_version_s kargs;
23 _mali_osk_errcode_t err;
24
25 MALI_CHECK_NON_NULL(uargs, -EINVAL);
26
27 if (0 != get_user(kargs.version, &uargs->version)) return -EFAULT;
28
bdc132d7 29 kargs.ctx = (uintptr_t)session_data;
6fa3eb70
S
30 err = _mali_ukk_get_api_version(&kargs);
31 if (_MALI_OSK_ERR_OK != err) return map_errcode(err);
32
33 if (0 != put_user(kargs.version, &uargs->version)) return -EFAULT;
34 if (0 != put_user(kargs.compatible, &uargs->compatible)) return -EFAULT;
35
36 return 0;
37}
38
bdc132d7
S
39int get_api_version_v2_wrapper(struct mali_session_data *session_data, _mali_uk_get_api_version_v2_s __user *uargs)
40{
41 _mali_uk_get_api_version_v2_s kargs;
42 _mali_osk_errcode_t err;
43
44 MALI_CHECK_NON_NULL(uargs, -EINVAL);
45
46 if (0 != get_user(kargs.version, &uargs->version)) return -EFAULT;
47
48 kargs.ctx = (uintptr_t)session_data;
49 err = _mali_ukk_get_api_version_v2(&kargs);
50 if (_MALI_OSK_ERR_OK != err) return map_errcode(err);
51
52 if (0 != put_user(kargs.version, &uargs->version)) return -EFAULT;
53 if (0 != put_user(kargs.compatible, &uargs->compatible)) return -EFAULT;
54
55 return 0;
56}
57
6fa3eb70
S
58int wait_for_notification_wrapper(struct mali_session_data *session_data, _mali_uk_wait_for_notification_s __user *uargs)
59{
60 _mali_uk_wait_for_notification_s kargs;
61 _mali_osk_errcode_t err;
62
63 MALI_CHECK_NON_NULL(uargs, -EINVAL);
64
bdc132d7 65 kargs.ctx = (uintptr_t)session_data;
6fa3eb70
S
66 err = _mali_ukk_wait_for_notification(&kargs);
67 if (_MALI_OSK_ERR_OK != err) return map_errcode(err);
68
bdc132d7
S
69 if (_MALI_NOTIFICATION_CORE_SHUTDOWN_IN_PROGRESS != kargs.type) {
70 kargs.ctx = (uintptr_t)NULL; /* prevent kernel address to be returned to user space */
6fa3eb70
S
71 if (0 != copy_to_user(uargs, &kargs, sizeof(_mali_uk_wait_for_notification_s))) return -EFAULT;
72 } else {
73 if (0 != put_user(kargs.type, &uargs->type)) return -EFAULT;
74 }
75
76 return 0;
77}
78
79int post_notification_wrapper(struct mali_session_data *session_data, _mali_uk_post_notification_s __user *uargs)
80{
81 _mali_uk_post_notification_s kargs;
82 _mali_osk_errcode_t err;
83
84 MALI_CHECK_NON_NULL(uargs, -EINVAL);
85
bdc132d7 86 kargs.ctx = (uintptr_t)session_data;
6fa3eb70
S
87
88 if (0 != get_user(kargs.type, &uargs->type)) {
89 return -EFAULT;
90 }
91
92 err = _mali_ukk_post_notification(&kargs);
93 if (_MALI_OSK_ERR_OK != err) {
94 return map_errcode(err);
95 }
96
97 return 0;
98}
99
100int get_user_settings_wrapper(struct mali_session_data *session_data, _mali_uk_get_user_settings_s __user *uargs)
101{
102 _mali_uk_get_user_settings_s kargs;
103 _mali_osk_errcode_t err;
104
105 MALI_CHECK_NON_NULL(uargs, -EINVAL);
106
bdc132d7 107 kargs.ctx = (uintptr_t)session_data;
6fa3eb70
S
108 err = _mali_ukk_get_user_settings(&kargs);
109 if (_MALI_OSK_ERR_OK != err) {
110 return map_errcode(err);
111 }
112
bdc132d7 113 kargs.ctx = 0; /* prevent kernel address to be returned to user space */
6fa3eb70
S
114 if (0 != copy_to_user(uargs, &kargs, sizeof(_mali_uk_get_user_settings_s))) return -EFAULT;
115
116 return 0;
117}
118
119int request_high_priority_wrapper(struct mali_session_data *session_data, _mali_uk_request_high_priority_s __user *uargs)
120{
121 _mali_uk_request_high_priority_s kargs;
122 _mali_osk_errcode_t err;
123
124 MALI_CHECK_NON_NULL(uargs, -EINVAL);
125
bdc132d7 126 kargs.ctx = (uintptr_t)session_data;
6fa3eb70
S
127 err = _mali_ukk_request_high_priority(&kargs);
128
bdc132d7 129 kargs.ctx = 0;
6fa3eb70
S
130
131 return map_errcode(err);
132}