diff options
Diffstat (limited to 'drivers/scsi/ahci.c')
| -rw-r--r-- | drivers/scsi/ahci.c | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c index c2c8fa828e24..fe8187d6f58b 100644 --- a/drivers/scsi/ahci.c +++ b/drivers/scsi/ahci.c | |||
| @@ -216,7 +216,7 @@ static Scsi_Host_Template ahci_sht = { | |||
| 216 | .ordered_flush = 1, | 216 | .ordered_flush = 1, |
| 217 | }; | 217 | }; |
| 218 | 218 | ||
| 219 | static struct ata_port_operations ahci_ops = { | 219 | static const struct ata_port_operations ahci_ops = { |
| 220 | .port_disable = ata_port_disable, | 220 | .port_disable = ata_port_disable, |
| 221 | 221 | ||
| 222 | .check_status = ahci_check_status, | 222 | .check_status = ahci_check_status, |
| @@ -407,7 +407,7 @@ static u32 ahci_scr_read (struct ata_port *ap, unsigned int sc_reg_in) | |||
| 407 | return 0xffffffffU; | 407 | return 0xffffffffU; |
| 408 | } | 408 | } |
| 409 | 409 | ||
| 410 | return readl((void *) ap->ioaddr.scr_addr + (sc_reg * 4)); | 410 | return readl((void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); |
| 411 | } | 411 | } |
| 412 | 412 | ||
| 413 | 413 | ||
| @@ -425,7 +425,7 @@ static void ahci_scr_write (struct ata_port *ap, unsigned int sc_reg_in, | |||
| 425 | return; | 425 | return; |
| 426 | } | 426 | } |
| 427 | 427 | ||
| 428 | writel(val, (void *) ap->ioaddr.scr_addr + (sc_reg * 4)); | 428 | writel(val, (void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); |
| 429 | } | 429 | } |
| 430 | 430 | ||
| 431 | static void ahci_phy_reset(struct ata_port *ap) | 431 | static void ahci_phy_reset(struct ata_port *ap) |
| @@ -453,14 +453,14 @@ static void ahci_phy_reset(struct ata_port *ap) | |||
| 453 | 453 | ||
| 454 | static u8 ahci_check_status(struct ata_port *ap) | 454 | static u8 ahci_check_status(struct ata_port *ap) |
| 455 | { | 455 | { |
| 456 | void *mmio = (void *) ap->ioaddr.cmd_addr; | 456 | void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr; |
| 457 | 457 | ||
| 458 | return readl(mmio + PORT_TFDATA) & 0xFF; | 458 | return readl(mmio + PORT_TFDATA) & 0xFF; |
| 459 | } | 459 | } |
| 460 | 460 | ||
| 461 | static u8 ahci_check_err(struct ata_port *ap) | 461 | static u8 ahci_check_err(struct ata_port *ap) |
| 462 | { | 462 | { |
| 463 | void *mmio = (void *) ap->ioaddr.cmd_addr; | 463 | void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr; |
| 464 | 464 | ||
| 465 | return (readl(mmio + PORT_TFDATA) >> 8) & 0xFF; | 465 | return (readl(mmio + PORT_TFDATA) >> 8) & 0xFF; |
| 466 | } | 466 | } |
| @@ -672,17 +672,36 @@ static irqreturn_t ahci_interrupt (int irq, void *dev_instance, struct pt_regs * | |||
| 672 | 672 | ||
| 673 | for (i = 0; i < host_set->n_ports; i++) { | 673 | for (i = 0; i < host_set->n_ports; i++) { |
| 674 | struct ata_port *ap; | 674 | struct ata_port *ap; |
| 675 | u32 tmp; | ||
| 676 | 675 | ||
| 677 | VPRINTK("port %u\n", i); | 676 | if (!(irq_stat & (1 << i))) |
| 677 | continue; | ||
| 678 | |||
| 678 | ap = host_set->ports[i]; | 679 | ap = host_set->ports[i]; |
| 679 | tmp = irq_stat & (1 << i); | 680 | if (ap) { |
| 680 | if (tmp && ap) { | ||
| 681 | struct ata_queued_cmd *qc; | 681 | struct ata_queued_cmd *qc; |
| 682 | qc = ata_qc_from_tag(ap, ap->active_tag); | 682 | qc = ata_qc_from_tag(ap, ap->active_tag); |
| 683 | if (ahci_host_intr(ap, qc)) | 683 | if (!ahci_host_intr(ap, qc)) |
| 684 | irq_ack |= (1 << i); | 684 | if (ata_ratelimit()) { |
| 685 | struct pci_dev *pdev = | ||
| 686 | to_pci_dev(ap->host_set->dev); | ||
| 687 | printk(KERN_WARNING | ||
| 688 | "ahci(%s): unhandled interrupt on port %u\n", | ||
| 689 | pci_name(pdev), i); | ||
| 690 | } | ||
| 691 | |||
| 692 | VPRINTK("port %u\n", i); | ||
| 693 | } else { | ||
| 694 | VPRINTK("port %u (no irq)\n", i); | ||
| 695 | if (ata_ratelimit()) { | ||
| 696 | struct pci_dev *pdev = | ||
| 697 | to_pci_dev(ap->host_set->dev); | ||
| 698 | printk(KERN_WARNING | ||
| 699 | "ahci(%s): interrupt on disabled port %u\n", | ||
| 700 | pci_name(pdev), i); | ||
| 701 | } | ||
| 685 | } | 702 | } |
| 703 | |||
| 704 | irq_ack |= (1 << i); | ||
| 686 | } | 705 | } |
| 687 | 706 | ||
| 688 | if (irq_ack) { | 707 | if (irq_ack) { |
