Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/sfxge/common/efx_filter.c
Show First 20 Lines • Show All 65 Lines • ▼ Show 20 Lines | |||||
falconsiena_filter_supported_filters( | falconsiena_filter_supported_filters( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__out uint32_t *list, | __out uint32_t *list, | ||||
__out size_t *length); | __out size_t *length); | ||||
#endif /* EFSYS_OPT_SIENA */ | #endif /* EFSYS_OPT_SIENA */ | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
static efx_filter_ops_t __efx_filter_siena_ops = { | static const efx_filter_ops_t __efx_filter_siena_ops = { | ||||
falconsiena_filter_init, /* efo_init */ | falconsiena_filter_init, /* efo_init */ | ||||
falconsiena_filter_fini, /* efo_fini */ | falconsiena_filter_fini, /* efo_fini */ | ||||
falconsiena_filter_restore, /* efo_restore */ | falconsiena_filter_restore, /* efo_restore */ | ||||
falconsiena_filter_add, /* efo_add */ | falconsiena_filter_add, /* efo_add */ | ||||
falconsiena_filter_delete, /* efo_delete */ | falconsiena_filter_delete, /* efo_delete */ | ||||
falconsiena_filter_supported_filters, /* efo_supported_filters */ | falconsiena_filter_supported_filters, /* efo_supported_filters */ | ||||
NULL, /* efo_reconfigure */ | NULL, /* efo_reconfigure */ | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_SIENA */ | #endif /* EFSYS_OPT_SIENA */ | ||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD | #if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD | ||||
static efx_filter_ops_t __efx_filter_ef10_ops = { | static const efx_filter_ops_t __efx_filter_ef10_ops = { | ||||
ef10_filter_init, /* efo_init */ | ef10_filter_init, /* efo_init */ | ||||
ef10_filter_fini, /* efo_fini */ | ef10_filter_fini, /* efo_fini */ | ||||
ef10_filter_restore, /* efo_restore */ | ef10_filter_restore, /* efo_restore */ | ||||
ef10_filter_add, /* efo_add */ | ef10_filter_add, /* efo_add */ | ||||
ef10_filter_delete, /* efo_delete */ | ef10_filter_delete, /* efo_delete */ | ||||
ef10_filter_supported_filters, /* efo_supported_filters */ | ef10_filter_supported_filters, /* efo_supported_filters */ | ||||
ef10_filter_reconfigure, /* efo_reconfigure */ | ef10_filter_reconfigure, /* efo_reconfigure */ | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_filter_insert( | efx_filter_insert( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__inout efx_filter_spec_t *spec) | __inout efx_filter_spec_t *spec) | ||||
{ | { | ||||
efx_filter_ops_t *efop = enp->en_efop; | const efx_filter_ops_t *efop = enp->en_efop; | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_FILTER); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_FILTER); | ||||
EFSYS_ASSERT3P(spec, !=, NULL); | EFSYS_ASSERT3P(spec, !=, NULL); | ||||
EFSYS_ASSERT3U(spec->efs_flags, &, EFX_FILTER_FLAG_RX); | EFSYS_ASSERT3U(spec->efs_flags, &, EFX_FILTER_FLAG_RX); | ||||
return (efop->efo_add(enp, spec, B_FALSE)); | return (efop->efo_add(enp, spec, B_FALSE)); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_filter_remove( | efx_filter_remove( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__inout efx_filter_spec_t *spec) | __inout efx_filter_spec_t *spec) | ||||
{ | { | ||||
efx_filter_ops_t *efop = enp->en_efop; | const efx_filter_ops_t *efop = enp->en_efop; | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_FILTER); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_FILTER); | ||||
EFSYS_ASSERT3P(spec, !=, NULL); | EFSYS_ASSERT3P(spec, !=, NULL); | ||||
EFSYS_ASSERT3U(spec->efs_flags, &, EFX_FILTER_FLAG_RX); | EFSYS_ASSERT3U(spec->efs_flags, &, EFX_FILTER_FLAG_RX); | ||||
#if EFSYS_OPT_RX_SCALE | #if EFSYS_OPT_RX_SCALE | ||||
spec->efs_rss_context = enp->en_rss_context; | spec->efs_rss_context = enp->en_rss_context; | ||||
#endif | #endif | ||||
Show All 19 Lines | fail1: | ||||
return (rc); | return (rc); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_filter_init( | efx_filter_init( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_filter_ops_t *efop; | const efx_filter_ops_t *efop; | ||||
efx_rc_t rc; | efx_rc_t rc; | ||||
/* Check that efx_filter_spec_t is 64 bytes. */ | /* Check that efx_filter_spec_t is 64 bytes. */ | ||||
EFX_STATIC_ASSERT(sizeof (efx_filter_spec_t) == 64); | EFX_STATIC_ASSERT(sizeof (efx_filter_spec_t) == 64); | ||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE); | ||||
EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_FILTER)); | EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_FILTER)); | ||||
switch (enp->en_family) { | switch (enp->en_family) { | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
case EFX_FAMILY_SIENA: | case EFX_FAMILY_SIENA: | ||||
efop = (efx_filter_ops_t *)&__efx_filter_siena_ops; | efop = &__efx_filter_siena_ops; | ||||
break; | break; | ||||
#endif /* EFSYS_OPT_SIENA */ | #endif /* EFSYS_OPT_SIENA */ | ||||
#if EFSYS_OPT_HUNTINGTON | #if EFSYS_OPT_HUNTINGTON | ||||
case EFX_FAMILY_HUNTINGTON: | case EFX_FAMILY_HUNTINGTON: | ||||
efop = (efx_filter_ops_t *)&__efx_filter_ef10_ops; | efop = &__efx_filter_ef10_ops; | ||||
break; | break; | ||||
#endif /* EFSYS_OPT_HUNTINGTON */ | #endif /* EFSYS_OPT_HUNTINGTON */ | ||||
#if EFSYS_OPT_MEDFORD | #if EFSYS_OPT_MEDFORD | ||||
case EFX_FAMILY_MEDFORD: | case EFX_FAMILY_MEDFORD: | ||||
efop = (efx_filter_ops_t *)&__efx_filter_ef10_ops; | efop = &__efx_filter_ef10_ops; | ||||
break; | break; | ||||
#endif /* EFSYS_OPT_MEDFORD */ | #endif /* EFSYS_OPT_MEDFORD */ | ||||
default: | default: | ||||
EFSYS_ASSERT(0); | EFSYS_ASSERT(0); | ||||
rc = ENOTSUP; | rc = ENOTSUP; | ||||
goto fail1; | goto fail1; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,229 Lines • Show Last 20 Lines |