and changed files
[powerpc.git] / drivers / ata / libata-acpi.c
index b4e8be5..cb3eab6 100644 (file)
@@ -34,6 +34,13 @@ struct taskfile_array {
        u8      tfa[REGS_PER_GTF];      /* regs. 0x1f1 - 0x1f7 */
 };
 
+/*
+ *     Helper - belongs in the PCI layer somewhere eventually
+ */
+static int is_pci_dev(struct device *dev)
+{
+       return (dev->bus == &pci_bus_type);
+}
 
 /**
  * sata_get_dev_handle - finds acpi_handle and PCI device.function
@@ -53,6 +60,9 @@ static int sata_get_dev_handle(struct device *dev, acpi_handle *handle,
        struct pci_dev  *pci_dev;
        acpi_integer    addr;
 
+       if (!is_pci_dev(dev))
+               return -ENODEV;
+
        pci_dev = to_pci_dev(dev);      /* NOTE: PCI-specific */
        /* Please refer to the ACPI spec for the syntax of _ADR. */
        addr = (PCI_SLOT(pci_dev->devfn) << 16) | PCI_FUNC(pci_dev->devfn);
@@ -84,7 +94,12 @@ static int pata_get_dev_handle(struct device *dev, acpi_handle *handle,
        acpi_status status;
        struct acpi_device_info *dinfo = NULL;
        int ret = -ENODEV;
-       struct pci_dev *pdev = to_pci_dev(dev);
+       struct pci_dev *pdev;
+
+       if (!is_pci_dev(dev))
+               return -ENODEV;
+
+       pdev = to_pci_dev(dev);
 
        bus = pdev->bus->number;
        devnum = PCI_SLOT(pdev->devfn);
@@ -290,13 +305,12 @@ static int do_drive_get_GTF(struct ata_port *ap, int ix,
        *gtf_address = 0UL;
        *obj_loc = 0UL;
 
-       if (noacpi)
+       if (libata_noacpi)
                return 0;
 
        if (ata_msg_probe(ap))
-               ata_dev_printk(atadev, KERN_DEBUG,
-                       "%s: ENTER: ap->id: %d, port#: %d\n",
-                       __FUNCTION__, ap->id, ap->port_no);
+               ata_dev_printk(atadev, KERN_DEBUG, "%s: ENTER: port#: %d\n",
+                              __FUNCTION__, ap->port_no);
 
        if (!ata_dev_enabled(atadev) || (ap->flags & ATA_FLAG_DISABLED)) {
                if (ata_msg_probe(ap))
@@ -456,6 +470,9 @@ static void taskfile_load_raw(struct ata_port *ap,
                                struct ata_device *atadev,
                                const struct taskfile_array *gtf)
 {
+       struct ata_taskfile tf;
+       unsigned int err;
+
        if (ata_msg_probe(ap))
                ata_dev_printk(atadev, KERN_DEBUG, "%s: (0x1f1-1f7): hex: "
                        "%02x %02x %02x %02x %02x %02x %02x\n",
@@ -468,35 +485,24 @@ static void taskfile_load_raw(struct ata_port *ap,
            && (gtf->tfa[6] == 0))
                return;
 
-       if (ap->ops->qc_issue) {
-               struct ata_taskfile tf;
-               unsigned int err;
-
-               ata_tf_init(atadev, &tf);
-
-               /* convert gtf to tf */
-               tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; /* TBD */
-               tf.protocol = atadev->class == ATA_DEV_ATAPI ?
-                       ATA_PROT_ATAPI_NODATA : ATA_PROT_NODATA;
-               tf.feature = gtf->tfa[0];       /* 0x1f1 */
-               tf.nsect   = gtf->tfa[1];       /* 0x1f2 */
-               tf.lbal    = gtf->tfa[2];       /* 0x1f3 */
-               tf.lbam    = gtf->tfa[3];       /* 0x1f4 */
-               tf.lbah    = gtf->tfa[4];       /* 0x1f5 */
-               tf.device  = gtf->tfa[5];       /* 0x1f6 */
-               tf.command = gtf->tfa[6];       /* 0x1f7 */
-
-               err = ata_exec_internal(atadev, &tf, NULL, DMA_NONE, NULL, 0);
-               if (err && ata_msg_probe(ap))
-                       ata_dev_printk(atadev, KERN_ERR,
-                               "%s: ata_exec_internal failed: %u\n",
-                               __FUNCTION__, err);
-       } else
-               if (ata_msg_warn(ap))
-                       ata_dev_printk(atadev, KERN_WARNING,
-                               "%s: SATA driver is missing qc_issue function"
-                               " entry points\n",
-                               __FUNCTION__);
+       ata_tf_init(atadev, &tf);
+
+       /* convert gtf to tf */
+       tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; /* TBD */
+       tf.protocol = ATA_PROT_NODATA;
+       tf.feature = gtf->tfa[0];       /* 0x1f1 */
+       tf.nsect   = gtf->tfa[1];       /* 0x1f2 */
+       tf.lbal    = gtf->tfa[2];       /* 0x1f3 */
+       tf.lbam    = gtf->tfa[3];       /* 0x1f4 */
+       tf.lbah    = gtf->tfa[4];       /* 0x1f5 */
+       tf.device  = gtf->tfa[5];       /* 0x1f6 */
+       tf.command = gtf->tfa[6];       /* 0x1f7 */
+
+       err = ata_exec_internal(atadev, &tf, NULL, DMA_NONE, NULL, 0);
+       if (err && ata_msg_probe(ap))
+               ata_dev_printk(atadev, KERN_ERR,
+                       "%s: ata_exec_internal failed: %u\n",
+                       __FUNCTION__, err);
 }
 
 /**
@@ -521,11 +527,10 @@ static int do_drive_set_taskfiles(struct ata_port *ap,
        struct taskfile_array   *gtf;
 
        if (ata_msg_probe(ap))
-               ata_dev_printk(atadev, KERN_DEBUG,
-                       "%s: ENTER: ap->id: %d, port#: %d\n",
-                       __FUNCTION__, ap->id, ap->port_no);
+               ata_dev_printk(atadev, KERN_DEBUG, "%s: ENTER: port#: %d\n",
+                              __FUNCTION__, ap->port_no);
 
-       if (noacpi || !(ap->cbl == ATA_CBL_SATA))
+       if (libata_noacpi || !(ap->cbl == ATA_CBL_SATA))
                return 0;
 
        if (!ata_dev_enabled(atadev) || (ap->flags & ATA_FLAG_DISABLED))
@@ -568,7 +573,14 @@ int ata_acpi_exec_tfs(struct ata_port *ap)
        unsigned long   gtf_address;
        unsigned long   obj_loc;
 
-       if (noacpi)
+       if (libata_noacpi)
+               return 0;
+       /*
+        * TBD - implement PATA support.  For now,
+        * we should not run GTF on PATA devices since some
+        * PATA require execution of GTM/STM before GTF.
+        */
+       if (!(ap->cbl == ATA_CBL_SATA))
                return 0;
 
        for (ix = 0; ix < ATA_MAX_DEVICES; ix++) {
@@ -623,13 +635,12 @@ int ata_acpi_push_id(struct ata_port *ap, unsigned int ix)
        struct acpi_object_list         input;
        union acpi_object               in_params[1];
 
-       if (noacpi)
+       if (libata_noacpi)
                return 0;
 
        if (ata_msg_probe(ap))
-               ata_dev_printk(atadev, KERN_DEBUG,
-                       "%s: ap->id: %d, ix = %d, port#: %d\n",
-                       __FUNCTION__, ap->id, ix, ap->port_no);
+               ata_dev_printk(atadev, KERN_DEBUG, "%s: ix = %d, port#: %d\n",
+                              __FUNCTION__, ix, ap->port_no);
 
        /* Don't continue if not a SATA device. */
        if (!(ap->cbl == ATA_CBL_SATA)) {
@@ -685,9 +696,8 @@ int ata_acpi_push_id(struct ata_port *ap, unsigned int ix)
        if (err < 0) {
                if (ata_msg_probe(ap))
                        ata_dev_printk(atadev, KERN_DEBUG,
-                               "ata%u(%u): %s _SDD error: status = 0x%x\n",
-                               ap->id, ap->device->devno,
-                               __FUNCTION__, status);
+                                      "%s _SDD error: status = 0x%x\n",
+                                      __FUNCTION__, status);
        }
 
        /* always return success */