2005-04-16 15:20:36 -07:00
/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 1992 Linus Torvalds
* Copyright ( C ) 1994 - 2000 Ralf Baechle
2006-12-28 18:22:32 +01:00
* Copyright ( C ) 2006 Thomas Bogendoerfer
2005-04-16 15:20:36 -07:00
*/
# include <linux/delay.h>
# include <linux/init.h>
# include <linux/interrupt.h>
# include <linux/irq.h>
# include <linux/kernel.h>
# include <asm/i8259.h>
# include <asm/io.h>
# include <asm/sni.h>
2006-12-28 18:22:32 +01:00
# include <asm/irq.h>
# include <asm/irq_cpu.h>
2005-04-16 15:20:36 -07:00
2006-12-28 18:22:32 +01:00
void ( * sni_hwint ) ( void ) ;
2005-04-16 15:20:36 -07:00
2006-12-28 18:22:32 +01:00
asmlinkage void plat_irq_dispatch ( void )
2005-04-16 15:20:36 -07:00
{
2006-12-28 18:22:32 +01:00
sni_hwint ( ) ;
2005-04-16 15:20:36 -07:00
}
2006-12-28 18:22:32 +01:00
/* ISA irq handler */
static irqreturn_t sni_isa_irq_handler ( int dummy , void * p )
2005-04-16 15:20:36 -07:00
{
int irq ;
2006-12-28 18:22:32 +01:00
irq = i8259_irq ( ) ;
if ( unlikely ( irq < 0 ) )
return IRQ_NONE ;
2005-04-16 15:20:36 -07:00
2008-01-04 23:31:07 +01:00
generic_handle_irq ( irq ) ;
2006-12-28 18:22:32 +01:00
return IRQ_HANDLED ;
2006-04-03 17:56:36 +01:00
}
2006-12-28 18:22:32 +01:00
struct irqaction sni_isa_irq = {
. handler = sni_isa_irq_handler ,
. name = " ISA " ,
2008-01-04 23:31:07 +01:00
. flags = IRQF_SHARED | IRQF_DISABLED
2006-12-28 18:22:32 +01:00
} ;
2005-04-16 15:20:36 -07:00
/*
* On systems with i8259 - style interrupt controllers we assume for
* driver compatibility reasons interrupts 0 - 15 to be the i8295
* interrupts even if the hardware uses a different interrupt numbering .
*/
void __init arch_init_irq ( void )
{
init_i8259_irqs ( ) ; /* Integrated i8259 */
2006-12-28 18:22:32 +01:00
switch ( sni_brd_type ) {
case SNI_BRD_10 :
case SNI_BRD_10NEW :
case SNI_BRD_TOWER_OASIC :
case SNI_BRD_MINITOWER :
sni_a20r_irq_init ( ) ;
break ;
case SNI_BRD_PCI_TOWER :
sni_pcit_irq_init ( ) ;
break ;
case SNI_BRD_PCI_TOWER_CPLUS :
sni_pcit_cplus_irq_init ( ) ;
break ;
case SNI_BRD_RM200 :
sni_rm200_irq_init ( ) ;
break ;
case SNI_BRD_PCI_MTOWER :
case SNI_BRD_PCI_DESKTOP :
case SNI_BRD_PCI_MTOWER_CPLUS :
sni_pcimt_irq_init ( ) ;
break ;
}
2005-04-16 15:20:36 -07:00
}