The definition of ahci_port_suspend()
PATCH 4/6 The definition of ahci_port_suspend()
Add the definition of ahci_port_suspend(), which will be used to suspend a port.
Signed-off-by Forrest Zhao <[email protected]>
Signed-off-by Hannes Reinecke <[email protected]>
Signed-off-by Jens Axboe <[email protected]>
---
drivers/scsi/ahci.c | 35 ++++++++++++++++++++++++++++++++++- 1 files changed, 34 insertions(+), 1 deletions(-)
cc19430967817d0354c92a7b1d1a1cef87cc449f
drivers/scsi/ahci.c +34 -1
@@ -223,6 +223,7 @@ static void ahci_error_handler(struct atstatic void ahci_post_internal_cmd (struct ata_queued_cmd *qc);static int ahci_port_standby (void __iomem *port_mmio,u32 cap);static int ahci_port_spinup (void __iomem *port_mmio,u32 cap); +static int ahci_port_suspend (struct ata_port *ap,pm_message_t state);static void ahci_remove_one (struct pci_dev *pdev);static struct scsi_host_template ahci_sht = {
@@ -459,7 +460,6 @@ static int ahci_port_start(struct ata_poreturn 0 ; } -static void ahci_port_stop (struct ata_port *ap) {struct device *dev = ap->host_set->dev;
@@ -485,6 +485,39 @@ static void ahci_port_stop(struct ata_pokfree (pp); } +static int ahci_port_suspend (struct ata_port *ap,pm_message_t state) +{ +void __iomem *mmio = ap->host_set->mmio_base; +void __iomem *port_mmio =ahci_port_base (mmio, ap->port_no); +struct ahci_host_priv *hpriv = ap->host_set->private_data; +int rc; + +/* +* Disable DMA +*/ + rc =ahci_stop_engine (port_mmio); +if (rc) { +ata_port_printk (ap,KERN_WARNING ,"DMA engine busy\n" ); +return rc; + } + +/* +* Disable FIS reception +*/ + rc =ahci_stop_fis_rx (port_mmio); +if (rc) +ata_port_printk (ap,KERN_WARNING ,"FIS RX still running" +" (%d)\n" , rc); + +/* +* Put device into slumber mode +*/ +if (!rc && state.event !=PM_EVENT_FREEZE ) +ahci_port_standby (port_mmio, hpriv->cap); + +return rc; +} +static u32 ahci_scr_read (struct ata_port *ap,unsigned int sc_reg_in) {unsigned int sc_reg;
Signature · 2 lines
1.2.6 -