1c8a7ba9eSThomas Chou /* 2c8a7ba9eSThomas Chou * Copyright (C) 2015 Thomas Chou <thomas@wytron.com.tw> 3c8a7ba9eSThomas Chou * 4c8a7ba9eSThomas Chou * SPDX-License-Identifier: GPL-2.0+ 5c8a7ba9eSThomas Chou */ 6c8a7ba9eSThomas Chou 7c8a7ba9eSThomas Chou #ifndef _TIMER_H_ 8c8a7ba9eSThomas Chou #define _TIMER_H_ 9c8a7ba9eSThomas Chou 10c8a7ba9eSThomas Chou /* 11*9ca07ebbSBin Meng * timer_conv_64 - convert 32-bit counter value to 64-bit 12*9ca07ebbSBin Meng * 13*9ca07ebbSBin Meng * @count: 32-bit counter value 14*9ca07ebbSBin Meng * @return: 64-bit counter value 15*9ca07ebbSBin Meng */ 16*9ca07ebbSBin Meng u64 timer_conv_64(u32 count); 17*9ca07ebbSBin Meng 18*9ca07ebbSBin Meng /* 19c8a7ba9eSThomas Chou * Get the current timer count 20c8a7ba9eSThomas Chou * 21435ae76eSBin Meng * @dev: The timer device 22c8a7ba9eSThomas Chou * @count: pointer that returns the current timer count 23c8a7ba9eSThomas Chou * @return: 0 if OK, -ve on error 24c8a7ba9eSThomas Chou */ 25*9ca07ebbSBin Meng int timer_get_count(struct udevice *dev, u64 *count); 26435ae76eSBin Meng 27c8a7ba9eSThomas Chou /* 28c8a7ba9eSThomas Chou * Get the timer input clock frequency 29c8a7ba9eSThomas Chou * 30435ae76eSBin Meng * @dev: The timer device 31c8a7ba9eSThomas Chou * @return: the timer input clock frequency 32c8a7ba9eSThomas Chou */ 33c8a7ba9eSThomas Chou unsigned long timer_get_rate(struct udevice *dev); 34c8a7ba9eSThomas Chou 35c8a7ba9eSThomas Chou /* 36435ae76eSBin Meng * struct timer_ops - Driver model timer operations 37c8a7ba9eSThomas Chou * 38435ae76eSBin Meng * The uclass interface is implemented by all timer devices which use 39c8a7ba9eSThomas Chou * driver model. 40c8a7ba9eSThomas Chou */ 41c8a7ba9eSThomas Chou struct timer_ops { 42c8a7ba9eSThomas Chou /* 43c8a7ba9eSThomas Chou * Get the current timer count 44c8a7ba9eSThomas Chou * 45435ae76eSBin Meng * @dev: The timer device 46*9ca07ebbSBin Meng * @count: pointer that returns the current 64-bit timer count 47c8a7ba9eSThomas Chou * @return: 0 if OK, -ve on error 48c8a7ba9eSThomas Chou */ 49*9ca07ebbSBin Meng int (*get_count)(struct udevice *dev, u64 *count); 50c8a7ba9eSThomas Chou }; 51c8a7ba9eSThomas Chou 52c8a7ba9eSThomas Chou /* 53c8a7ba9eSThomas Chou * struct timer_dev_priv - information about a device used by the uclass 54c8a7ba9eSThomas Chou * 55c8a7ba9eSThomas Chou * @clock_rate: the timer input clock frequency 56c8a7ba9eSThomas Chou */ 57c8a7ba9eSThomas Chou struct timer_dev_priv { 58c8a7ba9eSThomas Chou unsigned long clock_rate; 59c8a7ba9eSThomas Chou }; 60c8a7ba9eSThomas Chou 61c8a7ba9eSThomas Chou #endif /* _TIMER_H_ */ 62