tizen 2.4 release
[kernel/linux-3.0.git] / drivers / gpu / arm / mali400 / mali / common / mali_user_settings_db.c
1 /*
2  * Copyright (C) 2011-2012 ARM Limited. All rights reserved.
3  *
4  * This program is free software and is provided to you under the terms of the GNU General Public License version 2
5  * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence.
6  *
7  * A copy of the licence is included with the program, and can also be obtained from Free Software
8  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
9  */
10
11 #include "mali_osk.h"
12 #include "mali_kernel_common.h"
13 #include "mali_uk_types.h"
14 #include "mali_user_settings_db.h"
15 #include "mali_session.h"
16
17 static u32 mali_user_settings[_MALI_UK_USER_SETTING_MAX];
18 const char *_mali_uk_user_setting_descriptions[] = _MALI_UK_USER_SETTING_DESCRIPTIONS;
19
20 static void mali_user_settings_notify(_mali_uk_user_setting_t setting, u32 value)
21 {
22         struct mali_session_data *session, *tmp;
23
24         mali_session_lock();
25         MALI_SESSION_FOREACH(session, tmp, link)
26         {
27                 _mali_osk_notification_t *notobj = _mali_osk_notification_create(_MALI_NOTIFICATION_SETTINGS_CHANGED, sizeof(_mali_uk_settings_changed_s));
28                 _mali_uk_settings_changed_s *data = notobj->result_buffer;
29                 data->setting = setting;
30                 data->value = value;
31
32                 mali_session_send_notification(session, notobj);
33         }
34         mali_session_unlock();
35 }
36
37 void mali_set_user_setting(_mali_uk_user_setting_t setting, u32 value)
38 {
39         mali_bool notify = MALI_FALSE;
40
41         MALI_DEBUG_ASSERT(setting < _MALI_UK_USER_SETTING_MAX && setting >= 0);
42
43         if (mali_user_settings[setting] != value)
44         {
45                 notify = MALI_TRUE;
46         }
47
48         mali_user_settings[setting] = value;
49
50         if (notify)
51         {
52                 mali_user_settings_notify(setting, value);
53         }
54 }
55
56 u32 mali_get_user_setting(_mali_uk_user_setting_t setting)
57 {
58         MALI_DEBUG_ASSERT(setting < _MALI_UK_USER_SETTING_MAX && setting >= 0);
59
60         return mali_user_settings[setting];
61 }
62
63 _mali_osk_errcode_t _mali_ukk_get_user_setting(_mali_uk_get_user_setting_s *args)
64 {
65         _mali_uk_user_setting_t setting;
66         MALI_DEBUG_ASSERT_POINTER(args);
67
68         setting = args->setting;
69
70         if (0 <= setting && _MALI_UK_USER_SETTING_MAX > setting)
71         {
72                 args->value = mali_user_settings[setting];
73                 return _MALI_OSK_ERR_OK;
74         }
75         else
76         {
77                 return _MALI_OSK_ERR_INVALID_ARGS;
78         }
79 }
80
81 _mali_osk_errcode_t _mali_ukk_get_user_settings(_mali_uk_get_user_settings_s *args)
82 {
83         MALI_DEBUG_ASSERT_POINTER(args);
84
85         _mali_osk_memcpy(args->settings, mali_user_settings, sizeof(mali_user_settings));
86
87         return _MALI_OSK_ERR_OK;
88 }