comparison riviera/rvf/rvf_api.h @ 0:75a11d740a02

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