1 | /************************************************************************ |
---|
2 | * |
---|
3 | * yamon_api.h |
---|
4 | * |
---|
5 | * YAMON interface definitions |
---|
6 | * |
---|
7 | * ###################################################################### |
---|
8 | * |
---|
9 | * mips_start_of_legal_notice |
---|
10 | * |
---|
11 | * Copyright (c) 2003 MIPS Technologies, Inc. All rights reserved. |
---|
12 | * |
---|
13 | * |
---|
14 | * Unpublished rights (if any) reserved under the copyright laws of the |
---|
15 | * United States of America and other countries. |
---|
16 | * |
---|
17 | * This code is proprietary to MIPS Technologies, Inc. ("MIPS |
---|
18 | * Technologies"). Any copying, reproducing, modifying or use of this code |
---|
19 | * (in whole or in part) that is not expressly permitted in writing by MIPS |
---|
20 | * Technologies or an authorized third party is strictly prohibited. At a |
---|
21 | * minimum, this code is protected under unfair competition and copyright |
---|
22 | * laws. Violations thereof may result in criminal penalties and fines. |
---|
23 | * |
---|
24 | * MIPS Technologies reserves the right to change this code to improve |
---|
25 | * function, design or otherwise. MIPS Technologies does not assume any |
---|
26 | * liability arising out of the application or use of this code, or of any |
---|
27 | * error or omission in such code. Any warranties, whether express, |
---|
28 | * statutory, implied or otherwise, including but not limited to the implied |
---|
29 | * warranties of merchantability or fitness for a particular purpose, are |
---|
30 | * excluded. Except as expressly provided in any written license agreement |
---|
31 | * from MIPS Technologies or an authorized third party, the furnishing of |
---|
32 | * this code does not give recipient any license to any intellectual |
---|
33 | * property rights, including any patent rights, that cover this code. |
---|
34 | * |
---|
35 | * This code shall not be exported or transferred for the purpose of |
---|
36 | * reexporting in violation of any U.S. or non-U.S. regulation, treaty, |
---|
37 | * Executive Order, law, statute, amendment or supplement thereto. |
---|
38 | * |
---|
39 | * This code constitutes one or more of the following: commercial computer |
---|
40 | * software, commercial computer software documentation or other commercial |
---|
41 | * items. If the user of this code, or any related documentation of any |
---|
42 | * kind, including related technical data or manuals, is an agency, |
---|
43 | * department, or other entity of the United States government |
---|
44 | * ("Government"), the use, duplication, reproduction, release, |
---|
45 | * modification, disclosure, or transfer of this code, or any related |
---|
46 | * documentation of any kind, is restricted in accordance with Federal |
---|
47 | * Acquisition Regulation 12.212 for civilian agencies and Defense Federal |
---|
48 | * Acquisition Regulation Supplement 227.7202 for military agencies. The use |
---|
49 | * of this code by the Government is further restricted in accordance with |
---|
50 | * the terms of the license agreement(s) and/or applicable contract terms |
---|
51 | * and conditions covering this code from MIPS Technologies or an authorized |
---|
52 | * third party. |
---|
53 | * |
---|
54 | * |
---|
55 | * mips_end_of_legal_notice |
---|
56 | * |
---|
57 | * |
---|
58 | ************************************************************************/ |
---|
59 | |
---|
60 | #ifndef YAMON_API_H |
---|
61 | #define YAMON_API_H |
---|
62 | |
---|
63 | /************************************************************************ |
---|
64 | * Include files |
---|
65 | ************************************************************************/ |
---|
66 | |
---|
67 | |
---|
68 | /************************************************************************ |
---|
69 | * Definitions |
---|
70 | *************************************************************************/ |
---|
71 | |
---|
72 | /* Basic types */ |
---|
73 | |
---|
74 | typedef unsigned int t_yamon_uint32; |
---|
75 | typedef unsigned short t_yamon_uint16; |
---|
76 | typedef unsigned char t_yamon_uint8; |
---|
77 | typedef signed int t_yamon_int32; |
---|
78 | typedef signed short t_yamon_int16; |
---|
79 | typedef signed char t_yamon_int8; |
---|
80 | |
---|
81 | typedef unsigned char t_yamon_bool; |
---|
82 | |
---|
83 | #define YAMON_FALSE 0 |
---|
84 | #define YAMON_TRUE (!YAMON_FALSE) |
---|
85 | |
---|
86 | /* YAMON Environment variable */ |
---|
87 | typedef struct |
---|
88 | { |
---|
89 | char *name; |
---|
90 | char *val; |
---|
91 | } |
---|
92 | t_yamon_env_var; |
---|
93 | |
---|
94 | /* Format of application function */ |
---|
95 | typedef t_yamon_uint32 |
---|
96 | (*t_yamon_appl_main)( |
---|
97 | t_yamon_uint32 argc, /* Number of tokens in argv array */ |
---|
98 | char **argv, /* Array of tokens (first is "go") */ |
---|
99 | t_yamon_env_var *env, /* Array of env. variables */ |
---|
100 | t_yamon_uint32 memsize ); /* Size of memory (byte count) */ |
---|
101 | |
---|
102 | |
---|
103 | /* ID of YAMON configuration object */ |
---|
104 | typedef t_yamon_uint32 t_yamon_syscon_id; |
---|
105 | |
---|
106 | |
---|
107 | /* Number used by the exception registration functions in order to register |
---|
108 | * a default ISR/ESR. |
---|
109 | */ |
---|
110 | #define YAMON_DEFAULT_HANDLER 0xfffffff0 |
---|
111 | |
---|
112 | /* Number used by the exception registration functions in order to register |
---|
113 | * an EJTAG debug exception ESR. |
---|
114 | */ |
---|
115 | #define YAMON_DEFAULT_EJTAG_ESR 0xfffffff1 |
---|
116 | |
---|
117 | /* Registered Interrupt Service Routine (ISR) */ |
---|
118 | typedef void (*t_yamon_isr)(void *data); |
---|
119 | |
---|
120 | /* Registered Exception Service Routine (ESR) */ |
---|
121 | typedef void (*t_yamon_esr)(void); |
---|
122 | |
---|
123 | /* Entry point called by ESRs wishing to pass control back to YAMON */ |
---|
124 | typedef void (*t_yamon_retfunc)(void); |
---|
125 | |
---|
126 | /* Handle used for deregistration of ISR/ESR */ |
---|
127 | typedef void *t_yamon_ref; |
---|
128 | |
---|
129 | |
---|
130 | /* YAMONE Vector table address */ |
---|
131 | #define YAMON_FUNCTION_BASE 0x9fc00500 |
---|
132 | |
---|
133 | /* YAMON Vector table offsets */ |
---|
134 | #define YAMON_FUNC_PRINT_COUNT_OFS 0x04 |
---|
135 | #define YAMON_FUNC_EXIT_OFS 0x20 |
---|
136 | #define YAMON_FUNC_FLUSH_CACHE_OFS 0x2C |
---|
137 | #define YAMON_FUNC_PRINT_OFS 0x34 |
---|
138 | #define YAMON_FUNC_REGISTER_CPU_ISR_OFS 0x38 |
---|
139 | #define YAMON_FUNC_DEREGISTER_CPU_ISR_OFS 0x3c |
---|
140 | #define YAMON_FUNC_REGISTER_IC_ISR_OFS 0x40 |
---|
141 | #define YAMON_FUNC_DEREGISTER_IC_ISR_OFS 0x44 |
---|
142 | #define YAMON_FUNC_REGISTER_ESR_OFS 0x48 |
---|
143 | #define YAMON_FUNC_DEREGISTER_ESR_OFS 0x4c |
---|
144 | #define YAMON_FUNC_GETCHAR_OFS 0x50 |
---|
145 | #define YAMON_FUNC_SYSCON_READ_OFS 0x54 |
---|
146 | |
---|
147 | /* Macro for accessing YAMON function */ |
---|
148 | #define YAMON_FUNC(ofs)\ |
---|
149 | (*(t_yamon_uint32 *)(YAMON_FUNCTION_BASE + (ofs))) |
---|
150 | |
---|
151 | |
---|
152 | /************************************************************************ |
---|
153 | * Public variables |
---|
154 | ************************************************************************/ |
---|
155 | |
---|
156 | /************************************************************************ |
---|
157 | * Public functions |
---|
158 | ************************************************************************/ |
---|
159 | |
---|
160 | |
---|
161 | /************************************************************************ |
---|
162 | * |
---|
163 | * t_yamon_exit |
---|
164 | * Description : |
---|
165 | * ------------- |
---|
166 | * |
---|
167 | * Exit application and return to YAMON. |
---|
168 | * |
---|
169 | * Parameters : |
---|
170 | * ------------ |
---|
171 | * |
---|
172 | * 'rc' (OUT) : Return code |
---|
173 | * |
---|
174 | * Return values : |
---|
175 | * --------------- |
---|
176 | * |
---|
177 | * None (never returns) |
---|
178 | * |
---|
179 | ************************************************************************/ |
---|
180 | typedef void |
---|
181 | (*t_yamon_exit)( |
---|
182 | t_yamon_uint32 rc ); /* Return code */ |
---|
183 | |
---|
184 | #define YAMON_FUNC_EXIT( rc )\ |
---|
185 | ((t_yamon_exit)( YAMON_FUNC(YAMON_FUNC_EXIT_OFS) ))\ |
---|
186 | ( rc ) |
---|
187 | |
---|
188 | |
---|
189 | /************************************************************************ |
---|
190 | * |
---|
191 | * t_yamon_print |
---|
192 | * Description : |
---|
193 | * ------------- |
---|
194 | * |
---|
195 | * Print null-terminated string to tty0. |
---|
196 | * |
---|
197 | * Parameters : |
---|
198 | * ------------ |
---|
199 | * |
---|
200 | * 'port' (OUT) : Ignored, always prints to tty0. Not included in macro. |
---|
201 | * 's' (OUT) : String to print. |
---|
202 | * |
---|
203 | * Return values : |
---|
204 | * --------------- |
---|
205 | * |
---|
206 | * None |
---|
207 | * |
---|
208 | ************************************************************************/ |
---|
209 | typedef void |
---|
210 | (*t_yamon_print)( |
---|
211 | t_yamon_uint32 port, /* Output port (not used, always tty0) */ |
---|
212 | const char *s ); /* String to output */ |
---|
213 | |
---|
214 | #define YAMON_FUNC_PRINT( s )\ |
---|
215 | ((t_yamon_print)( YAMON_FUNC(YAMON_FUNC_PRINT_OFS) ))\ |
---|
216 | ( 0, s ) |
---|
217 | |
---|
218 | |
---|
219 | /************************************************************************ |
---|
220 | * |
---|
221 | * t_yamon_print_count |
---|
222 | * Description : |
---|
223 | * ------------- |
---|
224 | * |
---|
225 | * Print specified number of characters to tty0. |
---|
226 | * |
---|
227 | * Parameters : |
---|
228 | * ------------ |
---|
229 | * |
---|
230 | * 'port' (OUT) : Ignored, always prints to tty0. Not included in macro. |
---|
231 | * 's' (OUT) : Array of characters to print. |
---|
232 | * 'count' (OUT) : Number of characters to print. |
---|
233 | * |
---|
234 | * Return values : |
---|
235 | * --------------- |
---|
236 | * |
---|
237 | * None |
---|
238 | * |
---|
239 | ************************************************************************/ |
---|
240 | typedef void |
---|
241 | (*t_yamon_print_count)( |
---|
242 | t_yamon_uint32 port, /* Output port (not used, always tty0 */ |
---|
243 | char *s, /* String to output */ |
---|
244 | t_yamon_uint32 count ); /* Number of characters to output */ |
---|
245 | |
---|
246 | #define YAMON_FUNC_PRINT_COUNT( s, count )\ |
---|
247 | ((t_yamon_print_count)( YAMON_FUNC(YAMON_FUNC_PRINT_COUNT_OFS) ))\ |
---|
248 | ( 0, s, count ) |
---|
249 | |
---|
250 | |
---|
251 | /************************************************************************ |
---|
252 | * |
---|
253 | * t_yamon_getchar |
---|
254 | * Description : |
---|
255 | * ------------- |
---|
256 | * |
---|
257 | * Get character from tty0 if character is available. Function |
---|
258 | * returns immediately if no character is available. |
---|
259 | * |
---|
260 | * Parameters : |
---|
261 | * ------------ |
---|
262 | * |
---|
263 | * 'port' (OUT) : Ignored, always uses tty0. Not included in macro. |
---|
264 | * 'ch' (OUT) : Character read (if available). |
---|
265 | * |
---|
266 | * Return values : |
---|
267 | * --------------- |
---|
268 | * |
---|
269 | * YAMON_TRUE if character was available, else YAMON_FALSE. |
---|
270 | * |
---|
271 | ************************************************************************/ |
---|
272 | typedef t_yamon_bool |
---|
273 | (*t_yamon_getchar)( |
---|
274 | t_yamon_uint32 port, /* Output port (not used, always tty0 */ |
---|
275 | char *ch ); /* Character to output */ |
---|
276 | |
---|
277 | #define YAMON_FUNC_GETCHAR( ch )\ |
---|
278 | ((t_yamon_getchar)( YAMON_FUNC(YAMON_FUNC_GETCHAR_OFS) ))\ |
---|
279 | ( 0, ch ) |
---|
280 | |
---|
281 | |
---|
282 | /************************************************************************ |
---|
283 | * |
---|
284 | * t_yamon_syscon_read |
---|
285 | * Description : |
---|
286 | * ------------- |
---|
287 | * |
---|
288 | * Read the value of system configuration object given by 'id'. |
---|
289 | * |
---|
290 | * See syscon_api.h in YAMON source distribution for further details |
---|
291 | * on object IDs and error codes. |
---|
292 | * |
---|
293 | * Parameters : |
---|
294 | * ------------ |
---|
295 | * |
---|
296 | * 'id' (IN) : Object id. |
---|
297 | * 'param' (INOUT) : Buffer for object value. |
---|
298 | * 'size' (IN) : Size of buffer (must match size of object). |
---|
299 | * |
---|
300 | * Return values : |
---|
301 | * --------------- |
---|
302 | * |
---|
303 | * 0 : Returned parameter is valid. |
---|
304 | * Other values indicate error. |
---|
305 | * |
---|
306 | ************************************************************************/ |
---|
307 | typedef t_yamon_int32 |
---|
308 | (*t_yamon_syscon_read)( |
---|
309 | t_yamon_syscon_id id, /* Object ID */ |
---|
310 | void *param, /* Buffer for object value */ |
---|
311 | t_yamon_uint32 size); /* Buffer size (bytes) */ |
---|
312 | |
---|
313 | #define YAMON_FUNC_SYSCON_READ( id, param, size )\ |
---|
314 | ((t_yamon_syscon_read)( YAMON_FUNC(YAMON_FUNC_SYSCON_READ_OFS) ))\ |
---|
315 | ( id, param, size ) |
---|
316 | |
---|
317 | |
---|
318 | /************************************************************************ |
---|
319 | * |
---|
320 | * t_yamon_flush_cache |
---|
321 | * Description : |
---|
322 | * ------------- |
---|
323 | * |
---|
324 | * Flush I-or D-cache |
---|
325 | * |
---|
326 | * Function performs "writeback and invalidate" operations on D-cache |
---|
327 | * lines and "invalidate" operations on I-cache lines. |
---|
328 | * |
---|
329 | * Parameters : |
---|
330 | * ------------ |
---|
331 | * |
---|
332 | * 'type' (IN) : Cache to be flushed. |
---|
333 | * |
---|
334 | * Return values : |
---|
335 | * --------------- |
---|
336 | * |
---|
337 | * None |
---|
338 | * |
---|
339 | ************************************************************************/ |
---|
340 | typedef void |
---|
341 | (*t_yamon_flush_cache)( |
---|
342 | #define YAMON_FLUSH_ICACHE 0 |
---|
343 | #define YAMON_FLUSH_DCACHE 1 |
---|
344 | t_yamon_uint32 type ); /* I- or D-cache indication */ |
---|
345 | |
---|
346 | #define YAMON_FUNC_FLUSH_CACHE( type )\ |
---|
347 | ((t_yamon_flush_cache)( YAMON_FUNC(YAMON_FUNC_FLUSH_CACHE_OFS) ))\ |
---|
348 | ( type ) |
---|
349 | |
---|
350 | |
---|
351 | /************************************************************************ |
---|
352 | * |
---|
353 | * t_yamon_register_esr |
---|
354 | * Description : |
---|
355 | * ------------- |
---|
356 | * |
---|
357 | * Registers an exception handler, also known as an "Exception Service |
---|
358 | * Routine" (ESR) for the specified exception. |
---|
359 | * |
---|
360 | * Two special exception IDs are defined : |
---|
361 | * YAMON_DEFAULT_HANDLER used for a default ESR. |
---|
362 | * YAMON_DEFAULT_EJTAG_ESR used for EJTAG exceptions. |
---|
363 | * |
---|
364 | * The default ESR is called if no other ESR is registered |
---|
365 | * for an exception. If no default ESR is registered, a static |
---|
366 | * (i.e. not registered) "super default" function is invoked. |
---|
367 | * This function prints out the registers and halts. |
---|
368 | * |
---|
369 | * Deregistration of an ESR may be be done by calling this function |
---|
370 | * with 'esr' set to NULL. |
---|
371 | * An ESR can also be deregistered using the 'yamon_deregister_esr' |
---|
372 | * function. |
---|
373 | * |
---|
374 | * An ESR may be registered even if a previously registered |
---|
375 | * ESR has not been deregistered. In this case the previously |
---|
376 | * registered ESR is lost. |
---|
377 | * |
---|
378 | * The ESR will get called with registers in the state they were |
---|
379 | * when the exception occurred. This includes all CP0 registers and |
---|
380 | * CPU registers $0..$31, except for k0,k1 ($26,$27). |
---|
381 | * |
---|
382 | * In case an ESR does not want to handle the exception, it may |
---|
383 | * call the return function passed in the 'retfunc' parameter. |
---|
384 | * |
---|
385 | * Case 1 : 'retfunc' called by ESR registered for the |
---|
386 | * INTERRUPT exception. |
---|
387 | * |
---|
388 | * We assume an application has registered this ESR and wants |
---|
389 | * YAMON to process the (remaining) interrupts. |
---|
390 | * |
---|
391 | * Case 2 : 'retfunc' called by an ESR registered for a specific |
---|
392 | * exception (not INTERRUPT). |
---|
393 | * |
---|
394 | * Default handling will be done. |
---|
395 | * |
---|
396 | * Case 3 : 'retfunc' is called by the ESR registered as default ESR. |
---|
397 | * |
---|
398 | * The exception will be handled as though no ESR is registered |
---|
399 | * (i.e. the "super default" function is called). |
---|
400 | * |
---|
401 | * Parameters : |
---|
402 | * ------------ |
---|
403 | * |
---|
404 | * 'exception' (IN) : Exception code |
---|
405 | * or YAMON_DEFAULT_HANDLER for a default ESR |
---|
406 | * or YAMON_DEFAULT_EJTAG_ESR for ejtag exceptions. |
---|
407 | * 'esr' (IN) : Function pointer for ESR. |
---|
408 | * 'ref' (OUT) : Handle used for deregistration of ESR. |
---|
409 | * 'retfunc' (OUT) : Pointer to function pointer for the return |
---|
410 | * function described above. |
---|
411 | * |
---|
412 | * Return values : |
---|
413 | * --------------- |
---|
414 | * |
---|
415 | * 0 : Registration went well. |
---|
416 | * Other values indicate error. |
---|
417 | * |
---|
418 | ************************************************************************/ |
---|
419 | typedef t_yamon_int32 |
---|
420 | (*t_yamon_register_esr)( |
---|
421 | t_yamon_uint32 exception, /* Exception identification */ |
---|
422 | t_yamon_esr esr, /* ESR to be registered */ |
---|
423 | t_yamon_ref *ref, /* Handle for deregistration */ |
---|
424 | t_yamon_retfunc *retfunc ); /* Return function */ |
---|
425 | |
---|
426 | #define YAMON_FUNC_REGISTER_ESR( exc, esr, ref, retfunc )\ |
---|
427 | ((t_yamon_register_esr)( YAMON_FUNC(YAMON_FUNC_REGISTER_ESR_OFS) ))\ |
---|
428 | ( exc, esr, ref, retfunc ) |
---|
429 | |
---|
430 | |
---|
431 | /************************************************************************ |
---|
432 | * |
---|
433 | * t_yamon_deregister_esr |
---|
434 | * Description : |
---|
435 | * ------------- |
---|
436 | * |
---|
437 | * Deregisters ESR.. |
---|
438 | * |
---|
439 | * Parameters : |
---|
440 | * ------------ |
---|
441 | * |
---|
442 | * 'ref' (IN) : Handle obtained when calling 'yamon_register_esr'. |
---|
443 | * |
---|
444 | * Return values : |
---|
445 | * --------------- |
---|
446 | * |
---|
447 | * 0 : Deregistration went well. |
---|
448 | * Other values indicate error. |
---|
449 | * |
---|
450 | ************************************************************************/ |
---|
451 | typedef t_yamon_int32 |
---|
452 | (*t_yamon_deregister_esr)( |
---|
453 | t_yamon_ref ref ); /* Handle for deregistration */ |
---|
454 | |
---|
455 | #define YAMON_FUNC_DEREGISTER_ESR( ref )\ |
---|
456 | ((t_yamon_deregister_esr)( YAMON_FUNC(YAMON_FUNC_DEREGISTER_ESR_OFS) ))\ |
---|
457 | ( ref ) |
---|
458 | |
---|
459 | |
---|
460 | /************************************************************************ |
---|
461 | * |
---|
462 | * t_yamon_register_cpu_isr |
---|
463 | * Description : |
---|
464 | * ------------- |
---|
465 | * |
---|
466 | * Registers an Interrupt Service Routine (ISR) for the specified |
---|
467 | * CPU interrupt. |
---|
468 | * The highest service priority is attached to HW-INT5, which is |
---|
469 | * connected to the CPU-built-in CP0-timer. SW_INT0 gets the lowest |
---|
470 | * service priority. During registration, the interrupt mask field |
---|
471 | * in the CPU CP0-status register is updated to enable interrupts |
---|
472 | * from the specified interrupt source. |
---|
473 | * |
---|
474 | * A special ID is defined : |
---|
475 | * YAMON_DEFAULT_HANDLER used for a default ISR. |
---|
476 | * |
---|
477 | * The default ISR is called if no other ISR is registered |
---|
478 | * for a CPU interrupt. |
---|
479 | * |
---|
480 | * Deregistration of the default ISR may be done by calling |
---|
481 | * this function with 'isr' set to NULL. |
---|
482 | * Also, a new default ISR may be registered even if a |
---|
483 | * previously registered ISR has not been deregistered. |
---|
484 | * ISRs for specific CPU interrupts must be deregistered using |
---|
485 | * 'yamon_deregister_cpu_isr'. |
---|
486 | * |
---|
487 | * Parameters : |
---|
488 | * ------------ |
---|
489 | * |
---|
490 | * 'cpu_int' (IN) : CPU interrupt (0..7) |
---|
491 | * or YAMON_DEFAULT_HANDLER for a default ISR. |
---|
492 | * 'isr' (IN) : Function pointer for ISR. |
---|
493 | * 'data' (IN) : Data pointer (may be NULL). Will be passed to |
---|
494 | * ISR when called. |
---|
495 | * 'ref' (OUT) : Handle used for deregistration of ISR. |
---|
496 | * |
---|
497 | * Return values : |
---|
498 | * --------------- |
---|
499 | * |
---|
500 | * 0 : Registration went well. |
---|
501 | * Other values indicate error. |
---|
502 | * |
---|
503 | ************************************************************************/ |
---|
504 | typedef t_yamon_int32 |
---|
505 | (*t_yamon_register_cpu_isr)( |
---|
506 | t_yamon_uint32 cpu_int, /* CPU interrupt (0..7) */ |
---|
507 | t_yamon_isr isr, /* ISR to be registered */ |
---|
508 | void *data, /* Data reference to be registered */ |
---|
509 | t_yamon_ref *ref ); /* Handle for deregistration */ |
---|
510 | |
---|
511 | #define YAMON_FUNC_REGISTER_CPU_ISR( cpu_int, isr, data, ref )\ |
---|
512 | ((t_yamon_register_cpu_isr)( YAMON_FUNC(YAMON_FUNC_REGISTER_CPU_ISR_OFS) ))\ |
---|
513 | ( cpu_int, isr, data, ref ) |
---|
514 | |
---|
515 | |
---|
516 | /************************************************************************ |
---|
517 | * |
---|
518 | * t_yamon_deregister_cpu_isr |
---|
519 | * Description : |
---|
520 | * ------------- |
---|
521 | * |
---|
522 | * Deregisters ISR for CPU interrupt. |
---|
523 | * |
---|
524 | * Parameters : |
---|
525 | * ------------ |
---|
526 | * |
---|
527 | * 'ref' (IN) : Handle obtained when calling 'yamon_register_cpu_isr'. |
---|
528 | * |
---|
529 | * Return values : |
---|
530 | * --------------- |
---|
531 | * |
---|
532 | * 0 : Deregistration went well. |
---|
533 | * Other values indicate error |
---|
534 | * |
---|
535 | ************************************************************************/ |
---|
536 | typedef t_yamon_int32 |
---|
537 | (*t_yamon_deregister_cpu_isr)( |
---|
538 | t_yamon_ref ref ); /* Handle for deregistration */ |
---|
539 | |
---|
540 | #define YAMON_FUNC_DEREGISTER_CPU_ISR( ref )\ |
---|
541 | ((t_yamon_deregister_cpu_isr)( YAMON_FUNC(YAMON_FUNC_DEREGISTER_CPU_ISR_OFS) ))\ |
---|
542 | ( ref ) |
---|
543 | |
---|
544 | |
---|
545 | /************************************************************************ |
---|
546 | * |
---|
547 | * t_yamon_register_ic_isr |
---|
548 | * Description : |
---|
549 | * ------------- |
---|
550 | * |
---|
551 | * Registers an Interrupt Service Routine (ISR) for the specified |
---|
552 | * source in the interrupt controller. |
---|
553 | * |
---|
554 | * A special ID is defined : |
---|
555 | * YAMON_DEFAULT_HANDLER used for a default ISR. |
---|
556 | * |
---|
557 | * The default ISR is called if no other ISR is registered |
---|
558 | * for an interrupt. |
---|
559 | * |
---|
560 | * Deregistration of the default ISR may be done by calling |
---|
561 | * this function with 'isr' set to NULL. |
---|
562 | * Also, a new default ISR may be registered even if a |
---|
563 | * previously registered ISR has not been deregistered. |
---|
564 | * ISRs for specific interrupts must be deregistered using |
---|
565 | * 'yamon_deregister_ic_isr'. |
---|
566 | * |
---|
567 | * Parameters : |
---|
568 | * ------------ |
---|
569 | * |
---|
570 | * 'ic_line' (IN) : Interrupt source line in Int. Controller |
---|
571 | * or YAMON_DEFAULT_HANDLER for a default ISR. |
---|
572 | * 'isr', (IN) : Function pointer for user defined ISR. |
---|
573 | * 'data' (IN) : Data pointer (may be NULL). Will be passed to |
---|
574 | * ISR when called. |
---|
575 | * 'ref', (OUT) : Handle used for deregistration of ISR. |
---|
576 | * |
---|
577 | * Return values : |
---|
578 | * --------------- |
---|
579 | * |
---|
580 | * 0 : Registration went well. |
---|
581 | * Other values indicate error. |
---|
582 | * |
---|
583 | ************************************************************************/ |
---|
584 | typedef t_yamon_int32 |
---|
585 | (*t_yamon_register_ic_isr)( |
---|
586 | t_yamon_uint32 ic_line, /* Interrupt controller line */ |
---|
587 | t_yamon_isr isr, /* ISR to be registered */ |
---|
588 | void *data, /* Data reference to be registered */ |
---|
589 | t_yamon_ref *ref ); /* Handle for deregistration */ |
---|
590 | |
---|
591 | #define YAMON_FUNC_REGISTER_IC_ISR( ic_line, isr, data, ref )\ |
---|
592 | ((t_yamon_register_ic_isr)( YAMON_FUNC(YAMON_FUNC_REGISTER_IC_ISR_OFS) ))\ |
---|
593 | ( ic_line, isr, data, ref ) |
---|
594 | |
---|
595 | |
---|
596 | /************************************************************************ |
---|
597 | * |
---|
598 | * t_yamon_deregister_ic_isr |
---|
599 | * Description : |
---|
600 | * ------------- |
---|
601 | * |
---|
602 | * Deregisters ISR for source in interrupt controller. |
---|
603 | * |
---|
604 | * Parameters : |
---|
605 | * ------------ |
---|
606 | * |
---|
607 | * 'ref' (IN) : Handle obtained when calling 'yamon_register_ic_isr'. |
---|
608 | * |
---|
609 | * Return values : |
---|
610 | * --------------- |
---|
611 | * |
---|
612 | * 0 : Deregistration went well. |
---|
613 | * Other values indicate error |
---|
614 | * |
---|
615 | ************************************************************************/ |
---|
616 | typedef t_yamon_int32 |
---|
617 | (*t_yamon_deregister_ic_isr)( |
---|
618 | t_yamon_ref ref ); /* Handle for deregistration */ |
---|
619 | |
---|
620 | #define YAMON_FUNC_DEREGISTER_IC_ISR( ref )\ |
---|
621 | ((t_yamon_deregister_ic_isr)( YAMON_FUNC(YAMON_FUNC_DEREGISTER_IC_ISR_OFS) ))\ |
---|
622 | ( ref ) |
---|
623 | |
---|
624 | |
---|
625 | #endif /* #ifndef YAMON_API_H */ |
---|
626 | |
---|
627 | |
---|
628 | |
---|
629 | |
---|
630 | |
---|
631 | |
---|