mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
MFC r202011:
While AHCI specification tells that multi-vector MSI doesn't use global IS register, nVidia chipsets have different oppinion, requiring every interrupt to be acknowledged there. While there, add interrupt descriptions in multi-vector MSI mode.
This commit is contained in:
parent
8e7a844b9b
commit
392777822f
1 changed files with 12 additions and 0 deletions
|
|
@ -570,6 +570,12 @@ ahci_setup_interrupt(device_t dev)
|
|||
device_printf(dev, "unable to setup interrupt\n");
|
||||
return ENXIO;
|
||||
}
|
||||
if (ctlr->numirqs > 1) {
|
||||
bus_describe_intr(dev, ctlr->irqs[i].r_irq,
|
||||
ctlr->irqs[i].handle,
|
||||
ctlr->irqs[i].mode == AHCI_IRQ_MODE_ONE ?
|
||||
"ch%d" : "%d", i);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -624,8 +630,14 @@ ahci_intr_one(void *data)
|
|||
int unit;
|
||||
|
||||
unit = irq->r_irq_rid - 1;
|
||||
/* Some controllers have edge triggered IS. */
|
||||
if (ctlr->quirks & AHCI_Q_EDGEIS)
|
||||
ATA_OUTL(ctlr->r_mem, AHCI_IS, 1 << unit);
|
||||
if ((arg = ctlr->interrupt[unit].argument))
|
||||
ctlr->interrupt[unit].function(arg);
|
||||
/* AHCI declares level triggered IS. */
|
||||
if (!(ctlr->quirks & AHCI_Q_EDGEIS))
|
||||
ATA_OUTL(ctlr->r_mem, AHCI_IS, 1 << unit);
|
||||
}
|
||||
|
||||
static struct resource *
|
||||
|
|
|
|||
Loading…
Reference in a new issue