FreeCalypso > hg > fc-selenite
comparison src/cs/riviera/rvf/rvf_api.h @ 0:b6a5e36de839
src/cs: initial import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 15 Jul 2018 04:39:26 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:b6a5e36de839 |
---|---|
1 /****************************************************************************/ | |
2 /* */ | |
3 /* Name rvf_api.h */ | |
4 /* */ | |
5 /* Function this file contains rvf public definitions. */ | |
6 /* */ | |
7 /* Version 0.1 */ | |
8 /* */ | |
9 /* Date Modification */ | |
10 /* ------------------------------------ */ | |
11 /* 3/12/99 Create */ | |
12 /* 11/15/99 remove useless functions, */ | |
13 /* change tasks priority and time_slicing */ | |
14 /* 11/15/1999 compliant to RV coding guidelines */ | |
15 /* 12/23/1999 change buffer management, add memory bank handling */ | |
16 /* */ | |
17 /* Author David Lamy-Charrier (dlamy@tif.ti.com) */ | |
18 /* */ | |
19 /* (C) Copyright 1999 by Texas Instruments Incorporated, All Rights Reserved*/ | |
20 /****************************************************************************/ | |
21 | |
22 #ifndef _RVF_API_H | |
23 #define _RVF_API_H | |
24 | |
25 #include "rv/general.h" | |
26 #include "rv/rv_general.h" | |
27 #include "rvf/rvf_target.h" | |
28 | |
29 #ifndef _WINDOWS | |
30 #include "config/swconfig.cfg" | |
31 #endif | |
32 | |
33 #ifdef __cplusplus | |
34 extern "C" { | |
35 #endif | |
36 | |
37 | |
38 /* macros used to trace messages */ | |
39 | |
40 // WCP patch: default config is no RV trace for WCP | |
41 #if (OP_WCP == 0) | |
42 #define DEBUG_ENABLE 1 | |
43 #endif | |
44 | |
45 | |
46 #ifndef DEBUG_ENABLE | |
47 #define rvf_send_trace | |
48 #else | |
49 void rvf_send_trace1(char * msg, UINT8 msg_length, UINT32 val, UINT8 trace_level, UINT32 swe_use_id); | |
50 #define rvf_send_trace rvf_send_trace1 | |
51 #endif | |
52 | |
53 #define T_RVF_GD_ID UINT8 | |
54 | |
55 /* return parameters definition */ | |
56 typedef T_RV_RET T_RVF_RET; | |
57 | |
58 #define RVF_OK RV_OK | |
59 #define RVF_NOT_SUPPORTED RV_NOT_SUPPORTED | |
60 #define RVF_NOT_READY RV_NOT_READY | |
61 #define RVF_MEMORY_ERR RV_MEMORY_ERR | |
62 #define RVF_INTERNAL_ERR RV_INTERNAL_ERR | |
63 #define RVF_INVALID_PARAMETER RV_INVALID_PARAMETER | |
64 | |
65 /* memeory bank state definition */ | |
66 typedef enum{ | |
67 RVF_GREEN, | |
68 RVF_YELLOW, | |
69 RVF_RED | |
70 }T_RVF_MB_STATUS; | |
71 | |
72 /* task state */ | |
73 typedef enum { SUSPEND, RUNNING} T_RVF_TASK_STATE; | |
74 | |
75 /************************************************************************ | |
76 ** Mailbox definitions. Each task has 4 mailboxes that are used to | |
77 ** send buffers to the task. | |
78 */ | |
79 #define RVF_TASK_MBOX_0 0 | |
80 #define RVF_TASK_MBOX_1 1 | |
81 #define RVF_TASK_MBOX_2 2 | |
82 #define RVF_TASK_MBOX_3 3 | |
83 | |
84 #define RVF_NUM_TASK_MBOX 4 | |
85 | |
86 #define RVF_TASK_MBOX_0_EVT_MASK 0x0001 | |
87 #define RVF_TASK_MBOX_1_EVT_MASK 0x0002 | |
88 #define RVF_TASK_MBOX_2_EVT_MASK 0x0004 | |
89 #define RVF_TASK_MBOX_3_EVT_MASK 0x0008 | |
90 | |
91 /************************************************************************ | |
92 ** Event definitions. | |
93 ** | |
94 ** There are 4 reserved events used to signal messages rcvd in task mailboxes. | |
95 ** There are 4 reserved events used to signal timeout events. | |
96 ** There are 8 general purpose events available for applications. | |
97 */ | |
98 #define RVF_MAX_EVENTS 16 | |
99 | |
100 #define RVF_NUM_TASK_TIMERS 4 | |
101 | |
102 #define RVF_TIMER_0 0 | |
103 #define RVF_TIMER_1 1 | |
104 #define RVF_TIMER_2 2 | |
105 #define RVF_TIMER_3 3 | |
106 | |
107 #define RVF_TIMER_0_EVT_MASK 0x0010 | |
108 #define RVF_TIMER_1_EVT_MASK 0x0020 | |
109 #define RVF_TIMER_2_EVT_MASK 0x0040 | |
110 #define RVF_TIMER_3_EVT_MASK 0x0080 | |
111 | |
112 #define RVF_APPL_EVT_0 8 | |
113 #define RVF_APPL_EVT_1 9 | |
114 #define RVF_APPL_EVT_2 10 | |
115 #define RVF_APPL_EVT_3 11 | |
116 #define RVF_APPL_EVT_4 12 | |
117 #define RVF_APPL_EVT_5 13 | |
118 #define RVF_APPL_EVT_6 14 | |
119 #define RVF_APPL_EVT_7 15 | |
120 | |
121 #define EVENT_MASK(evt) ((UINT16)0x0001 << evt) | |
122 | |
123 #define MAX_HOSTING_TASKS 10 | |
124 #define MAX_PARASITES 10 | |
125 | |
126 | |
127 /* define memory bank related types */ | |
128 typedef UINT16 T_RVF_MB_ID; | |
129 //typedef UINT8 T_RVF_MB_NAME[RVF_MAX_MB_LEN]; | |
130 typedef char T_RVF_MB_NAME[RVF_MAX_MB_LEN]; | |
131 #define T_RVF_BUFFER void | |
132 typedef void (*CALLBACK_FUNC)(void *); | |
133 typedef void (*MB_CALLBACK_FUNC)(T_RVF_MB_ID); | |
134 | |
135 typedef struct{ | |
136 UINT32 size; | |
137 UINT32 watermark; | |
138 } T_RVF_MB_PARAM; | |
139 | |
140 | |
141 | |
142 /* Define a timer list entry | |
143 */ | |
144 typedef struct _tle | |
145 { | |
146 T_RV_HDR hdr; | |
147 struct _tle *p_next; | |
148 struct _tle *p_prev; | |
149 UINT32 ticks; | |
150 UINT16 event; /* event & param must be revised possibily */ | |
151 UINT32 param; /* sub struct pointed to by p_data if required */ | |
152 UINT32 t_init; | |
153 void* p_data; | |
154 } T_RVF_TIMER_LIST_ENT; | |
155 | |
156 typedef T_RVF_TIMER_LIST_ENT* P_NODE; | |
157 | |
158 /* Define a timer list queue ?? QUEUE or LIST ?? | |
159 */ | |
160 typedef struct | |
161 { | |
162 T_RVF_TIMER_LIST_ENT *p_first; | |
163 T_RVF_TIMER_LIST_ENT *p_last; | |
164 UINT32 last_ticks; | |
165 UINT16 timerCnt; | |
166 } T_RVF_TIMER_LIST_Q; | |
167 | |
168 | |
169 /*********************************************************************** | |
170 ** This queue is a general purpose buffer queue, for application use. | |
171 */ | |
172 typedef struct | |
173 { void *p_first; | |
174 void *p_last; | |
175 UINT16 count; | |
176 } T_RVF_BUFFER_Q; | |
177 | |
178 #define RVF_IS_QUEUE_EMPTY(p_q) (p_q.count == 0) | |
179 | |
180 /******************************************************* | |
181 * Message parameter of "handle_timer()" | |
182 ********************************************************/ | |
183 #define T_RVF_TIMER_ID UINT32 | |
184 | |
185 typedef struct { | |
186 T_RV_HDR hdr; | |
187 T_RVF_TIMER_ID tm_id; | |
188 UINT8 cont; | |
189 void* action; | |
190 } T_RVF_TMS_MSG; | |
191 | |
192 /* define a mutex structure */ | |
193 typedef struct | |
194 { UINT32 words[11]; | |
195 }T_RVF_MUTEX; | |
196 | |
197 /*********************************************************************** | |
198 ** Define the basic message header that RVF expects on all inter-computer | |
199 ** communications. Applications should use this in their own definitions | |
200 ** and add on their own message contents. | |
201 */ | |
202 /*typedef struct { | |
203 UINT16 prim; // Message Type | |
204 UINT16 len; // Message Length (including header) | |
205 } msg_hdr_t; | |
206 | |
207 typedef struct { | |
208 msg_hdr_t hdr; | |
209 UINT8 data[1]; | |
210 } msg_type1; | |
211 */ | |
212 | |
213 /* Task constants | |
214 */ | |
215 #ifndef TASKPTR | |
216 typedef void (*TASKPTR)(UINT32); | |
217 #endif | |
218 | |
219 | |
220 #define RVF_INVALID_TASK (0xFF) | |
221 #define RVF_INVALID_MB_ID (0xFFFF) | |
222 #define RVF_INVALID_MAILBOX (0xFF) | |
223 #define RVF_INVALID_ADDR_ID (0xFF) | |
224 | |
225 /* Define the value that create pool will return if it fails | |
226 */ | |
227 | |
228 | |
229 /************************************************************************/ | |
230 /* Function prototypes */ | |
231 | |
232 | |
233 /* Task management*/ | |
234 void rvf_init(void); | |
235 T_RVF_RET rvf_create_legacy_task (TASKPTR task_entry, UINT8 task_id, char *taskname, UINT8 *stack, UINT16 stacksize, UINT8 priority, UINT8 time_slicing, T_RVF_TASK_STATE is_suspend) ; | |
236 T_RVF_RET rvf_create_task (TASKPTR task_entry, T_RVF_G_ADDR_ID task_id, char *taskname, UINT8 *stack, UINT16 stacksize, UINT8 priority, UINT8 tcode, UINT8 time_slicing, T_RVF_TASK_STATE is_suspend); | |
237 T_RVF_RET rvf_resume_task( T_RVF_G_ADDR_ID taskid); | |
238 void rvf_exit_task(T_RVF_G_ADDR_ID vtask); | |
239 T_RVF_RET rvf_suspend_task(T_RVF_G_ADDR_ID vtask); | |
240 T_RVF_G_ADDR_ID rvf_get_taskid(void); | |
241 char * rvf_get_taskname(void); | |
242 T_RVF_G_ADDR_ID rvf_get_context(); | |
243 | |
244 /* Message Handling */ | |
245 typedef T_RV_HDR T_RVF_MSG ; | |
246 typedef UINT32 T_RVF_MSG_ID; | |
247 | |
248 T_RVF_RET rvf_send_msg (T_RVF_G_ADDR_ID addr_id, void * p_msg); | |
249 T_RVF_MB_STATUS rvf_get_msg_buf (T_RVF_MB_ID mb_id, | |
250 UINT32 message_size, | |
251 T_RVF_MSG_ID msg_id, | |
252 T_RVF_MSG ** pp_msg); | |
253 T_RVF_RET rvf_free_msg (T_RVF_MSG * p_msg); | |
254 T_RVF_RET rvf_free_timer_msg (T_RVF_MSG *p_msg); | |
255 | |
256 | |
257 | |
258 /* To send buffers and events between tasks*/ | |
259 void * rvf_read_mbox (UINT8 mbox); | |
260 void * rvf_read_addr_mbox (T_RVF_G_ADDR_ID task_id, UINT8 mbox); | |
261 UINT8 rvf_send_event (T_RVF_G_ADDR_ID task_id, UINT16 event); | |
262 | |
263 /* task synchronization */ | |
264 T_RVF_RET rvf_initialize_mutex( T_RVF_MUTEX * mutex); | |
265 T_RVF_RET rvf_lock_mutex( T_RVF_MUTEX * mutex); | |
266 T_RVF_RET rvf_unlock_mutex( T_RVF_MUTEX * mutex); | |
267 T_RVF_RET rvf_delete_mutex( T_RVF_MUTEX * mutex); | |
268 | |
269 | |
270 /* To manage memory */ | |
271 T_RVF_RET rvf_create_mb(T_RVF_MB_NAME mb_name, T_RVF_MB_PARAM mb_param, T_RVF_MB_ID *mb_id); | |
272 T_RVF_RET rvf_delete_mb(T_RVF_MB_NAME mb_name); | |
273 T_RVF_RET rvf_get_mb_id(T_RVF_MB_NAME mb_name, T_RVF_MB_ID *mb_id); | |
274 T_RVF_MB_STATUS rvf_get_mb_status(T_RVF_MB_ID mb_id); | |
275 T_RVF_RET rvf_mb_is_used(T_RVF_MB_NAME mb_name, UINT8* isUsed) ; | |
276 | |
277 T_RVF_MB_STATUS rvf_get_buf(T_RVF_MB_ID mb_id, UINT32 buffer_size, T_RVF_BUFFER** p_buffer); | |
278 T_RVF_MB_STATUS rvf_count_buf(T_RVF_MB_ID mb_id, T_RVF_BUFFER * p_buffer); | |
279 T_RVF_RET rvf_free_buf( T_RVF_BUFFER * p_buffer); | |
280 T_RVF_RET rvf_set_callback_func(T_RVF_MB_ID mb_id, MB_CALLBACK_FUNC func); | |
281 T_RVF_RET rvf_change_callback_func(T_RVF_MB_ID mb_id, MB_CALLBACK_FUNC func); | |
282 | |
283 void rvf_get_protected_buf(T_RVF_MB_ID mb_id, UINT32 buffer_size, T_RVF_BUFFER** p_buffer); | |
284 | |
285 | |
286 UINT32 rvf_get_buf_size (void *bptr); | |
287 /* get the parameters of a specific memory bank */ | |
288 T_RVF_RET rvf_get_mb_param( T_RVF_MB_NAME mb_name, T_RVF_MB_PARAM * param); | |
289 /* change the parameters of a specific memory bank */ | |
290 T_RVF_RET rvf_set_mb_param( T_RVF_MB_NAME mb_name, T_RVF_MB_PARAM * param); | |
291 | |
292 | |
293 /* User buffer queue management*/ | |
294 T_RVF_RET rvf_enqueue (T_RVF_BUFFER_Q *p_q, void *p_buf); | |
295 T_RVF_RET rvf_enqueue_head (T_RVF_BUFFER_Q *p_q, void *p_buf); | |
296 void * rvf_dequeue (T_RVF_BUFFER_Q *p_q); | |
297 T_RVF_BUFFER * rvf_scan_next (T_RVF_BUFFER_Q * p_q, T_RVF_BUFFER * p_buf); | |
298 T_RVF_RET rvf_remove_from_queue (T_RVF_BUFFER_Q * p_q, T_RVF_BUFFER * p_buf); | |
299 | |
300 /* Timer management*/ | |
301 | |
302 UINT16 rvf_wait(UINT16 flag, UINT32 ticks); | |
303 UINT16 rvf_evt_wait(T_RVF_G_ADDR_ID rtask, UINT16 flag, UINT32 timeout) ; | |
304 void rvf_delay(UINT32 ticks); | |
305 | |
306 void rvf_start_timer(UINT8 tnum, UINT32 ticks, BOOLEAN is_continuous); | |
307 void rvf_stop_timer (UINT8 tnum); | |
308 char * rvf_get_time_stamp(char *tbuf); | |
309 UINT32 rvf_get_tick_count(void); | |
310 void rvf_init_timer_list (T_RVF_TIMER_LIST_Q *p_timer_listq); | |
311 void rvf_init_timer_list_entry (T_RVF_TIMER_LIST_ENT *p_tle); | |
312 UINT16 rvf_update_timer_list (T_RVF_TIMER_LIST_Q *p_timer_listq); | |
313 void rvf_add_to_timer_list (T_RVF_TIMER_LIST_Q *p_timer_listq, T_RVF_TIMER_LIST_ENT *p_tle); | |
314 void rvf_remove_from_timer_list (T_RVF_TIMER_LIST_Q *p_timer_listq, T_RVF_TIMER_LIST_ENT *p_tle); | |
315 T_RVF_TIMER_LIST_ENT* rvf_get_expired_entry (T_RVF_TIMER_LIST_Q *p_timer_listq); | |
316 | |
317 | |
318 #define T_RV_TM_ID UINT32 | |
319 | |
320 /*************************************************************************/ | |
321 /* :) USER FRIENDLY TIMER MANAGEMENT API consisting of add, delete and modify timer */ | |
322 /*************************************************************************/ | |
323 /* Returns 0 on failure */ | |
324 T_RVF_TIMER_ID rvf_create_timer( T_RVF_G_ADDR_ID g_addrId, | |
325 UINT32 timerDuration, | |
326 BOOLEAN isContinuous, | |
327 void* p_action); | |
328 | |
329 void rvf_del_timer ( T_RV_TM_ID tm_id) ; | |
330 | |
331 void rvf_reset_timer ( T_RV_TM_ID tm_id, UINT32 new_duration, | |
332 BOOLEAN isContinuous); | |
333 | |
334 | |
335 /* Disable Interrupts, Enable Interrupts*/ | |
336 void rvf_enable(void); | |
337 void rvf_disable(UINT8 who); | |
338 | |
339 /* Trace for debug purposes*/ | |
340 void rvf_dump_mem(); | |
341 void rvf_dump_tasks(); | |
342 void rvf_dump_pool(); | |
343 | |
344 /* specific function */ | |
345 T_RVF_BUFFER * rvf_wait_for_specific_msg(UINT16 msg_code, UINT8 mbox, UINT32 timeout); | |
346 | |
347 /* Trace definitions */ | |
348 #define NULL_PARAM 4294967295 /* this value will not be displayed in rvf_send_trace function */ | |
349 #define TRACE_MB_ID (RVF_MAX_REAL_MB -1) | |
350 | |
351 #ifdef __cplusplus | |
352 } | |
353 #endif | |
354 | |
355 #endif /* _RVF_API_H */ | |
356 |