irq.h

Go to the documentation of this file.
00001 /*
00002         libbroadway - A general purpose library to control the Wii.
00003         IRQ support
00004 
00005 Copyright (C) 2009              Bernhard Urban <lewurm@gmx.net>
00006 Copyright (C) 2009              Sebastian Falbesoner <sebastian.falbesoner@gmail.com>
00007 Copyright (C) 2009-2010         Alex Marshall <trap15@raidenii.net>
00008 
00009 # This code is licensed to you under the terms of the GNU GPL, version 2;
00010 # see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
00011 */
00012 
00018 #ifndef __IRQ_H__
00019 #define __IRQ_H__
00020 
00021 #include <types.h>
00022 #include <broadway/hollywood.h>
00023 
00024 /* Broadway Processor Interface Registers */
00025 #define HW_BWIRQFLAG            PI_INT_CAUSE    
00026 #define HW_BWIRQMASK            PI_INT_MASK     
00028 #define IRQ_HW_TIMER            (0)     
00029 #define IRQ_HW_NAND             (1)     
00030 #define IRQ_HW_AES              (2)     
00031 #define IRQ_HW_SHA1             (3)     
00032 #define IRQ_HW_EHCI             (4)     
00033 #define IRQ_HW_OHCI0            (5)     
00034 #define IRQ_HW_OHCI1            (6)     
00035 #define IRQ_HW_SDHC             (7)     
00036 #define IRQ_HW_WIFI             (8)     
00037 #define IRQ_HW_GPIO1B           (10)    
00038 #define IRQ_HW_GPIO1            (11)    
00039 #define IRQ_HW_RESET            (17)    
00040 #define IRQ_HW_PPCIPC           (30)    
00041 #define IRQ_HW_IPC              (31)    
00042 /* Not a real IRQ, just a little helpful something */
00043 #define IRQ_HW_MAX              (32)
00044 
00045 // http://hitmen.c02.at/files/yagcd/yagcd/chap5.html#sec5.4
00046 #define IRQ_BW_RESET            (1)     
00047 #define IRQ_BW_DI               (2)     
00048 #define IRQ_BW_SI               (3)     
00049 #define IRQ_BW_EXI              (4)     
00050 #define IRQ_BW_AI               (5)     
00051 #define IRQ_BW_DSP              (6)     
00052 #define IRQ_BW_MEM              (7)     
00053 #define IRQ_BW_VI               (8)     
00054 #define IRQ_BW_PE_TOKEN         (9)     
00055 #define IRQ_BW_PE_FINISH        (10)    
00056 #define IRQ_BW_CP               (11)    
00057 #define IRQ_BW_DEBUG            (12)    
00058 #define IRQ_BW_HSP              (13)    
00059 #define IRQ_BW_HW               (14)    
00060 #define IRQ_BW_RESET_SW         (16)    
00061 /* Not a real IRQ, just a little helpful something */
00062 #define IRQ_BW_MAX              (32)
00063 
00064 #define IRQ_MI_MEM0             (0)     
00065 #define IRQ_MI_MEM1             (1)     
00066 #define IRQ_MI_MEM2             (2)     
00067 #define IRQ_MI_MEM3             (3)     
00068 #define IRQ_MI_MEMADDR          (4)     
00069 /* Not a real IRQ, just a little helpful something */
00070 #define IRQ_MI_MAX              (5)
00071 
00072 #define IRQ_EXI_EXI0            (0)     
00073 #define IRQ_EXI_TC0             (1)     
00074 #define IRQ_EXI_EXT0            (2)     
00075 #define IRQ_EXI_EXI1            (3)     
00076 #define IRQ_EXI_TC1             (4)     
00077 #define IRQ_EXI_EXT1            (5)     
00078 #define IRQ_EXI_EXI2            (6)     
00079 #define IRQ_EXI_TC2             (7)     
00080 #define IRQ_EXI_EXT2            (8)     
00081 /* Not a real IRQ, just a little helpful something */
00082 #define IRQ_EXI_MAX             (9)
00083 
00084 #define IRQ_DI_BREAK            (0)     
00085 #define IRQ_DI_TC               (1)     
00086 #define IRQ_DI_ERROR            (2)     
00087 #define IRQ_DI_COVER            (3)     
00088 /* Not a real IRQ, just a little helpful something */
00089 #define IRQ_DI_MAX              (4)
00090 
00091 #define IRQF(n)                 (1 << n)        
00092 #define IRQF_HW_TIMER           (IRQF(IRQ_HW_TIMER))    
00093 #define IRQF_HW_NAND            (IRQF(IRQ_HW_NAND))     
00094 #define IRQF_HW_AES             (IRQF(IRQ_HW_AES))      
00095 #define IRQF_HW_SHA1            (IRQF(IRQ_HW_SHA1))     
00096 #define IRQF_HW_EHCI            (IRQF(IRQ_HW_EHCI))     
00097 #define IRQF_HW_OHCI0           (IRQF(IRQ_HW_OHCI0))    
00098 #define IRQF_HW_OHCI1           (IRQF(IRQ_HW_OHCI1))    
00099 #define IRQF_HW_SDHC            (IRQF(IRQ_HW_SDHC))     
00100 #define IRQF_HW_WIFI            (IRQF(IRQ_HW_WIFI))     
00101 #define IRQF_HW_GPIO1B          (IRQF(IRQ_HW_GPIO1B))   
00102 #define IRQF_HW_GPIO1           (IRQF(IRQ_HW_GPIO1))    
00103 #define IRQF_HW_RESET           (IRQF(IRQ_HW_RESET))    
00104 #define IRQF_HW_PPCIPC          (IRQF(IRQ_HW_PPCIPC))   
00105 #define IRQF_HW_IPC             (IRQF(IRQ_HW_IPC))      
00107 #define IRQF_BW_RESET           (IRQF(IRQ_BW_RESET))    
00108 #define IRQF_BW_DI              (IRQF(IRQ_BW_DI))       
00109 #define IRQF_BW_SI              (IRQF(IRQ_BW_SI))       
00110 #define IRQF_BW_EXI             (IRQF(IRQ_BW_EXI))      
00111 #define IRQF_BW_AI              (IRQF(IRQ_BW_AI))       
00112 #define IRQF_BW_DSP             (IRQF(IRQ_BW_DSP))      
00113 #define IRQF_BW_MEM             (IRQF(IRQ_BW_MEM))      
00114 #define IRQF_BW_VI              (IRQF(IRQ_BW_VI))       
00115 #define IRQF_BW_PE_TOKEN        (IRQF(IRQ_BW_PE_TOKEN)) 
00116 #define IRQF_BW_PE_FINISH       (IRQF(IRQ_BW_PE_FINISH))
00117 #define IRQF_BW_CP              (IRQF(IRQ_BW_CP))       
00118 #define IRQF_BW_DEBUG           (IRQF(IRQ_BW_DEBUG))    
00119 #define IRQF_BW_HSP             (IRQF(IRQ_BW_HSP))      
00120 #define IRQF_BW_HW              (IRQF(IRQ_BW_HW))       
00121 #define IRQF_BW_RESET_SW        (IRQF(IRQ_BW_RESET_SW)) 
00123 #define IRQF_MI_MEM0            (IRQF(IRQ_MI_MEM0))     
00124 #define IRQF_MI_MEM1            (IRQF(IRQ_MI_MEM1))     
00125 #define IRQF_MI_MEM2            (IRQF(IRQ_MI_MEM2))     
00126 #define IRQF_MI_MEM3            (IRQF(IRQ_MI_MEM3))     
00127 #define IRQF_MI_MEMADDR         (IRQF(IRQ_MI_MEMADDR))  
00129 #define IRQF_EXI_EXI0           (IRQF(IRQ_EXI_EXI0))    
00130 #define IRQF_EXI_TC0            (IRQF(IRQ_EXI_TC0))     
00131 #define IRQF_EXI_EXT0           (IRQF(IRQ_EXI_EXT0))    
00132 #define IRQF_EXI_EXI1           (IRQF(IRQ_EXI_EXI1))    
00133 #define IRQF_EXI_TC1            (IRQF(IRQ_EXI_TC1))     
00134 #define IRQF_EXI_EXT1           (IRQF(IRQ_EXI_EXT1))    
00135 #define IRQF_EXI_EXI2           (IRQF(IRQ_EXI_EXI2))    
00136 #define IRQF_EXI_TC2            (IRQF(IRQ_EXI_TC2))     
00137 #define IRQF_EXI_EXT2           (IRQF(IRQ_EXI_EXT2))    
00139 #define IRQF_DI_BREAK           (IRQF(IRQ_DI_BREAK))    
00140 #define IRQF_DI_TC              (IRQF(IRQ_DI_TC))       
00141 #define IRQF_DI_ERROR           (IRQF(IRQ_DI_ERROR))    
00142 #define IRQF_DI_COVER           (IRQF(IRQ_DI_COVER))    
00145 #define IRQF_HW_ALL     (IRQF_HW_TIMER  | IRQF_HW_NAND   | IRQF_HW_AES   | IRQF_HW_SHA1  | \
00146                          IRQF_HW_EHCI   | IRQF_HW_OHCI0  | IRQF_HW_OHCI1 | IRQF_HW_SDHC  | \
00147                          IRQF_HW_WIFI   | IRQF_HW_GPIO1B | IRQF_HW_GPIO1 | IRQF_HW_RESET | \
00148                          IRQF_HW_PPCIPC | IRQF_HW_IPC )
00149 
00151 #define IRQF_BW_ALL     (IRQF_BW_RESET    | IRQF_BW_DI        | IRQF_BW_SI       | IRQF_BW_EXI   | \
00152                          IRQF_BW_AI       | IRQF_BW_DSP       | IRQF_BW_MEM      | IRQF_BW_VI    | \
00153                          IRQF_BW_PE_TOKEN | IRQF_BW_PE_FINISH | IRQF_BW_CP       | IRQF_BW_DEBUG | \
00154                          IRQF_BW_HSP      | IRQF_BW_HW        | IRQF_BW_RESET_SW )
00155 
00157 #define IRQF_MI_ALL     (IRQF_MI_MEM0 | IRQF_MI_MEM1 | IRQF_MI_MEM2 | IRQF_MI_MEM3 | \
00158                          IRQF_MI_MEMADDR)
00159 
00161 #define IRQF_EXI_ALL    (IRQF_EXI_EXI0 | IRQF_EXI_TC0 | IRQF_EXI_EXT0 | \
00162                          IRQF_EXI_EXI1 | IRQF_EXI_TC1 | IRQF_EXI_EXT1 | \
00163                          IRQF_EXI_EXI2 | IRQF_EXI_TC2 | IRQF_EXI_EXT2 )
00164 
00166 #define IRQF_DI_ALL     (IRQF_DI_BREAK | IRQF_DI_TC | IRQF_DI_ERROR | IRQF_DI_COVER)
00167 
00170 typedef struct {
00171         int     (*exec)(u32 irq, void* data);   
00172         void*   data;                           
00173 } irq_handler_t;
00174 
00181 void irq_initialize(void);
00187 void irq_shutdown(void);
00188 
00194 void irq_bw_enable(u32 irq);
00200 void irq_bw_disable(u32 irq);
00206 void irq_hw_enable(u32 irq);
00212 void irq_hw_disable(u32 irq);
00213 
00219 void irq_enable(void);
00227 u32  irq_disable(void);
00234 void irq_restore(u32 was_on);
00235 
00245 int irq_hw_register_handler(u32 irqn, int (*exec)(u32 irq, void* data), void* data);
00254 irq_handler_t irq_hw_get_handler(u32 irqn);
00263 int irq_bw_register_handler(u32 irqn, int (*exec)(u32 irq, void* data), void* data);
00272 irq_handler_t irq_bw_get_handler(u32 irqn);
00273 
00274 #endif
00275 
00276 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines
Generated by  doxygen 1.6.3