1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */
29d4fa1a1SMauro Carvalho Chehab /**
39d4fa1a1SMauro Carvalho Chehab Support for Intel Camera Imaging ISP subsystem.
49d4fa1a1SMauro Carvalho Chehab Copyright (c) 2010 - 2015, Intel Corporation.
59d4fa1a1SMauro Carvalho Chehab 
69d4fa1a1SMauro Carvalho Chehab This program is free software; you can redistribute it and/or modify it
79d4fa1a1SMauro Carvalho Chehab under the terms and conditions of the GNU General Public License,
89d4fa1a1SMauro Carvalho Chehab version 2, as published by the Free Software Foundation.
99d4fa1a1SMauro Carvalho Chehab 
109d4fa1a1SMauro Carvalho Chehab This program is distributed in the hope it will be useful, but WITHOUT
119d4fa1a1SMauro Carvalho Chehab ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
129d4fa1a1SMauro Carvalho Chehab FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
139d4fa1a1SMauro Carvalho Chehab more details.
149d4fa1a1SMauro Carvalho Chehab */
159d4fa1a1SMauro Carvalho Chehab 
169d4fa1a1SMauro Carvalho Chehab #ifndef __IA_CSS_TIMER_H
179d4fa1a1SMauro Carvalho Chehab #define __IA_CSS_TIMER_H
189d4fa1a1SMauro Carvalho Chehab 
199d4fa1a1SMauro Carvalho Chehab /* @file
209d4fa1a1SMauro Carvalho Chehab  * Timer interface definitions
219d4fa1a1SMauro Carvalho Chehab  */
229d4fa1a1SMauro Carvalho Chehab #include <type_support.h>		/* for uint32_t */
239d4fa1a1SMauro Carvalho Chehab #include "ia_css_err.h"
249d4fa1a1SMauro Carvalho Chehab 
259d4fa1a1SMauro Carvalho Chehab /* @brief timer reading definition */
269d4fa1a1SMauro Carvalho Chehab typedef u32 clock_value_t;
279d4fa1a1SMauro Carvalho Chehab 
289d4fa1a1SMauro Carvalho Chehab /* @brief 32 bit clock tick,(timestamp based on timer-value of CSS-internal timer)*/
299d4fa1a1SMauro Carvalho Chehab struct ia_css_clock_tick {
309d4fa1a1SMauro Carvalho Chehab 	clock_value_t ticks; /** measured time in ticks.*/
319d4fa1a1SMauro Carvalho Chehab };
329d4fa1a1SMauro Carvalho Chehab 
339d4fa1a1SMauro Carvalho Chehab /* @brief TIMER event codes */
349d4fa1a1SMauro Carvalho Chehab enum ia_css_tm_event {
359d4fa1a1SMauro Carvalho Chehab 	IA_CSS_TM_EVENT_AFTER_INIT,
369d4fa1a1SMauro Carvalho Chehab 	/** Timer Event after Initialization */
379d4fa1a1SMauro Carvalho Chehab 	IA_CSS_TM_EVENT_MAIN_END,
389d4fa1a1SMauro Carvalho Chehab 	/** Timer Event after end of Main */
399d4fa1a1SMauro Carvalho Chehab 	IA_CSS_TM_EVENT_THREAD_START,
409d4fa1a1SMauro Carvalho Chehab 	/** Timer Event after thread start */
419d4fa1a1SMauro Carvalho Chehab 	IA_CSS_TM_EVENT_FRAME_PROC_START,
429d4fa1a1SMauro Carvalho Chehab 	/** Timer Event after Frame Process Start */
439d4fa1a1SMauro Carvalho Chehab 	IA_CSS_TM_EVENT_FRAME_PROC_END
449d4fa1a1SMauro Carvalho Chehab 	/** Timer Event after Frame Process End */
459d4fa1a1SMauro Carvalho Chehab };
469d4fa1a1SMauro Carvalho Chehab 
479d4fa1a1SMauro Carvalho Chehab /* @brief code measurement common struct */
489d4fa1a1SMauro Carvalho Chehab struct ia_css_time_meas {
499d4fa1a1SMauro Carvalho Chehab 	clock_value_t	start_timer_value;	/** measured time in ticks */
509d4fa1a1SMauro Carvalho Chehab 	clock_value_t	end_timer_value;	/** measured time in ticks */
519d4fa1a1SMauro Carvalho Chehab };
529d4fa1a1SMauro Carvalho Chehab 
539d4fa1a1SMauro Carvalho Chehab /**@brief SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT checks to ensure correct alignment for struct ia_css_clock_tick. */
549d4fa1a1SMauro Carvalho Chehab #define SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT sizeof(clock_value_t)
559d4fa1a1SMauro Carvalho Chehab /* @brief checks to ensure correct alignment for ia_css_time_meas. */
569d4fa1a1SMauro Carvalho Chehab #define SIZE_OF_IA_CSS_TIME_MEAS_STRUCT (sizeof(clock_value_t) \
579d4fa1a1SMauro Carvalho Chehab 					+ sizeof(clock_value_t))
589d4fa1a1SMauro Carvalho Chehab 
599d4fa1a1SMauro Carvalho Chehab /* @brief API to fetch timer count directly
609d4fa1a1SMauro Carvalho Chehab *
619d4fa1a1SMauro Carvalho Chehab * @param curr_ts [out] measured count value
6241022d35SMauro Carvalho Chehab * @return 0 if success
639d4fa1a1SMauro Carvalho Chehab *
649d4fa1a1SMauro Carvalho Chehab */
6541022d35SMauro Carvalho Chehab int
669d4fa1a1SMauro Carvalho Chehab ia_css_timer_get_current_tick(
679d4fa1a1SMauro Carvalho Chehab     struct ia_css_clock_tick *curr_ts);
689d4fa1a1SMauro Carvalho Chehab 
699d4fa1a1SMauro Carvalho Chehab #endif  /* __IA_CSS_TIMER_H */
70