diff options
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_init.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index a6d2559217cd..c619583e646b 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -88,6 +88,7 @@ qla2x00_initialize_adapter(scsi_qla_host_t *ha) | |||
88 | ha->mbx_flags = 0; | 88 | ha->mbx_flags = 0; |
89 | ha->isp_abort_cnt = 0; | 89 | ha->isp_abort_cnt = 0; |
90 | ha->beacon_blink_led = 0; | 90 | ha->beacon_blink_led = 0; |
91 | set_bit(REGISTER_FDMI_NEEDED, &ha->dpc_flags); | ||
91 | 92 | ||
92 | qla_printk(KERN_INFO, ha, "Configuring PCI space...\n"); | 93 | qla_printk(KERN_INFO, ha, "Configuring PCI space...\n"); |
93 | rval = ha->isp_ops.pci_config(ha); | 94 | rval = ha->isp_ops.pci_config(ha); |
@@ -1563,7 +1564,7 @@ qla2x00_nvram_config(scsi_qla_host_t *ha) | |||
1563 | ha->flags.enable_lip_reset = ((nv->host_p[1] & BIT_1) ? 1 : 0); | 1564 | ha->flags.enable_lip_reset = ((nv->host_p[1] & BIT_1) ? 1 : 0); |
1564 | ha->flags.enable_lip_full_login = ((nv->host_p[1] & BIT_2) ? 1 : 0); | 1565 | ha->flags.enable_lip_full_login = ((nv->host_p[1] & BIT_2) ? 1 : 0); |
1565 | ha->flags.enable_target_reset = ((nv->host_p[1] & BIT_3) ? 1 : 0); | 1566 | ha->flags.enable_target_reset = ((nv->host_p[1] & BIT_3) ? 1 : 0); |
1566 | ha->flags.enable_led_scheme = ((nv->efi_parameters & BIT_3) ? 1 : 0); | 1567 | ha->flags.enable_led_scheme = (nv->special_options[1] & BIT_4) ? 1 : 0; |
1567 | 1568 | ||
1568 | ha->operating_mode = | 1569 | ha->operating_mode = |
1569 | (icb->add_firmware_options[0] & (BIT_6 | BIT_5 | BIT_4)) >> 4; | 1570 | (icb->add_firmware_options[0] & (BIT_6 | BIT_5 | BIT_4)) >> 4; |
@@ -1697,6 +1698,7 @@ qla2x00_alloc_fcport(scsi_qla_host_t *ha, int flags) | |||
1697 | fcport->iodesc_idx_sent = IODESC_INVALID_INDEX; | 1698 | fcport->iodesc_idx_sent = IODESC_INVALID_INDEX; |
1698 | atomic_set(&fcport->state, FCS_UNCONFIGURED); | 1699 | atomic_set(&fcport->state, FCS_UNCONFIGURED); |
1699 | fcport->flags = FCF_RLC_SUPPORT; | 1700 | fcport->flags = FCF_RLC_SUPPORT; |
1701 | fcport->supported_classes = FC_COS_UNSPECIFIED; | ||
1700 | 1702 | ||
1701 | return (fcport); | 1703 | return (fcport); |
1702 | } | 1704 | } |
@@ -1898,7 +1900,8 @@ qla2x00_configure_local_loop(scsi_qla_host_t *ha) | |||
1898 | continue; | 1900 | continue; |
1899 | 1901 | ||
1900 | /* Bypass if not same domain and area of adapter. */ | 1902 | /* Bypass if not same domain and area of adapter. */ |
1901 | if (area != ha->d_id.b.area || domain != ha->d_id.b.domain) | 1903 | if (area && domain && |
1904 | (area != ha->d_id.b.area || domain != ha->d_id.b.domain)) | ||
1902 | continue; | 1905 | continue; |
1903 | 1906 | ||
1904 | /* Bypass invalid local loop ID. */ | 1907 | /* Bypass invalid local loop ID. */ |
@@ -2075,6 +2078,7 @@ qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
2075 | return; | 2078 | return; |
2076 | } | 2079 | } |
2077 | rport->dd_data = fcport; | 2080 | rport->dd_data = fcport; |
2081 | rport->supported_classes = fcport->supported_classes; | ||
2078 | 2082 | ||
2079 | rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; | 2083 | rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; |
2080 | if (fcport->port_type == FCT_INITIATOR) | 2084 | if (fcport->port_type == FCT_INITIATOR) |
@@ -2130,6 +2134,11 @@ qla2x00_configure_fabric(scsi_qla_host_t *ha) | |||
2130 | return (QLA_SUCCESS); | 2134 | return (QLA_SUCCESS); |
2131 | } | 2135 | } |
2132 | do { | 2136 | do { |
2137 | /* FDMI support. */ | ||
2138 | if (ql2xfdmienable && | ||
2139 | test_and_clear_bit(REGISTER_FDMI_NEEDED, &ha->dpc_flags)) | ||
2140 | qla2x00_fdmi_register(ha); | ||
2141 | |||
2133 | /* Ensure we are logged into the SNS. */ | 2142 | /* Ensure we are logged into the SNS. */ |
2134 | if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) | 2143 | if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) |
2135 | loop_id = NPH_SNS; | 2144 | loop_id = NPH_SNS; |
@@ -2392,6 +2401,12 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha, struct list_head *new_fcports) | |||
2392 | if (new_fcport->d_id.b24 == ha->d_id.b24) | 2401 | if (new_fcport->d_id.b24 == ha->d_id.b24) |
2393 | continue; | 2402 | continue; |
2394 | 2403 | ||
2404 | /* Bypass if same domain and area of adapter. */ | ||
2405 | if (((new_fcport->d_id.b24 & 0xffff00) == | ||
2406 | (ha->d_id.b24 & 0xffff00)) && ha->current_topology == | ||
2407 | ISP_CFG_FL) | ||
2408 | continue; | ||
2409 | |||
2395 | /* Bypass reserved domain fields. */ | 2410 | /* Bypass reserved domain fields. */ |
2396 | if ((new_fcport->d_id.b.domain & 0xf0) == 0xf0) | 2411 | if ((new_fcport->d_id.b.domain & 0xf0) == 0xf0) |
2397 | continue; | 2412 | continue; |
@@ -2794,6 +2809,11 @@ qla2x00_fabric_login(scsi_qla_host_t *ha, fc_port_t *fcport, | |||
2794 | } | 2809 | } |
2795 | } | 2810 | } |
2796 | 2811 | ||
2812 | if (mb[10] & BIT_0) | ||
2813 | fcport->supported_classes |= FC_COS_CLASS2; | ||
2814 | if (mb[10] & BIT_1) | ||
2815 | fcport->supported_classes |= FC_COS_CLASS3; | ||
2816 | |||
2797 | rval = QLA_SUCCESS; | 2817 | rval = QLA_SUCCESS; |
2798 | break; | 2818 | break; |
2799 | } else if (mb[0] == MBS_LOOP_ID_USED) { | 2819 | } else if (mb[0] == MBS_LOOP_ID_USED) { |