diff options
Diffstat (limited to 'arch/m68k/mac/oss.c')
| -rw-r--r-- | arch/m68k/mac/oss.c | 18 | 
1 files changed, 9 insertions, 9 deletions
diff --git a/arch/m68k/mac/oss.c b/arch/m68k/mac/oss.c index 63690819565..d7be16917ef 100644 --- a/arch/m68k/mac/oss.c +++ b/arch/m68k/mac/oss.c @@ -109,13 +109,11 @@ irqreturn_t oss_irq(int irq, void *dev_id)  	/* FIXME: how do you clear a pending IRQ?    */  	if (events & OSS_IP_SOUND) { -		/* FIXME: call sound handler */  		oss->irq_pending &= ~OSS_IP_SOUND; +		/* FIXME: call sound handler */  	} else if (events & OSS_IP_SCSI) { -		oss->irq_level[OSS_SCSI] = OSS_IRQLEV_DISABLED; -		m68k_handle_int(IRQ_MAC_SCSI);  		oss->irq_pending &= ~OSS_IP_SCSI; -		oss->irq_level[OSS_SCSI] = OSS_IRQLEV_SCSI; +		m68k_handle_int(IRQ_MAC_SCSI);  	} else {  		/* FIXME: error check here? */  	} @@ -143,14 +141,16 @@ irqreturn_t oss_nubus_irq(int irq, void *dev_id)  #endif  	/* There are only six slots on the OSS, not seven */ -	for (i = 0, irq_bit = 1 ; i < 6 ; i++, irq_bit <<= 1) { +	i = 6; +	irq_bit = 0x40; +	do { +		--i; +		irq_bit >>= 1;  		if (events & irq_bit) { -			oss->irq_level[i] = OSS_IRQLEV_DISABLED; -			m68k_handle_int(NUBUS_SOURCE_BASE + i);  			oss->irq_pending &= ~irq_bit; -			oss->irq_level[i] = OSS_IRQLEV_NUBUS; +			m68k_handle_int(NUBUS_SOURCE_BASE + i);  		} -	} +	} while(events & (irq_bit - 1));  	return IRQ_HANDLED;  }  | 
