Display Logical Link Speed when supported and is non-zero.
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
 #define LPFC_ASYNC_LINK_FAULT_NONE     0x0
 #define LPFC_ASYNC_LINK_FAULT_LOCAL    0x1
 #define LPFC_ASYNC_LINK_FAULT_REMOTE   0x2
+#define lpfc_acqe_qos_link_speed_SHIFT 16
+#define lpfc_acqe_qos_link_speed_MASK  0x0000FFFF
+#define lpfc_acqe_qos_link_speed_WORD  word1
        uint32_t event_tag;
        uint32_t trailer;
 };
 
                                bf_get(lpfc_acqe_link_physical, acqe_link);
        phba->sli4_hba.link_state.fault =
                                bf_get(lpfc_acqe_link_fault, acqe_link);
+       phba->sli4_hba.link_state.logical_speed =
+                               bf_get(lpfc_acqe_qos_link_speed, acqe_link);
 
        /* Invoke the lpfc_handle_latt mailbox command callback function */
        lpfc_mbx_cmpl_read_la(phba, pmb);
 
                                 " port %s",
                                 phba->Port);
                }
+               len = strlen(lpfcinfobuf);
+               if (phba->sli4_hba.link_state.logical_speed) {
+                       snprintf(lpfcinfobuf + len,
+                                384-len,
+                                " Logical Link Speed: %d Mbps",
+                                phba->sli4_hba.link_state.logical_speed * 10);
+               }
        }
        return lpfcinfobuf;
 }
 
        uint8_t status;
        uint8_t physical;
        uint8_t fault;
+       uint16_t logical_speed;
 };
 
 struct lpfc_fcf {