svn commit: r292055 - head/sys/dev/sfxge/common

Andrew Rybchenko arybchik at FreeBSD.org
Thu Dec 10 07:42:59 UTC 2015


Author: arybchik
Date: Thu Dec 10 07:42:56 2015
New Revision: 292055
URL: https://svnweb.freebsd.org/changeset/base/292055

Log:
  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.
  MFC after:      2 days
  Differential Revision: https://reviews.freebsd.org/D4480

Modified:
  head/sys/dev/sfxge/common/efx_impl.h
  head/sys/dev/sfxge/common/efx_mcdi.c
  head/sys/dev/sfxge/common/efx_mcdi.h
  head/sys/dev/sfxge/common/hunt_impl.h
  head/sys/dev/sfxge/common/hunt_mcdi.c
  head/sys/dev/sfxge/common/siena_impl.h
  head/sys/dev/sfxge/common/siena_mcdi.c

Modified: head/sys/dev/sfxge/common/efx_impl.h
==============================================================================
--- head/sys/dev/sfxge/common/efx_impl.h	Thu Dec 10 07:38:56 2015	(r292054)
+++ head/sys/dev/sfxge/common/efx_impl.h	Thu Dec 10 07:42:56 2015	(r292055)
@@ -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: head/sys/dev/sfxge/common/efx_mcdi.c
==============================================================================
--- head/sys/dev/sfxge/common/efx_mcdi.c	Thu Dec 10 07:38:56 2015	(r292054)
+++ head/sys/dev/sfxge/common/efx_mcdi.c	Thu Dec 10 07:42:56 2015	(r292055)
@@ -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: head/sys/dev/sfxge/common/efx_mcdi.h
==============================================================================
--- head/sys/dev/sfxge/common/efx_mcdi.h	Thu Dec 10 07:38:56 2015	(r292054)
+++ head/sys/dev/sfxge/common/efx_mcdi.h	Thu Dec 10 07:42:56 2015	(r292055)
@@ -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: head/sys/dev/sfxge/common/hunt_impl.h
==============================================================================
--- head/sys/dev/sfxge/common/hunt_impl.h	Thu Dec 10 07:38:56 2015	(r292054)
+++ head/sys/dev/sfxge/common/hunt_impl.h	Thu Dec 10 07:42:56 2015	(r292055)
@@ -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: head/sys/dev/sfxge/common/hunt_mcdi.c
==============================================================================
--- head/sys/dev/sfxge/common/hunt_mcdi.c	Thu Dec 10 07:38:56 2015	(r292054)
+++ head/sys/dev/sfxge/common/hunt_mcdi.c	Thu Dec 10 07:42:56 2015	(r292055)
@@ -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: head/sys/dev/sfxge/common/siena_impl.h
==============================================================================
--- head/sys/dev/sfxge/common/siena_impl.h	Thu Dec 10 07:38:56 2015	(r292054)
+++ head/sys/dev/sfxge/common/siena_impl.h	Thu Dec 10 07:42:56 2015	(r292055)
@@ -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: head/sys/dev/sfxge/common/siena_mcdi.c
==============================================================================
--- head/sys/dev/sfxge/common/siena_mcdi.c	Thu Dec 10 07:38:56 2015	(r292054)
+++ head/sys/dev/sfxge/common/siena_mcdi.c	Thu Dec 10 07:42:56 2015	(r292055)
@@ -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 */


More information about the svn-src-head mailing list