Lines Matching refs:efx
49 static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
51 static bool efx_mcdi_poll_once(struct efx_nic *efx);
52 static void efx_mcdi_abandon(struct efx_nic *efx);
61 int efx_mcdi_init(struct efx_nic *efx) in efx_mcdi_init() argument
67 efx->mcdi = kzalloc(sizeof(*efx->mcdi), GFP_KERNEL); in efx_mcdi_init()
68 if (!efx->mcdi) in efx_mcdi_init()
71 mcdi = efx_mcdi(efx); in efx_mcdi_init()
72 mcdi->efx = efx; in efx_mcdi_init()
89 (void) efx_mcdi_poll_reboot(efx); in efx_mcdi_init()
93 rc = efx_mcdi_handle_assertion(efx); in efx_mcdi_init()
100 rc = efx_mcdi_drv_attach(efx, true, &already_attached); in efx_mcdi_init()
102 netif_err(efx, probe, efx->net_dev, in efx_mcdi_init()
108 netif_err(efx, probe, efx->net_dev, in efx_mcdi_init()
111 if (efx->mcdi->fn_flags & in efx_mcdi_init()
113 efx->primary = efx; in efx_mcdi_init()
121 kfree(efx->mcdi); in efx_mcdi_init()
122 efx->mcdi = NULL; in efx_mcdi_init()
127 void efx_mcdi_detach(struct efx_nic *efx) in efx_mcdi_detach() argument
129 if (!efx->mcdi) in efx_mcdi_detach()
132 BUG_ON(efx->mcdi->iface.state != MCDI_STATE_QUIESCENT); in efx_mcdi_detach()
135 efx_mcdi_drv_attach(efx, false, NULL); in efx_mcdi_detach()
138 void efx_mcdi_fini(struct efx_nic *efx) in efx_mcdi_fini() argument
140 if (!efx->mcdi) in efx_mcdi_fini()
144 free_page((unsigned long)efx->mcdi->iface.logging_buffer); in efx_mcdi_fini()
147 kfree(efx->mcdi); in efx_mcdi_fini()
150 static void efx_mcdi_send_request(struct efx_nic *efx, unsigned cmd, in efx_mcdi_send_request() argument
153 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_send_request()
173 if (efx->type->mcdi_max_ver == 1) { in efx_mcdi_send_request()
222 netif_info(efx, hw, efx->net_dev, "MCDI RPC REQ:%s\n", buf); in efx_mcdi_send_request()
226 efx->type->mcdi_request(efx, hdr, hdr_len, inbuf, inlen); in efx_mcdi_send_request()
263 static void efx_mcdi_read_response_header(struct efx_nic *efx) in efx_mcdi_read_response_header() argument
265 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_read_response_header()
272 efx->type->mcdi_read_response(efx, &hdr, 0, 4); in efx_mcdi_read_response_header()
281 efx->type->mcdi_read_response(efx, &hdr, 4, 4); in efx_mcdi_read_response_header()
304 efx->type->mcdi_read_response(efx, &hdr, (i * 4), 4); in efx_mcdi_read_response_header()
310 efx->type->mcdi_read_response(efx, &hdr, in efx_mcdi_read_response_header()
316 netif_info(efx, hw, efx->net_dev, "MCDI RPC RESP:%s\n", buf); in efx_mcdi_read_response_header()
322 netif_err(efx, hw, efx->net_dev, "MC rebooted\n"); in efx_mcdi_read_response_header()
325 netif_err(efx, hw, efx->net_dev, in efx_mcdi_read_response_header()
330 efx->type->mcdi_read_response(efx, &hdr, mcdi->resp_hdr_len, 4); in efx_mcdi_read_response_header()
338 static bool efx_mcdi_poll_once(struct efx_nic *efx) in efx_mcdi_poll_once() argument
340 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_poll_once()
343 if (!efx->type->mcdi_poll_response(efx)) in efx_mcdi_poll_once()
347 efx_mcdi_read_response_header(efx); in efx_mcdi_poll_once()
353 static int efx_mcdi_poll(struct efx_nic *efx) in efx_mcdi_poll() argument
355 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_poll()
361 rc = efx_mcdi_poll_reboot(efx); in efx_mcdi_poll()
388 if (efx_mcdi_poll_once(efx)) in efx_mcdi_poll()
402 int efx_mcdi_poll_reboot(struct efx_nic *efx) in efx_mcdi_poll_reboot() argument
404 if (!efx->mcdi) in efx_mcdi_poll_reboot()
407 return efx->type->mcdi_poll_reboot(efx); in efx_mcdi_poll_reboot()
428 static int efx_mcdi_await_completion(struct efx_nic *efx) in efx_mcdi_await_completion() argument
430 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_await_completion()
445 return efx_mcdi_poll(efx); in efx_mcdi_await_completion()
469 struct efx_nic *efx = mcdi->efx; in efx_mcdi_release() local
477 efx_mcdi_send_request(efx, async->cmd, in efx_mcdi_release()
500 struct efx_nic *efx = mcdi->efx; in efx_mcdi_complete_async() local
543 efx->type->mcdi_read_response(efx, outbuf, hdr_len, in efx_mcdi_complete_async()
547 efx->type->mcdi_read_response(efx, errbuf, hdr_len, in efx_mcdi_complete_async()
549 efx_mcdi_display_error(efx, async->cmd, async->inlen, errbuf, in efx_mcdi_complete_async()
554 async->complete(efx, async->cookie, rc, outbuf, in efx_mcdi_complete_async()
563 static void efx_mcdi_ev_cpl(struct efx_nic *efx, unsigned int seqno, in efx_mcdi_ev_cpl() argument
566 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_ev_cpl()
576 netif_err(efx, hw, efx->net_dev, in efx_mcdi_ev_cpl()
580 if (efx->type->mcdi_max_ver >= 2) { in efx_mcdi_ev_cpl()
582 efx_mcdi_read_response_header(efx); in efx_mcdi_ev_cpl()
615 efx_mcdi_check_supported(struct efx_nic *efx, unsigned int cmd, size_t inlen) in efx_mcdi_check_supported() argument
617 if (efx->type->mcdi_max_ver < 0 || in efx_mcdi_check_supported()
618 (efx->type->mcdi_max_ver < 2 && in efx_mcdi_check_supported()
623 (efx->type->mcdi_max_ver < 2 && in efx_mcdi_check_supported()
630 static bool efx_mcdi_get_proxy_handle(struct efx_nic *efx, in efx_mcdi_get_proxy_handle() argument
640 efx->type->mcdi_read_response(efx, testbuf, hdr_len, buflen); in efx_mcdi_get_proxy_handle()
649 static int _efx_mcdi_rpc_finish(struct efx_nic *efx, unsigned int cmd, in _efx_mcdi_rpc_finish() argument
655 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in _efx_mcdi_rpc_finish()
660 rc = efx_mcdi_poll(efx); in _efx_mcdi_rpc_finish()
662 rc = efx_mcdi_await_completion(efx); in _efx_mcdi_rpc_finish()
665 netif_err(efx, hw, efx->net_dev, in _efx_mcdi_rpc_finish()
669 if (mcdi->mode == MCDI_MODE_EVENTS && efx_mcdi_poll_once(efx)) { in _efx_mcdi_rpc_finish()
670 netif_err(efx, hw, efx->net_dev, in _efx_mcdi_rpc_finish()
675 efx_mcdi_abandon(efx); in _efx_mcdi_rpc_finish()
711 efx->type->mcdi_read_response(efx, outbuf, hdr_len, in _efx_mcdi_rpc_finish()
716 efx->type->mcdi_read_response(efx, errbuf, hdr_len, err_len); in _efx_mcdi_rpc_finish()
721 netif_err(efx, hw, efx->net_dev, "MC reboot detected\n"); in _efx_mcdi_rpc_finish()
722 netif_dbg(efx, hw, efx->net_dev, "MC rebooted during command %d rc %d\n", in _efx_mcdi_rpc_finish()
724 if (efx->type->mcdi_reboot_detected) in _efx_mcdi_rpc_finish()
725 efx->type->mcdi_reboot_detected(efx); in _efx_mcdi_rpc_finish()
726 efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE); in _efx_mcdi_rpc_finish()
728 efx_mcdi_get_proxy_handle(efx, hdr_len, data_len, in _efx_mcdi_rpc_finish()
734 efx_mcdi_display_error(efx, cmd, inlen, errbuf, err_len, in _efx_mcdi_rpc_finish()
740 efx_mcdi_poll_reboot(efx); in _efx_mcdi_rpc_finish()
759 static void efx_mcdi_ev_proxy_response(struct efx_nic *efx, in efx_mcdi_ev_proxy_response() argument
762 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_ev_proxy_response()
775 static int efx_mcdi_proxy_wait(struct efx_nic *efx, u32 handle, bool quiet) in efx_mcdi_proxy_wait() argument
777 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_proxy_wait()
787 netif_dbg(efx, hw, efx->net_dev, in efx_mcdi_proxy_wait()
791 netif_warn(efx, hw, efx->net_dev, in efx_mcdi_proxy_wait()
800 static int _efx_mcdi_rpc(struct efx_nic *efx, unsigned int cmd, in _efx_mcdi_rpc() argument
814 rc = efx_mcdi_rpc_start(efx, cmd, inbuf, inlen); in _efx_mcdi_rpc()
818 rc = _efx_mcdi_rpc_finish(efx, cmd, inlen, outbuf, outlen, in _efx_mcdi_rpc()
826 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in _efx_mcdi_rpc()
828 netif_dbg(efx, hw, efx->net_dev, in _efx_mcdi_rpc()
831 rc = efx_mcdi_proxy_wait(efx, proxy_handle, quiet); in _efx_mcdi_rpc()
834 netif_dbg(efx, hw, efx->net_dev, in _efx_mcdi_rpc()
839 efx_mcdi_send_request(efx, cmd, inbuf, inlen); in _efx_mcdi_rpc()
841 rc = _efx_mcdi_rpc_finish(efx, cmd, inlen, in _efx_mcdi_rpc()
845 netif_cond_dbg(efx, hw, efx->net_dev, rc == -EPERM, err, in _efx_mcdi_rpc()
850 efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE); in _efx_mcdi_rpc()
858 static int _efx_mcdi_rpc_evb_retry(struct efx_nic *efx, unsigned cmd, in _efx_mcdi_rpc_evb_retry() argument
866 rc = _efx_mcdi_rpc(efx, cmd, inbuf, inlen, in _efx_mcdi_rpc_evb_retry()
870 efx->type->is_vf) { in _efx_mcdi_rpc_evb_retry()
878 netif_dbg(efx, hw, efx->net_dev, in _efx_mcdi_rpc_evb_retry()
884 rc = _efx_mcdi_rpc(efx, cmd, inbuf, inlen, in _efx_mcdi_rpc_evb_retry()
895 efx_mcdi_display_error(efx, cmd, inlen, in _efx_mcdi_rpc_evb_retry()
925 int efx_mcdi_rpc(struct efx_nic *efx, unsigned cmd, in efx_mcdi_rpc() argument
930 return _efx_mcdi_rpc_evb_retry(efx, cmd, inbuf, inlen, outbuf, outlen, in efx_mcdi_rpc()
942 int efx_mcdi_rpc_quiet(struct efx_nic *efx, unsigned cmd, in efx_mcdi_rpc_quiet() argument
947 return _efx_mcdi_rpc_evb_retry(efx, cmd, inbuf, inlen, outbuf, outlen, in efx_mcdi_rpc_quiet()
951 int efx_mcdi_rpc_start(struct efx_nic *efx, unsigned cmd, in efx_mcdi_rpc_start() argument
954 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_rpc_start()
957 rc = efx_mcdi_check_supported(efx, cmd, inlen); in efx_mcdi_rpc_start()
961 if (efx->mc_bist_for_other_fn) in efx_mcdi_rpc_start()
968 efx_mcdi_send_request(efx, cmd, inbuf, inlen); in efx_mcdi_rpc_start()
972 static int _efx_mcdi_rpc_async(struct efx_nic *efx, unsigned int cmd, in _efx_mcdi_rpc_async() argument
978 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in _efx_mcdi_rpc_async()
982 rc = efx_mcdi_check_supported(efx, cmd, inlen); in _efx_mcdi_rpc_async()
986 if (efx->mc_bist_for_other_fn) in _efx_mcdi_rpc_async()
1012 efx_mcdi_send_request(efx, cmd, inbuf, inlen); in _efx_mcdi_rpc_async()
1047 efx_mcdi_rpc_async(struct efx_nic *efx, unsigned int cmd, in efx_mcdi_rpc_async() argument
1051 return _efx_mcdi_rpc_async(efx, cmd, inbuf, inlen, outlen, complete, in efx_mcdi_rpc_async()
1055 int efx_mcdi_rpc_async_quiet(struct efx_nic *efx, unsigned int cmd, in efx_mcdi_rpc_async_quiet() argument
1060 return _efx_mcdi_rpc_async(efx, cmd, inbuf, inlen, outlen, complete, in efx_mcdi_rpc_async_quiet()
1064 int efx_mcdi_rpc_finish(struct efx_nic *efx, unsigned cmd, size_t inlen, in efx_mcdi_rpc_finish() argument
1068 return _efx_mcdi_rpc_finish(efx, cmd, inlen, outbuf, outlen, in efx_mcdi_rpc_finish()
1072 int efx_mcdi_rpc_finish_quiet(struct efx_nic *efx, unsigned cmd, size_t inlen, in efx_mcdi_rpc_finish_quiet() argument
1076 return _efx_mcdi_rpc_finish(efx, cmd, inlen, outbuf, outlen, in efx_mcdi_rpc_finish_quiet()
1080 void efx_mcdi_display_error(struct efx_nic *efx, unsigned cmd, in efx_mcdi_display_error() argument
1090 netif_cond_dbg(efx, hw, efx->net_dev, rc == -EPERM, err, in efx_mcdi_display_error()
1099 void efx_mcdi_mode_poll(struct efx_nic *efx) in efx_mcdi_mode_poll() argument
1103 if (!efx->mcdi) in efx_mcdi_mode_poll()
1106 mcdi = efx_mcdi(efx); in efx_mcdi_mode_poll()
1130 void efx_mcdi_flush_async(struct efx_nic *efx) in efx_mcdi_flush_async() argument
1135 if (!efx->mcdi) in efx_mcdi_flush_async()
1138 mcdi = efx_mcdi(efx); in efx_mcdi_flush_async()
1150 efx_mcdi_poll(efx); in efx_mcdi_flush_async()
1161 async->complete(efx, async->cookie, -ENETDOWN, NULL, 0); in efx_mcdi_flush_async()
1167 void efx_mcdi_mode_event(struct efx_nic *efx) in efx_mcdi_mode_event() argument
1171 if (!efx->mcdi) in efx_mcdi_mode_event()
1174 mcdi = efx_mcdi(efx); in efx_mcdi_mode_event()
1194 static void efx_mcdi_ev_death(struct efx_nic *efx, int rc) in efx_mcdi_ev_death() argument
1196 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_ev_death()
1237 rc = efx_mcdi_poll_reboot(efx); in efx_mcdi_ev_death()
1249 if (!rc && efx->type->mcdi_reboot_detected) in efx_mcdi_ev_death()
1250 efx->type->mcdi_reboot_detected(efx); in efx_mcdi_ev_death()
1255 efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE); in efx_mcdi_ev_death()
1266 static void efx_mcdi_ev_bist(struct efx_nic *efx) in efx_mcdi_ev_bist() argument
1268 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_ev_bist()
1271 efx->mc_bist_for_other_fn = true; in efx_mcdi_ev_bist()
1283 efx_schedule_reset(efx, RESET_TYPE_MC_BIST); in efx_mcdi_ev_bist()
1290 static void efx_mcdi_abandon(struct efx_nic *efx) in efx_mcdi_abandon() argument
1292 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_abandon()
1296 netif_dbg(efx, hw, efx->net_dev, "MCDI is timing out; trying to recover\n"); in efx_mcdi_abandon()
1297 efx_schedule_reset(efx, RESET_TYPE_MCDI_TIMEOUT); in efx_mcdi_abandon()
1304 struct efx_nic *efx = channel->efx; in efx_mcdi_process_event() local
1310 netif_err(efx, hw, efx->net_dev, in efx_mcdi_process_event()
1312 efx_mcdi_ev_death(efx, -EINTR); in efx_mcdi_process_event()
1316 netif_info(efx, wol, efx->net_dev, "MCDI PM event.\n"); in efx_mcdi_process_event()
1320 efx_mcdi_ev_cpl(efx, in efx_mcdi_process_event()
1327 efx_mcdi_process_link_change(efx, event); in efx_mcdi_process_event()
1330 efx_mcdi_sensor_event(efx, event); in efx_mcdi_process_event()
1333 netif_dbg(efx, hw, efx->net_dev, in efx_mcdi_process_event()
1338 netif_info(efx, hw, efx->net_dev, "MC Reboot\n"); in efx_mcdi_process_event()
1339 efx_mcdi_ev_death(efx, -EIO); in efx_mcdi_process_event()
1342 netif_info(efx, hw, efx->net_dev, "MC entered BIST mode\n"); in efx_mcdi_process_event()
1343 efx_mcdi_ev_bist(efx); in efx_mcdi_process_event()
1349 if (efx->type->sriov_flr) in efx_mcdi_process_event()
1350 efx->type->sriov_flr(efx, in efx_mcdi_process_event()
1356 efx_ptp_event(efx, event); in efx_mcdi_process_event()
1372 efx_ef10_handle_drain_event(efx); in efx_mcdi_process_event()
1376 netif_err(efx, hw, efx->net_dev, in efx_mcdi_process_event()
1380 efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR); in efx_mcdi_process_event()
1383 efx_mcdi_ev_proxy_response(efx, in efx_mcdi_process_event()
1388 netif_err(efx, hw, efx->net_dev, in efx_mcdi_process_event()
1401 void efx_mcdi_print_fwver(struct efx_nic *efx, char *buf, size_t len) in efx_mcdi_print_fwver() argument
1410 rc = efx_mcdi_rpc(efx, MC_CMD_GET_VERSION, NULL, 0, in efx_mcdi_print_fwver()
1427 if (efx_nic_rev(efx) >= EFX_REV_HUNT_A0) { in efx_mcdi_print_fwver()
1428 struct efx_ef10_nic_data *nic_data = efx->nic_data; in efx_mcdi_print_fwver()
1445 netif_err(efx, probe, efx->net_dev, "%s: failed rc=%d\n", __func__, rc); in efx_mcdi_print_fwver()
1449 static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, in efx_mcdi_drv_attach() argument
1462 rc = efx_mcdi_rpc_quiet(efx, MC_CMD_DRV_ATTACH, inbuf, sizeof(inbuf), in efx_mcdi_drv_attach()
1469 netif_dbg(efx, probe, efx->net_dev, in efx_mcdi_drv_attach()
1473 rc = efx_mcdi_rpc_quiet(efx, MC_CMD_DRV_ATTACH, inbuf, in efx_mcdi_drv_attach()
1478 efx_mcdi_display_error(efx, MC_CMD_DRV_ATTACH, sizeof(inbuf), in efx_mcdi_drv_attach()
1489 efx->mcdi->fn_flags = in efx_mcdi_drv_attach()
1494 efx->mcdi->fn_flags = in efx_mcdi_drv_attach()
1497 (efx_port_num(efx) == 0) << in efx_mcdi_drv_attach()
1512 netif_err(efx, probe, efx->net_dev, "%s: failed rc=%d\n", __func__, rc); in efx_mcdi_drv_attach()
1516 int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, in efx_mcdi_get_board_cfg() argument
1521 int port_num = efx_port_num(efx); in efx_mcdi_get_board_cfg()
1529 rc = efx_mcdi_rpc(efx, MC_CMD_GET_BOARD_CFG, NULL, 0, in efx_mcdi_get_board_cfg()
1566 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d len=%d\n", in efx_mcdi_get_board_cfg()
1572 int efx_mcdi_log_ctrl(struct efx_nic *efx, bool evq, bool uart, u32 dest_evq) in efx_mcdi_log_ctrl() argument
1588 rc = efx_mcdi_rpc(efx, MC_CMD_LOG_CTRL, inbuf, sizeof(inbuf), in efx_mcdi_log_ctrl()
1593 int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out) in efx_mcdi_nvram_types() argument
1601 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_TYPES, NULL, 0, in efx_mcdi_nvram_types()
1614 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", in efx_mcdi_nvram_types()
1619 int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type, in efx_mcdi_nvram_info() argument
1630 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_INFO, inbuf, sizeof(inbuf), in efx_mcdi_nvram_info()
1646 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc); in efx_mcdi_nvram_info()
1650 static int efx_mcdi_nvram_test(struct efx_nic *efx, unsigned int type) in efx_mcdi_nvram_test() argument
1658 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_TEST, inbuf, sizeof(inbuf), in efx_mcdi_nvram_test()
1672 int efx_mcdi_nvram_test_all(struct efx_nic *efx) in efx_mcdi_nvram_test_all() argument
1678 rc = efx_mcdi_nvram_types(efx, &nvram_types); in efx_mcdi_nvram_test_all()
1685 rc = efx_mcdi_nvram_test(efx, type); in efx_mcdi_nvram_test_all()
1696 netif_err(efx, hw, efx->net_dev, "%s: failed type=%u\n", in efx_mcdi_nvram_test_all()
1699 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc); in efx_mcdi_nvram_test_all()
1706 static int efx_mcdi_read_assertion(struct efx_nic *efx) in efx_mcdi_read_assertion() argument
1724 rc = efx_mcdi_rpc_quiet(efx, MC_CMD_GET_ASSERTS, in efx_mcdi_read_assertion()
1732 efx_mcdi_display_error(efx, MC_CMD_GET_ASSERTS, in efx_mcdi_read_assertion()
1752 netif_err(efx, hw, efx->net_dev, in efx_mcdi_read_assertion()
1761 netif_err(efx, hw, efx->net_dev, "R%.2d (?): 0x%.8x\n", in efx_mcdi_read_assertion()
1769 static int efx_mcdi_exit_assertion(struct efx_nic *efx) in efx_mcdi_exit_assertion() argument
1783 rc = efx_mcdi_rpc_quiet(efx, MC_CMD_REBOOT, inbuf, MC_CMD_REBOOT_IN_LEN, in efx_mcdi_exit_assertion()
1788 efx_mcdi_display_error(efx, MC_CMD_REBOOT, MC_CMD_REBOOT_IN_LEN, in efx_mcdi_exit_assertion()
1793 int efx_mcdi_handle_assertion(struct efx_nic *efx) in efx_mcdi_handle_assertion() argument
1797 rc = efx_mcdi_read_assertion(efx); in efx_mcdi_handle_assertion()
1801 return efx_mcdi_exit_assertion(efx); in efx_mcdi_handle_assertion()
1804 void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) in efx_mcdi_set_id_led() argument
1817 rc = efx_mcdi_rpc(efx, MC_CMD_SET_ID_LED, inbuf, sizeof(inbuf), in efx_mcdi_set_id_led()
1821 static int efx_mcdi_reset_func(struct efx_nic *efx) in efx_mcdi_reset_func() argument
1829 rc = efx_mcdi_rpc(efx, MC_CMD_ENTITY_RESET, inbuf, sizeof(inbuf), in efx_mcdi_reset_func()
1834 static int efx_mcdi_reset_mc(struct efx_nic *efx) in efx_mcdi_reset_mc() argument
1841 rc = efx_mcdi_rpc(efx, MC_CMD_REBOOT, inbuf, sizeof(inbuf), in efx_mcdi_reset_mc()
1856 int efx_mcdi_reset(struct efx_nic *efx, enum reset_type method) in efx_mcdi_reset() argument
1862 rc = pci_reset_function(efx->pci_dev); in efx_mcdi_reset()
1866 if (efx->mcdi) { in efx_mcdi_reset()
1867 struct efx_mcdi_iface *mcdi = efx_mcdi(efx); in efx_mcdi_reset()
1874 rc = efx_mcdi_handle_assertion(efx); in efx_mcdi_reset()
1881 return efx_mcdi_reset_mc(efx); in efx_mcdi_reset()
1883 return efx_mcdi_reset_func(efx); in efx_mcdi_reset()
1886 static int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type, in efx_mcdi_wol_filter_set() argument
1899 rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_SET, inbuf, sizeof(inbuf), in efx_mcdi_wol_filter_set()
1915 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc); in efx_mcdi_wol_filter_set()
1922 efx_mcdi_wol_filter_set_magic(struct efx_nic *efx, const u8 *mac, int *id_out) in efx_mcdi_wol_filter_set_magic() argument
1924 return efx_mcdi_wol_filter_set(efx, MC_CMD_WOL_TYPE_MAGIC, mac, id_out); in efx_mcdi_wol_filter_set_magic()
1928 int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out) in efx_mcdi_wol_filter_get_magic() argument
1934 rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_GET, NULL, 0, in efx_mcdi_wol_filter_get_magic()
1950 netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc); in efx_mcdi_wol_filter_get_magic()
1955 int efx_mcdi_wol_filter_remove(struct efx_nic *efx, int id) in efx_mcdi_wol_filter_remove() argument
1962 rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_REMOVE, inbuf, sizeof(inbuf), in efx_mcdi_wol_filter_remove()
1967 int efx_mcdi_flush_rxqs(struct efx_nic *efx) in efx_mcdi_flush_rxqs() argument
1979 efx_for_each_channel(channel, efx) { in efx_mcdi_flush_rxqs()
1983 atomic_dec(&efx->rxq_flush_pending); in efx_mcdi_flush_rxqs()
1992 rc = efx_mcdi_rpc(efx, MC_CMD_FLUSH_RX_QUEUES, inbuf, in efx_mcdi_flush_rxqs()
1999 int efx_mcdi_wol_filter_reset(struct efx_nic *efx) in efx_mcdi_wol_filter_reset() argument
2003 rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_RESET, NULL, 0, NULL, 0, NULL); in efx_mcdi_wol_filter_reset()
2007 int efx_mcdi_set_workaround(struct efx_nic *efx, u32 type, bool enabled, in efx_mcdi_set_workaround() argument
2018 rc = efx_mcdi_rpc(efx, MC_CMD_WORKAROUND, inbuf, sizeof(inbuf), in efx_mcdi_set_workaround()
2034 int efx_mcdi_get_workarounds(struct efx_nic *efx, unsigned int *impl_out, in efx_mcdi_get_workarounds() argument
2041 rc = efx_mcdi_rpc(efx, MC_CMD_GET_WORKAROUNDS, NULL, 0, in efx_mcdi_get_workarounds()
2063 netif_cond_dbg(efx, hw, efx->net_dev, rc == -ENOSYS, err, in efx_mcdi_get_workarounds()
2072 static int efx_mcdi_nvram_update_start(struct efx_nic *efx, unsigned int type) in efx_mcdi_nvram_update_start() argument
2084 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_UPDATE_START, inbuf, sizeof(inbuf), in efx_mcdi_nvram_update_start()
2090 static int efx_mcdi_nvram_read(struct efx_nic *efx, unsigned int type, in efx_mcdi_nvram_read() argument
2105 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_READ, inbuf, sizeof(inbuf), in efx_mcdi_nvram_read()
2114 static int efx_mcdi_nvram_write(struct efx_nic *efx, unsigned int type, in efx_mcdi_nvram_write() argument
2128 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_WRITE, inbuf, in efx_mcdi_nvram_write()
2134 static int efx_mcdi_nvram_erase(struct efx_nic *efx, unsigned int type, in efx_mcdi_nvram_erase() argument
2146 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_ERASE, inbuf, sizeof(inbuf), in efx_mcdi_nvram_erase()
2151 static int efx_mcdi_nvram_update_finish(struct efx_nic *efx, unsigned int type) in efx_mcdi_nvram_update_finish() argument
2164 rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_UPDATE_FINISH, inbuf, sizeof(inbuf), in efx_mcdi_nvram_update_finish()
2169 netif_err(efx, drv, efx->net_dev, in efx_mcdi_nvram_update_finish()
2192 netif_err(efx, drv, efx->net_dev, in efx_mcdi_nvram_update_finish()
2205 struct efx_nic *efx = mtd->priv; in efx_mcdi_mtd_read() local
2213 rc = efx_mcdi_nvram_read(efx, part->nvram_type, offset, in efx_mcdi_mtd_read()
2228 struct efx_nic *efx = mtd->priv; in efx_mcdi_mtd_erase() local
2235 rc = efx_mcdi_nvram_update_start(efx, part->nvram_type); in efx_mcdi_mtd_erase()
2245 rc = efx_mcdi_nvram_erase(efx, part->nvram_type, offset, in efx_mcdi_mtd_erase()
2259 struct efx_nic *efx = mtd->priv; in efx_mcdi_mtd_write() local
2266 rc = efx_mcdi_nvram_update_start(efx, part->nvram_type); in efx_mcdi_mtd_write()
2274 rc = efx_mcdi_nvram_write(efx, part->nvram_type, offset, in efx_mcdi_mtd_write()
2289 struct efx_nic *efx = mtd->priv; in efx_mcdi_mtd_sync() local
2294 rc = efx_mcdi_nvram_update_finish(efx, part->nvram_type); in efx_mcdi_mtd_sync()
2304 struct efx_nic *efx = part->mtd.priv; in efx_mcdi_mtd_rename() local
2307 efx->name, part->type_name, mcdi_part->fw_subtype); in efx_mcdi_mtd_rename()