Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 328752
b: refs/heads/master
c: e468dc1
h: refs/heads/master
v: v3
  • Loading branch information
Artur Wojcik authored and James Bottomley committed Aug 24, 2012
1 parent c13ae69 commit c5a2e8b
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 303694eeee5eacad5b84105a15afd9e351e1891b
refs/heads/master: e468dc112f38220ee78bc0de64190eca9812749b
2 changes: 1 addition & 1 deletion trunk/drivers/scsi/isci/host.c
Original file line number Diff line number Diff line change
Expand Up @@ -1044,7 +1044,7 @@ static enum sci_status sci_controller_start(struct isci_host *ihost,
return SCI_SUCCESS;
}

void isci_host_scan_start(struct Scsi_Host *shost)
void isci_host_start(struct Scsi_Host *shost)
{
struct isci_host *ihost = SHOST_TO_SAS_HA(shost)->lldd_ha;
unsigned long tmo = sci_controller_get_suggested_start_timeout(ihost);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/scsi/isci/host.h
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ void sci_controller_remote_device_stopped(struct isci_host *ihost,

enum sci_status sci_controller_continue_io(struct isci_request *ireq);
int isci_host_scan_finished(struct Scsi_Host *, unsigned long);
void isci_host_scan_start(struct Scsi_Host *);
void isci_host_start(struct Scsi_Host *);
u16 isci_alloc_tag(struct isci_host *ihost);
enum sci_status isci_free_tag(struct isci_host *ihost, u16 io_tag);
void isci_tci_free(struct isci_host *ihost, u16 tci);
Expand Down
58 changes: 57 additions & 1 deletion trunk/drivers/scsi/isci/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ static struct scsi_host_template isci_sht = {
.target_alloc = sas_target_alloc,
.slave_configure = sas_slave_configure,
.scan_finished = isci_host_scan_finished,
.scan_start = isci_host_scan_start,
.scan_start = isci_host_start,
.change_queue_depth = sas_change_queue_depth,
.change_queue_type = sas_change_queue_type,
.bios_param = sas_bios_param,
Expand Down Expand Up @@ -722,11 +722,67 @@ static void __devexit isci_pci_remove(struct pci_dev *pdev)
}
}

#ifdef CONFIG_PM
static int isci_suspend(struct device *dev)
{
struct pci_dev *pdev = to_pci_dev(dev);
struct isci_host *ihost;
int i;

for_each_isci_host(i, ihost, pdev) {
sas_suspend_ha(&ihost->sas_ha);
isci_host_deinit(ihost);
}

pci_save_state(pdev);
pci_disable_device(pdev);
pci_set_power_state(pdev, PCI_D3hot);

return 0;
}

static int isci_resume(struct device *dev)
{
struct pci_dev *pdev = to_pci_dev(dev);
struct isci_host *ihost;
int rc, i;

pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev);

rc = pcim_enable_device(pdev);
if (rc) {
dev_err(&pdev->dev,
"enabling device failure after resume(%d)\n", rc);
return rc;
}

pci_set_master(pdev);

for_each_isci_host(i, ihost, pdev) {
sas_prep_resume_ha(&ihost->sas_ha);

isci_host_init(ihost);
isci_host_start(ihost->sas_ha.core.shost);
wait_for_start(ihost);

sas_resume_ha(&ihost->sas_ha);
}

return 0;
}

static SIMPLE_DEV_PM_OPS(isci_pm_ops, isci_suspend, isci_resume);
#endif

static struct pci_driver isci_pci_driver = {
.name = DRV_NAME,
.id_table = isci_id_table,
.probe = isci_pci_probe,
.remove = __devexit_p(isci_pci_remove),
#ifdef CONFIG_PM
.driver.pm = &isci_pm_ops,
#endif
};

static __init int isci_init(void)
Expand Down

0 comments on commit c5a2e8b

Please sign in to comment.