Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/sfxge/common/efx_ev.c
Show First 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | falconsiena_ev_qstats_update( | ||||
__in efx_evq_t *eep, | __in efx_evq_t *eep, | ||||
__inout_ecount(EV_NQSTATS) efsys_stat_t *stat); | __inout_ecount(EV_NQSTATS) efsys_stat_t *stat); | ||||
#endif | #endif | ||||
#endif /* EFSYS_OPT_SIENA */ | #endif /* EFSYS_OPT_SIENA */ | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
static efx_ev_ops_t __efx_ev_siena_ops = { | static const efx_ev_ops_t __efx_ev_siena_ops = { | ||||
falconsiena_ev_init, /* eevo_init */ | falconsiena_ev_init, /* eevo_init */ | ||||
falconsiena_ev_fini, /* eevo_fini */ | falconsiena_ev_fini, /* eevo_fini */ | ||||
falconsiena_ev_qcreate, /* eevo_qcreate */ | falconsiena_ev_qcreate, /* eevo_qcreate */ | ||||
falconsiena_ev_qdestroy, /* eevo_qdestroy */ | falconsiena_ev_qdestroy, /* eevo_qdestroy */ | ||||
falconsiena_ev_qprime, /* eevo_qprime */ | falconsiena_ev_qprime, /* eevo_qprime */ | ||||
falconsiena_ev_qpost, /* eevo_qpost */ | falconsiena_ev_qpost, /* eevo_qpost */ | ||||
falconsiena_ev_qmoderate, /* eevo_qmoderate */ | falconsiena_ev_qmoderate, /* eevo_qmoderate */ | ||||
#if EFSYS_OPT_QSTATS | #if EFSYS_OPT_QSTATS | ||||
falconsiena_ev_qstats_update, /* eevo_qstats_update */ | falconsiena_ev_qstats_update, /* eevo_qstats_update */ | ||||
#endif | #endif | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_SIENA */ | #endif /* EFSYS_OPT_SIENA */ | ||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD | #if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD | ||||
static efx_ev_ops_t __efx_ev_ef10_ops = { | static const efx_ev_ops_t __efx_ev_ef10_ops = { | ||||
ef10_ev_init, /* eevo_init */ | ef10_ev_init, /* eevo_init */ | ||||
ef10_ev_fini, /* eevo_fini */ | ef10_ev_fini, /* eevo_fini */ | ||||
ef10_ev_qcreate, /* eevo_qcreate */ | ef10_ev_qcreate, /* eevo_qcreate */ | ||||
ef10_ev_qdestroy, /* eevo_qdestroy */ | ef10_ev_qdestroy, /* eevo_qdestroy */ | ||||
ef10_ev_qprime, /* eevo_qprime */ | ef10_ev_qprime, /* eevo_qprime */ | ||||
ef10_ev_qpost, /* eevo_qpost */ | ef10_ev_qpost, /* eevo_qpost */ | ||||
ef10_ev_qmoderate, /* eevo_qmoderate */ | ef10_ev_qmoderate, /* eevo_qmoderate */ | ||||
#if EFSYS_OPT_QSTATS | #if EFSYS_OPT_QSTATS | ||||
ef10_ev_qstats_update, /* eevo_qstats_update */ | ef10_ev_qstats_update, /* eevo_qstats_update */ | ||||
#endif | #endif | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_ev_init( | efx_ev_init( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_ev_ops_t *eevop; | const efx_ev_ops_t *eevop; | ||||
efx_rc_t rc; | efx_rc_t rc; | ||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_INTR); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_INTR); | ||||
if (enp->en_mod_flags & EFX_MOD_EV) { | if (enp->en_mod_flags & EFX_MOD_EV) { | ||||
rc = EINVAL; | rc = EINVAL; | ||||
goto fail1; | goto fail1; | ||||
} | } | ||||
switch (enp->en_family) { | switch (enp->en_family) { | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
case EFX_FAMILY_SIENA: | case EFX_FAMILY_SIENA: | ||||
eevop = (efx_ev_ops_t *)&__efx_ev_siena_ops; | eevop = &__efx_ev_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: | ||||
eevop = (efx_ev_ops_t *)&__efx_ev_ef10_ops; | eevop = &__efx_ev_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: | ||||
eevop = (efx_ev_ops_t *)&__efx_ev_ef10_ops; | eevop = &__efx_ev_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 All 17 Lines | fail1: | ||||
enp->en_mod_flags &= ~EFX_MOD_EV; | enp->en_mod_flags &= ~EFX_MOD_EV; | ||||
return (rc); | return (rc); | ||||
} | } | ||||
void | void | ||||
efx_ev_fini( | efx_ev_fini( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_ev_ops_t *eevop = enp->en_eevop; | const efx_ev_ops_t *eevop = enp->en_eevop; | ||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_INTR); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_INTR); | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_EV); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_EV); | ||||
EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_RX)); | EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_RX)); | ||||
EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_TX)); | EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_TX)); | ||||
EFSYS_ASSERT3U(enp->en_ev_qcount, ==, 0); | EFSYS_ASSERT3U(enp->en_ev_qcount, ==, 0); | ||||
eevop->eevo_fini(enp); | eevop->eevo_fini(enp); | ||||
enp->en_eevop = NULL; | enp->en_eevop = NULL; | ||||
enp->en_mod_flags &= ~EFX_MOD_EV; | enp->en_mod_flags &= ~EFX_MOD_EV; | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_ev_qcreate( | efx_ev_qcreate( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in unsigned int index, | __in unsigned int index, | ||||
__in efsys_mem_t *esmp, | __in efsys_mem_t *esmp, | ||||
__in size_t n, | __in size_t n, | ||||
__in uint32_t id, | __in uint32_t id, | ||||
__deref_out efx_evq_t **eepp) | __deref_out efx_evq_t **eepp) | ||||
{ | { | ||||
efx_ev_ops_t *eevop = enp->en_eevop; | const efx_ev_ops_t *eevop = enp->en_eevop; | ||||
efx_nic_cfg_t *encp = &(enp->en_nic_cfg); | efx_nic_cfg_t *encp = &(enp->en_nic_cfg); | ||||
efx_evq_t *eep; | efx_evq_t *eep; | ||||
efx_rc_t rc; | efx_rc_t rc; | ||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_EV); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_EV); | ||||
EFSYS_ASSERT3U(enp->en_ev_qcount + 1, <, encp->enc_evq_limit); | EFSYS_ASSERT3U(enp->en_ev_qcount + 1, <, encp->enc_evq_limit); | ||||
Show All 27 Lines | fail1: | ||||
return (rc); | return (rc); | ||||
} | } | ||||
void | void | ||||
efx_ev_qdestroy( | efx_ev_qdestroy( | ||||
__in efx_evq_t *eep) | __in efx_evq_t *eep) | ||||
{ | { | ||||
efx_nic_t *enp = eep->ee_enp; | efx_nic_t *enp = eep->ee_enp; | ||||
efx_ev_ops_t *eevop = enp->en_eevop; | const efx_ev_ops_t *eevop = enp->en_eevop; | ||||
EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | ||||
EFSYS_ASSERT(enp->en_ev_qcount != 0); | EFSYS_ASSERT(enp->en_ev_qcount != 0); | ||||
--enp->en_ev_qcount; | --enp->en_ev_qcount; | ||||
eevop->eevo_qdestroy(eep); | eevop->eevo_qdestroy(eep); | ||||
/* Free the EVQ object */ | /* Free the EVQ object */ | ||||
EFSYS_KMEM_FREE(enp->en_esip, sizeof (efx_evq_t), eep); | EFSYS_KMEM_FREE(enp->en_esip, sizeof (efx_evq_t), eep); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_ev_qprime( | efx_ev_qprime( | ||||
__in efx_evq_t *eep, | __in efx_evq_t *eep, | ||||
__in unsigned int count) | __in unsigned int count) | ||||
{ | { | ||||
efx_nic_t *enp = eep->ee_enp; | efx_nic_t *enp = eep->ee_enp; | ||||
efx_ev_ops_t *eevop = enp->en_eevop; | const efx_ev_ops_t *eevop = enp->en_eevop; | ||||
efx_rc_t rc; | efx_rc_t rc; | ||||
EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | ||||
if (!(enp->en_mod_flags & EFX_MOD_INTR)) { | if (!(enp->en_mod_flags & EFX_MOD_INTR)) { | ||||
rc = EINVAL; | rc = EINVAL; | ||||
goto fail1; | goto fail1; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
void | void | ||||
efx_ev_qpost( | efx_ev_qpost( | ||||
__in efx_evq_t *eep, | __in efx_evq_t *eep, | ||||
__in uint16_t data) | __in uint16_t data) | ||||
{ | { | ||||
efx_nic_t *enp = eep->ee_enp; | efx_nic_t *enp = eep->ee_enp; | ||||
efx_ev_ops_t *eevop = enp->en_eevop; | const efx_ev_ops_t *eevop = enp->en_eevop; | ||||
EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | ||||
EFSYS_ASSERT(eevop != NULL && | EFSYS_ASSERT(eevop != NULL && | ||||
eevop->eevo_qpost != NULL); | eevop->eevo_qpost != NULL); | ||||
eevop->eevo_qpost(eep, data); | eevop->eevo_qpost(eep, data); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_ev_qmoderate( | efx_ev_qmoderate( | ||||
__in efx_evq_t *eep, | __in efx_evq_t *eep, | ||||
__in unsigned int us) | __in unsigned int us) | ||||
{ | { | ||||
efx_nic_t *enp = eep->ee_enp; | efx_nic_t *enp = eep->ee_enp; | ||||
efx_ev_ops_t *eevop = enp->en_eevop; | const efx_ev_ops_t *eevop = enp->en_eevop; | ||||
efx_rc_t rc; | efx_rc_t rc; | ||||
EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | ||||
if ((rc = eevop->eevo_qmoderate(eep, us)) != 0) | if ((rc = eevop->eevo_qmoderate(eep, us)) != 0) | ||||
goto fail1; | goto fail1; | ||||
return (0); | return (0); | ||||
fail1: | fail1: | ||||
EFSYS_PROBE1(fail1, efx_rc_t, rc); | EFSYS_PROBE1(fail1, efx_rc_t, rc); | ||||
return (rc); | return (rc); | ||||
} | } | ||||
#if EFSYS_OPT_QSTATS | #if EFSYS_OPT_QSTATS | ||||
void | void | ||||
efx_ev_qstats_update( | efx_ev_qstats_update( | ||||
__in efx_evq_t *eep, | __in efx_evq_t *eep, | ||||
__inout_ecount(EV_NQSTATS) efsys_stat_t *stat) | __inout_ecount(EV_NQSTATS) efsys_stat_t *stat) | ||||
{ efx_nic_t *enp = eep->ee_enp; | { efx_nic_t *enp = eep->ee_enp; | ||||
efx_ev_ops_t *eevop = enp->en_eevop; | const efx_ev_ops_t *eevop = enp->en_eevop; | ||||
EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | EFSYS_ASSERT3U(eep->ee_magic, ==, EFX_EVQ_MAGIC); | ||||
eevop->eevo_qstats_update(eep, stat); | eevop->eevo_qstats_update(eep, stat); | ||||
} | } | ||||
#endif /* EFSYS_OPT_QSTATS */ | #endif /* EFSYS_OPT_QSTATS */ | ||||
▲ Show 20 Lines • Show All 988 Lines • Show Last 20 Lines |