diff options
Diffstat (limited to 'target/linux')
| -rw-r--r-- | target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c | 22 | 
1 files changed, 21 insertions, 1 deletions
diff --git a/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c b/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c index 18b8d01d4..ce198e321 100644 --- a/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c +++ b/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c @@ -55,6 +55,26 @@ ifxmips_mask_and_ack_irq(unsigned int irq_nr)  }  EXPORT_SYMBOL(ifxmips_mask_and_ack_irq); +static void +ifxmips_ack_irq(unsigned int irq_nr) +{ +	int i; +	u32 *isr = IFXMIPS_ICU_IM0_ISR; + +	irq_nr -= INT_NUM_IRQ0; +	for (i = 0; i <= 4; i++) +	{ +		if (irq_nr < INT_NUM_IM_OFFSET) +		{ +			ifxmips_w32((1 << irq_nr), isr); +			return; +		} +		isr += IFXMIPS_ICU_OFFSET; +		irq_nr -= INT_NUM_IM_OFFSET; +	} +} + +  void  ifxmips_enable_irq(unsigned int irq_nr)  { @@ -96,7 +116,7 @@ ifxmips_irq_type = {  	.enable = ifxmips_enable_irq,  	.disable = ifxmips_disable_irq,  	.unmask = ifxmips_enable_irq, -	.ack = ifxmips_end_irq, +	.ack = ifxmips_ack_irq,  	.mask = ifxmips_disable_irq,  	.mask_ack = ifxmips_mask_and_ack_irq,  	.end = ifxmips_end_irq,  | 
