1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - OS - include
3 File: interrupt.h
4
5 Copyright 2007-2008 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Date:: 2008-11-19#$
14 $Rev: 9345 $
15 $Author: okubata_ryoma $
16 *---------------------------------------------------------------------------*/
17
18 #ifndef TWL_OS_INTERRUPT_H_
19 #define TWL_OS_INTERRUPT_H_
20
21 #ifdef SDK_TWL
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #include <twl/misc.h>
28 #include <twl/types.h>
29 #include <twl/memorymap.h>
30 #include <twl/ioreg.h>
31 #include <nitro/os/common/thread.h>
32
33 //---- for DMA, TIMER
34 void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg);
35 void OSi_EnterNDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg);
36 void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg);
37
38 //----------------------------------------------------------------------
39 // ENABLE/DISABLE flag for IME
40 //----------------------------------------------------------------------
41 #define OS_IME_DISABLE (0UL << REG_OS_IME_IME_SHIFT)
42 #define OS_IME_ENABLE (1UL << REG_OS_IME_IME_SHIFT)
43
44 //----------------------------------------------------------------------
45 // IE/IF flags
46 //----------------------------------------------------------------------
47 #define OS_IE_V_BLANK (1UL << REG_OS_IE_VB_SHIFT) // 0 VBlank
48 #define OS_IE_H_BLANK (1UL << REG_OS_IE_HB_SHIFT) // 1 HBlank
49 #define OS_IE_V_COUNT (1UL << REG_OS_IE_VE_SHIFT) // 2 VCounter
50 #define OS_IE_TIMER0 (1UL << REG_OS_IE_T0_SHIFT) // 3 timer0
51 #define OS_IE_TIMER1 (1UL << REG_OS_IE_T1_SHIFT) // 4 timer1
52 #define OS_IE_TIMER2 (1UL << REG_OS_IE_T2_SHIFT) // 5 timer2
53 #define OS_IE_TIMER3 (1UL << REG_OS_IE_T3_SHIFT) // 6 timer3
54 #define OS_IE_SIO (1UL << 7 ) // 7 serial communication (will not occur)
55 #define OS_IE_DMA0 (1UL << REG_OS_IE_D0_SHIFT) // 8 DMA0
56 #define OS_IE_DMA1 (1UL << REG_OS_IE_D1_SHIFT) // 9 DMA1
57 #define OS_IE_DMA2 (1UL << REG_OS_IE_D2_SHIFT) // 10 DMA2
58 #define OS_IE_DMA3 (1UL << REG_OS_IE_D3_SHIFT) // 11 DMA3
59 #define OS_IE_KEY (1UL << REG_OS_IE_K_SHIFT) // 12 key
60 #define OS_IE_CARTRIDGE (1UL << REG_OS_IE_I_D_SHIFT) // 13 cartridge
61 #define OS_IE_CARD_A_DET (1UL << REG_OS_IE_MCADET_SHIFT) // 14 memory card(A) MC_DET low
62 #define OS_IE_CARD_B_DET (1UL << REG_OS_IE_MCBDET_SHIFT) // 15 memory card(B) MC_DET low
63 #define OS_IE_SUBP (1UL << REG_OS_IE_A7_SHIFT) // 16 sub processor
64 #define OS_IE_SPFIFO_SEND (1UL << REG_OS_IE_IFE_SHIFT) // 17 sub processor send FIFO empty
65 #define OS_IE_SPFIFO_RECV (1UL << REG_OS_IE_IFN_SHIFT) // 18 sub processor receive FIFO not empty
66 #define OS_IE_CARD_DATA (1UL << REG_OS_IE_MC_SHIFT) // 19 card data transfer finish
67 #define OS_IE_CARD_IREQ (1UL << REG_OS_IE_MI_SHIFT) // 20 card IREQ
68 #define OS_IE_CARD_A_DATA (1UL << REG_OS_IE_MCA_SHIFT) // 19(dup.) card(A) data transfer finish
69 #define OS_IE_CARD_A_IREQ (1UL << REG_OS_IE_MIA_SHIFT) // 20(dup.) card(A) IREQ
70
71 #ifdef SDK_ARM9
72 #define OS_IE_GXFIFO (1UL << REG_OS_IE_GF_SHIFT) // 21 geometry command FIFO
73 #define OS_IE_DEBUG_RECV (1UL << REG_OS_IE_DRE_SHIFT) // 22 read debug channel RECV buffer
74 #define OS_IE_DEBUG_SEND (1UL << REG_OS_IE_DWE_SHIFT) // 23 write debug channel SEND buffer
75 #define OS_IE_DSP (1UL << REG_OS_IE_DSP_SHIFT) // 24 DSP
76 #define OS_IE_CAMERA (1UL << REG_OS_IE_CAM_SHIFT) // 25 camera
77 #define OS_IE_CARD_B_DATA (1UL << REG_OS_IE_MCB_SHIFT) // 26 card(B) data transfer finished
78 #define OS_IE_CARD_B_IREQ (1UL << REG_OS_IE_MIB_SHIFT) // 27 card(B) IREQ
79 #define OS_IE_NDMA0 (1UL << REG_OS_IE_ND0_SHIFT) // 28 new DMA0
80 #define OS_IE_NDMA1 (1UL << REG_OS_IE_ND1_SHIFT) // 29 new DMA1
81 #define OS_IE_NDMA2 (1UL << REG_OS_IE_ND2_SHIFT) // 30 new DMA2
82 #define OS_IE_NDMA3 (1UL << REG_OS_IE_ND3_SHIFT) // 31 new DMA3
83 #else //SDK_ARM7
84 #define OS_IE_DEBUG_RECV (1UL << REG_OS_IE_DRE_SHIFT) // 21 read debug channel RECV buffer
85 #define OS_IE_POWERMAN (1UL << REG_OS_IE_PM_SHIFT) // 22 Power Management IC
86 #define OS_IE_SPI (1UL << REG_OS_IE_SPI_SHIFT) // 23 SPI data transfer
87 #define OS_IE_WIRELESS (1UL << REG_OS_IE_WL_SHIFT) // 24 Wireless module
88 #define OS_IE_DEBUG_SEND (1UL << REG_OS_IE_DWE_SHIFT) // 25 write debug channel SEND buffer
89 #define OS_IE_CARD_B_DATA (1UL << REG_OS_IE_MCB_SHIFT) // 26 card(B) data transfer finished
90 #define OS_IE_CARD_B_IREQ (1UL << REG_OS_IE_MIB_SHIFT) // 27 card(B) IREQ
91 #define OS_IE_NDMA0 (1UL << REG_OS_IE_ND0_SHIFT) // 28 new DMA0
92 #define OS_IE_NDMA1 (1UL << REG_OS_IE_ND1_SHIFT) // 29 new DMA1
93 #define OS_IE_NDMA2 (1UL << REG_OS_IE_ND2_SHIFT) // 30 new DMA2
94 #define OS_IE_NDMA3 (1UL << REG_OS_IE_ND3_SHIFT) // 31 new DMA3
95 #endif
96
97 #ifdef SDK_ARM7
98 // for IE2
99 // bit 3, 15 are not used
100 #define OS_IE_GPIO18_0 (1UL << REG_OS_IE2_GPIO18_0_SHIFT) // 0 GPIO18[0]
101 #define OS_IE_GPIO18_1 (1UL << REG_OS_IE2_GPIO18_1_SHIFT) // 1 GPIO18[1]
102 #define OS_IE_GPIO18_2 (1UL << REG_OS_IE2_GPIO18_2_SHIFT) // 2 GPIO18[2]
103 #define OS_IE_GPIO33_0 (1UL << REG_OS_IE2_GPIO33_0_SHIFT) // 4 GPIO33[0]
104 #define OS_IE_GPIO33_1 (1UL << REG_OS_IE2_GPIO33_1_SHIFT) // 5 GPIO33[1]
105 #define OS_IE_GPIO33_2 (1UL << REG_OS_IE2_GPIO33_2_SHIFT) // 6 GPIO33[2]
106 #define OS_IE_GPIO33_3 (1UL << REG_OS_IE2_GPIO33_3_SHIFT) // 7 GPIO33[3]
107 #define OS_IE_SD1 (1UL << REG_OS_IE2_SD1_SHIFT) // 8 SD card 1
108 #define OS_IE_SD1ASYNC (1UL << REG_OS_IE2_SD1A_SHIFT) // 9 SDIO card 1 async
109 #define OS_IE_SD2 (1UL << REG_OS_IE2_SD2_SHIFT) // 10 SD card 2
110 #define OS_IE_SD2ASYNC (1UL << REG_OS_IE2_SD2A_SHIFT) // 11 SDIO card 2 async
111 #define OS_IE_AES (1UL << REG_OS_IE2_AES_SHIFT) // 12 AES process finished
112 #define OS_IE_I2C (1UL << REG_OS_IE2_I2C_SHIFT) // 13 I2C transfer finished
113 #define OS_IE_MIC (1UL << REG_OS_IE2_MIC_SHIFT) // 14 MIC
114
115 // Aliases to SUBP->MAINP
116 #define OS_IE_MAINP OS_IE_SUBP
117 #define OS_IE_MPFIFO_SEND OS_IE_SPFIFO_SEND
118 #define OS_IE_MPFIFO_RECV OS_IE_SPFIFO_RECV
119 #define REG_OS_IE_A9_SHIFT REG_OS_IE_A7_SHIFT
120 #endif // SDK_ARM7
121
122 // Aliases to common name
123 #define OS_IE_FIFO_SEND OS_IE_SPFIFO_SEND
124 #define OS_IE_FIFO_RECV OS_IE_SPFIFO_RECV
125
126 // number of irq factor
127 #ifdef SDK_ARM9
128 #define OS_IRQ_TABLE_MAX 32
129 #else
130 #define OS_IRQ_TABLE_MAX 32
131 #define OS_IRQ_TABLE2_MAX 15
132 #endif
133
134 // all mask
135 #ifdef SDK_ARM9
136 #define OS_IE_MASK_ALL ((OSIrqMask)((1<<OS_IRQ_TABLE_MAX)-1))
137 #else
138 #define OS_IE_MASK_ALL ((OSIrqMask)((1<<OS_IRQ_TABLE_MAX)-1))
139 #define OS_IE2_MASK_ALL ((OSIrqMask)((1<<OS_IRQ_TABLE2_MAX)-1))
140 #endif
141
142 //---- These may be able to use on TWL mode.
143 // Dummy irq check flag for user own use
144 #define OS_IE_USER_FLAG0_SHIFT 31
145 #define OS_IE_USER_FLAG1_SHIFT 30
146 #define OS_IE_USER_FLAG0 (1UL << OS_IE_USER_FLAG0_SHIFT) // user 0
147 #define OS_IE_USER_FLAG1 (1UL << OS_IE_USER_FLAG1_SHIFT) // user 1
148
149
150 //---- used for internal functions
151 #define OSi_IRQCALLBACK_NO_DMA0 0
152 #define OSi_IRQCALLBACK_NO_DMA1 1
153 #define OSi_IRQCALLBACK_NO_DMA2 2
154 #define OSi_IRQCALLBACK_NO_DMA3 3
155 #define OSi_IRQCALLBACK_NO_NDMA0 4
156 #define OSi_IRQCALLBACK_NO_NDMA1 5
157 #define OSi_IRQCALLBACK_NO_NDMA2 6
158 #define OSi_IRQCALLBACK_NO_NDMA3 7
159 #define OSi_IRQCALLBACK_NO_TIMER0 8
160 #define OSi_IRQCALLBACK_NO_TIMER1 9
161 #define OSi_IRQCALLBACK_NO_TIMER2 10
162 #define OSi_IRQCALLBACK_NO_TIMER3 11
163 #ifdef SDK_ARM7
164 #define OSi_IRQCALLBACK_NO_VBLANK 12
165 #endif
166 #ifdef SDK_ARM9
167 #define OSi_IRQCALLBACK_NUM (11+1)
168 #else
169 #define OSi_IRQCALLBACK_NUM (12+1)
170 #endif
171
172 //----------------------------------------------------------------
173 #define OS_IRQ_MAIN_BUFFER_SIZE (0x200)
174
175
176 //---- interrupt handler type
177 typedef void (*OSIrqFunction) (void);
178
179 //---- for irq callback (internal use)
180 typedef struct
181 {
182 void (*func) (void *);
183 u32 enable;
184 void *arg;
185 }
186 OSIrqCallbackInfo;
187
188 //---- irq factor type define
189 #ifndef OSi_OSIRQMASK_DEFINED
190 typedef u32 OSIrqMask;
191 #define OSi_OSIRQMASK_DEFINED
192 #endif
193
194 //---- table of irq functions
195 extern OSIrqFunction OS_IRQTable[];
196 #ifdef SDK_ARM7
197 extern OSIrqFunction OS_IRQTable2[];
198 #endif
199
200 //---- for DMA, TIMER, VBLANK(arm7) interrupt */
201 extern OSIrqCallbackInfo OSi_IrqCallbackInfo[OSi_IRQCALLBACK_NUM];
202
203
204 void OS_IrqDummy(void);
205 void OS_IrqHandler(void);
206 asm void OS_BreakIrqHandler(void);
207 asm void OS_IrqHandler_ThreadSwitch(void);
208
209 //================================================================================
210 // IRQ MASTER ENABLE
211 //================================================================================
212 /*---------------------------------------------------------------------------*
213 Name: OS_EnableIrq
214
215 Description: enable master enable
216
217 Arguments: None
218
219 Returns: previous state of master enable.
220 OS_IME_ENABLE or OS_IME_DISABLE.
221 *---------------------------------------------------------------------------*/
OS_EnableIrq(void)222 static inline BOOL OS_EnableIrq(void)
223 {
224 u16 prep = reg_OS_IME;
225 reg_OS_IME = OS_IME_ENABLE;
226 return (BOOL)prep;
227 }
228
229 /*---------------------------------------------------------------------------*
230 Name: OS_DisableIrq
231
232 Description: disable master enable
233
234 Arguments: None
235
236 Returns: previous status of master enable.
237 OS_IME_ENABLE or OS_IME_DISABLE.
238 *---------------------------------------------------------------------------*/
OS_DisableIrq(void)239 static inline BOOL OS_DisableIrq(void)
240 {
241 u16 prep = reg_OS_IME;
242 reg_OS_IME = OS_IME_DISABLE;
243 return (BOOL)prep;
244 }
245
246 /*---------------------------------------------------------------------------*
247 Name: OS_RestoreIrq
248
249 Description: set master enable.
250 this function is mainly used for restore previous state
251 from OS_EnableIrq() or OS_DisableIrq().
252
253 Arguments: enable OS_IME_ENABLE or OS_IME_DISABLE
254
255 Returns: previous state of master enable
256
257 *---------------------------------------------------------------------------*/
OS_RestoreIrq(BOOL enable)258 static inline BOOL OS_RestoreIrq(BOOL enable)
259 {
260 u16 prep = reg_OS_IME;
261 reg_OS_IME = (u16)enable;
262 return (BOOL)prep;
263 }
264
265 /*---------------------------------------------------------------------------*
266 Name: OS_GetIrq
267
268 Description: get master enable.
269
270 Arguments: None
271
272 Returns: status of master enable.
273 OS_IME_ENABLE or OS_IME_DISABLE.
274
275 *---------------------------------------------------------------------------*/
OS_GetIrq(void)276 static inline BOOL OS_GetIrq(void)
277 {
278 return (BOOL)reg_OS_IME;
279 }
280
281
282 //================================================================================
283 // IRQ FACTORS
284 //================================================================================
285 /*---------------------------------------------------------------------------*
286 Name: OS_SetIrqMask
287
288 Description: set irq factor
289
290 Arguments: intr irq factor
291
292 Returns: previous factors
293 *---------------------------------------------------------------------------*/
294 OSIrqMask OS_SetIrqMask(OSIrqMask intr);
295 #ifdef SDK_ARM7
296 OSIrqMask OS_SetIrqMaskEx(OSIrqMask intr);
297 #endif
298
299 /*---------------------------------------------------------------------------*
300 Name: OS_GetIrqMask
301
302 Description: get irq factor
303
304 Arguments: None
305
306 Returns: irq factor which is set now
307 *---------------------------------------------------------------------------*/
OS_GetIrqMask(void)308 static inline OSIrqMask OS_GetIrqMask(void)
309 {
310 return reg_OS_IE;
311 }
312
313 /*---------------------------------------------------------------------------*
314 Name: OS_EnableIrqMask
315
316 Description: set specified irq factor
317
318 Arguments: intr irq factor
319
320 Returns: previous factors
321 *---------------------------------------------------------------------------*/
322 OSIrqMask OS_EnableIrqMask(OSIrqMask intr);
323 #ifdef SDK_ARM7
324 OSIrqMask OS_EnableIrqMaskEx(OSIrqMask intr);
325 #endif
326
327 /*---------------------------------------------------------------------------*
328 Name: OS_DisableIrqMask
329
330 Description: unset specified irq factor
331
332 Arguments: intr irq factor
333
334 Returns: previous factors
335 *---------------------------------------------------------------------------*/
336 OSIrqMask OS_DisableIrqMask(OSIrqMask intr);
337 #ifdef SDK_ARM7
338 OSIrqMask OS_DisableIrqMaskEx(OSIrqMask intr);
339 #endif
340
341 //================================================================================
342 // IF
343 //================================================================================
344 /*---------------------------------------------------------------------------*
345 Name: OS_ResetRequestIrqMask
346
347 Description: reset IF bit
348 (setting bit causes to clear bit for interrupt)
349
350 Arguments: intr irq factor
351
352 Returns: previous factors
353 *---------------------------------------------------------------------------*/
354 OSIrqMask OS_ResetRequestIrqMask(OSIrqMask intr);
355 #ifdef SDK_ARM7
356 OSIrqMask OS_ResetRequestIrqMaskEx(OSIrqMask intr);
357 #endif
358
359 /*---------------------------------------------------------------------------*
360 Name: OS_GetReuestIrqMask
361
362 Description: get IF bit
363
364 Arguments: None
365
366 Returns: value of IF
367 *---------------------------------------------------------------------------*/
OS_GetRequestIrqMask(void)368 static inline OSIrqMask OS_GetRequestIrqMask(void)
369 {
370 return reg_OS_IF;
371 }
372
373 //================================================================================
374 // IRQ HANDLER
375 //================================================================================
376 /*---------------------------------------------------------------------------*
377 Name: OS_InitIrqTable
378
379 Description: initialize irq table
380
381 Arguments: None
382
383 Returns: None
384 *---------------------------------------------------------------------------*/
385 void OS_InitIrqTable(void);
386
387 /*---------------------------------------------------------------------------*
388 Name: OS_SetIrqFunction
389
390 Description: set irq handler for specified interrupt
391
392 Arguments: intrBit irq factor
393 function irq handler for specified interrupt
394
395 Returns: None
396 *---------------------------------------------------------------------------*/
397 void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function);
398 #ifdef SDK_ARM7
399 void OS_SetIrqFunctionEx(OSIrqMask intrBit, OSIrqFunction function);
400 #endif
401
402 /*---------------------------------------------------------------------------*
403 Name: OS_GetIrqFunction
404
405 Description: get irq handler for specified interrupt
406
407 Arguments: intrBit irq factor
408
409 Returns: irq handler for specified interrupt
410 *---------------------------------------------------------------------------*/
411 OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit);
412 #ifdef SDK_ARM7
413 OSIrqFunction OS_GetIrqFunctionEx(OSIrqMask intrBit);
414 #endif
415
416 //================================================================================
417 // IRQ CHEKE BUFFER
418 //================================================================================
419 /*---------------------------------------------------------------------------*
420 Name: OS_SetIrqCheckFlag
421
422 Description: set irq flag to check being called
423
424 Arguments: irq factors to be set
425
426 Returns: None
427 *---------------------------------------------------------------------------*/
OS_SetIrqCheckFlag(OSIrqMask intr)428 static inline void OS_SetIrqCheckFlag(OSIrqMask intr)
429 {
430 *(vu32 *)HW_INTR_CHECK_BUF |= (u32)intr;
431 }
432 #ifdef SDK_ARM7
OS_SetIrqCheckFlagEx(OSIrqMask intr)433 static inline void OS_SetIrqCheckFlagEx(OSIrqMask intr)
434 {
435 *(vu32 *)HW_INTR_CHECK2_BUF |= (u32)intr;
436 }
437 #endif
438
439 /*---------------------------------------------------------------------------*
440 Name: OS_ClearIrqCheckFlag
441
442 Description: clear irq flag stored in HW_INTR_CHECK_BUF
443
444 Arguments: irq factors to be cleared
445
446 Returns: None
447 *---------------------------------------------------------------------------*/
OS_ClearIrqCheckFlag(OSIrqMask intr)448 static inline void OS_ClearIrqCheckFlag(OSIrqMask intr)
449 {
450 *(vu32 *)HW_INTR_CHECK_BUF &= (u32)~intr;
451 }
452 #ifdef SDK_ARM7
OS_ClearIrqCheckFlagEx(OSIrqMask intr)453 static inline void OS_ClearIrqCheckFlagEx(OSIrqMask intr)
454 {
455 *(vu32 *)HW_INTR_CHECK2_BUF &= (u32)~intr;
456 }
457 #endif
458
459 /*---------------------------------------------------------------------------*
460 Name: OS_GetIrqCheckFlag
461
462 Description: get irq factors stored in HW_INTR_CHECK_BUF
463
464 Arguments: None
465
466 Returns: irq flags factors in HW_INTR_CHECK_BUG
467 *---------------------------------------------------------------------------*/
OS_GetIrqCheckFlag(void)468 static inline volatile OSIrqMask OS_GetIrqCheckFlag(void)
469 {
470 return *(volatile OSIrqMask *)HW_INTR_CHECK_BUF;
471 }
472 #ifdef SDK_ARM7
OS_GetIrqCheckFlagEx(void)473 static inline volatile OSIrqMask OS_GetIrqCheckFlagEx(void)
474 {
475 return *(volatile OSIrqMask *)HW_INTR_CHECK2_BUF;
476 }
477 #endif
478
479
480 //================================================================================
481 // WAIT IRQ
482 //================================================================================
483 /*---------------------------------------------------------------------------*
484 Name: OS_WaitIrq
485
486 Description: wait specified interrupt
487 the difference between OS_WaitIrq and OS_WaitInterrupt,
488 in waiting interrupt
489 OS_WaitIrq does switch thread,
490 OS_WaitInterrupt doesn't switch thread.
491 OS_WaitIrq wait by using OS_SleepThread() with threadQueue,
492 OS_WaitInterrupt wait by using OS_Halt().
493 if SDK_NO_THREAD defined, 2 functions become same.
494
495 Arguments: clear TRUE if want to clear interrupt flag before wait
496 FALSE if not
497 irqFlags bit of interrupts to wait for
498
499 Returns: None
500 *---------------------------------------------------------------------------*/
501 void OS_WaitIrq(BOOL clear, OSIrqMask irqFlags);
502 #ifdef SDK_ARM7
503 void OS_WaitIrqEx(BOOL clear, OSIrqMask irqFlags);
504 #endif
505
506 /*---------------------------------------------------------------------------*
507 Name: OS_WaitAnyIrq
508
509 Description: wait any interrupt
510
511 Arguments: None
512
513 Returns: None
514 *---------------------------------------------------------------------------*/
515 void OS_WaitAnyIrq(void);
516 #ifdef SDK_ARM7
517 void OS_WaitAnyIrqEx(void);
518 #endif
519
520
521 //================================================================================
522 // VBLANK COUNTER
523 //================================================================================
524 /*---------------------------------------------------------------------------*
525 Name: OS_GetVBlankCount
526
527 Description: get VBlankCount
528
529 Arguments: None
530
531 Returns: VBlankCount
532 *---------------------------------------------------------------------------*/
OS_GetVBlankCount(void)533 static inline vu32 OS_GetVBlankCount(void)
534 {
535 return *(vu32 *)HW_VBLANK_COUNT_BUF;
536 }
537
538 /*---------------------------------------------------------------------------*
539 Name: OSi_SetVBlankCount
540
541 Description: set VBlankCount
542 *** internal function. don't use this.
543
544 Arguments: count : VBlankCount
545
546 Returns: None
547 *---------------------------------------------------------------------------*/
OSi_SetVBlankCount(u32 count)548 static inline void OSi_SetVBlankCount(u32 count)
549 {
550 *(u32 *)HW_VBLANK_COUNT_BUF = count;
551 }
552
553 //================================================================================
554 // IRQ STACK CHECKER
555 //================================================================================
556 /*---------------------------------------------------------------------------*
557 Name: OS_SetIrqStackWarningOffset
558
559 Description: Set warning level for irq stack checker
560
561 Arguments: offset offset from stack top. must be multiple of 4
562
563 Returns: None
564 *---------------------------------------------------------------------------*/
565 extern void OS_SetIrqStackWarningOffset(u32 offset);
566
567 /*---------------------------------------------------------------------------*
568 Name: OS_GetIrqStackStatus
569
570 Description: check irq stack. check each CheckNUM.
571 return result.
572
573 Arguments: None
574
575 Returns: 0 (OS_STACK_NO_ERROR) no error
576 OS_STACK_OVERFLOW overflow
577 OS_STACK_ABOUT_TO_OVERFLOW about to overflow
578 OS_STACK_UNDERFLOW underflow
579 *---------------------------------------------------------------------------*/
580 extern OSStackStatus OS_GetIrqStackStatus(void);
581
582 /*---------------------------------------------------------------------------*
583 Name: OS_SetIrqStackChecker
584
585 Description: set irq stack check number to irq stack
586
587 Arguments: None
588
589 Returns: None
590 *---------------------------------------------------------------------------*/
591 extern void OS_SetIrqStackChecker(void);
592
593 /*---------------------------------------------------------------------------*
594 Name: OS_CheckIrqStack
595
596 Description: check irq stack. check each CheckNum.
597 if changed, display warning and halt.
598
599 Arguments: None
600
601 Returns: None.
602 ( if error occurred, never return )
603 *---------------------------------------------------------------------------*/
604 void OSi_CheckIrqStack(char *file, int line);
605 #if !defined(SDK_FINALROM) && !defined(SDK_NO_MESSAGE)
606 #define OS_CheckIrqStack() OSi_CheckIrqStack( __FILE__, __LINE__ );
607 #else
608 #define OS_CheckIrqStack() ((void)0)
609 #endif
610
611
612 #ifdef __cplusplus
613 } /* extern "C" */
614 #endif
615
616 #endif
617 /* SDK_TWL */
618
619 /* TWL_OS_INTERRUPT_H_ */
620 #endif
621