sfxge(4): rename API to check Rx scale and hash support
Rename efx_rx_scale_support_get() to efx_rx_scale_default_support_get(), and efx_rx_hash_support_get() to efx_rx_hash_default_support_get(). All these really report is whether an exclusive RSS context was successfully acquired at efx_rx_init(). efx_rx_scale_support_get() sounds like it reports whether the device supports RSS, and whether exclusive or shared contexts are supported, but it doesn't do that. Renaming it to efx_rx_scale_default_support_get() helps to reflect that it reports what RSS support the client gets without trying to allocate RSS contexts itself. Also rename efx_rx_scale_support_t to efx_rx_scale_context_type_t, to make the enum more suitable for specifying the type of an RSS context to be allocated. Submitted by: Mark Spender <mspender at solarflare.com> Sponsored by: Solarflare Communications, Inc. Differential Revision: https://reviews.freebsd.org/D18078
This commit is contained in:
parent
4ad28be5ea
commit
7f6e8fadc8
@ -162,7 +162,7 @@ fail1:
|
||||
static __checkReturn efx_rc_t
|
||||
efx_mcdi_rss_context_alloc(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_rx_scale_support_t scale_support,
|
||||
__in efx_rx_scale_context_type_t type,
|
||||
__in uint32_t num_queues,
|
||||
__out uint32_t *rss_contextp)
|
||||
{
|
||||
@ -178,7 +178,7 @@ efx_mcdi_rss_context_alloc(
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
switch (scale_support) {
|
||||
switch (type) {
|
||||
case EFX_RX_SCALE_EXCLUSIVE:
|
||||
context_type = MC_CMD_RSS_CONTEXT_ALLOC_IN_TYPE_EXCLUSIVE;
|
||||
break;
|
||||
@ -464,7 +464,7 @@ ef10_rx_init(
|
||||
* Allocated an exclusive RSS context, which allows both the
|
||||
* indirection table and key to be modified.
|
||||
*/
|
||||
enp->en_rss_support = EFX_RX_SCALE_EXCLUSIVE;
|
||||
enp->en_rss_context_type = EFX_RX_SCALE_EXCLUSIVE;
|
||||
enp->en_hash_support = EFX_RX_HASH_AVAILABLE;
|
||||
} else {
|
||||
/*
|
||||
@ -472,7 +472,7 @@ ef10_rx_init(
|
||||
* operation without support for RSS. The pseudo-header in
|
||||
* received packets will not contain a Toeplitz hash value.
|
||||
*/
|
||||
enp->en_rss_support = EFX_RX_SCALE_UNAVAILABLE;
|
||||
enp->en_rss_context_type = EFX_RX_SCALE_UNAVAILABLE;
|
||||
enp->en_hash_support = EFX_RX_HASH_UNAVAILABLE;
|
||||
}
|
||||
|
||||
@ -510,7 +510,7 @@ ef10_rx_scale_mode_set(
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
if (enp->en_rss_support == EFX_RX_SCALE_UNAVAILABLE) {
|
||||
if (enp->en_rss_context_type == EFX_RX_SCALE_UNAVAILABLE) {
|
||||
rc = ENOTSUP;
|
||||
goto fail2;
|
||||
}
|
||||
@ -541,7 +541,7 @@ ef10_rx_scale_key_set(
|
||||
{
|
||||
efx_rc_t rc;
|
||||
|
||||
if (enp->en_rss_support == EFX_RX_SCALE_UNAVAILABLE) {
|
||||
if (enp->en_rss_context_type == EFX_RX_SCALE_UNAVAILABLE) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
@ -570,7 +570,7 @@ ef10_rx_scale_tbl_set(
|
||||
{
|
||||
efx_rc_t rc;
|
||||
|
||||
if (enp->en_rss_support == EFX_RX_SCALE_UNAVAILABLE) {
|
||||
if (enp->en_rss_context_type == EFX_RX_SCALE_UNAVAILABLE) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
@ -981,11 +981,10 @@ ef10_rx_fini(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
if (enp->en_rss_support != EFX_RX_SCALE_UNAVAILABLE) {
|
||||
if (enp->en_rss_context_type != EFX_RX_SCALE_UNAVAILABLE)
|
||||
(void) efx_mcdi_rss_context_free(enp, enp->en_rss_context);
|
||||
}
|
||||
enp->en_rss_context = 0;
|
||||
enp->en_rss_support = EFX_RX_SCALE_UNAVAILABLE;
|
||||
enp->en_rss_context_type = EFX_RX_SCALE_UNAVAILABLE;
|
||||
#else
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
#endif /* EFSYS_OPT_RX_SCALE */
|
||||
|
@ -1916,22 +1916,22 @@ typedef enum efx_rx_hash_support_e {
|
||||
#define EFX_MAXRSS 64 /* RX indirection entry range */
|
||||
#define EFX_MAXRSS_LEGACY 16 /* See bug16611 and bug17213 */
|
||||
|
||||
typedef enum efx_rx_scale_support_e {
|
||||
EFX_RX_SCALE_UNAVAILABLE = 0, /* Not supported */
|
||||
typedef enum efx_rx_scale_context_type_e {
|
||||
EFX_RX_SCALE_UNAVAILABLE = 0, /* No RX scale context */
|
||||
EFX_RX_SCALE_EXCLUSIVE, /* Writable key/indirection table */
|
||||
EFX_RX_SCALE_SHARED /* Read-only key/indirection table */
|
||||
} efx_rx_scale_support_t;
|
||||
} efx_rx_scale_context_type_t;
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_rx_hash_support_get(
|
||||
efx_rx_hash_default_support_get(
|
||||
__in efx_nic_t *enp,
|
||||
__out efx_rx_hash_support_t *supportp);
|
||||
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_rx_scale_support_get(
|
||||
efx_rx_scale_default_support_get(
|
||||
__in efx_nic_t *enp,
|
||||
__out efx_rx_scale_support_t *supportp);
|
||||
__out efx_rx_scale_context_type_t *typep);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_rx_scale_mode_set(
|
||||
|
@ -644,9 +644,9 @@ struct efx_nic_s {
|
||||
const efx_vpd_ops_t *en_evpdop;
|
||||
#endif /* EFSYS_OPT_VPD */
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
efx_rx_hash_support_t en_hash_support;
|
||||
efx_rx_scale_support_t en_rss_support;
|
||||
uint32_t en_rss_context;
|
||||
efx_rx_hash_support_t en_hash_support;
|
||||
efx_rx_scale_context_type_t en_rss_context_type;
|
||||
uint32_t en_rss_context;
|
||||
#endif /* EFSYS_OPT_RX_SCALE */
|
||||
uint32_t en_vport_id;
|
||||
#if EFSYS_OPT_LICENSING
|
||||
|
@ -309,7 +309,7 @@ fail1:
|
||||
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
__checkReturn efx_rc_t
|
||||
efx_rx_hash_support_get(
|
||||
efx_rx_hash_default_support_get(
|
||||
__in efx_nic_t *enp,
|
||||
__out efx_rx_hash_support_t *supportp)
|
||||
{
|
||||
@ -323,7 +323,10 @@ efx_rx_hash_support_get(
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
/* Report if resources are available to insert RX hash value */
|
||||
/*
|
||||
* Report the hashing support the client gets by default if it
|
||||
* does not allocate an RSS context itself.
|
||||
*/
|
||||
*supportp = enp->en_hash_support;
|
||||
|
||||
return (0);
|
||||
@ -335,22 +338,25 @@ fail1:
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_rx_scale_support_get(
|
||||
efx_rx_scale_default_support_get(
|
||||
__in efx_nic_t *enp,
|
||||
__out efx_rx_scale_support_t *supportp)
|
||||
__out efx_rx_scale_context_type_t *typep)
|
||||
{
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
|
||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_RX);
|
||||
|
||||
if (supportp == NULL) {
|
||||
if (typep == NULL) {
|
||||
rc = EINVAL;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
/* Report if resources are available to support RSS */
|
||||
*supportp = enp->en_rss_support;
|
||||
/*
|
||||
* Report the RSS support the client gets by default if it
|
||||
* does not allocate an RSS context itself.
|
||||
*/
|
||||
*typep = enp->en_rss_context_type;
|
||||
|
||||
return (0);
|
||||
|
||||
@ -659,7 +665,7 @@ siena_rx_init(
|
||||
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
/* The RSS key and indirection table are writable. */
|
||||
enp->en_rss_support = EFX_RX_SCALE_EXCLUSIVE;
|
||||
enp->en_rss_context_type = EFX_RX_SCALE_EXCLUSIVE;
|
||||
|
||||
/* Hardware can insert RX hash with/without RSS */
|
||||
enp->en_hash_support = EFX_RX_HASH_AVAILABLE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user