|
@@ -229,6 +229,9 @@ static void ahci_error_handler(struct ata_port *ap);
|
|
|
static void ahci_vt8251_error_handler(struct ata_port *ap);
|
|
|
static void ahci_post_internal_cmd(struct ata_queued_cmd *qc);
|
|
|
static int ahci_port_resume(struct ata_port *ap);
|
|
|
+static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl);
|
|
|
+static void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
|
|
|
+ u32 opts);
|
|
|
#ifdef CONFIG_PM
|
|
|
static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg);
|
|
|
static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
|
|
@@ -481,11 +484,17 @@ static inline int ahci_nr_ports(u32 cap)
|
|
|
return (cap & 0x1f) + 1;
|
|
|
}
|
|
|
|
|
|
-static inline void __iomem *ahci_port_base(struct ata_port *ap)
|
|
|
+static inline void __iomem *__ahci_port_base(struct ata_host *host,
|
|
|
+ unsigned int port_no)
|
|
|
{
|
|
|
- void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
|
|
|
+ void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
|
|
|
|
|
|
- return mmio + 0x100 + (ap->port_no * 0x80);
|
|
|
+ return mmio + 0x100 + (port_no * 0x80);
|
|
|
+}
|
|
|
+
|
|
|
+static inline void __iomem *ahci_port_base(struct ata_port *ap)
|
|
|
+{
|
|
|
+ return __ahci_port_base(ap->host, ap->port_no);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1750,14 +1759,18 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
host->private_data = hpriv;
|
|
|
|
|
|
for (i = 0; i < host->n_ports; i++) {
|
|
|
- if (hpriv->port_map & (1 << i)) {
|
|
|
- struct ata_port *ap = host->ports[i];
|
|
|
- void __iomem *port_mmio = ahci_port_base(ap);
|
|
|
+ struct ata_port *ap = host->ports[i];
|
|
|
+ void __iomem *port_mmio = ahci_port_base(ap);
|
|
|
|
|
|
+ /* standard SATA port setup */
|
|
|
+ if (hpriv->port_map & (1 << i)) {
|
|
|
ap->ioaddr.cmd_addr = port_mmio;
|
|
|
ap->ioaddr.scr_addr = port_mmio + PORT_SCR;
|
|
|
- } else
|
|
|
- host->ports[i]->ops = &ata_dummy_port_ops;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* disabled/not-implemented port */
|
|
|
+ else
|
|
|
+ ap->ops = &ata_dummy_port_ops;
|
|
|
}
|
|
|
|
|
|
/* initialize adapter */
|