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>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user