qed: Notify of transciever changes
Handle a new message from the MFW, one that indicate that the transciever state has changed, and log that into the system logs. Signed-off-by: Zvi Nachmani <Zvi.Nachmani@qlogic.com> Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
5529bad98f
Коммит
334c03b59b
|
@ -3621,6 +3621,9 @@ struct public_port {
|
|||
u32 fc_npiv_nvram_tbl_addr;
|
||||
u32 fc_npiv_nvram_tbl_size;
|
||||
u32 transceiver_data;
|
||||
#define PMM_TRANSCEIVER_STATE_MASK 0x000000FF
|
||||
#define PMM_TRANSCEIVER_STATE_SHIFT 0x00000000
|
||||
#define PMM_TRANSCEIVER_STATE_PRESENT 0x00000001
|
||||
};
|
||||
|
||||
/**************************************/
|
||||
|
@ -3955,6 +3958,14 @@ enum MFW_DRV_MSG_TYPE {
|
|||
MFW_DRV_MSG_DCBX_REMOTE_MIB_UPDATED,
|
||||
MFW_DRV_MSG_DCBX_OPERATIONAL_MIB_UPDATED,
|
||||
MFW_DRV_MSG_ERROR_RECOVERY,
|
||||
MFW_DRV_MSG_BW_UPDATE,
|
||||
MFW_DRV_MSG_S_TAG_UPDATE,
|
||||
MFW_DRV_MSG_GET_LAN_STATS,
|
||||
MFW_DRV_MSG_GET_FCOE_STATS,
|
||||
MFW_DRV_MSG_GET_ISCSI_STATS,
|
||||
MFW_DRV_MSG_GET_RDMA_STATS,
|
||||
MFW_DRV_MSG_FAILURE_DETECTED,
|
||||
MFW_DRV_MSG_TRANSCEIVER_STATE_CHANGE,
|
||||
MFW_DRV_MSG_MAX
|
||||
};
|
||||
|
||||
|
|
|
@ -440,6 +440,33 @@ int qed_mcp_load_req(struct qed_hwfn *p_hwfn,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void qed_mcp_handle_transceiver_change(struct qed_hwfn *p_hwfn,
|
||||
struct qed_ptt *p_ptt)
|
||||
{
|
||||
u32 transceiver_state;
|
||||
|
||||
transceiver_state = qed_rd(p_hwfn, p_ptt,
|
||||
p_hwfn->mcp_info->port_addr +
|
||||
offsetof(struct public_port,
|
||||
transceiver_data));
|
||||
|
||||
DP_VERBOSE(p_hwfn,
|
||||
(NETIF_MSG_HW | QED_MSG_SP),
|
||||
"Received transceiver state update [0x%08x] from mfw [Addr 0x%x]\n",
|
||||
transceiver_state,
|
||||
(u32)(p_hwfn->mcp_info->port_addr +
|
||||
offsetof(struct public_port,
|
||||
transceiver_data)));
|
||||
|
||||
transceiver_state = GET_FIELD(transceiver_state,
|
||||
PMM_TRANSCEIVER_STATE);
|
||||
|
||||
if (transceiver_state == PMM_TRANSCEIVER_STATE_PRESENT)
|
||||
DP_NOTICE(p_hwfn, "Transceiver is present.\n");
|
||||
else
|
||||
DP_NOTICE(p_hwfn, "Transceiver is unplugged.\n");
|
||||
}
|
||||
|
||||
static void qed_mcp_handle_link_change(struct qed_hwfn *p_hwfn,
|
||||
struct qed_ptt *p_ptt,
|
||||
bool b_reset)
|
||||
|
@ -649,6 +676,9 @@ int qed_mcp_handle_events(struct qed_hwfn *p_hwfn,
|
|||
case MFW_DRV_MSG_LINK_CHANGE:
|
||||
qed_mcp_handle_link_change(p_hwfn, p_ptt, false);
|
||||
break;
|
||||
case MFW_DRV_MSG_TRANSCEIVER_STATE_CHANGE:
|
||||
qed_mcp_handle_transceiver_change(p_hwfn, p_ptt);
|
||||
break;
|
||||
default:
|
||||
DP_NOTICE(p_hwfn, "Unimplemented MFW message %d\n", i);
|
||||
rc = -EINVAL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче