1 /* 2 * Copyright (C) 2015 Thomas Chou <thomas@wytron.com.tw> 3 * 4 * SPDX-License-Identifier: GPL-2.0+ 5 */ 6 7 #ifndef _TIMER_H_ 8 #define _TIMER_H_ 9 10 /* 11 * dm_timer_init - initialize a timer for time keeping. On success 12 * initializes gd->timer so that lib/timer can use it for future 13 * referrence. 14 * 15 * @return - 0 on success or error number 16 */ 17 int dm_timer_init(void); 18 19 /* 20 * timer_conv_64 - convert 32-bit counter value to 64-bit 21 * 22 * @count: 32-bit counter value 23 * @return: 64-bit counter value 24 */ 25 u64 timer_conv_64(u32 count); 26 27 /* 28 * Get the current timer count 29 * 30 * @dev: The timer device 31 * @count: pointer that returns the current timer count 32 * @return: 0 if OK, -ve on error 33 */ 34 int timer_get_count(struct udevice *dev, u64 *count); 35 36 /* 37 * Get the timer input clock frequency 38 * 39 * @dev: The timer device 40 * @return: the timer input clock frequency 41 */ 42 unsigned long timer_get_rate(struct udevice *dev); 43 44 /* 45 * struct timer_ops - Driver model timer operations 46 * 47 * The uclass interface is implemented by all timer devices which use 48 * driver model. 49 */ 50 struct timer_ops { 51 /* 52 * Get the current timer count 53 * 54 * @dev: The timer device 55 * @count: pointer that returns the current 64-bit timer count 56 * @return: 0 if OK, -ve on error 57 */ 58 int (*get_count)(struct udevice *dev, u64 *count); 59 }; 60 61 /* 62 * struct timer_dev_priv - information about a device used by the uclass 63 * 64 * @clock_rate: the timer input clock frequency 65 */ 66 struct timer_dev_priv { 67 unsigned long clock_rate; 68 }; 69 70 /** 71 * timer_early_get_count() - Implement timer_get_count() before driver model 72 * 73 * If CONFIG_TIMER_EARLY is enabled, this function wil be called to return 74 * the current timer value before the proper driver model timer is ready. 75 * It should be implemented by one of the timer values. This is mostly useful 76 * for tracing. 77 */ 78 u64 timer_early_get_count(void); 79 80 /** 81 * timer_early_get_rate() - Get the timer rate before driver model 82 * 83 * If CONFIG_TIMER_EARLY is enabled, this function wil be called to return 84 * the current timer rate in Hz before the proper driver model timer is ready. 85 * It should be implemented by one of the timer values. This is mostly useful 86 * for tracing. This corresponds to the clock_rate value in struct 87 * timer_dev_priv. 88 */ 89 unsigned long timer_early_get_rate(void); 90 91 #endif /* _TIMER_H_ */ 92