|
@@ -296,6 +296,44 @@ static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf,
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * ata_acpi_cbl_80wire - Check for 80 wire cable
|
|
|
+ * @ap: Port to check
|
|
|
+ *
|
|
|
+ * Return 1 if the ACPI mode data for this port indicates the BIOS selected
|
|
|
+ * an 80wire mode.
|
|
|
+ */
|
|
|
+
|
|
|
+int ata_acpi_cbl_80wire(struct ata_port *ap)
|
|
|
+{
|
|
|
+ struct ata_acpi_gtm gtm;
|
|
|
+ int valid = 0;
|
|
|
+
|
|
|
+ /* No _GTM data, no information */
|
|
|
+ if (ata_acpi_gtm(ap, >m) < 0)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ /* Split timing, DMA enabled */
|
|
|
+ if ((gtm.flags & 0x11) == 0x11 && gtm.drive[0].dma < 55)
|
|
|
+ valid |= 1;
|
|
|
+ if ((gtm.flags & 0x14) == 0x14 && gtm.drive[1].dma < 55)
|
|
|
+ valid |= 2;
|
|
|
+ /* Shared timing, DMA enabled */
|
|
|
+ if ((gtm.flags & 0x11) == 0x01 && gtm.drive[0].dma < 55)
|
|
|
+ valid |= 1;
|
|
|
+ if ((gtm.flags & 0x14) == 0x04 && gtm.drive[0].dma < 55)
|
|
|
+ valid |= 2;
|
|
|
+
|
|
|
+ /* Drive check */
|
|
|
+ if ((valid & 1) && ata_dev_enabled(&ap->link.device[0]))
|
|
|
+ return 1;
|
|
|
+ if ((valid & 2) && ata_dev_enabled(&ap->link.device[1]))
|
|
|
+ return 1;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+EXPORT_SYMBOL_GPL(ata_acpi_cbl_80wire);
|
|
|
+
|
|
|
/**
|
|
|
* taskfile_load_raw - send taskfile registers to host controller
|
|
|
* @dev: target ATA device
|