[SCSI] qla2xxx: Further restrict ZIO mode support.
authorandrew.vasquez@qlogic.com <andrew.vasquez@qlogic.com>
Thu, 9 Mar 2006 22:27:39 +0000 (14:27 -0800)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Sun, 12 Mar 2006 15:40:13 +0000 (09:40 -0600)
Only support ZIO mode 6 on specific ISP types.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_os.c

index 488b3d1..fee0c49 100644 (file)
@@ -507,9 +507,6 @@ qla2x00_zio_show(struct class_device *cdev, char *buf)
        int len = 0;
 
        switch (ha->zio_mode) {
-       case QLA_ZIO_MODE_5:
-               len += snprintf(buf + len, PAGE_SIZE-len, "Mode 5\n");
-               break;
        case QLA_ZIO_MODE_6:
                len += snprintf(buf + len, PAGE_SIZE-len, "Mode 6\n");
                break;
@@ -527,20 +524,16 @@ qla2x00_zio_store(struct class_device *cdev, const char *buf, size_t count)
        int val = 0;
        uint16_t zio_mode;
 
+       if (!IS_ZIO_SUPPORTED(ha))
+               return -ENOTSUPP;
+
        if (sscanf(buf, "%d", &val) != 1)
                return -EINVAL;
 
-       switch (val) {
-       case 1:
-               zio_mode = QLA_ZIO_MODE_5;
-               break;
-       case 2:
+       if (val)
                zio_mode = QLA_ZIO_MODE_6;
-               break;
-       default:
+       else
                zio_mode = QLA_ZIO_DISABLED;
-               break;
-       }
 
        /* Update per-hba values and queue a reset. */
        if (zio_mode != QLA_ZIO_DISABLED || ha->zio_mode != QLA_ZIO_DISABLED) {
index 20798f9..53508f3 100644 (file)
@@ -762,7 +762,6 @@ typedef struct {
 #define PD_STATE_WAIT_PORT_LOGOUT_ACK          11
 
 
-#define QLA_ZIO_MODE_5         (BIT_2 | BIT_0)
 #define QLA_ZIO_MODE_6         (BIT_2 | BIT_1)
 #define QLA_ZIO_DISABLED       0
 #define QLA_ZIO_DEFAULT_TIMER  2
@@ -2238,6 +2237,7 @@ typedef struct scsi_qla_host {
 #define DT_ISP5432                     BIT_10
 #define DT_ISP_LAST                    (DT_ISP5432 << 1)
 
+#define DT_ZIO_SUPPORTED               BIT_28
 #define DT_OEM_001                     BIT_29
 #define DT_ISP2200A                    BIT_30
 #define DT_EXTENDED_IDS                        BIT_31
@@ -2260,6 +2260,7 @@ typedef struct scsi_qla_host {
 #define IS_QLA24XX(ha) (IS_QLA2422(ha) || IS_QLA2432(ha))
 #define IS_QLA54XX(ha) (IS_QLA5422(ha) || IS_QLA5432(ha))
 
+#define IS_ZIO_SUPPORTED(ha)   ((ha)->device_type & DT_ZIO_SUPPORTED)
 #define IS_OEM_001(ha)         ((ha)->device_type & DT_OEM_001)
 #define HAS_EXTENDED_IDS(ha)   ((ha)->device_type & DT_EXTENDED_IDS)
 
index 71b6bcc..ebc7c24 100644 (file)
@@ -1659,6 +1659,8 @@ qla2x00_nvram_config(scsi_qla_host_t *ha)
                    ~(BIT_3 | BIT_2 | BIT_1 | BIT_0);
                ha->flags.process_response_queue = 0;
                if (ha->zio_mode != QLA_ZIO_DISABLED) {
+                       ha->zio_mode = QLA_ZIO_MODE_6;
+
                        DEBUG2(printk("scsi(%ld): ZIO mode %d enabled; timer "
                            "delay (%d us).\n", ha->host_no, ha->zio_mode,
                            ha->zio_timer * 100));
@@ -3474,6 +3476,8 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
            ~(BIT_3 | BIT_2 | BIT_1 | BIT_0));
        ha->flags.process_response_queue = 0;
        if (ha->zio_mode != QLA_ZIO_DISABLED) {
+               ha->zio_mode = QLA_ZIO_MODE_6;
+
                DEBUG2(printk("scsi(%ld): ZIO mode %d enabled; timer delay "
                    "(%d us).\n", ha->host_no, ha->zio_mode,
                    ha->zio_timer * 100));
index 4dc08d9..0fc89ac 100644 (file)
@@ -1161,12 +1161,15 @@ qla2x00_set_isp_flags(scsi_qla_host_t *ha)
                break;
        case PCI_DEVICE_ID_QLOGIC_ISP2300:
                ha->device_type |= DT_ISP2300;
+               ha->device_type |= DT_ZIO_SUPPORTED;
                break;
        case PCI_DEVICE_ID_QLOGIC_ISP2312:
                ha->device_type |= DT_ISP2312;
+               ha->device_type |= DT_ZIO_SUPPORTED;
                break;
        case PCI_DEVICE_ID_QLOGIC_ISP2322:
                ha->device_type |= DT_ISP2322;
+               ha->device_type |= DT_ZIO_SUPPORTED;
                if (ha->pdev->subsystem_vendor == 0x1028 &&
                    ha->pdev->subsystem_device == 0x0170)
                        ha->device_type |= DT_OEM_001;
@@ -1179,9 +1182,11 @@ qla2x00_set_isp_flags(scsi_qla_host_t *ha)
                break;
        case PCI_DEVICE_ID_QLOGIC_ISP2422:
                ha->device_type |= DT_ISP2422;
+               ha->device_type |= DT_ZIO_SUPPORTED;
                break;
        case PCI_DEVICE_ID_QLOGIC_ISP2432:
                ha->device_type |= DT_ISP2432;
+               ha->device_type |= DT_ZIO_SUPPORTED;
                break;
        case PCI_DEVICE_ID_QLOGIC_ISP5422:
                ha->device_type |= DT_ISP5422;