MFC r291588
sfxge: add function to query link control privilege Make link control privilege visible to OS driver to guard updates to flow control and PHY advertised capabilities. Submitted by: Richard Houldsworth <rhouldsworth at solarflare.com> Sponsored by: Solarflare Communications, Inc.
This commit is contained in:
parent
a0ef5238d3
commit
00551531b2
@ -462,6 +462,7 @@ typedef struct efx_mcdi_ops_s {
|
||||
void (*emco_fini)(efx_nic_t *);
|
||||
efx_rc_t (*emco_fw_update_supported)(efx_nic_t *, boolean_t *);
|
||||
efx_rc_t (*emco_macaddr_change_supported)(efx_nic_t *, boolean_t *);
|
||||
efx_rc_t (*emco_link_control_supported)(efx_nic_t *, boolean_t *);
|
||||
} efx_mcdi_ops_t;
|
||||
|
||||
typedef struct efx_mcdi_s {
|
||||
|
@ -53,6 +53,8 @@ static efx_mcdi_ops_t __efx_mcdi_siena_ops = {
|
||||
siena_mcdi_fw_update_supported, /* emco_fw_update_supported */
|
||||
siena_mcdi_macaddr_change_supported,
|
||||
/* emco_macaddr_change_supported */
|
||||
siena_mcdi_link_control_supported,
|
||||
/* emco_link_control_supported */
|
||||
};
|
||||
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
@ -69,6 +71,8 @@ static efx_mcdi_ops_t __efx_mcdi_hunt_ops = {
|
||||
hunt_mcdi_fw_update_supported, /* emco_fw_update_supported */
|
||||
hunt_mcdi_macaddr_change_supported,
|
||||
/* emco_macaddr_change_supported */
|
||||
hunt_mcdi_link_control_supported,
|
||||
/* emco_link_control_supported */
|
||||
};
|
||||
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
@ -1163,6 +1167,31 @@ efx_mcdi_macaddr_change_supported(
|
||||
|
||||
return (0);
|
||||
|
||||
fail1:
|
||||
EFSYS_PROBE1(fail1, efx_rc_t, rc);
|
||||
|
||||
return (rc);
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_mcdi_link_control_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp)
|
||||
{
|
||||
efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop;
|
||||
efx_rc_t rc;
|
||||
|
||||
if (emcop != NULL && emcop->emco_link_control_supported != NULL) {
|
||||
if ((rc = emcop->emco_link_control_supported(enp, supportedp))
|
||||
!= 0)
|
||||
goto fail1;
|
||||
} else {
|
||||
/* Earlier devices always supported link control */
|
||||
*supportedp = B_TRUE;
|
||||
}
|
||||
|
||||
return (0);
|
||||
|
||||
fail1:
|
||||
EFSYS_PROBE1(fail1, efx_rc_t, rc);
|
||||
|
||||
|
@ -151,6 +151,11 @@ efx_mcdi_macaddr_change_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_mcdi_link_control_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp);
|
||||
|
||||
#if EFSYS_OPT_BIST
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
extern __checkReturn efx_rc_t
|
||||
|
@ -286,6 +286,11 @@ hunt_mcdi_macaddr_change_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_mcdi_link_control_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp);
|
||||
|
||||
#endif /* EFSYS_OPT_MCDI */
|
||||
|
||||
/* NVRAM */
|
||||
|
@ -471,6 +471,30 @@ hunt_mcdi_macaddr_change_supported(
|
||||
return (0);
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_mcdi_link_control_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp)
|
||||
{
|
||||
efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
|
||||
uint32_t privilege_mask = encp->enc_privilege_mask;
|
||||
|
||||
EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_HUNTINGTON);
|
||||
|
||||
/*
|
||||
* Use privilege mask state at MCDI attach.
|
||||
* Admin privilege used prior to introduction of
|
||||
* specific flag.
|
||||
*/
|
||||
*supportedp =
|
||||
((privilege_mask & MC_CMD_PRIVILEGE_MASK_IN_GRP_LINK) ==
|
||||
MC_CMD_PRIVILEGE_MASK_IN_GRP_LINK) ||
|
||||
((privilege_mask & MC_CMD_PRIVILEGE_MASK_IN_GRP_ADMIN) ==
|
||||
MC_CMD_PRIVILEGE_MASK_IN_GRP_ADMIN);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#endif /* EFSYS_OPT_MCDI */
|
||||
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
@ -148,6 +148,11 @@ siena_mcdi_macaddr_change_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
siena_mcdi_link_control_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp);
|
||||
|
||||
#endif /* EFSYS_OPT_MCDI */
|
||||
|
||||
#if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
|
||||
|
@ -351,4 +351,16 @@ siena_mcdi_macaddr_change_supported(
|
||||
return (0);
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
siena_mcdi_link_control_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__out boolean_t *supportedp)
|
||||
{
|
||||
EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_SIENA);
|
||||
|
||||
*supportedp = B_TRUE;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#endif /* EFSYS_OPT_SIENA && EFSYS_OPT_MCDI */
|
||||
|
Loading…
x
Reference in New Issue
Block a user