Date: Thu, 14 Jan 2016 15:33:51 +0000 (UTC) From: Andrew Rybchenko <arybchik@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r293969 - stable/10/sys/dev/sfxge/common Message-ID: <201601141533.u0EFXppN046316@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: arybchik Date: Thu Jan 14 15:33:50 2016 New Revision: 293969 URL: https://svnweb.freebsd.org/changeset/base/293969 Log: MFC r292055 sfxge: consolidate privilege check functions To reduce code duplication in common code, consolidate similar privilege check functions. Submitted by: Richard Houldsworth <rhouldsworth at solarflare.com> Reviewed by: gnn Sponsored by: Solarflare Communications, Inc. Modified: stable/10/sys/dev/sfxge/common/efx_impl.h stable/10/sys/dev/sfxge/common/efx_mcdi.c stable/10/sys/dev/sfxge/common/efx_mcdi.h stable/10/sys/dev/sfxge/common/hunt_impl.h stable/10/sys/dev/sfxge/common/hunt_mcdi.c stable/10/sys/dev/sfxge/common/siena_impl.h stable/10/sys/dev/sfxge/common/siena_mcdi.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sfxge/common/efx_impl.h ============================================================================== --- stable/10/sys/dev/sfxge/common/efx_impl.h Thu Jan 14 15:33:13 2016 (r293968) +++ stable/10/sys/dev/sfxge/common/efx_impl.h Thu Jan 14 15:33:50 2016 (r293969) @@ -460,10 +460,7 @@ typedef struct efx_mcdi_ops_s { void (*emco_request_copyout)(efx_nic_t *, efx_mcdi_req_t *); efx_rc_t (*emco_poll_reboot)(efx_nic_t *); 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_rc_t (*emco_mac_spoofing_supported)(efx_nic_t *, boolean_t *); + efx_rc_t (*emco_feature_supported)(efx_nic_t *, efx_mcdi_feature_id_t, boolean_t *); void (*emco_read_response)(efx_nic_t *, void *, size_t, size_t); } efx_mcdi_ops_t; Modified: stable/10/sys/dev/sfxge/common/efx_mcdi.c ============================================================================== --- stable/10/sys/dev/sfxge/common/efx_mcdi.c Thu Jan 14 15:33:13 2016 (r293968) +++ stable/10/sys/dev/sfxge/common/efx_mcdi.c Thu Jan 14 15:33:50 2016 (r293969) @@ -50,12 +50,7 @@ static efx_mcdi_ops_t __efx_mcdi_siena_o siena_mcdi_request_copyout, /* emco_request_copyout */ siena_mcdi_poll_reboot, /* emco_poll_reboot */ siena_mcdi_fini, /* emco_fini */ - 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 */ - NULL, /* emco_mac_spoofing_supported */ + siena_mcdi_feature_supported, /* emco_feature_supported */ siena_mcdi_read_response, /* emco_read_response */ }; @@ -70,13 +65,7 @@ static efx_mcdi_ops_t __efx_mcdi_hunt_op hunt_mcdi_request_copyout, /* emco_request_copyout */ hunt_mcdi_poll_reboot, /* emco_poll_reboot */ hunt_mcdi_fini, /* emco_fini */ - 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 */ - hunt_mcdi_mac_spoofing_supported, - /* emco_mac_spoofing_supported */ + hunt_mcdi_feature_supported, /* emco_feature_supported */ hunt_mcdi_read_response, /* emco_read_response */ }; @@ -1316,7 +1305,6 @@ fail1: return (rc); } - __checkReturn efx_rc_t efx_mcdi_firmware_update_supported( __in efx_nic_t *enp, @@ -1325,9 +1313,9 @@ efx_mcdi_firmware_update_supported( efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; efx_rc_t rc; - if (emcop != NULL && emcop->emco_fw_update_supported != NULL) { - if ((rc = emcop->emco_fw_update_supported(enp, supportedp)) - != 0) + if (emcop != NULL) { + if ((rc = emcop->emco_feature_supported(enp, + EFX_MCDI_FEATURE_FW_UPDATE, supportedp)) != 0) goto fail1; } else { /* Earlier devices always supported updates */ @@ -1350,9 +1338,9 @@ efx_mcdi_macaddr_change_supported( efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; efx_rc_t rc; - if (emcop != NULL && emcop->emco_macaddr_change_supported != NULL) { - if ((rc = emcop->emco_macaddr_change_supported(enp, supportedp)) - != 0) + if (emcop != NULL) { + if ((rc = emcop->emco_feature_supported(enp, + EFX_MCDI_FEATURE_MACADDR_CHANGE, supportedp)) != 0) goto fail1; } else { /* Earlier devices always supported MAC changes */ @@ -1375,9 +1363,9 @@ efx_mcdi_link_control_supported( 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) + if (emcop != NULL) { + if ((rc = emcop->emco_feature_supported(enp, + EFX_MCDI_FEATURE_LINK_CONTROL, supportedp)) != 0) goto fail1; } else { /* Earlier devices always supported link control */ @@ -1400,9 +1388,9 @@ efx_mcdi_mac_spoofing_supported( efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; efx_rc_t rc; - if (emcop != NULL && emcop->emco_mac_spoofing_supported != NULL) { - if ((rc = emcop->emco_mac_spoofing_supported(enp, supportedp)) - != 0) + if (emcop != NULL) { + if ((rc = emcop->emco_feature_supported(enp, + EFX_MCDI_FEATURE_MAC_SPOOFING, supportedp)) != 0) goto fail1; } else { /* Earlier devices always supported MAC spoofing */ Modified: stable/10/sys/dev/sfxge/common/efx_mcdi.h ============================================================================== --- stable/10/sys/dev/sfxge/common/efx_mcdi.h Thu Jan 14 15:33:13 2016 (r293968) +++ stable/10/sys/dev/sfxge/common/efx_mcdi.h Thu Jan 14 15:33:50 2016 (r293969) @@ -386,11 +386,18 @@ efx_mcdi_get_loopback_modes( #define MCDI_CMD_DWORD_FIELD(_edp, _field) \ EFX_DWORD_FIELD(*_edp, MC_CMD_ ## _field) -#define EFX_MCDI_HAVE_PRIVILEGE(mask, priv) \ - (((mask) & \ - (MC_CMD_PRIVILEGE_MASK_IN_GRP_ ## priv)) == \ +#define EFX_MCDI_HAVE_PRIVILEGE(mask, priv) \ + (((mask) & (MC_CMD_PRIVILEGE_MASK_IN_GRP_ ## priv)) == \ (MC_CMD_PRIVILEGE_MASK_IN_GRP_ ## priv)) +typedef enum efx_mcdi_feature_id_e { + EFX_MCDI_FEATURE_FW_UPDATE = 0, + EFX_MCDI_FEATURE_LINK_CONTROL, + EFX_MCDI_FEATURE_MACADDR_CHANGE, + EFX_MCDI_FEATURE_MAC_SPOOFING, + EFX_MCDI_FEATURE_NIDS +} efx_mcdi_feature_id_t; + #ifdef __cplusplus } #endif Modified: stable/10/sys/dev/sfxge/common/hunt_impl.h ============================================================================== --- stable/10/sys/dev/sfxge/common/hunt_impl.h Thu Jan 14 15:33:13 2016 (r293968) +++ stable/10/sys/dev/sfxge/common/hunt_impl.h Thu Jan 14 15:33:50 2016 (r293969) @@ -284,26 +284,11 @@ hunt_mcdi_poll_reboot( __in efx_nic_t *enp); extern __checkReturn efx_rc_t -hunt_mcdi_fw_update_supported( +hunt_mcdi_feature_supported( __in efx_nic_t *enp, + __in efx_mcdi_feature_id_t id, __out boolean_t *supportedp); -extern __checkReturn efx_rc_t -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); - -extern __checkReturn efx_rc_t -hunt_mcdi_mac_spoofing_supported( - __in efx_nic_t *enp, - __out boolean_t *supportedp); - - #endif /* EFSYS_OPT_MCDI */ /* NVRAM */ @@ -722,7 +707,7 @@ hunt_tx_qstats_update( #define HUNT_MIN_PIO_ALLOC_SIZE (HUNT_PIOBUF_SIZE / 32) -#define HUNT_LEGACY_PF_PRIVILEGE_MASK \ +#define HUNT_LEGACY_PF_PRIVILEGE_MASK \ (MC_CMD_PRIVILEGE_MASK_IN_GRP_ADMIN | \ MC_CMD_PRIVILEGE_MASK_IN_GRP_LINK | \ MC_CMD_PRIVILEGE_MASK_IN_GRP_ONLOAD | \ @@ -735,7 +720,7 @@ hunt_tx_qstats_update( MC_CMD_PRIVILEGE_MASK_IN_GRP_ALL_MULTICAST | \ MC_CMD_PRIVILEGE_MASK_IN_GRP_PROMISCUOUS) -#define HUNT_LEGACY_VF_PRIVILEGE_MASK 0 +#define HUNT_LEGACY_VF_PRIVILEGE_MASK 0 typedef uint32_t efx_piobuf_handle_t; Modified: stable/10/sys/dev/sfxge/common/hunt_mcdi.c ============================================================================== --- stable/10/sys/dev/sfxge/common/hunt_mcdi.c Thu Jan 14 15:33:13 2016 (r293968) +++ stable/10/sys/dev/sfxge/common/hunt_mcdi.c Thu Jan 14 15:33:50 2016 (r293969) @@ -399,94 +399,73 @@ fail1: } __checkReturn efx_rc_t -hunt_mcdi_fw_update_supported( - __in efx_nic_t *enp, - __out boolean_t *supportedp) -{ - efx_nic_cfg_t *encp = &(enp->en_nic_cfg); - - EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_HUNTINGTON); - - /* - * Use privilege mask state at MCDI attach. - * Admin privilege must be used prior to introduction of - * specific flag. - */ - *supportedp = - EFX_MCDI_HAVE_PRIVILEGE(encp->enc_privilege_mask, ADMIN); - - return (0); -} - - __checkReturn efx_rc_t -hunt_mcdi_macaddr_change_supported( +hunt_mcdi_feature_supported( __in efx_nic_t *enp, + __in efx_mcdi_feature_id_t id, __out boolean_t *supportedp) { efx_nic_cfg_t *encp = &(enp->en_nic_cfg); uint32_t privilege_mask = encp->enc_privilege_mask; + efx_rc_t rc; EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_HUNTINGTON); /* * Use privilege mask state at MCDI attach. - * Admin privilege must be used prior to introduction of - * mac spoofing privilege (at v4.6), which is used up to - * introduction of change mac spoofing privilege (at v4.7) */ - *supportedp = - EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, CHANGE_MAC) || - EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, MAC_SPOOFING) || - EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, ADMIN); - return (0); -} - - __checkReturn efx_rc_t -hunt_mcdi_mac_spoofing_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 must be used prior to introduction of - * mac spoofing privilege (at v4.6), which is used up to - * introduction of mac spoofing TX privilege (at v4.7) - */ - *supportedp = - EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, MAC_SPOOFING_TX) || - EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, MAC_SPOOFING) || - EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, ADMIN); + switch (id) { + case EFX_MCDI_FEATURE_FW_UPDATE: + /* + * Admin privilege must be used prior to introduction of + * specific flag. + */ + *supportedp = + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, ADMIN); + break; + case EFX_MCDI_FEATURE_LINK_CONTROL: + /* + * Admin privilege used prior to introduction of + * specific flag. + */ + *supportedp = + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, LINK) || + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, ADMIN); + break; + case EFX_MCDI_FEATURE_MACADDR_CHANGE: + /* + * Admin privilege must be used prior to introduction of + * mac spoofing privilege (at v4.6), which is used up to + * introduction of change mac spoofing privilege (at v4.7) + */ + *supportedp = + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, CHANGE_MAC) || + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, MAC_SPOOFING) || + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, ADMIN); + break; + case EFX_MCDI_FEATURE_MAC_SPOOFING: + /* + * Admin privilege must be used prior to introduction of + * mac spoofing privilege (at v4.6), which is used up to + * introduction of mac spoofing TX privilege (at v4.7) + */ + *supportedp = + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, MAC_SPOOFING_TX) || + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, MAC_SPOOFING) || + EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, ADMIN); + break; + default: + rc = ENOTSUP; + goto fail1; + break; + } 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); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); - /* - * Use privilege mask state at MCDI attach. - * Admin privilege used prior to introduction of - * specific flag. - */ - *supportedp = - EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, LINK) || - EFX_MCDI_HAVE_PRIVILEGE(privilege_mask, ADMIN); - - return (0); + return (rc); } #endif /* EFSYS_OPT_MCDI */ Modified: stable/10/sys/dev/sfxge/common/siena_impl.h ============================================================================== --- stable/10/sys/dev/sfxge/common/siena_impl.h Thu Jan 14 15:33:13 2016 (r293968) +++ stable/10/sys/dev/sfxge/common/siena_impl.h Thu Jan 14 15:33:50 2016 (r293969) @@ -146,18 +146,9 @@ siena_mcdi_fini( __in efx_nic_t *enp); extern __checkReturn efx_rc_t -siena_mcdi_fw_update_supported( - __in efx_nic_t *enp, - __out boolean_t *supportedp); - -extern __checkReturn efx_rc_t -siena_mcdi_macaddr_change_supported( - __in efx_nic_t *enp, - __out boolean_t *supportedp); - -extern __checkReturn efx_rc_t -siena_mcdi_link_control_supported( +siena_mcdi_feature_supported( __in efx_nic_t *enp, + __in efx_mcdi_feature_id_t id, __out boolean_t *supportedp); #endif /* EFSYS_OPT_MCDI */ Modified: stable/10/sys/dev/sfxge/common/siena_mcdi.c ============================================================================== --- stable/10/sys/dev/sfxge/common/siena_mcdi.c Thu Jan 14 15:33:13 2016 (r293968) +++ stable/10/sys/dev/sfxge/common/siena_mcdi.c Thu Jan 14 15:33:50 2016 (r293969) @@ -329,39 +329,34 @@ siena_mcdi_fini( } __checkReturn efx_rc_t -siena_mcdi_fw_update_supported( +siena_mcdi_feature_supported( __in efx_nic_t *enp, + __in efx_mcdi_feature_id_t id, __out boolean_t *supportedp) { - EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_SIENA); - - *supportedp = B_TRUE; - - return (0); -} + efx_rc_t rc; - __checkReturn efx_rc_t -siena_mcdi_macaddr_change_supported( - __in efx_nic_t *enp, - __out boolean_t *supportedp) -{ EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_SIENA); - *supportedp = B_TRUE; + switch (id) { + case EFX_MCDI_FEATURE_FW_UPDATE: + case EFX_MCDI_FEATURE_LINK_CONTROL: + case EFX_MCDI_FEATURE_MACADDR_CHANGE: + case EFX_MCDI_FEATURE_MAC_SPOOFING: + *supportedp = B_TRUE; + break; + default: + rc = ENOTSUP; + goto fail1; + break; + } 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; +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); - return (0); + return (rc); } #endif /* EFSYS_OPT_SIENA && EFSYS_OPT_MCDI */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201601141533.u0EFXppN046316>