blob: ae4a437edbeeefaa9555fa37fed130140211250c [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2018
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37*
38* Filename:
39* ---------
40* mer_kernel_timer.h
41*
42* Project:
43* --------
44* MERTOS
45*
46* Description:
47* ------------
48* The OS timer header
49*
50* Author:
51* -------
52 * -------
53*
54*****************************************************************************/
55#ifndef _MER_KERNEL_TIMER_H_
56#define _MER_KERNEL_TIMER_H_
57
58#include "mer_service_types.h"
59#include "mer_kernel_config_public.h"
60#include "us_timer.h"
61#include "kal_internal_api.h"
62
63///////////////////////////////////////////////////////////////////////////////
64// Macro
65///////////////////////////////////////////////////////////////////////////////
66#define OSTD_MAX_VALUE 0xffffffff
67#define OSTD_MAX_SLEEP_VALUE MAX_SLEEP_TIME
68
69///////////////////////////////////////////////////////////////////////////////
70// External variable
71///////////////////////////////////////////////////////////////////////////////
72extern mer_uint32 mer_kernel_timer_initial_tick;
73#if !defined(__EVENT_BASED_TIMER__)
74extern mer_uint32 mer_kernel_timer_fake_global_tick;
75#endif
76///////////////////////////////////////////////////////////////////////////////
77// Compile time assertion check
78///////////////////////////////////////////////////////////////////////////////
79
80///////////////////////////////////////////////////////////////////////////////
81// Typedef
82///////////////////////////////////////////////////////////////////////////////
83typedef struct timer_tick_info{
84 mer_uint32 afn;
85 mer_uint32 ufn;
86 mer_uint32 delayed;
87 struct timer_tick_info *next_ptr;
88} mer_kernel_timer_tick_info;
89
90///////////////////////////////////////////////////////////////////////////////
91// Enum
92///////////////////////////////////////////////////////////////////////////////
93
94///////////////////////////////////////////////////////////////////////////////
95// Structure
96///////////////////////////////////////////////////////////////////////////////
97
98///////////////////////////////////////////////////////////////////////////////
99// Static inline function
100///////////////////////////////////////////////////////////////////////////////
101static inline mer_uint32 mer_kernel_timer_tick_duration(mer_uint32 from, mer_uint32 to){
102 return ust_us_duration(from, to);
103}
104static inline mer_uint32 mer_kernel_timer_get_current_tick(){
105#if defined(__EVENT_BASED_TIMER__)
106 return USC_Get_TimeStamp();
107#else /* __EVENT_BASED_TIMER__ */
108 return mer_kernel_timer_fake_global_tick;
109#endif /* __EVENT_BASED_TIMER__ */
110}
111
112///////////////////////////////////////////////////////////////////////////////
113// External Function
114///////////////////////////////////////////////////////////////////////////////
115void mer_kernel_timer_initialization();
116void mer_kernel_timer_register_tick_interrupt(mer_uint32 afn, mer_uint32 ufn, mer_kernel_timer_tick_info* timer_cb, mer_uint32 delayed);
117void mer_kernel_timer_get_sleep_afn_ufn(mer_uint32 *afn, mer_uint32 *ufn, mer_kernel_timer_tick_info* afn_cb, mer_kernel_timer_tick_info* ufn_cb);
118mer_uint32 mer_kernel_timer_remove_event(mer_kernel_timer_tick_info *cb);
119mer_uint32 mer_kernel_timer_sleep_available();
120mer_kernel_timer_tick_info* mer_kernel_timer_get_expired_cb();
121#endif /* _MER_KERNEL_TIMER_H_ */
122