diff options
| author | Alexander Motin <mav@FreeBSD.org> | 2010-01-19 13:33:31 +0000 |
|---|---|---|
| committer | Alexander Motin <mav@FreeBSD.org> | 2010-01-19 13:33:31 +0000 |
| commit | f288580266c0544bab20ccaccf9704c649928991 (patch) | |
| tree | 877abe1e33596a31caa0c025691d910542dd2a71 /sys/dev/ahci | |
| parent | 89dbf1bfd5d3ccb0bee6eebe22e367c8ff1a3ddb (diff) | |
Notes
Diffstat (limited to 'sys/dev/ahci')
| -rw-r--r-- | sys/dev/ahci/ahci.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c index f0728ddc14b4..bdb49a66800d 100644 --- a/sys/dev/ahci/ahci.c +++ b/sys/dev/ahci/ahci.c @@ -596,20 +596,18 @@ ahci_intr(void *data) unit = irq->r_irq_rid - 1; is = ATA_INL(ctlr->r_mem, AHCI_IS); } + /* Some controllers have edge triggered IS. */ + if (ctlr->quirks & AHCI_Q_EDGEIS) + ATA_OUTL(ctlr->r_mem, AHCI_IS, is); for (; unit < ctlr->channels; unit++) { if ((is & (1 << unit)) != 0 && (arg = ctlr->interrupt[unit].argument)) { - if (ctlr->quirks & AHCI_Q_EDGEIS) { - /* Some controller have edge triggered IS. */ - ATA_OUTL(ctlr->r_mem, AHCI_IS, 1 << unit); - ctlr->interrupt[unit].function(arg); - } else { - /* but AHCI declares level triggered IS. */ ctlr->interrupt[unit].function(arg); - ATA_OUTL(ctlr->r_mem, AHCI_IS, 1 << unit); - } } } + /* AHCI declares level triggered IS. */ + if (!(ctlr->quirks & AHCI_Q_EDGEIS)) + ATA_OUTL(ctlr->r_mem, AHCI_IS, is); } /* |
