Lines Matching +full:firmware +full:- +full:initialised
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2008-2016 Solarflare Communications Inc.
41 * - MCDIv0: Siena BootROM. Transport uses MCDIv1 headers.
42 * - MCDIv1: Siena firmware and Huntington BootROM.
43 * - MCDIv2: EF10 firmware (Huntington/Medford) and Medford BootROM.
47 * ----------------------------
96 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); in efx_mcdi_init()
97 EFSYS_ASSERT3U(enp->en_mod_flags, ==, 0); in efx_mcdi_init()
99 switch (enp->en_family) { in efx_mcdi_init()
130 if (enp->en_features & EFX_FEATURE_MCDI_DMA) { in efx_mcdi_init()
132 if ((emtp == NULL) || (emtp->emt_dma_mem) == NULL) { in efx_mcdi_init()
137 enp->en_mcdi.em_emtp = emtp; in efx_mcdi_init()
139 if (emcop != NULL && emcop->emco_init != NULL) { in efx_mcdi_init()
140 if ((rc = emcop->emco_init(enp, emtp)) != 0) in efx_mcdi_init()
144 enp->en_mcdi.em_emcop = emcop; in efx_mcdi_init()
145 enp->en_mod_flags |= EFX_MOD_MCDI; in efx_mcdi_init()
156 enp->en_mcdi.em_emcop = NULL; in efx_mcdi_init()
157 enp->en_mcdi.em_emtp = NULL; in efx_mcdi_init()
158 enp->en_mod_flags &= ~EFX_MOD_MCDI; in efx_mcdi_init()
167 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip); in efx_mcdi_fini()
168 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_fini()
170 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); in efx_mcdi_fini()
171 EFSYS_ASSERT3U(enp->en_mod_flags, ==, EFX_MOD_MCDI); in efx_mcdi_fini()
173 if (emcop != NULL && emcop->emco_fini != NULL) in efx_mcdi_fini()
174 emcop->emco_fini(enp); in efx_mcdi_fini()
176 emip->emi_port = 0; in efx_mcdi_fini()
177 emip->emi_aborted = 0; in efx_mcdi_fini()
179 enp->en_mcdi.em_emcop = NULL; in efx_mcdi_fini()
180 enp->en_mod_flags &= ~EFX_MOD_MCDI; in efx_mcdi_fini()
187 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip); in efx_mcdi_new_epoch()
191 EFSYS_LOCK(enp->en_eslp, state); in efx_mcdi_new_epoch()
192 emip->emi_new_epoch = B_TRUE; in efx_mcdi_new_epoch()
193 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_new_epoch()
204 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_send_request()
206 emcop->emco_send_request(enp, hdrp, hdr_len, sdup, sdu_len); in efx_mcdi_send_request()
213 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_poll_reboot()
216 rc = emcop->emco_poll_reboot(enp); in efx_mcdi_poll_reboot()
224 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_poll_response()
227 available = emcop->emco_poll_response(enp); in efx_mcdi_poll_response()
238 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_read_response()
240 emcop->emco_read_response(enp, bufferp, offset, length); in efx_mcdi_read_response()
250 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_request_start()
252 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip); in efx_mcdi_request_start()
261 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); in efx_mcdi_request_start()
262 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MCDI); in efx_mcdi_request_start()
263 EFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI); in efx_mcdi_request_start()
277 EFSYS_LOCK(enp->en_eslp, state); in efx_mcdi_request_start()
278 EFSYS_ASSERT(emip->emi_pending_req == NULL); in efx_mcdi_request_start()
279 emip->emi_pending_req = emrp; in efx_mcdi_request_start()
280 emip->emi_ev_cpl = ev_cpl; in efx_mcdi_request_start()
281 emip->emi_poll_cnt = 0; in efx_mcdi_request_start()
282 seq = emip->emi_seq++ & EFX_MASK32(MCDI_HEADER_SEQ); in efx_mcdi_request_start()
283 new_epoch = emip->emi_new_epoch; in efx_mcdi_request_start()
284 max_version = emip->emi_max_version; in efx_mcdi_request_start()
285 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_request_start()
292 * Huntington firmware supports MCDIv2, but the Huntington BootROM only in efx_mcdi_request_start()
297 ((emrp->emr_cmd > MC_CMD_CMD_SPACE_ESCAPE_7) || in efx_mcdi_request_start()
298 (emrp->emr_in_length > MCDI_CTL_SDU_LEN_MAX_V1) || in efx_mcdi_request_start()
299 (emrp->emr_out_length > MCDI_CTL_SDU_LEN_MAX_V1))) { in efx_mcdi_request_start()
313 MC_CMD_V2_EXTN_IN_EXTENDED_CMD, emrp->emr_cmd, in efx_mcdi_request_start()
314 MC_CMD_V2_EXTN_IN_ACTUAL_LEN, emrp->emr_in_length); in efx_mcdi_request_start()
319 MCDI_HEADER_CODE, emrp->emr_cmd, in efx_mcdi_request_start()
321 MCDI_HEADER_DATALEN, emrp->emr_in_length, in efx_mcdi_request_start()
330 if (emtp->emt_logger != NULL) { in efx_mcdi_request_start()
331 emtp->emt_logger(emtp->emt_context, EFX_LOG_MCDI_REQUEST, in efx_mcdi_request_start()
333 emrp->emr_in_buf, emrp->emr_in_length); in efx_mcdi_request_start()
338 emrp->emr_in_buf, emrp->emr_in_length); in efx_mcdi_request_start()
347 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_read_response_header()
349 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip); in efx_mcdi_read_response_header()
385 if ((cmd != emrp->emr_cmd) || in efx_mcdi_read_response_header()
386 (seq != ((emip->emi_seq - 1) & EFX_MASK32(MCDI_HEADER_SEQ)))) { in efx_mcdi_read_response_header()
406 emrp->emr_err_code = err_code; in efx_mcdi_read_response_header()
407 emrp->emr_err_arg = err_arg; in efx_mcdi_read_response_header()
414 * firmware has forwarded it to an authorization agent in efx_mcdi_read_response_header()
420 emrp->emr_proxy_handle = err_arg; in efx_mcdi_read_response_header()
425 if (emtp->emt_logger != NULL) { in efx_mcdi_read_response_header()
426 emtp->emt_logger(emtp->emt_context, in efx_mcdi_read_response_header()
433 if (!emrp->emr_quiet) { in efx_mcdi_read_response_header()
434 EFSYS_PROBE3(mcdi_err_arg, int, emrp->emr_cmd, in efx_mcdi_read_response_header()
442 emrp->emr_rc = 0; in efx_mcdi_read_response_header()
443 emrp->emr_out_length_used = data_len; in efx_mcdi_read_response_header()
445 emrp->emr_proxy_handle = 0; in efx_mcdi_read_response_header()
452 emrp->emr_rc = rc; in efx_mcdi_read_response_header()
453 emrp->emr_out_length_used = 0; in efx_mcdi_read_response_header()
462 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_finish_response()
468 if (emrp->emr_out_buf == NULL) in efx_mcdi_finish_response()
482 emrp->emr_out_length_used = EFX_DWORD_FIELD(hdr[1], in efx_mcdi_finish_response()
487 bytes = MIN(emrp->emr_out_length_used, emrp->emr_out_length); in efx_mcdi_finish_response()
488 efx_mcdi_read_response(enp, emrp->emr_out_buf, hdr_len, bytes); in efx_mcdi_finish_response()
491 if (emtp->emt_logger != NULL) { in efx_mcdi_finish_response()
492 emtp->emt_logger(emtp->emt_context, in efx_mcdi_finish_response()
495 emrp->emr_out_buf, bytes); in efx_mcdi_finish_response()
504 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip); in efx_mcdi_request_poll()
509 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); in efx_mcdi_request_poll()
510 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MCDI); in efx_mcdi_request_poll()
511 EFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI); in efx_mcdi_request_poll()
513 /* Serialise against post-watchdog efx_mcdi_ev* */ in efx_mcdi_request_poll()
514 EFSYS_LOCK(enp->en_eslp, state); in efx_mcdi_request_poll()
516 EFSYS_ASSERT(emip->emi_pending_req != NULL); in efx_mcdi_request_poll()
517 EFSYS_ASSERT(!emip->emi_ev_cpl); in efx_mcdi_request_poll()
518 emrp = emip->emi_pending_req; in efx_mcdi_request_poll()
522 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_request_poll()
527 if (emip->emi_poll_cnt++ == 0) { in efx_mcdi_request_poll()
529 emip->emi_pending_req = NULL; in efx_mcdi_request_poll()
530 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_request_poll()
542 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_request_poll()
550 emip->emi_pending_req = NULL; in efx_mcdi_request_poll()
553 emip->emi_new_epoch = B_FALSE; in efx_mcdi_request_poll()
555 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_request_poll()
557 if ((rc = emrp->emr_rc) != 0) in efx_mcdi_request_poll()
564 if (!emrp->emr_quiet) in efx_mcdi_request_poll()
567 if (!emrp->emr_quiet) in efx_mcdi_request_poll()
577 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip); in efx_mcdi_request_abort()
582 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); in efx_mcdi_request_abort()
583 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MCDI); in efx_mcdi_request_abort()
584 EFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI); in efx_mcdi_request_abort()
593 EFSYS_LOCK(enp->en_eslp, state); in efx_mcdi_request_abort()
594 emrp = emip->emi_pending_req; in efx_mcdi_request_abort()
597 emip->emi_pending_req = NULL; in efx_mcdi_request_abort()
600 emrp->emr_out_length_used = 0; in efx_mcdi_request_abort()
601 emrp->emr_rc = ETIMEDOUT; in efx_mcdi_request_abort()
604 if (emip->emi_ev_cpl) in efx_mcdi_request_abort()
605 ++emip->emi_aborted; in efx_mcdi_request_abort()
612 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_request_abort()
623 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_get_timeout()
625 emcop->emco_get_timeout(enp, emrp, timeoutp); in efx_mcdi_get_timeout()
708 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_raise_exception()
718 if (emrp != NULL && emrp->emr_cmd == MC_CMD_REBOOT && rc == EIO) in efx_mcdi_raise_exception()
725 emtp->emt_exception(emtp->emt_context, exception); in efx_mcdi_raise_exception()
733 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_execute()
735 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MCDI); in efx_mcdi_execute()
736 EFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI); in efx_mcdi_execute()
738 emrp->emr_quiet = B_FALSE; in efx_mcdi_execute()
739 emtp->emt_execute(emtp->emt_context, emrp); in efx_mcdi_execute()
747 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_execute_quiet()
749 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MCDI); in efx_mcdi_execute_quiet()
750 EFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI); in efx_mcdi_execute_quiet()
752 emrp->emr_quiet = B_TRUE; in efx_mcdi_execute_quiet()
753 emtp->emt_execute(emtp->emt_context, emrp); in efx_mcdi_execute_quiet()
763 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip); in efx_mcdi_ev_cpl()
764 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_ev_cpl()
768 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_MCDI); in efx_mcdi_ev_cpl()
769 EFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI); in efx_mcdi_ev_cpl()
775 EFSYS_LOCK(enp->en_eslp, state); in efx_mcdi_ev_cpl()
776 if (emip->emi_pending_req == NULL || !emip->emi_ev_cpl || in efx_mcdi_ev_cpl()
777 (seq != ((emip->emi_seq - 1) & EFX_MASK32(MCDI_HEADER_SEQ)))) { in efx_mcdi_ev_cpl()
778 EFSYS_ASSERT(emip->emi_aborted > 0); in efx_mcdi_ev_cpl()
779 if (emip->emi_aborted > 0) in efx_mcdi_ev_cpl()
780 --emip->emi_aborted; in efx_mcdi_ev_cpl()
781 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_ev_cpl()
785 emrp = emip->emi_pending_req; in efx_mcdi_ev_cpl()
786 emip->emi_pending_req = NULL; in efx_mcdi_ev_cpl()
787 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_ev_cpl()
789 if (emip->emi_max_version >= 2) { in efx_mcdi_ev_cpl()
794 if (!emrp->emr_quiet) { in efx_mcdi_ev_cpl()
795 EFSYS_PROBE2(mcdi_err, int, emrp->emr_cmd, in efx_mcdi_ev_cpl()
798 emrp->emr_out_length_used = 0; in efx_mcdi_ev_cpl()
799 emrp->emr_rc = efx_mcdi_request_errcode(errcode); in efx_mcdi_ev_cpl()
801 emrp->emr_out_length_used = outlen; in efx_mcdi_ev_cpl()
802 emrp->emr_rc = 0; in efx_mcdi_ev_cpl()
805 if (emrp->emr_rc == 0) in efx_mcdi_ev_cpl()
808 emtp->emt_ev_cpl(emtp->emt_context); in efx_mcdi_ev_cpl()
832 if ((emrp->emr_rc != 0) && in efx_mcdi_get_proxy_handle()
833 (emrp->emr_err_code == MC_CMD_ERR_PROXY_PENDING)) { in efx_mcdi_get_proxy_handle()
834 *handlep = emrp->emr_proxy_handle; in efx_mcdi_get_proxy_handle()
853 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_ev_proxy_response()
858 * command. If authorization was granted then we must re-issue the in efx_mcdi_ev_proxy_response()
865 emtp->emt_ev_proxy_response(emtp->emt_context, handle, rc); in efx_mcdi_ev_proxy_response()
874 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip); in efx_mcdi_ev_death()
875 const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp; in efx_mcdi_ev_death()
884 * If there is an outstanding event-completed MCDI operation, then we in efx_mcdi_ev_death()
891 * efx_mcdi_request_start() for post-watchdog completions. in efx_mcdi_ev_death()
893 EFSYS_LOCK(enp->en_eslp, state); in efx_mcdi_ev_death()
894 emrp = emip->emi_pending_req; in efx_mcdi_ev_death()
895 ev_cpl = emip->emi_ev_cpl; in efx_mcdi_ev_death()
896 if (emrp != NULL && emip->emi_ev_cpl) { in efx_mcdi_ev_death()
897 emip->emi_pending_req = NULL; in efx_mcdi_ev_death()
899 emrp->emr_out_length_used = 0; in efx_mcdi_ev_death()
900 emrp->emr_rc = rc; in efx_mcdi_ev_death()
901 ++emip->emi_aborted; in efx_mcdi_ev_death()
911 emip->emi_new_epoch = B_TRUE; in efx_mcdi_ev_death()
914 EFSYS_UNLOCK(enp->en_eslp, state); in efx_mcdi_ev_death()
919 emtp->emt_ev_cpl(emtp->emt_context); in efx_mcdi_ev_death()
940 EFSYS_ASSERT3U(enp->en_features, &, EFX_FEATURE_MCDI);
1126 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); in efx_mcdi_do_reboot()
1197 * Retry this command twice. Once because a boot-time assertion failure in efx_mcdi_read_assertion()
1214 } while ((req.emr_rc == EINTR || req.emr_rc == EIO) && retry-- > 0); in efx_mcdi_read_assertion()
1236 ? "system-level assertion" in efx_mcdi_read_assertion()
1238 ? "thread-level assertion" in efx_mcdi_read_assertion()
1294 * Typically, client drivers use DONT_CARE for the datapath firmware in efx_mcdi_drv_attach()
1296 * function. The datapath firmware type to use is controlled by the in efx_mcdi_drv_attach()
1298 * If a client driver wishes to attach with a specific datapath firmware in efx_mcdi_drv_attach()
1301 * FULL_FEATURED datapath firmware type first and fall backs to in efx_mcdi_drv_attach()
1302 * DONT_CARE datapath firmware type if MC_CMD_DRV_ATTACH fails. in efx_mcdi_drv_attach()
1308 MCDI_IN_SET_DWORD(req, DRV_ATTACH_IN_FIRMWARE_ID, enp->efv); in efx_mcdi_drv_attach()
1339 efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip);
1366 if (emip->emi_port == 1) {
1369 } else if (emip->emi_port == 2) {
1381 if (emip->emi_port == 1) {
1384 } else if (emip->emi_port == 2) {
1463 efx_port_t *epp = &(enp->en_port); in efx_mcdi_get_phy_cfg()
1464 efx_nic_cfg_t *encp = &(enp->en_nic_cfg); in efx_mcdi_get_phy_cfg()
1493 encp->enc_phy_type = MCDI_OUT_DWORD(req, GET_PHY_CFG_OUT_TYPE); in efx_mcdi_get_phy_cfg()
1496 namelen = MIN(sizeof (encp->enc_phy_name) - 1, in efx_mcdi_get_phy_cfg()
1498 (void) memset(encp->enc_phy_name, 0, in efx_mcdi_get_phy_cfg()
1499 sizeof (encp->enc_phy_name)); in efx_mcdi_get_phy_cfg()
1500 memcpy(encp->enc_phy_name, namep, namelen); in efx_mcdi_get_phy_cfg()
1502 (void) memset(encp->enc_phy_revision, 0, in efx_mcdi_get_phy_cfg()
1503 sizeof (encp->enc_phy_revision)); in efx_mcdi_get_phy_cfg()
1504 memcpy(encp->enc_phy_revision, in efx_mcdi_get_phy_cfg()
1506 MIN(sizeof (encp->enc_phy_revision) - 1, in efx_mcdi_get_phy_cfg()
1509 encp->enc_led_mask = ((1 << EFX_PHY_LED_DEFAULT) | in efx_mcdi_get_phy_cfg()
1523 epp->ep_fixed_port_type = (efx_phy_media_type_t) phy_media_type; in efx_mcdi_get_phy_cfg()
1524 if (epp->ep_fixed_port_type >= EFX_PHY_MEDIA_NTYPES) in efx_mcdi_get_phy_cfg()
1525 epp->ep_fixed_port_type = EFX_PHY_MEDIA_INVALID; in efx_mcdi_get_phy_cfg()
1527 epp->ep_phy_cap_mask = in efx_mcdi_get_phy_cfg()
1530 encp->enc_phy_flags_mask = MCDI_OUT_DWORD(req, GET_PHY_CFG_OUT_FLAGS); in efx_mcdi_get_phy_cfg()
1533 encp->enc_port = (uint8_t)MCDI_OUT_DWORD(req, GET_PHY_CFG_OUT_PRT); in efx_mcdi_get_phy_cfg()
1536 encp->enc_mcdi_mdio_channel = in efx_mcdi_get_phy_cfg()
1540 encp->enc_mcdi_phy_stat_mask = in efx_mcdi_get_phy_cfg()
1545 encp->enc_bist_mask = 0; in efx_mcdi_get_phy_cfg()
1548 encp->enc_bist_mask |= (1 << EFX_BIST_TYPE_PHY_CABLE_SHORT); in efx_mcdi_get_phy_cfg()
1551 encp->enc_bist_mask |= (1 << EFX_BIST_TYPE_PHY_CABLE_LONG); in efx_mcdi_get_phy_cfg()
1554 encp->enc_bist_mask |= (1 << EFX_BIST_TYPE_PHY_NORMAL); in efx_mcdi_get_phy_cfg()
1572 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_firmware_update_supported()
1576 if ((rc = emcop->emco_feature_supported(enp, in efx_mcdi_firmware_update_supported()
1597 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_macaddr_change_supported()
1601 if ((rc = emcop->emco_feature_supported(enp, in efx_mcdi_macaddr_change_supported()
1622 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_link_control_supported()
1626 if ((rc = emcop->emco_feature_supported(enp, in efx_mcdi_link_control_supported()
1647 const efx_mcdi_ops_t *emcop = enp->en_mcdi.em_emcop; in efx_mcdi_mac_spoofing_supported()
1651 if ((rc = emcop->emco_feature_supported(enp, in efx_mcdi_mac_spoofing_supported()
1845 const efx_nic_cfg_t *encp = &enp->en_nic_cfg; in efx_mcdi_mac_stats()
1854 if (encp->enc_mac_stats_nstats < MC_CMD_MAC_NSTATS) { in efx_mcdi_mac_stats()
1860 bytes = encp->enc_mac_stats_nstats * sizeof (efx_qword_t); in efx_mcdi_mac_stats()
1881 (disable ? EVB_PORT_ID_NULL : enp->en_vport_id)); in efx_mcdi_mac_stats()
1886 /* EF10: Expect ENOENT if no DMA queues are initialised */ in efx_mcdi_mac_stats()
1888 (enp->en_rx_qcount + enp->en_tx_qcount != 0)) { in efx_mcdi_mac_stats()
1962 * Medford uses a fixed 1sec period before v6.2.1.1033 firmware. in efx_mcdi_mac_stats_periodic()
2169 * Size of media information page in accordance with SFF-8472 and SFF-8436.
2175 * Transceiver identifiers from SFF-8024 Table 4-1.
2250 efx_port_t *epp = &(enp->en_port); in efx_mcdi_phy_module_get_info()
2256 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE); in efx_mcdi_phy_module_get_info()
2261 * I.e. non-zero upper pages are not accessible. in efx_mcdi_phy_module_get_info()
2262 * See SFF-8472 section 4 Memory Organization and SFF-8436 section 7.6 in efx_mcdi_phy_module_get_info()
2266 switch (epp->ep_fixed_port_type) { in efx_mcdi_phy_module_get_info()
2279 * Definitions from SFF-8024 Table 4-1. in efx_mcdi_phy_module_get_info()
2288 * In accordance with SFF-8472 Diagnostic Monitoring in efx_mcdi_phy_module_get_info()
2290 * Organization two 2-wire addresses are defined. in efx_mcdi_phy_module_get_info()
2297 * page 0 (0x00 - 0x7f) at the device address 0xA0. in efx_mcdi_phy_module_get_info()
2302 * page 0 (0x80 - 0xff) at the device address 0xA0. in efx_mcdi_phy_module_get_info()
2310 * page 0 (0x00 - 0x7f) at the device address 0xA2. in efx_mcdi_phy_module_get_info()
2315 * page 0 (0x80 - 0xff) at the device address 0xA2. in efx_mcdi_phy_module_get_info()
2330 * MCDI page -1 should be used to access lower page 0 in efx_mcdi_phy_module_get_info()
2331 * (0x00 - 0x7f). in efx_mcdi_phy_module_get_info()
2333 mcdi_lower_page = (uint32_t)-1; in efx_mcdi_phy_module_get_info()
2336 * (0x80h - 0xff). in efx_mcdi_phy_module_get_info()
2354 MIN(len, EFX_PHY_MEDIA_INFO_PAGE_SIZE - offset); in efx_mcdi_phy_module_get_info()
2362 len -= read_len; in efx_mcdi_phy_module_get_info()
2366 offset -= EFX_PHY_MEDIA_INFO_PAGE_SIZE; in efx_mcdi_phy_module_get_info()