Index: if_ixl.c =================================================================== RCS file: /cvs/src/sys/dev/pci/if_ixl.c,v diff -u -p -r1.107 if_ixl.c --- if_ixl.c 22 May 2025 06:41:20 -0000 1.107 +++ if_ixl.c 2 Jul 2025 04:16:51 -0000 @@ -4505,23 +4505,27 @@ static int ixl_set_link_status(struct ixl_softc *sc, const struct ixl_aq_desc *iaq) { const struct ixl_aq_link_status *status; - const struct ixl_phy_type *itype; uint64_t ifm_active = IFM_ETHER; uint64_t ifm_status = IFM_AVALID; int link_state = LINK_STATE_DOWN; uint64_t baudrate = 0; status = (const struct ixl_aq_link_status *)iaq->iaq_param; - if (!ISSET(status->link_info, IXL_AQ_LINK_UP_FUNCTION)) - goto done; - - ifm_active |= IFM_FDX; - ifm_status |= IFM_ACTIVE; - link_state = LINK_STATE_FULL_DUPLEX; - - itype = ixl_search_phy_type(status->phy_type); - if (itype != NULL) - ifm_active |= itype->ifm_type; + if (ISSET(status->link_info, IXL_AQ_MEDIA_AVAILABLE)) { + const struct ixl_phy_type *itype = + ixl_search_phy_type(status->phy_type); + if (itype != NULL) + ifm_active |= itype->ifm_type; + } + + if (ISSET(status->link_info, IXL_AQ_LINK_UP_FUNCTION)) { + ifm_active |= IFM_FDX; + ifm_status |= IFM_ACTIVE; + link_state = LINK_STATE_FULL_DUPLEX; + } else if (ISSET(status->link_info, IXL_AQ_MEDIA_AVAILABLE) && + !ISSET(status->an_info, IXL_AQ_QUALIFIED_MODULE)) { + printf("%s: unsupported module\n", DEVNAME(sc)); + } if (ISSET(status->an_info, IXL_AQ_LINK_PAUSE_TX)) ifm_active |= IFM_ETH_TXPAUSE; @@ -4530,7 +4534,6 @@ ixl_set_link_status(struct ixl_softc *sc baudrate = ixl_search_link_speed(status->link_speed); -done: mtx_enter(&sc->sc_link_state_mtx); sc->sc_media_active = ifm_active; sc->sc_media_status = ifm_status;