diff options
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_attr.c | 4 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 1 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 7 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 14 |
4 files changed, 26 insertions, 0 deletions
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 659a5d63467d..d05280eecc60 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
@@ -304,10 +304,13 @@ struct fc_function_template qla2xxx_transport_functions = { | |||
304 | 304 | ||
305 | .show_host_node_name = 1, | 305 | .show_host_node_name = 1, |
306 | .show_host_port_name = 1, | 306 | .show_host_port_name = 1, |
307 | .show_host_supported_classes = 1, | ||
308 | |||
307 | .get_host_port_id = qla2x00_get_host_port_id, | 309 | .get_host_port_id = qla2x00_get_host_port_id, |
308 | .show_host_port_id = 1, | 310 | .show_host_port_id = 1, |
309 | 311 | ||
310 | .dd_fcrport_size = sizeof(struct fc_port *), | 312 | .dd_fcrport_size = sizeof(struct fc_port *), |
313 | .show_rport_supported_classes = 1, | ||
311 | 314 | ||
312 | .get_starget_node_name = qla2x00_get_starget_node_name, | 315 | .get_starget_node_name = qla2x00_get_starget_node_name, |
313 | .show_starget_node_name = 1, | 316 | .show_starget_node_name = 1, |
@@ -329,4 +332,5 @@ qla2x00_init_host_attr(scsi_qla_host_t *ha) | |||
329 | be64_to_cpu(*(uint64_t *)ha->init_cb->node_name); | 332 | be64_to_cpu(*(uint64_t *)ha->init_cb->node_name); |
330 | fc_host_port_name(ha->host) = | 333 | fc_host_port_name(ha->host) = |
331 | be64_to_cpu(*(uint64_t *)ha->init_cb->port_name); | 334 | be64_to_cpu(*(uint64_t *)ha->init_cb->port_name); |
335 | fc_host_supported_classes(ha->host) = FC_COS_CLASS3; | ||
332 | } | 336 | } |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 1c6d366f4fad..38848c38ad8d 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
@@ -1673,6 +1673,7 @@ typedef struct fc_port { | |||
1673 | uint8_t cur_path; /* current path id */ | 1673 | uint8_t cur_path; /* current path id */ |
1674 | 1674 | ||
1675 | struct fc_rport *rport; | 1675 | struct fc_rport *rport; |
1676 | u32 supported_classes; | ||
1676 | } fc_port_t; | 1677 | } fc_port_t; |
1677 | 1678 | ||
1678 | /* | 1679 | /* |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index a6d2559217cd..09b23f70fd66 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -1697,6 +1697,7 @@ qla2x00_alloc_fcport(scsi_qla_host_t *ha, int flags) | |||
1697 | fcport->iodesc_idx_sent = IODESC_INVALID_INDEX; | 1697 | fcport->iodesc_idx_sent = IODESC_INVALID_INDEX; |
1698 | atomic_set(&fcport->state, FCS_UNCONFIGURED); | 1698 | atomic_set(&fcport->state, FCS_UNCONFIGURED); |
1699 | fcport->flags = FCF_RLC_SUPPORT; | 1699 | fcport->flags = FCF_RLC_SUPPORT; |
1700 | fcport->supported_classes = FC_COS_UNSPECIFIED; | ||
1700 | 1701 | ||
1701 | return (fcport); | 1702 | return (fcport); |
1702 | } | 1703 | } |
@@ -2075,6 +2076,7 @@ qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
2075 | return; | 2076 | return; |
2076 | } | 2077 | } |
2077 | rport->dd_data = fcport; | 2078 | rport->dd_data = fcport; |
2079 | rport->supported_classes = fcport->supported_classes; | ||
2078 | 2080 | ||
2079 | rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; | 2081 | rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; |
2080 | if (fcport->port_type == FCT_INITIATOR) | 2082 | if (fcport->port_type == FCT_INITIATOR) |
@@ -2794,6 +2796,11 @@ qla2x00_fabric_login(scsi_qla_host_t *ha, fc_port_t *fcport, | |||
2794 | } | 2796 | } |
2795 | } | 2797 | } |
2796 | 2798 | ||
2799 | if (mb[10] & BIT_0) | ||
2800 | fcport->supported_classes |= FC_COS_CLASS2; | ||
2801 | if (mb[10] & BIT_1) | ||
2802 | fcport->supported_classes |= FC_COS_CLASS3; | ||
2803 | |||
2797 | rval = QLA_SUCCESS; | 2804 | rval = QLA_SUCCESS; |
2798 | break; | 2805 | break; |
2799 | } else if (mb[0] == MBS_LOOP_ID_USED) { | 2806 | } else if (mb[0] == MBS_LOOP_ID_USED) { |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 409ea0ac4032..774309a77c05 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include "qla_def.h" | 19 | #include "qla_def.h" |
20 | 20 | ||
21 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
22 | #include <scsi/scsi_transport_fc.h> | ||
22 | 23 | ||
23 | static void | 24 | static void |
24 | qla2x00_mbx_sem_timeout(unsigned long data) | 25 | qla2x00_mbx_sem_timeout(unsigned long data) |
@@ -1326,6 +1327,10 @@ qla2x00_get_port_database(scsi_qla_host_t *ha, fc_port_t *fcport, uint8_t opt) | |||
1326 | fcport->port_type = FCT_INITIATOR; | 1327 | fcport->port_type = FCT_INITIATOR; |
1327 | else | 1328 | else |
1328 | fcport->port_type = FCT_TARGET; | 1329 | fcport->port_type = FCT_TARGET; |
1330 | |||
1331 | /* Passback COS information. */ | ||
1332 | fcport->supported_classes = (pd->options & BIT_4) ? | ||
1333 | FC_COS_CLASS2: FC_COS_CLASS3; | ||
1329 | } | 1334 | } |
1330 | 1335 | ||
1331 | gpd_error_out: | 1336 | gpd_error_out: |
@@ -1661,6 +1666,13 @@ qla24xx_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain, | |||
1661 | mb[1] |= BIT_1; | 1666 | mb[1] |= BIT_1; |
1662 | } else | 1667 | } else |
1663 | mb[1] = BIT_0; | 1668 | mb[1] = BIT_0; |
1669 | |||
1670 | /* Passback COS information. */ | ||
1671 | mb[10] = 0; | ||
1672 | if (lg->io_parameter[7] || lg->io_parameter[8]) | ||
1673 | mb[10] |= BIT_0; /* Class 2. */ | ||
1674 | if (lg->io_parameter[9] || lg->io_parameter[10]) | ||
1675 | mb[10] |= BIT_1; /* Class 3. */ | ||
1664 | } | 1676 | } |
1665 | 1677 | ||
1666 | dma_pool_free(ha->s_dma_pool, lg, lg_dma); | 1678 | dma_pool_free(ha->s_dma_pool, lg, lg_dma); |
@@ -1723,6 +1735,8 @@ qla2x00_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain, | |||
1723 | mb[2] = mcp->mb[2]; | 1735 | mb[2] = mcp->mb[2]; |
1724 | mb[6] = mcp->mb[6]; | 1736 | mb[6] = mcp->mb[6]; |
1725 | mb[7] = mcp->mb[7]; | 1737 | mb[7] = mcp->mb[7]; |
1738 | /* COS retrieved from Get-Port-Database mailbox command. */ | ||
1739 | mb[10] = 0; | ||
1726 | } | 1740 | } |
1727 | 1741 | ||
1728 | if (rval != QLA_SUCCESS) { | 1742 | if (rval != QLA_SUCCESS) { |