Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/sfxge/common/efx_vpd.c
Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
#define TAG_NAME_END_DECODE 0x0f | #define TAG_NAME_END_DECODE 0x0f | ||||
#define TAG_NAME_ID_STRING_DECODE 0x02 | #define TAG_NAME_ID_STRING_DECODE 0x02 | ||||
#define TAG_NAME_VPD_R_DECODE 0x10 | #define TAG_NAME_VPD_R_DECODE 0x10 | ||||
#define TAG_NAME_VPD_W_DECODE 0x11 | #define TAG_NAME_VPD_W_DECODE 0x11 | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
static efx_vpd_ops_t __efx_vpd_siena_ops = { | static const efx_vpd_ops_t __efx_vpd_siena_ops = { | ||||
siena_vpd_init, /* evpdo_init */ | siena_vpd_init, /* evpdo_init */ | ||||
siena_vpd_size, /* evpdo_size */ | siena_vpd_size, /* evpdo_size */ | ||||
siena_vpd_read, /* evpdo_read */ | siena_vpd_read, /* evpdo_read */ | ||||
siena_vpd_verify, /* evpdo_verify */ | siena_vpd_verify, /* evpdo_verify */ | ||||
siena_vpd_reinit, /* evpdo_reinit */ | siena_vpd_reinit, /* evpdo_reinit */ | ||||
siena_vpd_get, /* evpdo_get */ | siena_vpd_get, /* evpdo_get */ | ||||
siena_vpd_set, /* evpdo_set */ | siena_vpd_set, /* evpdo_set */ | ||||
siena_vpd_next, /* evpdo_next */ | siena_vpd_next, /* evpdo_next */ | ||||
siena_vpd_write, /* evpdo_write */ | siena_vpd_write, /* evpdo_write */ | ||||
siena_vpd_fini, /* evpdo_fini */ | siena_vpd_fini, /* evpdo_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_vpd_ops_t __efx_vpd_ef10_ops = { | static const efx_vpd_ops_t __efx_vpd_ef10_ops = { | ||||
ef10_vpd_init, /* evpdo_init */ | ef10_vpd_init, /* evpdo_init */ | ||||
ef10_vpd_size, /* evpdo_size */ | ef10_vpd_size, /* evpdo_size */ | ||||
ef10_vpd_read, /* evpdo_read */ | ef10_vpd_read, /* evpdo_read */ | ||||
ef10_vpd_verify, /* evpdo_verify */ | ef10_vpd_verify, /* evpdo_verify */ | ||||
ef10_vpd_reinit, /* evpdo_reinit */ | ef10_vpd_reinit, /* evpdo_reinit */ | ||||
ef10_vpd_get, /* evpdo_get */ | ef10_vpd_get, /* evpdo_get */ | ||||
ef10_vpd_set, /* evpdo_set */ | ef10_vpd_set, /* evpdo_set */ | ||||
ef10_vpd_next, /* evpdo_next */ | ef10_vpd_next, /* evpdo_next */ | ||||
ef10_vpd_write, /* evpdo_write */ | ef10_vpd_write, /* evpdo_write */ | ||||
ef10_vpd_fini, /* evpdo_fini */ | ef10_vpd_fini, /* evpdo_fini */ | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_init( | efx_vpd_init( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop; | const efx_vpd_ops_t *evpdop; | ||||
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_PROBE); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE); | ||||
EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_VPD)); | EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_VPD)); | ||||
switch (enp->en_family) { | switch (enp->en_family) { | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
case EFX_FAMILY_SIENA: | case EFX_FAMILY_SIENA: | ||||
evpdop = (efx_vpd_ops_t *)&__efx_vpd_siena_ops; | evpdop = &__efx_vpd_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: | ||||
evpdop = (efx_vpd_ops_t *)&__efx_vpd_ef10_ops; | evpdop = &__efx_vpd_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: | ||||
evpdop = (efx_vpd_ops_t *)&__efx_vpd_ef10_ops; | evpdop = &__efx_vpd_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 16 Lines | fail1: | ||||
return (rc); | return (rc); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_size( | efx_vpd_size( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__out size_t *sizep) | __out size_t *sizep) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if ((rc = evpdop->evpdo_size(enp, sizep)) != 0) | if ((rc = evpdop->evpdo_size(enp, sizep)) != 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); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_read( | efx_vpd_read( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__out_bcount(size) caddr_t data, | __out_bcount(size) caddr_t data, | ||||
__in size_t size) | __in size_t size) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if ((rc = evpdop->evpdo_read(enp, data, size)) != 0) | if ((rc = evpdop->evpdo_read(enp, data, size)) != 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); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_verify( | efx_vpd_verify( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in_bcount(size) caddr_t data, | __in_bcount(size) caddr_t data, | ||||
__in size_t size) | __in size_t size) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if ((rc = evpdop->evpdo_verify(enp, data, size)) != 0) | if ((rc = evpdop->evpdo_verify(enp, data, size)) != 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); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_reinit( | efx_vpd_reinit( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in_bcount(size) caddr_t data, | __in_bcount(size) caddr_t data, | ||||
__in size_t size) | __in size_t size) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if (evpdop->evpdo_reinit == NULL) { | if (evpdop->evpdo_reinit == NULL) { | ||||
rc = ENOTSUP; | rc = ENOTSUP; | ||||
goto fail1; | goto fail1; | ||||
Show All 14 Lines | fail1: | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_get( | efx_vpd_get( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in_bcount(size) caddr_t data, | __in_bcount(size) caddr_t data, | ||||
__in size_t size, | __in size_t size, | ||||
__inout efx_vpd_value_t *evvp) | __inout efx_vpd_value_t *evvp) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if ((rc = evpdop->evpdo_get(enp, data, size, evvp)) != 0) | if ((rc = evpdop->evpdo_get(enp, data, size, evvp)) != 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); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_set( | efx_vpd_set( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__inout_bcount(size) caddr_t data, | __inout_bcount(size) caddr_t data, | ||||
__in size_t size, | __in size_t size, | ||||
__in efx_vpd_value_t *evvp) | __in efx_vpd_value_t *evvp) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if ((rc = evpdop->evpdo_set(enp, data, size, evvp)) != 0) | if ((rc = evpdop->evpdo_set(enp, data, size, evvp)) != 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); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_next( | efx_vpd_next( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__inout_bcount(size) caddr_t data, | __inout_bcount(size) caddr_t data, | ||||
__in size_t size, | __in size_t size, | ||||
__out efx_vpd_value_t *evvp, | __out efx_vpd_value_t *evvp, | ||||
__inout unsigned int *contp) | __inout unsigned int *contp) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if ((rc = evpdop->evpdo_next(enp, data, size, evvp, contp)) != 0) | if ((rc = evpdop->evpdo_next(enp, data, size, evvp, contp)) != 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); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_vpd_write( | efx_vpd_write( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in_bcount(size) caddr_t data, | __in_bcount(size) caddr_t data, | ||||
__in size_t size) | __in size_t size) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if ((rc = evpdop->evpdo_write(enp, data, size)) != 0) | if ((rc = evpdop->evpdo_write(enp, data, size)) != 0) | ||||
goto fail1; | goto fail1; | ||||
▲ Show 20 Lines • Show All 663 Lines • ▼ Show 20 Lines | fail1: | ||||
return (rc); | return (rc); | ||||
} | } | ||||
void | void | ||||
efx_vpd_fini( | efx_vpd_fini( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_vpd_ops_t *evpdop = enp->en_evpdop; | const efx_vpd_ops_t *evpdop = enp->en_evpdop; | ||||
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_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VPD); | ||||
if (evpdop->evpdo_fini != NULL) | if (evpdop->evpdo_fini != NULL) | ||||
evpdop->evpdo_fini(enp); | evpdop->evpdo_fini(enp); | ||||
enp->en_evpdop = NULL; | enp->en_evpdop = NULL; | ||||
enp->en_mod_flags &= ~EFX_MOD_VPD; | enp->en_mod_flags &= ~EFX_MOD_VPD; | ||||
} | } | ||||
#endif /* EFSYS_OPT_VPD */ | #endif /* EFSYS_OPT_VPD */ |