static int pacpi_port_start(struct ata_port *ap) { struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pata_acpi *acpi; if (ACPI_HANDLE(&ap->tdev) == NULL) return -ENODEV; acpi = ap->private_data = devm_kzalloc(&pdev->dev, sizeof(struct pata_acpi), GFP_KERNEL); if (ap->private_data == NULL) return -ENOMEM; acpi->mask[0] = pacpi_discover_modes(ap, &ap->link.device[0]); acpi->mask[1] = pacpi_discover_modes(ap, &ap->link.device[1]); return ata_bmdma_port_start(ap); }
static int pata_ftide010_gemini_port_start(struct ata_port *ap) { struct ftide010 *ftide = ap->host->private_data; struct device *dev = ftide->dev; struct sata_gemini *sg = ftide->sg; int bridges = 0; int ret; ret = ata_bmdma_port_start(ap); if (ret) return ret; if (ftide->master_to_sata0) { dev_info(dev, "SATA0 (master) start\n"); ret = gemini_sata_start_bridge(sg, 0); if (!ret) bridges++; } if (ftide->master_to_sata1) { dev_info(dev, "SATA1 (master) start\n"); ret = gemini_sata_start_bridge(sg, 1); if (!ret) bridges++; } /* Avoid double-starting */ if (ftide->slave_to_sata0 && !ftide->master_to_sata0) { dev_info(dev, "SATA0 (slave) start\n"); ret = gemini_sata_start_bridge(sg, 0); if (!ret) bridges++; } /* Avoid double-starting */ if (ftide->slave_to_sata1 && !ftide->master_to_sata1) { dev_info(dev, "SATA1 (slave) start\n"); ret = gemini_sata_start_bridge(sg, 1); if (!ret) bridges++; } dev_info(dev, "brought %d bridges online\n", bridges); return (bridges > 0) ? 0 : -EINVAL; // -ENODEV; }