1/* 2 * Copyright (C) 2010-2015 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 21struct _mali_osk_timer_t_struct { 22 struct timer_list timer; 23}; 24 25typedef void (*timer_timeout_function_t)(unsigned long); 26 27_mali_osk_timer_t *_mali_osk_timer_init(void) 28{ 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); 31 return t; 32} 33 34void _mali_osk_timer_add(_mali_osk_timer_t *tim, unsigned long ticks_to_expire) 35{ 36 MALI_DEBUG_ASSERT_POINTER(tim); 37 tim->timer.expires = jiffies + ticks_to_expire; 38 add_timer(&(tim->timer)); 39} 40 41void _mali_osk_timer_mod(_mali_osk_timer_t *tim, unsigned long ticks_to_expire) 42{ 43 MALI_DEBUG_ASSERT_POINTER(tim); 44 mod_timer(&(tim->timer), jiffies + ticks_to_expire); 45} 46 47void _mali_osk_timer_del(_mali_osk_timer_t *tim) 48{ 49 MALI_DEBUG_ASSERT_POINTER(tim); 50 del_timer_sync(&(tim->timer)); 51} 52 53void _mali_osk_timer_del_async(_mali_osk_timer_t *tim) 54{ 55 MALI_DEBUG_ASSERT_POINTER(tim); 56 del_timer(&(tim->timer)); 57} 58 59mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim) 60{ 61 MALI_DEBUG_ASSERT_POINTER(tim); 62 return 1 == timer_pending(&(tim->timer)); 63} 64 65void _mali_osk_timer_setcallback(_mali_osk_timer_t *tim, _mali_osk_timer_callback_t callback, void *data) 66{ 67 MALI_DEBUG_ASSERT_POINTER(tim); 68 tim->timer.data = (unsigned long)data; 69 tim->timer.function = (timer_timeout_function_t)callback; 70} 71 72void _mali_osk_timer_term(_mali_osk_timer_t *tim) 73{ 74 MALI_DEBUG_ASSERT_POINTER(tim); 75 kfree(tim); 76} 77