• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef __HI_HOOK_FUC_H__
17 #define __HI_HOOK_FUC_H__
18 
19 #include <hi_task.h>
20 #include <hi_mem.h>
21 #include <hi_os_stat.h>
22 #include <hi_timer.h>
23 #include <hi_isr.h>
24 
25 #define  fuc_type_name(name)    pfn_##name##_hook
26 
27 typedef hi_u32 (*fuc_type_name(hi_task_create))(hi_u32 *taskid,
28                                                 const hi_task_attr *attr,
29                                                 hi_void* (*task_route)(hi_void *),
30                                                 hi_void *arg);
31 
32 typedef hi_u32  (*fuc_type_name(hi_task_delete))(hi_u32 taskid);
33 
34 typedef hi_u32  (*fuc_type_name(hi_task_suspend))(hi_u32 taskid);
35 
36 typedef hi_u32  (*fuc_type_name(hi_task_resume))(hi_u32 taskid);
37 
38 typedef hi_u32  (*fuc_type_name(hi_task_get_priority))(hi_u32 taskid,
39                                                        hi_u32 *priority);
40 
41 typedef hi_u32  (*fuc_type_name(hi_task_set_priority))(hi_u32 taskid,
42                                                        hi_u32 priority);
43 
44 typedef hi_u32  (*fuc_type_name(hi_task_get_current_id))(hi_void);
45 
46 typedef hi_void (*fuc_type_name(hi_task_lock))(hi_void);
47 
48 typedef hi_void (*fuc_type_name(hi_task_unlock))(hi_void);
49 
50 typedef hi_u32  (*fuc_type_name(hi_sleep))(hi_u32 ms);
51 
52 typedef hi_u32 (*fuc_type_name(hi_event_create))(HI_OUT hi_u32 * id);
53 
54 typedef hi_u32 (*fuc_type_name(hi_event_init))(hi_u8 max_event_cnt,
55                                                hi_pvoid event_space);
56 
57 typedef hi_u32 (*fuc_type_name(hi_event_send))(hi_u32 id,
58                                                hi_u32 event_bits);
59 
60 typedef hi_u32 (*fuc_type_name(hi_event_wait))(hi_u32 id,
61                                                hi_u32 mask,
62                                                HI_OUT hi_u32 *event_bits,
63                                                hi_u32 timeout,
64                                                hi_u32 flag);
65 
66 typedef hi_u32 (*fuc_type_name(hi_event_clear))(hi_u32 id,
67                                                 hi_u32 event_bits);
68 
69 typedef hi_u32 (*fuc_type_name(hi_event_delete))(hi_u32 id);
70 
71 typedef hi_pvoid (*fuc_type_name(hi_malloc))(hi_u32 mod_id,
72                                              hi_u32 size);
73 
74 typedef hi_void  (*fuc_type_name(hi_free))(hi_u32 mod_id,
75                                            hi_pvoid addr);
76 
77 typedef hi_u32 (*fuc_type_name(hi_msg_queue_create))(HI_OUT hi_u32* id,
78                                                      hi_u16 queue_len,
79                                                      hi_u32 msg_size);
80 
81 typedef hi_u32 (*fuc_type_name(hi_msg_queue_wait))(hi_u32 id,
82                                                    hi_pvoid msg,
83                                                    hi_u32 timeout_ms,
84                                                    hi_u32* msg_size);
85 
86 typedef hi_u32 (*fuc_type_name(hi_msg_queue_send))(hi_u32 id,
87                                                    hi_pvoid msg,
88                                                    hi_u32 timeout_ms,
89                                                    hi_u32 msg_size);
90 
91 typedef hi_u32 (*fuc_type_name(hi_msg_queue_delete))(hi_u32 id);
92 
93 
94 typedef hi_u32 (*fuc_type_name(hi_mux_create))(hi_u32* mux_id);
95 
96 typedef hi_u32 (*fuc_type_name(hi_mux_delete))(hi_u32 mux_id);
97 
98 typedef hi_u32 (*fuc_type_name(hi_mux_pend))(hi_u32 mux_id,
99                                              hi_u32 timeout_ms);
100 
101 typedef hi_u32 (*fuc_type_name(hi_mux_post))(hi_u32 mux_id);
102 
103 typedef hi_u32 (*fuc_type_name(hi_sem_create))(hi_u32* sem_id, hi_u16 init_value);
104 
105 typedef hi_u32 (*fuc_type_name(hi_sem_bcreate))(hi_u32* sem_id, hi_u8 init_value);
106 
107 typedef hi_u32 (*fuc_type_name(hi_sem_delete))(hi_u32 sem_id);
108 
109 typedef hi_u32 (*fuc_type_name(hi_sem_wait))(hi_u32 sem_id, hi_u32 timeout);
110 
111 typedef hi_u32 (*fuc_type_name(hi_sem_signal))(hi_u32 sem_id);
112 
113 
114 typedef hi_u32 (*fuc_type_name(hi_get_tick))(hi_void);
115 
116 typedef hi_u64 (*fuc_type_name(hi_get_tick64))(hi_void);
117 
118 typedef hi_u32 (*fuc_type_name(hi_get_milli_seconds))(hi_void);
119 
120 typedef hi_u32 (*fuc_type_name(hi_get_seconds))(hi_void);
121 
122 typedef hi_u64 (*fuc_type_name(hi_get_us))(hi_void);
123 
124 typedef hi_u32 (*fuc_type_name(hi_get_real_time))(hi_void);
125 
126 typedef hi_u32 (*fuc_type_name(hi_set_real_time))(hi_u32 sec);
127 
128 typedef hi_u32 (*fuc_type_name(hi_timer_create))(hi_u32 *timer_handle);
129 
130 typedef hi_u32 (*fuc_type_name(hi_timer_start))(hi_u32 timer_handle,
131                                                 hi_timer_type type,
132                                                 hi_u32 expire,
133                                                 hi_timer_callback_f timer_func,
134                                                 hi_u32 data);
135 
136 typedef hi_u32 (*fuc_type_name(hi_timer_stop))(hi_u32 timer_handle);
137 
138 typedef hi_u32 (*fuc_type_name(hi_timer_delete))(hi_u32 timer_handle);
139 
140 typedef hi_u32 (*fuc_type_name(hi_irq_enable))(hi_u32 vector);
141 
142 typedef hi_void (*fuc_type_name(hi_irq_disable))(hi_u32 vector);
143 
144 typedef hi_u32 (*fuc_type_name(hi_irq_request))(hi_u32 vector,
145                                                 hi_u32 flags,
146                                                 irq_routine routine,
147                                                 hi_u32 param);
148 
149 typedef hi_u32 (*fuc_type_name(hi_irq_free))(hi_u32 vector);
150 
151 typedef hi_bool (*fuc_type_name(hi_is_int_context))(hi_void);
152 
153 typedef struct {
154     /* task */
155     fuc_type_name(hi_task_create)         hi_task_create_hook;
156     fuc_type_name(hi_task_delete)         hi_task_delete_hook;
157     fuc_type_name(hi_task_suspend)        hi_task_suspend_hook;
158     fuc_type_name(hi_task_resume)         hi_task_resume_hook;
159     fuc_type_name(hi_task_get_priority)   hi_task_get_priority_hook;
160     fuc_type_name(hi_task_set_priority)   hi_task_set_priority_hook;
161     fuc_type_name(hi_task_get_current_id) hi_task_get_current_id_hook;
162     fuc_type_name(hi_task_lock)           hi_task_lock_hook;
163     fuc_type_name(hi_task_unlock)         hi_task_unlock_hook;
164     fuc_type_name(hi_sleep)               hi_sleep_hook;
165     /* event */
166     fuc_type_name(hi_event_create)        hi_event_create_hook;
167     fuc_type_name(hi_event_init)          hi_event_init_hook;
168     fuc_type_name(hi_event_send)          hi_event_send_hook;
169     fuc_type_name(hi_event_wait)          hi_event_wait_hook;
170     fuc_type_name(hi_event_clear)         hi_event_clear_hook;
171     fuc_type_name(hi_event_delete)        hi_event_delete_hook;
172     /* memory */
173     fuc_type_name(hi_malloc)              hi_malloc_hook;
174     fuc_type_name(hi_free)                hi_free_hook;
175     /* queue */
176     fuc_type_name(hi_msg_queue_create)    hi_msg_queue_create_hook;
177     fuc_type_name(hi_msg_queue_send)      hi_msg_queue_send_hook;
178     fuc_type_name(hi_msg_queue_wait)      hi_msg_queue_wait_hook;
179     fuc_type_name(hi_msg_queue_delete)    hi_msg_queue_delete_hook;
180     /* mux */
181     fuc_type_name(hi_mux_create)          hi_mux_create_hook;
182     fuc_type_name(hi_mux_delete)          hi_mux_delete_hook;
183     fuc_type_name(hi_mux_pend)            hi_mux_pend_hook;
184     fuc_type_name(hi_mux_post)            hi_mux_post_hook;
185     /* semaphore */
186     fuc_type_name(hi_sem_create)          hi_sem_create_hook;
187     fuc_type_name(hi_sem_bcreate)         hi_sem_bcreate_hook;
188     fuc_type_name(hi_sem_delete)          hi_sem_delete_hook;
189     fuc_type_name(hi_sem_wait)            hi_sem_wait_hook;
190     fuc_type_name(hi_sem_signal)          hi_sem_signal_hook;
191     /* time */
192     fuc_type_name(hi_get_tick)            hi_get_tick_hook;
193     fuc_type_name(hi_get_tick64)          hi_get_tick64_hook;
194     fuc_type_name(hi_get_milli_seconds)   hi_get_milli_seconds_hook;
195     fuc_type_name(hi_get_seconds)         hi_get_seconds_hook;
196     fuc_type_name(hi_get_us)              hi_get_us_hook;
197     fuc_type_name(hi_get_real_time)       hi_get_real_time_hook;
198     fuc_type_name(hi_set_real_time)       hi_set_real_time_hook;
199     /* timer */
200     fuc_type_name(hi_timer_create)        hi_timer_create_hook;
201     fuc_type_name(hi_timer_start)         hi_timer_start_hook;
202     fuc_type_name(hi_timer_stop)          hi_timer_stop_hook;
203     fuc_type_name(hi_timer_delete)        hi_timer_delete_hook;
204     /* interrupt */
205     fuc_type_name(hi_irq_enable)          hi_irq_enable_hook;
206     fuc_type_name(hi_irq_disable)         hi_irq_disable_hook;
207     fuc_type_name(hi_irq_request)         hi_irq_request_hook;
208     fuc_type_name(hi_irq_free)            hi_irq_free_hook;
209     fuc_type_name(hi_is_int_context)      hi_is_int_context_hook;
210 } hi_hook_osa;
211 
212 HI_EXTERN hi_hook_osa g_hook_osa;
213 
214 HI_EXTERN hi_u32 hi_init_hook_osa(const hi_hook_osa *osa);
215 
216 #endif
217