2 * This confidential and proprietary software may be used only as
3 * authorised by a licensing agreement from ARM Limited
4 * (C) COPYRIGHT 2008-2013 ARM Limited
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.
12 * @file mali_osk_timers.c
13 * Implementation of the OS abstraction layer for the kernel device driver
16 #include <linux/timer.h>
17 #include <linux/slab.h>
19 #include "mali_kernel_common.h"
21 struct _mali_osk_timer_t_struct
{
22 struct timer_list timer
;
25 typedef void (*timer_timeout_function_t
)(unsigned long);
27 _mali_osk_timer_t
*_mali_osk_timer_init(void)
29 _mali_osk_timer_t
*t
= (_mali_osk_timer_t
*)kmalloc(sizeof(_mali_osk_timer_t
), GFP_KERNEL
);
30 if (NULL
!= t
) init_timer(&t
->timer
);
34 void _mali_osk_timer_add( _mali_osk_timer_t
*tim
, u32 ticks_to_expire
)
36 MALI_DEBUG_ASSERT_POINTER(tim
);
37 tim
->timer
.expires
= jiffies
+ ticks_to_expire
;
38 add_timer(&(tim
->timer
));
41 void _mali_osk_timer_mod( _mali_osk_timer_t
*tim
, u32 ticks_to_expire
)
43 MALI_DEBUG_ASSERT_POINTER(tim
);
44 mod_timer(&(tim
->timer
), jiffies
+ ticks_to_expire
);
47 void _mali_osk_timer_del( _mali_osk_timer_t
*tim
)
49 MALI_DEBUG_ASSERT_POINTER(tim
);
50 del_timer_sync(&(tim
->timer
));
53 void _mali_osk_timer_del_async( _mali_osk_timer_t
*tim
)
55 MALI_DEBUG_ASSERT_POINTER(tim
);
56 del_timer(&(tim
->timer
));
59 mali_bool
_mali_osk_timer_pending( _mali_osk_timer_t
*tim
)
61 MALI_DEBUG_ASSERT_POINTER(tim
);
62 return 1 == timer_pending(&(tim
->timer
));
65 void _mali_osk_timer_setcallback( _mali_osk_timer_t
*tim
, _mali_osk_timer_callback_t callback
, void *data
)
67 MALI_DEBUG_ASSERT_POINTER(tim
);
68 tim
->timer
.data
= (unsigned long)data
;
69 tim
->timer
.function
= (timer_timeout_function_t
)callback
;
72 void _mali_osk_timer_term( _mali_osk_timer_t
*tim
)
74 MALI_DEBUG_ASSERT_POINTER(tim
);