Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/sfxge/common/efx_intr.c
Show First 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | |||||
falconsiena_intr_check_fatal( | falconsiena_intr_check_fatal( | ||||
__in efx_nic_t *enp); | __in efx_nic_t *enp); | ||||
#endif /* EFSYS_OPT_SIENA */ | #endif /* EFSYS_OPT_SIENA */ | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
static efx_intr_ops_t __efx_intr_siena_ops = { | static const efx_intr_ops_t __efx_intr_siena_ops = { | ||||
falconsiena_intr_init, /* eio_init */ | falconsiena_intr_init, /* eio_init */ | ||||
falconsiena_intr_enable, /* eio_enable */ | falconsiena_intr_enable, /* eio_enable */ | ||||
falconsiena_intr_disable, /* eio_disable */ | falconsiena_intr_disable, /* eio_disable */ | ||||
falconsiena_intr_disable_unlocked, /* eio_disable_unlocked */ | falconsiena_intr_disable_unlocked, /* eio_disable_unlocked */ | ||||
falconsiena_intr_trigger, /* eio_trigger */ | falconsiena_intr_trigger, /* eio_trigger */ | ||||
falconsiena_intr_status_line, /* eio_status_line */ | falconsiena_intr_status_line, /* eio_status_line */ | ||||
falconsiena_intr_status_message, /* eio_status_message */ | falconsiena_intr_status_message, /* eio_status_message */ | ||||
falconsiena_intr_fatal, /* eio_fatal */ | falconsiena_intr_fatal, /* eio_fatal */ | ||||
falconsiena_intr_fini, /* eio_fini */ | falconsiena_intr_fini, /* eio_fini */ | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_SIENA */ | #endif /* EFSYS_OPT_SIENA */ | ||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD | #if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD | ||||
static efx_intr_ops_t __efx_intr_ef10_ops = { | static const efx_intr_ops_t __efx_intr_ef10_ops = { | ||||
ef10_intr_init, /* eio_init */ | ef10_intr_init, /* eio_init */ | ||||
ef10_intr_enable, /* eio_enable */ | ef10_intr_enable, /* eio_enable */ | ||||
ef10_intr_disable, /* eio_disable */ | ef10_intr_disable, /* eio_disable */ | ||||
ef10_intr_disable_unlocked, /* eio_disable_unlocked */ | ef10_intr_disable_unlocked, /* eio_disable_unlocked */ | ||||
ef10_intr_trigger, /* eio_trigger */ | ef10_intr_trigger, /* eio_trigger */ | ||||
ef10_intr_status_line, /* eio_status_line */ | ef10_intr_status_line, /* eio_status_line */ | ||||
ef10_intr_status_message, /* eio_status_message */ | ef10_intr_status_message, /* eio_status_message */ | ||||
ef10_intr_fatal, /* eio_fatal */ | ef10_intr_fatal, /* eio_fatal */ | ||||
ef10_intr_fini, /* eio_fini */ | ef10_intr_fini, /* eio_fini */ | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_intr_init( | efx_intr_init( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_intr_type_t type, | __in efx_intr_type_t type, | ||||
__in efsys_mem_t *esmp) | __in efsys_mem_t *esmp) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop; | const efx_intr_ops_t *eiop; | ||||
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_NIC); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NIC); | ||||
if (enp->en_mod_flags & EFX_MOD_INTR) { | if (enp->en_mod_flags & EFX_MOD_INTR) { | ||||
rc = EINVAL; | rc = EINVAL; | ||||
goto fail1; | goto fail1; | ||||
} | } | ||||
eip->ei_esmp = esmp; | eip->ei_esmp = esmp; | ||||
eip->ei_type = type; | eip->ei_type = type; | ||||
eip->ei_level = 0; | eip->ei_level = 0; | ||||
enp->en_mod_flags |= EFX_MOD_INTR; | enp->en_mod_flags |= EFX_MOD_INTR; | ||||
switch (enp->en_family) { | switch (enp->en_family) { | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
case EFX_FAMILY_SIENA: | case EFX_FAMILY_SIENA: | ||||
eiop = (efx_intr_ops_t *)&__efx_intr_siena_ops; | eiop = &__efx_intr_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: | ||||
eiop = (efx_intr_ops_t *)&__efx_intr_ef10_ops; | eiop = &__efx_intr_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: | ||||
eiop = (efx_intr_ops_t *)&__efx_intr_ef10_ops; | eiop = &__efx_intr_ef10_ops; | ||||
break; | break; | ||||
#endif /* EFSYS_OPT_MEDFORD */ | #endif /* EFSYS_OPT_MEDFORD */ | ||||
default: | default: | ||||
EFSYS_ASSERT(B_FALSE); | EFSYS_ASSERT(B_FALSE); | ||||
rc = ENOTSUP; | rc = ENOTSUP; | ||||
goto fail2; | goto fail2; | ||||
} | } | ||||
Show All 15 Lines | fail1: | ||||
return (rc); | return (rc); | ||||
} | } | ||||
void | void | ||||
efx_intr_fini( | efx_intr_fini( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop = eip->ei_eiop; | const efx_intr_ops_t *eiop = eip->ei_eiop; | ||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NIC); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NIC); | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_INTR); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_INTR); | ||||
eiop->eio_fini(enp); | eiop->eio_fini(enp); | ||||
enp->en_mod_flags &= ~EFX_MOD_INTR; | enp->en_mod_flags &= ~EFX_MOD_INTR; | ||||
} | } | ||||
void | void | ||||
efx_intr_enable( | efx_intr_enable( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop = eip->ei_eiop; | const efx_intr_ops_t *eiop = eip->ei_eiop; | ||||
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); | ||||
eiop->eio_enable(enp); | eiop->eio_enable(enp); | ||||
} | } | ||||
void | void | ||||
efx_intr_disable( | efx_intr_disable( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop = eip->ei_eiop; | const efx_intr_ops_t *eiop = eip->ei_eiop; | ||||
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); | ||||
eiop->eio_disable(enp); | eiop->eio_disable(enp); | ||||
} | } | ||||
void | void | ||||
efx_intr_disable_unlocked( | efx_intr_disable_unlocked( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop = eip->ei_eiop; | const efx_intr_ops_t *eiop = eip->ei_eiop; | ||||
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); | ||||
eiop->eio_disable_unlocked(enp); | eiop->eio_disable_unlocked(enp); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_intr_trigger( | efx_intr_trigger( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in unsigned int level) | __in unsigned int level) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop = eip->ei_eiop; | const efx_intr_ops_t *eiop = eip->ei_eiop; | ||||
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); | ||||
return (eiop->eio_trigger(enp, level)); | return (eiop->eio_trigger(enp, level)); | ||||
} | } | ||||
void | void | ||||
efx_intr_status_line( | efx_intr_status_line( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__out boolean_t *fatalp, | __out boolean_t *fatalp, | ||||
__out uint32_t *qmaskp) | __out uint32_t *qmaskp) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop = eip->ei_eiop; | const efx_intr_ops_t *eiop = eip->ei_eiop; | ||||
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); | ||||
eiop->eio_status_line(enp, fatalp, qmaskp); | eiop->eio_status_line(enp, fatalp, qmaskp); | ||||
} | } | ||||
void | void | ||||
efx_intr_status_message( | efx_intr_status_message( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in unsigned int message, | __in unsigned int message, | ||||
__out boolean_t *fatalp) | __out boolean_t *fatalp) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop = eip->ei_eiop; | const efx_intr_ops_t *eiop = eip->ei_eiop; | ||||
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); | ||||
eiop->eio_status_message(enp, message, fatalp); | eiop->eio_status_message(enp, message, fatalp); | ||||
} | } | ||||
void | void | ||||
efx_intr_fatal( | efx_intr_fatal( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_intr_t *eip = &(enp->en_intr); | efx_intr_t *eip = &(enp->en_intr); | ||||
efx_intr_ops_t *eiop = eip->ei_eiop; | const efx_intr_ops_t *eiop = eip->ei_eiop; | ||||
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); | ||||
eiop->eio_fatal(enp); | eiop->eio_fatal(enp); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 277 Lines • Show Last 20 Lines |