aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/ipr.c29
-rw-r--r--drivers/scsi/ipr.h5
2 files changed, 26 insertions, 8 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 95045e33710..ba17ac50127 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -89,7 +89,7 @@ static unsigned int ipr_log_level = IPR_DEFAULT_LOG_LEVEL;
89static unsigned int ipr_max_speed = 1; 89static unsigned int ipr_max_speed = 1;
90static int ipr_testmode = 0; 90static int ipr_testmode = 0;
91static unsigned int ipr_fastfail = 0; 91static unsigned int ipr_fastfail = 0;
92static unsigned int ipr_transop_timeout = IPR_OPERATIONAL_TIMEOUT; 92static unsigned int ipr_transop_timeout = 0;
93static unsigned int ipr_enable_cache = 1; 93static unsigned int ipr_enable_cache = 1;
94static unsigned int ipr_debug = 0; 94static unsigned int ipr_debug = 0;
95static int ipr_auto_create = 1; 95static int ipr_auto_create = 1;
@@ -6187,7 +6187,7 @@ static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd)
6187 dev_info(&ioa_cfg->pdev->dev, "Initializing IOA.\n"); 6187 dev_info(&ioa_cfg->pdev->dev, "Initializing IOA.\n");
6188 6188
6189 ipr_cmd->timer.data = (unsigned long) ipr_cmd; 6189 ipr_cmd->timer.data = (unsigned long) ipr_cmd;
6190 ipr_cmd->timer.expires = jiffies + (ipr_transop_timeout * HZ); 6190 ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ);
6191 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; 6191 ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout;
6192 ipr_cmd->done = ipr_reset_ioa_job; 6192 ipr_cmd->done = ipr_reset_ioa_job;
6193 add_timer(&ipr_cmd->timer); 6193 add_timer(&ipr_cmd->timer);
@@ -7232,6 +7232,13 @@ static int __devinit ipr_probe_ioa(struct pci_dev *pdev,
7232 goto out_scsi_host_put; 7232 goto out_scsi_host_put;
7233 } 7233 }
7234 7234
7235 if (ipr_transop_timeout)
7236 ioa_cfg->transop_timeout = ipr_transop_timeout;
7237 else if (dev_id->driver_data & IPR_USE_LONG_TRANSOP_TIMEOUT)
7238 ioa_cfg->transop_timeout = IPR_LONG_OPERATIONAL_TIMEOUT;
7239 else
7240 ioa_cfg->transop_timeout = IPR_OPERATIONAL_TIMEOUT;
7241
7235 ipr_regs_pci = pci_resource_start(pdev, 0); 7242 ipr_regs_pci = pci_resource_start(pdev, 0);
7236 7243
7237 rc = pci_request_regions(pdev, IPR_NAME); 7244 rc = pci_request_regions(pdev, IPR_NAME);
@@ -7539,29 +7546,35 @@ static struct pci_device_id ipr_pci_table[] __devinitdata = {
7539 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE, 7546 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
7540 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571A, 0, 0, 0 }, 7547 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571A, 0, 0, 0 },
7541 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE, 7548 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
7542 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575B, 0, 0, 0 }, 7549 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575B, 0, 0,
7550 IPR_USE_LONG_TRANSOP_TIMEOUT },
7543 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, 7551 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
7544 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 }, 7552 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 },
7545 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, 7553 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
7546 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0, 0 }, 7554 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0, 0 },
7547 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, 7555 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
7548 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0, 0 }, 7556 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0,
7557 IPR_USE_LONG_TRANSOP_TIMEOUT },
7549 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, 7558 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
7550 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 }, 7559 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 },
7551 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, 7560 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
7552 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0, 0 }, 7561 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0, 0 },
7553 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, 7562 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
7554 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0, 0 }, 7563 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0,
7564 IPR_USE_LONG_TRANSOP_TIMEOUT },
7555 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, 7565 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
7556 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B7, 0, 0, 0 }, 7566 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B7, 0, 0,
7567 IPR_USE_LONG_TRANSOP_TIMEOUT },
7557 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE, 7568 { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE,
7558 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780, 0, 0, 0 }, 7569 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780, 0, 0, 0 },
7559 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, 7570 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
7560 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571E, 0, 0, 0 }, 7571 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571E, 0, 0, 0 },
7561 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, 7572 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
7562 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571F, 0, 0, 0 }, 7573 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571F, 0, 0,
7574 IPR_USE_LONG_TRANSOP_TIMEOUT },
7563 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, 7575 { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
7564 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572F, 0, 0, 0 }, 7576 PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572F, 0, 0,
7577 IPR_USE_LONG_TRANSOP_TIMEOUT },
7565 { } 7578 { }
7566}; 7579};
7567MODULE_DEVICE_TABLE(pci, ipr_pci_table); 7580MODULE_DEVICE_TABLE(pci, ipr_pci_table);
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
index 88f285de97b..c83ccbb2498 100644
--- a/drivers/scsi/ipr.h
+++ b/drivers/scsi/ipr.h
@@ -104,6 +104,9 @@
104#define IPR_IOASC_IOA_WAS_RESET 0x10000001 104#define IPR_IOASC_IOA_WAS_RESET 0x10000001
105#define IPR_IOASC_PCI_ACCESS_ERROR 0x10000002 105#define IPR_IOASC_PCI_ACCESS_ERROR 0x10000002
106 106
107/* Driver data flags */
108#define IPR_USE_LONG_TRANSOP_TIMEOUT 0x00000001
109
107#define IPR_DEFAULT_MAX_ERROR_DUMP 984 110#define IPR_DEFAULT_MAX_ERROR_DUMP 984
108#define IPR_NUM_LOG_HCAMS 2 111#define IPR_NUM_LOG_HCAMS 2
109#define IPR_NUM_CFG_CHG_HCAMS 2 112#define IPR_NUM_CFG_CHG_HCAMS 2
@@ -179,6 +182,7 @@
179#define IPR_SET_SUP_DEVICE_TIMEOUT (2 * 60 * HZ) 182#define IPR_SET_SUP_DEVICE_TIMEOUT (2 * 60 * HZ)
180#define IPR_REQUEST_SENSE_TIMEOUT (10 * HZ) 183#define IPR_REQUEST_SENSE_TIMEOUT (10 * HZ)
181#define IPR_OPERATIONAL_TIMEOUT (5 * 60) 184#define IPR_OPERATIONAL_TIMEOUT (5 * 60)
185#define IPR_LONG_OPERATIONAL_TIMEOUT (12 * 60)
182#define IPR_WAIT_FOR_RESET_TIMEOUT (2 * HZ) 186#define IPR_WAIT_FOR_RESET_TIMEOUT (2 * HZ)
183#define IPR_CHECK_FOR_RESET_TIMEOUT (HZ / 10) 187#define IPR_CHECK_FOR_RESET_TIMEOUT (HZ / 10)
184#define IPR_WAIT_FOR_BIST_TIMEOUT (2 * HZ) 188#define IPR_WAIT_FOR_BIST_TIMEOUT (2 * HZ)
@@ -1119,6 +1123,7 @@ struct ipr_ioa_cfg {
1119 1123
1120 struct ipr_bus_attributes bus_attr[IPR_MAX_NUM_BUSES]; 1124 struct ipr_bus_attributes bus_attr[IPR_MAX_NUM_BUSES];
1121 1125
1126 unsigned int transop_timeout;
1122 const struct ipr_chip_cfg_t *chip_cfg; 1127 const struct ipr_chip_cfg_t *chip_cfg;
1123 1128
1124 void __iomem *hdw_dma_regs; /* iomapped PCI memory space */ 1129 void __iomem *hdw_dma_regs; /* iomapped PCI memory space */