static void svia_noop_freeze(struct ata_port *ap) { /* Some VIA controllers choke if ATA_NIEN is manipulated in * certain way. Leave it alone and just clear pending IRQ. */ ap->ops->sff_check_status(ap); ata_bmdma_irq_clear(ap); }
static void cmd64x_sff_irq_clear(struct ata_port *ap) { struct pci_dev *pdev = to_pci_dev(ap->host->dev); int irq_reg = ap->port_no ? ARTTIM23 : CFR; u8 irq_stat; ata_bmdma_irq_clear(ap); /* Reading the register should be enough to clear the interrupt */ pci_read_config_byte(pdev, irq_reg, &irq_stat); }
static void cmd648_sff_irq_clear(struct ata_port *ap) { struct pci_dev *pdev = to_pci_dev(ap->host->dev); unsigned long base = pci_resource_start(pdev, 4); int irq_mask = ap->port_no ? MRDMODE_INTR_CH1 : MRDMODE_INTR_CH0; u8 mrdmode; ata_bmdma_irq_clear(ap); /* Clear this port's interrupt bit (leaving the other port alone) */ mrdmode = inb(base + 1); mrdmode &= ~(MRDMODE_INTR_CH0 | MRDMODE_INTR_CH1); outb(mrdmode | irq_mask, base + 1); }