Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/sfxge/common/efx_nvram.c
Show All 32 Lines | |||||
#include "efx.h" | #include "efx.h" | ||||
#include "efx_impl.h" | #include "efx_impl.h" | ||||
#if EFSYS_OPT_NVRAM | #if EFSYS_OPT_NVRAM | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
static efx_nvram_ops_t __efx_nvram_siena_ops = { | static const efx_nvram_ops_t __efx_nvram_siena_ops = { | ||||
#if EFSYS_OPT_DIAG | #if EFSYS_OPT_DIAG | ||||
siena_nvram_test, /* envo_test */ | siena_nvram_test, /* envo_test */ | ||||
#endif /* EFSYS_OPT_DIAG */ | #endif /* EFSYS_OPT_DIAG */ | ||||
siena_nvram_type_to_partn, /* envo_type_to_partn */ | siena_nvram_type_to_partn, /* envo_type_to_partn */ | ||||
siena_nvram_partn_size, /* envo_partn_size */ | siena_nvram_partn_size, /* envo_partn_size */ | ||||
siena_nvram_partn_rw_start, /* envo_partn_rw_start */ | siena_nvram_partn_rw_start, /* envo_partn_rw_start */ | ||||
siena_nvram_partn_read, /* envo_partn_read */ | siena_nvram_partn_read, /* envo_partn_read */ | ||||
siena_nvram_partn_erase, /* envo_partn_erase */ | siena_nvram_partn_erase, /* envo_partn_erase */ | ||||
siena_nvram_partn_write, /* envo_partn_write */ | siena_nvram_partn_write, /* envo_partn_write */ | ||||
siena_nvram_partn_rw_finish, /* envo_partn_rw_finish */ | siena_nvram_partn_rw_finish, /* envo_partn_rw_finish */ | ||||
siena_nvram_partn_get_version, /* envo_partn_get_version */ | siena_nvram_partn_get_version, /* envo_partn_get_version */ | ||||
siena_nvram_partn_set_version, /* envo_partn_set_version */ | siena_nvram_partn_set_version, /* envo_partn_set_version */ | ||||
NULL, /* envo_partn_validate */ | NULL, /* envo_partn_validate */ | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_SIENA */ | #endif /* EFSYS_OPT_SIENA */ | ||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD | #if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD | ||||
static efx_nvram_ops_t __efx_nvram_ef10_ops = { | static const efx_nvram_ops_t __efx_nvram_ef10_ops = { | ||||
#if EFSYS_OPT_DIAG | #if EFSYS_OPT_DIAG | ||||
ef10_nvram_test, /* envo_test */ | ef10_nvram_test, /* envo_test */ | ||||
#endif /* EFSYS_OPT_DIAG */ | #endif /* EFSYS_OPT_DIAG */ | ||||
ef10_nvram_type_to_partn, /* envo_type_to_partn */ | ef10_nvram_type_to_partn, /* envo_type_to_partn */ | ||||
ef10_nvram_partn_size, /* envo_partn_size */ | ef10_nvram_partn_size, /* envo_partn_size */ | ||||
ef10_nvram_partn_rw_start, /* envo_partn_rw_start */ | ef10_nvram_partn_rw_start, /* envo_partn_rw_start */ | ||||
ef10_nvram_partn_read, /* envo_partn_read */ | ef10_nvram_partn_read, /* envo_partn_read */ | ||||
ef10_nvram_partn_erase, /* envo_partn_erase */ | ef10_nvram_partn_erase, /* envo_partn_erase */ | ||||
ef10_nvram_partn_write, /* envo_partn_write */ | ef10_nvram_partn_write, /* envo_partn_write */ | ||||
ef10_nvram_partn_rw_finish, /* envo_partn_rw_finish */ | ef10_nvram_partn_rw_finish, /* envo_partn_rw_finish */ | ||||
ef10_nvram_partn_get_version, /* envo_partn_get_version */ | ef10_nvram_partn_get_version, /* envo_partn_get_version */ | ||||
ef10_nvram_partn_set_version, /* envo_partn_set_version */ | ef10_nvram_partn_set_version, /* envo_partn_set_version */ | ||||
ef10_nvram_buffer_validate, /* envo_buffer_validate */ | ef10_nvram_buffer_validate, /* envo_buffer_validate */ | ||||
}; | }; | ||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | #endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */ | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_init( | efx_nvram_init( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_nvram_ops_t *envop; | const efx_nvram_ops_t *envop; | ||||
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_NVRAM)); | EFSYS_ASSERT(!(enp->en_mod_flags & EFX_MOD_NVRAM)); | ||||
switch (enp->en_family) { | switch (enp->en_family) { | ||||
#if EFSYS_OPT_SIENA | #if EFSYS_OPT_SIENA | ||||
case EFX_FAMILY_SIENA: | case EFX_FAMILY_SIENA: | ||||
envop = (efx_nvram_ops_t *)&__efx_nvram_siena_ops; | envop = &__efx_nvram_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: | ||||
envop = (efx_nvram_ops_t *)&__efx_nvram_ef10_ops; | envop = &__efx_nvram_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: | ||||
envop = (efx_nvram_ops_t *)&__efx_nvram_ef10_ops; | envop = &__efx_nvram_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 10 Lines | |||||
} | } | ||||
#if EFSYS_OPT_DIAG | #if EFSYS_OPT_DIAG | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_test( | efx_nvram_test( | ||||
__in efx_nic_t *enp) | __in efx_nic_t *enp) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
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_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
if ((rc = envop->envo_test(enp)) != 0) | if ((rc = envop->envo_test(enp)) != 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); | ||||
} | } | ||||
#endif /* EFSYS_OPT_DIAG */ | #endif /* EFSYS_OPT_DIAG */ | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_size( | efx_nvram_size( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type, | __in efx_nvram_type_t type, | ||||
__out size_t *sizep) | __out size_t *sizep) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
uint32_t partn; | uint32_t partn; | ||||
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_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | ||||
Show All 16 Lines | fail1: | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_get_version( | efx_nvram_get_version( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type, | __in efx_nvram_type_t type, | ||||
__out uint32_t *subtypep, | __out uint32_t *subtypep, | ||||
__out_ecount(4) uint16_t version[4]) | __out_ecount(4) uint16_t version[4]) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
uint32_t partn; | uint32_t partn; | ||||
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_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | ||||
Show All 16 Lines | |||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_rw_start( | efx_nvram_rw_start( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type, | __in efx_nvram_type_t type, | ||||
__out_opt size_t *chunk_sizep) | __out_opt size_t *chunk_sizep) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
uint32_t partn; | uint32_t partn; | ||||
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_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | ||||
EFSYS_ASSERT3U(type, !=, EFX_NVRAM_INVALID); | EFSYS_ASSERT3U(type, !=, EFX_NVRAM_INVALID); | ||||
Show All 21 Lines | fail1: | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_read_chunk( | efx_nvram_read_chunk( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type, | __in efx_nvram_type_t type, | ||||
__in unsigned int offset, | __in unsigned int offset, | ||||
__out_bcount(size) caddr_t data, | __out_bcount(size) caddr_t data, | ||||
__in size_t size) | __in size_t size) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
uint32_t partn; | uint32_t partn; | ||||
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_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | ||||
EFSYS_ASSERT3U(type, !=, EFX_NVRAM_INVALID); | EFSYS_ASSERT3U(type, !=, EFX_NVRAM_INVALID); | ||||
Show All 16 Lines | fail1: | ||||
return (rc); | return (rc); | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_erase( | efx_nvram_erase( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type) | __in efx_nvram_type_t type) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
unsigned int offset = 0; | unsigned int offset = 0; | ||||
size_t size = 0; | size_t size = 0; | ||||
uint32_t partn; | uint32_t partn; | ||||
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_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
Show All 26 Lines | fail1: | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_write_chunk( | efx_nvram_write_chunk( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type, | __in efx_nvram_type_t type, | ||||
__in unsigned int offset, | __in unsigned int offset, | ||||
__in_bcount(size) caddr_t data, | __in_bcount(size) caddr_t data, | ||||
__in size_t size) | __in size_t size) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
uint32_t partn; | uint32_t partn; | ||||
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_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | ||||
EFSYS_ASSERT3U(type, !=, EFX_NVRAM_INVALID); | EFSYS_ASSERT3U(type, !=, EFX_NVRAM_INVALID); | ||||
Show All 16 Lines | fail1: | ||||
return (rc); | return (rc); | ||||
} | } | ||||
void | void | ||||
efx_nvram_rw_finish( | efx_nvram_rw_finish( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type) | __in efx_nvram_type_t type) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
uint32_t partn; | uint32_t partn; | ||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); | ||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | ||||
EFSYS_ASSERT3U(type, !=, EFX_NVRAM_INVALID); | EFSYS_ASSERT3U(type, !=, EFX_NVRAM_INVALID); | ||||
EFSYS_ASSERT3U(enp->en_nvram_locked, ==, type); | EFSYS_ASSERT3U(enp->en_nvram_locked, ==, type); | ||||
if (envop->envo_type_to_partn(enp, type, &partn) == 0) | if (envop->envo_type_to_partn(enp, type, &partn) == 0) | ||||
envop->envo_partn_rw_finish(enp, partn); | envop->envo_partn_rw_finish(enp, partn); | ||||
enp->en_nvram_locked = EFX_NVRAM_INVALID; | enp->en_nvram_locked = EFX_NVRAM_INVALID; | ||||
} | } | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_set_version( | efx_nvram_set_version( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type, | __in efx_nvram_type_t type, | ||||
__in_ecount(4) uint16_t version[4]) | __in_ecount(4) uint16_t version[4]) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
uint32_t partn; | uint32_t partn; | ||||
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_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | ||||
Show All 24 Lines | |||||
/* Validate buffer contents (before writing to flash) */ | /* Validate buffer contents (before writing to flash) */ | ||||
__checkReturn efx_rc_t | __checkReturn efx_rc_t | ||||
efx_nvram_validate( | efx_nvram_validate( | ||||
__in efx_nic_t *enp, | __in efx_nic_t *enp, | ||||
__in efx_nvram_type_t type, | __in efx_nvram_type_t type, | ||||
__in_bcount(partn_size) caddr_t partn_data, | __in_bcount(partn_size) caddr_t partn_data, | ||||
__in size_t partn_size) | __in size_t partn_size) | ||||
{ | { | ||||
efx_nvram_ops_t *envop = enp->en_envop; | const efx_nvram_ops_t *envop = enp->en_envop; | ||||
uint32_t partn; | uint32_t partn; | ||||
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_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NVRAM); | ||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES); | ||||
▲ Show 20 Lines • Show All 541 Lines • Show Last 20 Lines |