svn commit: r293959 - stable/10/sys/dev/sfxge/common
Andrew Rybchenko
arybchik at FreeBSD.org
Thu Jan 14 15:24:17 UTC 2016
Author: arybchik
Date: Thu Jan 14 15:24:15 2016
New Revision: 293959
URL: https://svnweb.freebsd.org/changeset/base/293959
Log:
MFC r291928
sfxge: [2/6] rework MCDI response polling
Required to support MCDI proxy authorization.
Submitted by: Andy Moreton <amoreton at solarflare.com>
Reviewed by: gnn
Sponsored by: Solarflare Communications, Inc.
Modified:
stable/10/sys/dev/sfxge/common/efx_mcdi.c
stable/10/sys/dev/sfxge/common/hunt_mcdi.c
stable/10/sys/dev/sfxge/common/siena_mcdi.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/dev/sfxge/common/efx_mcdi.c
==============================================================================
--- stable/10/sys/dev/sfxge/common/efx_mcdi.c Thu Jan 14 15:23:23 2016 (r293958)
+++ stable/10/sys/dev/sfxge/common/efx_mcdi.c Thu Jan 14 15:24:15 2016 (r293959)
@@ -52,9 +52,9 @@ static efx_mcdi_ops_t __efx_mcdi_siena_o
siena_mcdi_fini, /* emco_fini */
siena_mcdi_fw_update_supported, /* emco_fw_update_supported */
siena_mcdi_macaddr_change_supported,
- /* emco_macaddr_change_supported */
+ /* emco_macaddr_change_supported */
siena_mcdi_link_control_supported,
- /* emco_link_control_supported */
+ /* emco_link_control_supported */
};
#endif /* EFSYS_OPT_SIENA */
@@ -70,9 +70,9 @@ static efx_mcdi_ops_t __efx_mcdi_hunt_op
hunt_mcdi_fini, /* emco_fini */
hunt_mcdi_fw_update_supported, /* emco_fw_update_supported */
hunt_mcdi_macaddr_change_supported,
- /* emco_macaddr_change_supported */
+ /* emco_macaddr_change_supported */
hunt_mcdi_link_control_supported,
- /* emco_link_control_supported */
+ /* emco_link_control_supported */
};
#endif /* EFSYS_OPT_HUNTINGTON */
Modified: stable/10/sys/dev/sfxge/common/hunt_mcdi.c
==============================================================================
--- stable/10/sys/dev/sfxge/common/hunt_mcdi.c Thu Jan 14 15:23:23 2016 (r293958)
+++ stable/10/sys/dev/sfxge/common/hunt_mcdi.c Thu Jan 14 15:24:15 2016 (r293959)
@@ -274,6 +274,18 @@ hunt_mcdi_request_copyout(
#endif /* EFSYS_OPT_MCDI_LOGGING */
}
+static __checkReturn boolean_t
+hunt_mcdi_poll_response(
+ __in efx_nic_t *enp)
+{
+ const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp;
+ efsys_mem_t *esmp = emtp->emt_dma_mem;
+ efx_dword_t hdr;
+
+ EFSYS_MEM_READD(esmp, 0, &hdr);
+ return (EFX_DWORD_FIELD(hdr, MCDI_HEADER_RESPONSE) ? B_TRUE : B_FALSE);
+}
+
__checkReturn boolean_t
hunt_mcdi_request_poll(
__in efx_nic_t *enp)
@@ -301,13 +313,15 @@ hunt_mcdi_request_poll(
offset = 0;
- /* Read the command header */
- EFSYS_MEM_READD(esmp, offset, &hdr[0]);
- offset += sizeof (efx_dword_t);
- if (EFX_DWORD_FIELD(hdr[0], MCDI_HEADER_RESPONSE) == 0) {
+ /* Check if a response is available */
+ if (hunt_mcdi_poll_response(enp) == B_FALSE) {
EFSYS_UNLOCK(enp->en_eslp, state);
return (B_FALSE);
}
+
+ /* Read the response header */
+ EFSYS_MEM_READD(esmp, offset, &hdr[0]);
+ offset += sizeof (efx_dword_t);
if (EFX_DWORD_FIELD(hdr[0], MCDI_HEADER_CODE) == MC_CMD_V2_EXTN) {
EFSYS_MEM_READD(esmp, offset, &hdr[1]);
offset += sizeof (efx_dword_t);
Modified: stable/10/sys/dev/sfxge/common/siena_mcdi.c
==============================================================================
--- stable/10/sys/dev/sfxge/common/siena_mcdi.c Thu Jan 14 15:23:23 2016 (r293958)
+++ stable/10/sys/dev/sfxge/common/siena_mcdi.c Thu Jan 14 15:24:15 2016 (r293959)
@@ -191,6 +191,21 @@ siena_mcdi_poll_reboot(
#endif
}
+static __checkReturn boolean_t
+siena_mcdi_poll_response(
+ __in efx_nic_t *enp)
+{
+ efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip);
+ efx_dword_t hdr;
+ unsigned int pdur;
+
+ EFSYS_ASSERT(emip->emi_port == 1 || emip->emi_port == 2);
+ pdur = SIENA_MCDI_PDU(emip);
+
+ EFX_BAR_TBL_READD(enp, FR_CZ_MC_TREG_SMEM, pdur, &hdr, B_FALSE);
+ return (EFX_DWORD_FIELD(hdr, MCDI_HEADER_RESPONSE) ? B_TRUE : B_FALSE);
+}
+
__checkReturn boolean_t
siena_mcdi_request_poll(
__in efx_nic_t *enp)
@@ -229,13 +244,15 @@ siena_mcdi_request_poll(
EFSYS_ASSERT(emip->emi_port == 1 || emip->emi_port == 2);
pdur = SIENA_MCDI_PDU(emip);
- /* Read the command header */
- EFX_BAR_TBL_READD(enp, FR_CZ_MC_TREG_SMEM, pdur, &hdr, B_FALSE);
- if (EFX_DWORD_FIELD(hdr, MCDI_HEADER_RESPONSE) == 0) {
+ /* Check if a response is available */
+ if (siena_mcdi_poll_response(enp) == B_FALSE) {
EFSYS_UNLOCK(enp->en_eslp, state);
return (B_FALSE);
}
+ /* Read the response header */
+ EFX_BAR_TBL_READD(enp, FR_CZ_MC_TREG_SMEM, pdur, &hdr, B_FALSE);
+
/* Request complete */
emip->emi_pending_req = NULL;
seq = (emip->emi_seq - 1) & EFX_MASK32(MCDI_HEADER_SEQ);
More information about the svn-src-stable
mailing list