basic modification from way back
[powerpc.git] / drivers / ata / sata_sis.c
index 7e51f1c..d8ee062 100644 (file)
@@ -40,7 +40,7 @@
 #include <linux/device.h>
 #include <scsi/scsi_host.h>
 #include <linux/libata.h>
-#include "libata.h"
+#include "sis.h"
 
 #define DRV_NAME       "sata_sis"
 #define DRV_VERSION    "0.7"
@@ -116,20 +116,20 @@ static const struct ata_port_operations sis_ops = {
        .bmdma_status           = ata_bmdma_status,
        .qc_prep                = ata_qc_prep,
        .qc_issue               = ata_qc_issue_prot,
-       .data_xfer              = ata_pio_data_xfer,
+       .data_xfer              = ata_data_xfer,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = ata_bmdma_error_handler,
        .post_internal_cmd      = ata_bmdma_post_internal_cmd,
-       .irq_handler            = ata_interrupt,
        .irq_clear              = ata_bmdma_irq_clear,
+       .irq_on                 = ata_irq_on,
+       .irq_ack                = ata_irq_ack,
        .scr_read               = sis_scr_read,
        .scr_write              = sis_scr_write,
        .port_start             = ata_port_start,
 };
 
 static struct ata_port_info sis_port_info = {
-       .sht            = &sis_sht,
        .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
        .pio_mask       = 0x1f,
        .mwdma_mask     = 0x7,
@@ -222,11 +222,11 @@ static u32 sis_scr_read (struct ata_port *ap, unsigned int sc_reg)
 
        pci_read_config_byte(pdev, SIS_PMR, &pmr);
 
-       val = inl(ap->ioaddr.scr_addr + (sc_reg * 4));
+       val = ioread32(ap->ioaddr.scr_addr + (sc_reg * 4));
 
        if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
            (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
-               val2 = inl(ap->ioaddr.scr_addr + (sc_reg * 4) + 0x10);
+               val2 = ioread32(ap->ioaddr.scr_addr + (sc_reg * 4) + 0x10);
 
        return (val | val2) &  0xfffffffb;
 }
@@ -244,22 +244,23 @@ static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
        if (ap->flags & SIS_FLAG_CFGSCR)
                sis_scr_cfg_write(ap, sc_reg, val);
        else {
-               outl(val, ap->ioaddr.scr_addr + (sc_reg * 4));
+               iowrite32(val, ap->ioaddr.scr_addr + (sc_reg * 4));
                if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
                    (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
-                       outl(val, ap->ioaddr.scr_addr + (sc_reg * 4)+0x10);
+                       iowrite32(val, ap->ioaddr.scr_addr + (sc_reg * 4)+0x10);
        }
 }
 
 static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        static int printed_version;
-       struct ata_probe_ent *probe_ent = NULL;
-       int rc;
+       struct ata_port_info pi = sis_port_info;
+       const struct ata_port_info *ppi[2] = { &pi, &pi };
+       struct ata_host *host;
        u32 genctl, val;
-       struct ata_port_info pi = sis_port_info, *ppi[2] = { &pi, &pi };
        u8 pmr;
        u8 port2_start = 0x20;
+       int rc;
 
        if (!printed_version++)
                dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n");
@@ -268,19 +269,6 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        if (rc)
                return rc;
 
-       rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc) {
-               pcim_pin_device(pdev);
-               return rc;
-       }
-
-       rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
-       if (rc)
-               return rc;
-       rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
-       if (rc)
-               return rc;
-
        /* check and see if the SCRs are in IO space or PCI cfg space */
        pci_read_config_dword(pdev, SIS_GENCTL, &genctl);
        if ((genctl & GENCTL_IOMAPPED_SCR) == 0)
@@ -307,7 +295,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
                case 0x10:
                        ppi[1] = &sis_info133;
                        break;
-                       
+
                case 0x30:
                        ppi[0] = &sis_info133;
                        break;
@@ -347,26 +335,26 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
                break;
        }
 
-       probe_ent = ata_pci_init_native_mode(pdev, ppi, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY);
-       if (!probe_ent)
-               return -ENOMEM;
+       rc = ata_pci_prepare_native_host(pdev, ppi, 2, &host);
+       if (rc)
+               return rc;
+
+       if (!(pi.flags & SIS_FLAG_CFGSCR)) {
+               void __iomem *mmio;
 
-       if (!(probe_ent->port_flags & SIS_FLAG_CFGSCR)) {
-               probe_ent->port[0].scr_addr =
-                       pci_resource_start(pdev, SIS_SCR_PCI_BAR);
-               probe_ent->port[1].scr_addr =
-                       pci_resource_start(pdev, SIS_SCR_PCI_BAR) + port2_start;
+               rc = pcim_iomap_regions(pdev, 1 << SIS_SCR_PCI_BAR, DRV_NAME);
+               if (rc)
+                       return rc;
+               mmio = host->iomap[SIS_SCR_PCI_BAR];
+
+               host->ports[0]->ioaddr.scr_addr = mmio;
+               host->ports[1]->ioaddr.scr_addr = mmio + port2_start;
        }
 
        pci_set_master(pdev);
        pci_intx(pdev, 1);
-
-       if (!ata_device_add(probe_ent))
-               return -EIO;
-
-       devm_kfree(&pdev->dev, probe_ent);
-       return 0;
-
+       return ata_host_activate(host, pdev->irq, ata_interrupt, IRQF_SHARED,
+                                &sis_sht);
 }
 
 static int __init sis_init(void)