diff options
| author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-03-27 12:46:27 +0100 | 
|---|---|---|
| committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-03-27 12:46:27 +0100 | 
| commit | 255115fb35f80735c21a1cbe9809e9795a3af26e (patch) | |
| tree | 55952820ef05e6f11c80c828b83a6cfdac366a84 /drivers/ide/ide-io.c | |
| parent | c7db966bbbf216b336da921e5d7ba5b9c8467ac1 (diff) | |
| download | olio-linux-3.10-255115fb35f80735c21a1cbe9809e9795a3af26e.tar.xz olio-linux-3.10-255115fb35f80735c21a1cbe9809e9795a3af26e.zip  | |
ide: allow host drivers to specify IRQ flags
* Add ->irq_flags field to struct ide_port_info and struct ide_host.
* Update host drivers and IDE PCI code to use ->irq_flags field.
* Convert init_irq() and ide_intr() to use host->irq_flags.
This fixes handling of shared IRQs for non-PCI hosts
and removes ugly ifdeffery from core IDE code.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-io.c')
| -rw-r--r-- | drivers/ide/ide-io.c | 15 | 
1 files changed, 4 insertions, 11 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 030b0ea1a1e..7007c48e27a 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c @@ -841,6 +841,7 @@ static void unexpected_intr(int irq, ide_hwif_t *hwif)  irqreturn_t ide_intr (int irq, void *dev_id)  {  	ide_hwif_t *hwif = (ide_hwif_t *)dev_id; +	struct ide_host *host = hwif->host;  	ide_drive_t *uninitialized_var(drive);  	ide_handler_t *handler;  	unsigned long flags; @@ -848,8 +849,8 @@ irqreturn_t ide_intr (int irq, void *dev_id)  	irqreturn_t irq_ret = IRQ_NONE;  	int plug_device = 0; -	if (hwif->host->host_flags & IDE_HFLAG_SERIALIZE) { -		if (hwif != hwif->host->cur_port) +	if (host->host_flags & IDE_HFLAG_SERIALIZE) { +		if (hwif != host->cur_port)  			goto out_early;  	} @@ -872,27 +873,19 @@ irqreturn_t ide_intr (int irq, void *dev_id)  		 *  		 * For PCI, we cannot tell the difference,  		 * so in that case we just ignore it and hope it goes away. -		 * -		 * FIXME: unexpected_intr should be hwif-> then we can -		 * remove all the ifdef PCI crap  		 */ -#ifdef CONFIG_BLK_DEV_IDEPCI -		if (hwif->chipset != ide_pci) -#endif	/* CONFIG_BLK_DEV_IDEPCI */ -		{ +		if ((host->irq_flags & IRQF_SHARED) == 0) {  			/*  			 * Probably not a shared PCI interrupt,  			 * so we can safely try to do something about it:  			 */  			unexpected_intr(irq, hwif); -#ifdef CONFIG_BLK_DEV_IDEPCI  		} else {  			/*  			 * Whack the status register, just in case  			 * we have a leftover pending IRQ.  			 */  			(void)hwif->tp_ops->read_status(hwif); -#endif /* CONFIG_BLK_DEV_IDEPCI */  		}  		goto out;  	}  |