Loading drivers/net/sfc/mcdi.c +46 −0 Original line number Original line Diff line number Diff line Loading @@ -896,6 +896,52 @@ int efx_mcdi_nvram_update_finish(struct efx_nic *efx, unsigned int type) return rc; return rc; } } static int efx_mcdi_nvram_test(struct efx_nic *efx, unsigned int type) { u8 inbuf[MC_CMD_NVRAM_TEST_IN_LEN]; u8 outbuf[MC_CMD_NVRAM_TEST_OUT_LEN]; int rc; MCDI_SET_DWORD(inbuf, NVRAM_TEST_IN_TYPE, type); rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_TEST, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf), NULL); if (rc) return rc; switch (MCDI_DWORD(outbuf, NVRAM_TEST_OUT_RESULT)) { case MC_CMD_NVRAM_TEST_PASS: case MC_CMD_NVRAM_TEST_NOTSUPP: return 0; default: return -EIO; } } int efx_mcdi_nvram_test_all(struct efx_nic *efx) { u32 nvram_types; unsigned int type; int rc; rc = efx_mcdi_nvram_types(efx, &nvram_types); if (rc) return rc; type = 0; while (nvram_types != 0) { if (nvram_types & 1) { rc = efx_mcdi_nvram_test(efx, type); if (rc) return rc; } type++; nvram_types >>= 1; } return 0; } static int efx_mcdi_read_assertion(struct efx_nic *efx) static int efx_mcdi_read_assertion(struct efx_nic *efx) { { u8 inbuf[MC_CMD_GET_ASSERTS_IN_LEN]; u8 inbuf[MC_CMD_GET_ASSERTS_IN_LEN]; Loading drivers/net/sfc/mcdi.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -116,6 +116,7 @@ extern int efx_mcdi_nvram_erase(struct efx_nic *efx, unsigned int type, loff_t offset, size_t length); loff_t offset, size_t length); extern int efx_mcdi_nvram_update_finish(struct efx_nic *efx, extern int efx_mcdi_nvram_update_finish(struct efx_nic *efx, unsigned int type); unsigned int type); extern int efx_mcdi_nvram_test_all(struct efx_nic *efx); extern int efx_mcdi_handle_assertion(struct efx_nic *efx); extern int efx_mcdi_handle_assertion(struct efx_nic *efx); extern void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode); extern void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode); extern int efx_mcdi_reset_port(struct efx_nic *efx); extern int efx_mcdi_reset_port(struct efx_nic *efx); Loading drivers/net/sfc/siena.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -583,6 +583,7 @@ struct efx_nic_type siena_a0_nic_type = { .set_wol = siena_set_wol, .set_wol = siena_set_wol, .resume_wol = siena_init_wol, .resume_wol = siena_init_wol, .test_registers = siena_test_registers, .test_registers = siena_test_registers, .test_nvram = efx_mcdi_nvram_test_all, .default_mac_ops = &efx_mcdi_mac_operations, .default_mac_ops = &efx_mcdi_mac_operations, .revision = EFX_REV_SIENA_A0, .revision = EFX_REV_SIENA_A0, Loading Loading
drivers/net/sfc/mcdi.c +46 −0 Original line number Original line Diff line number Diff line Loading @@ -896,6 +896,52 @@ int efx_mcdi_nvram_update_finish(struct efx_nic *efx, unsigned int type) return rc; return rc; } } static int efx_mcdi_nvram_test(struct efx_nic *efx, unsigned int type) { u8 inbuf[MC_CMD_NVRAM_TEST_IN_LEN]; u8 outbuf[MC_CMD_NVRAM_TEST_OUT_LEN]; int rc; MCDI_SET_DWORD(inbuf, NVRAM_TEST_IN_TYPE, type); rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_TEST, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf), NULL); if (rc) return rc; switch (MCDI_DWORD(outbuf, NVRAM_TEST_OUT_RESULT)) { case MC_CMD_NVRAM_TEST_PASS: case MC_CMD_NVRAM_TEST_NOTSUPP: return 0; default: return -EIO; } } int efx_mcdi_nvram_test_all(struct efx_nic *efx) { u32 nvram_types; unsigned int type; int rc; rc = efx_mcdi_nvram_types(efx, &nvram_types); if (rc) return rc; type = 0; while (nvram_types != 0) { if (nvram_types & 1) { rc = efx_mcdi_nvram_test(efx, type); if (rc) return rc; } type++; nvram_types >>= 1; } return 0; } static int efx_mcdi_read_assertion(struct efx_nic *efx) static int efx_mcdi_read_assertion(struct efx_nic *efx) { { u8 inbuf[MC_CMD_GET_ASSERTS_IN_LEN]; u8 inbuf[MC_CMD_GET_ASSERTS_IN_LEN]; Loading
drivers/net/sfc/mcdi.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -116,6 +116,7 @@ extern int efx_mcdi_nvram_erase(struct efx_nic *efx, unsigned int type, loff_t offset, size_t length); loff_t offset, size_t length); extern int efx_mcdi_nvram_update_finish(struct efx_nic *efx, extern int efx_mcdi_nvram_update_finish(struct efx_nic *efx, unsigned int type); unsigned int type); extern int efx_mcdi_nvram_test_all(struct efx_nic *efx); extern int efx_mcdi_handle_assertion(struct efx_nic *efx); extern int efx_mcdi_handle_assertion(struct efx_nic *efx); extern void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode); extern void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode); extern int efx_mcdi_reset_port(struct efx_nic *efx); extern int efx_mcdi_reset_port(struct efx_nic *efx); Loading
drivers/net/sfc/siena.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -583,6 +583,7 @@ struct efx_nic_type siena_a0_nic_type = { .set_wol = siena_set_wol, .set_wol = siena_set_wol, .resume_wol = siena_init_wol, .resume_wol = siena_init_wol, .test_registers = siena_test_registers, .test_registers = siena_test_registers, .test_nvram = efx_mcdi_nvram_test_all, .default_mac_ops = &efx_mcdi_mac_operations, .default_mac_ops = &efx_mcdi_mac_operations, .revision = EFX_REV_SIENA_A0, .revision = EFX_REV_SIENA_A0, Loading