diff options
author | James Smart <james.smart@emulex.com> | 2011-12-13 13:21:35 -0500 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2011-12-15 01:57:44 -0500 |
commit | ff78d8f97c85a568c0799b06137a4171db45b923 (patch) | |
tree | f5bb5d1875075175075c0beb09d770073dd82612 /drivers/scsi/lpfc/lpfc_attr.c | |
parent | 026abb87a5586c838a47aca7198d78e356b6351e (diff) |
[SCSI] lpfc 8.3.28: SLI fixes and added SLI4 support
Adapter (SLI) interface fixes:
- Modify WQ handling to use entry_repost (CR 123981)
- Fix for ABTS. Do not free original IOCB whenever ABTS fails. (CR 115829)
- Check board for FCoE before reading FCoE paramaters (CR124731)
- Add support for SLI4 FC Loop mode (CR 124721)
- Add support for resource count changes during fw reset. (CR 125888, 125675)
- Increase CQE count from 256 to 1024. (CR 126149)
Signed-off-by: Alex Iannicelli <alex.iannicelli@emulex.com>
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_attr.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_attr.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c index 7bf492e156d..f6697cb0e21 100644 --- a/drivers/scsi/lpfc/lpfc_attr.c +++ b/drivers/scsi/lpfc/lpfc_attr.c | |||
@@ -2777,6 +2777,14 @@ lpfc_topology_store(struct device *dev, struct device_attribute *attr, | |||
2777 | if (val >= 0 && val <= 6) { | 2777 | if (val >= 0 && val <= 6) { |
2778 | prev_val = phba->cfg_topology; | 2778 | prev_val = phba->cfg_topology; |
2779 | phba->cfg_topology = val; | 2779 | phba->cfg_topology = val; |
2780 | if (phba->cfg_link_speed == LPFC_USER_LINK_SPEED_16G && | ||
2781 | val == 4) { | ||
2782 | lpfc_printf_vlog(vport, KERN_ERR, LOG_INIT, | ||
2783 | "3113 Loop mode not supported at speed %d\n", | ||
2784 | phba->cfg_link_speed); | ||
2785 | phba->cfg_topology = prev_val; | ||
2786 | return -EINVAL; | ||
2787 | } | ||
2780 | if (nolip) | 2788 | if (nolip) |
2781 | return strlen(buf); | 2789 | return strlen(buf); |
2782 | 2790 | ||
@@ -3222,6 +3230,14 @@ lpfc_link_speed_store(struct device *dev, struct device_attribute *attr, | |||
3222 | val); | 3230 | val); |
3223 | return -EINVAL; | 3231 | return -EINVAL; |
3224 | } | 3232 | } |
3233 | if (val == LPFC_USER_LINK_SPEED_16G && | ||
3234 | phba->fc_topology == LPFC_TOPOLOGY_LOOP) { | ||
3235 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | ||
3236 | "3112 lpfc_link_speed attribute cannot be set " | ||
3237 | "to %d. Speed is not supported in loop mode.\n", | ||
3238 | val); | ||
3239 | return -EINVAL; | ||
3240 | } | ||
3225 | if ((val >= 0) && (val <= LPFC_USER_LINK_SPEED_MAX) && | 3241 | if ((val >= 0) && (val <= LPFC_USER_LINK_SPEED_MAX) && |
3226 | (LPFC_USER_LINK_SPEED_BITMAP & (1 << val))) { | 3242 | (LPFC_USER_LINK_SPEED_BITMAP & (1 << val))) { |
3227 | prev_val = phba->cfg_link_speed; | 3243 | prev_val = phba->cfg_link_speed; |
@@ -3266,6 +3282,13 @@ lpfc_param_show(link_speed) | |||
3266 | static int | 3282 | static int |
3267 | lpfc_link_speed_init(struct lpfc_hba *phba, int val) | 3283 | lpfc_link_speed_init(struct lpfc_hba *phba, int val) |
3268 | { | 3284 | { |
3285 | if (val == LPFC_USER_LINK_SPEED_16G && phba->cfg_topology == 4) { | ||
3286 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | ||
3287 | "3111 lpfc_link_speed of %d cannot " | ||
3288 | "support loop mode, setting topology to default.\n", | ||
3289 | val); | ||
3290 | phba->cfg_topology = 0; | ||
3291 | } | ||
3269 | if ((val >= 0) && (val <= LPFC_USER_LINK_SPEED_MAX) && | 3292 | if ((val >= 0) && (val <= LPFC_USER_LINK_SPEED_MAX) && |
3270 | (LPFC_USER_LINK_SPEED_BITMAP & (1 << val))) { | 3293 | (LPFC_USER_LINK_SPEED_BITMAP & (1 << val))) { |
3271 | phba->cfg_link_speed = val; | 3294 | phba->cfg_link_speed = val; |