implemented simple irq handler, added irq.h
[ppcskel.git] / irq.h
1 #ifndef __IRQ_H__
2 #define __IRQ_H__
3
4 /* hollywood-pic registers */
5 #define HW_PPCIRQFLAG (0x0d800030)
6 #define HW_PPCIRQMASK (0x0d800034)
7
8 /* broadway processor interface registers */
9 #define BW_PI_IRQFLAG (0x0c003000)
10 #define BW_PI_IRQMASK (0x0c003004)
11
12 /* stolen from libogc - gc/ogc/machine/processor.h */
13 #define _CPU_ISR_Enable() \
14         { register u32 _val = 0; \
15           __asm__ __volatile__ ( \
16                 "mfmsr %0\n" \
17                 "ori %0,%0,0x8000\n" \
18                 "mtmsr %0" \
19                 : "=&r" ((_val)) : "0" ((_val)) \
20           ); \
21         }
22
23 #define _CPU_ISR_Disable( _isr_cookie ) \
24   { register u32 _disable_mask = 0; \
25         _isr_cookie = 0; \
26     __asm__ __volatile__ ( \
27           "mfmsr %0\n" \
28           "rlwinm %1,%0,0,17,15\n" \
29           "mtmsr %1\n" \
30           "extrwi %0,%0,1,16" \
31           : "=&r" ((_isr_cookie)), "=&r" ((_disable_mask)) \
32           : "0" ((_isr_cookie)), "1" ((_disable_mask)) \
33         ); \
34   }
35
36 #define _CPU_ISR_Restore( _isr_cookie )  \
37   { register u32 _enable_mask = 0; \
38         __asm__ __volatile__ ( \
39     "    cmpwi %0,0\n" \
40         "    beq 1f\n" \
41         "    mfmsr %1\n" \
42         "    ori %1,%1,0x8000\n" \
43         "    mtmsr %1\n" \
44         "1:" \
45         : "=r"((_isr_cookie)),"=&r" ((_enable_mask)) \
46         : "0"((_isr_cookie)),"1" ((_enable_mask)) \
47         ); \
48   }
49
50 #endif