Index | Thread | Search

From:
jan@openbsd.org
Subject:
Re: igc: add support for reporting flow control status
To:
Kevin Lo <kevlo@kevlo.org>
Cc:
tech@openbsd.org
Date:
Thu, 22 Feb 2024 11:15:17 +0100

Download raw body.

Thread
On Thu, Feb 22, 2024 at 10:33:02AM +0800, Kevin Lo wrote:
> The diff below 
> 
> - adds support for reporting flow control status
> - adds missing igc_check_for_link() call; from msaitoh via NetBSD.
> 
> Tested:
> igc0 at pci3 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4 queues, address 2c:53:4a:xx:xx:xx
> 
> ok?

Tested on sparc64:
igc0 at pci16 dev 0 function 0 "Intel I226-V" rev 0x04, msix, 4 queues, address 02:76:c6:01:01:30

Look good to me.

ok jan@

> Index: sys/dev/pci/if_igc.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_igc.c,v
> retrieving revision 1.17
> diff -u -p -u -p -r1.17 if_igc.c
> --- sys/dev/pci/if_igc.c	14 Feb 2024 22:41:48 -0000	1.17
> +++ sys/dev/pci/if_igc.c	22 Feb 2024 02:05:41 -0000
> @@ -1491,6 +1491,23 @@ igc_media_status(struct ifnet *ifp, stru
>  		ifmr->ifm_active |= IFM_FDX;
>  	else
>  		ifmr->ifm_active |= IFM_HDX;
> +
> +	switch (sc->hw.fc.current_mode) {
> +	case igc_fc_tx_pause:
> +		ifmr->ifm_active |= IFM_FLOW | IFM_ETH_TXPAUSE;
> +		break;
> +	case igc_fc_rx_pause:
> +		ifmr->ifm_active |= IFM_FLOW | IFM_ETH_RXPAUSE;
> +		break;
> +	case igc_fc_full:
> +		ifmr->ifm_active |= IFM_FLOW | IFM_ETH_RXPAUSE |
> +		    IFM_ETH_TXPAUSE;
> +		break;
> +	default:
> +		ifmr->ifm_active &= ~(IFM_FLOW | IFM_ETH_RXPAUSE |
> +		    IFM_ETH_TXPAUSE);
> +		break;
> +	}
>  }
>  
>  /*********************************************************************
> @@ -1590,6 +1607,9 @@ igc_update_link_status(struct igc_softc 
>  	struct ifnet *ifp = &sc->sc_ac.ac_if;
>  	struct igc_hw *hw = &sc->hw;
>  	int link_state;
> +
> +	if (hw->mac.get_link_status == true)
> +		igc_check_for_link(hw);
>  
>  	if (IGC_READ_REG(&sc->hw, IGC_STATUS) & IGC_STATUS_LU) {
>  		if (sc->link_active == 0) {
>