1 /* 2 * Copyright (c) 2015-2024, Arm Limited and Contributors. All rights reserved. 3 * Copyright (c) 2019, Linaro Limited 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 #ifndef DELAY_TIMER_H 9 #define DELAY_TIMER_H 10 11 #include <stdbool.h> 12 #include <stdint.h> 13 14 #include <arch_helpers.h> 15 16 /******************************************************************** 17 * A simple timer driver providing synchronous delay functionality. 18 * The driver must be initialized with a structure that provides a 19 * function pointer to return the timer value and a clock 20 * multiplier/divider. The ratio of the multiplier and the divider is 21 * the clock period in microseconds. 22 ********************************************************************/ 23 24 typedef struct timer_ops { 25 uint32_t (*get_timer_value)(void); 26 uint32_t clk_mult; 27 uint32_t clk_div; 28 uint64_t (*timeout_init_us)(uint32_t usec); 29 bool (*timeout_elapsed)(uint64_t cnt); 30 } timer_ops_t; 31 32 uint64_t timeout_init_us(uint32_t usec); 33 bool timeout_elapsed(uint64_t cnt); 34 void mdelay(uint32_t msec); 35 void udelay(uint32_t usec); 36 void timer_init(const timer_ops_t *ops_ptr); 37 38 #endif /* DELAY_TIMER_H */ 39