tizen 2.4 release
[kernel/linux-3.0.git] / drivers / gpu / arm / mali400 / mali / linux / mali_osk_timers.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 /**
12  * @file mali_osk_timers.c
13  * Implementation of the OS abstraction layer for the kernel device driver
14  */
15
16 #include <linux/timer.h>
17 #include <linux/slab.h>
18 #include "mali_osk.h"
19 #include "mali_kernel_common.h"
20
21 struct _mali_osk_timer_t_struct
22 {
23     struct timer_list timer;
24 };
25
26 typedef void (*timer_timeout_function_t)(unsigned long);
27
28 _mali_osk_timer_t *_mali_osk_timer_init(void)
29 {
30     _mali_osk_timer_t *t = (_mali_osk_timer_t*)kmalloc(sizeof(_mali_osk_timer_t), GFP_KERNEL);
31     if (NULL != t) init_timer(&t->timer);
32     return t;
33 }
34
35 void _mali_osk_timer_add( _mali_osk_timer_t *tim, u32 ticks_to_expire )
36 {
37         MALI_DEBUG_ASSERT_POINTER(tim);
38     tim->timer.expires = jiffies + ticks_to_expire;
39     add_timer(&(tim->timer));
40 }
41
42 void _mali_osk_timer_mod( _mali_osk_timer_t *tim, u32 ticks_to_expire)
43 {
44     MALI_DEBUG_ASSERT_POINTER(tim);
45     mod_timer(&(tim->timer), jiffies + ticks_to_expire);
46 }
47
48 void _mali_osk_timer_del( _mali_osk_timer_t *tim )
49 {
50     MALI_DEBUG_ASSERT_POINTER(tim);
51     del_timer_sync(&(tim->timer));
52 }
53
54 void _mali_osk_timer_del_async( _mali_osk_timer_t *tim )
55 {
56         MALI_DEBUG_ASSERT_POINTER(tim);
57         del_timer(&(tim->timer));
58 }
59
60 mali_bool _mali_osk_timer_pending( _mali_osk_timer_t *tim )
61 {
62         MALI_DEBUG_ASSERT_POINTER(tim);
63         return 1 == timer_pending(&(tim->timer));
64 }
65
66 void _mali_osk_timer_setcallback( _mali_osk_timer_t *tim, _mali_osk_timer_callback_t callback, void *data )
67 {
68     MALI_DEBUG_ASSERT_POINTER(tim);
69     tim->timer.data = (unsigned long)data;
70     tim->timer.function = (timer_timeout_function_t)callback;
71 }
72
73 void _mali_osk_timer_term( _mali_osk_timer_t *tim )
74 {
75     MALI_DEBUG_ASSERT_POINTER(tim);
76     kfree(tim);
77 }