On 2015/04/30 22:48, Jonathan Gray wrote: > On Thu, Apr 30, 2015 at 01:13:36PM +0100, Stuart Henderson wrote: > > Diff below allows ix(4) to support 1Gb LX SFP in its SFP+ port. It is > > https://github.com/torvalds/linux/commit/345be204dcbb2cc7580a63bc377a185125a6f822.patch > > ported to our driver. Small changes to the 3rd hunk of the ixgbe_phy.c > > patch as we don't have the "enforce_sfp" flag that Linux has. > > > > Goes from this: > > > > ix1 at pci1 dev 0 function 1 "Intel 82599" rev 0x01: Unsupported SFP+ Module > > > > to a working interface, albeit with wrong media flag in ifconfig: > > > > # ifconfig ix1 > > ix1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > > lladdr 00:1b:21:c0:25:bd > > priority: 0 > > groups: egress > > media: Ethernet autoselect (1000baseT full-duplex,rxpause,txpause) > > status: active > > inet 192.168.42.216 netmask 0xffffff00 broadcast 192.168.42.255 > > > > OK? > > Do you get the correct media type with the following diff?
Yes I do, thanks. OK. ix1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 lladdr 00:1b:21:c0:25:bd priority: 0 groups: backbone media: Ethernet autoselect (1000baseLX full-duplex,rxpause,txpause) status: active <snip> > Index: ixgbe_82599.c > =================================================================== > RCS file: /cvs/src/sys/dev/pci/ixgbe_82599.c,v > retrieving revision 1.10 > diff -u -p -r1.10 ixgbe_82599.c > --- ixgbe_82599.c 5 Aug 2013 19:58:06 -0000 1.10 > +++ ixgbe_82599.c 30 Apr 2015 12:42:56 -0000 > @@ -1580,6 +1580,8 @@ sfp_check: > physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_T; > else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) > physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_SX; > + else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) > + physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_LX; > break; > default: > break; > Index: ixgbe_type.h > =================================================================== > RCS file: /cvs/src/sys/dev/pci/ixgbe_type.h,v > retrieving revision 1.20 > diff -u -p -r1.20 ixgbe_type.h > --- ixgbe_type.h 25 Aug 2014 14:26:25 -0000 1.20 > +++ ixgbe_type.h 30 Apr 2015 12:41:44 -0000 > @@ -2591,6 +2591,7 @@ typedef uint32_t ixgbe_physical_layer; > #define IXGBE_PHYSICAL_LAYER_10GBASE_XAUI 0x1000 > #define IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA 0x2000 > #define IXGBE_PHYSICAL_LAYER_1000BASE_SX 0x4000 > +#define IXGBE_PHYSICAL_LAYER_1000BASE_LX 0x8000 > > /* Flow Control Data Sheet defined values > * Calculation and defines taken from 802.1bb Annex O > Index: if_ix.c > =================================================================== > RCS file: /cvs/src/sys/dev/pci/if_ix.c,v > retrieving revision 1.118 > diff -u -p -r1.118 if_ix.c > --- if_ix.c 20 Mar 2015 10:41:15 -0000 1.118 > +++ if_ix.c 30 Apr 2015 12:41:37 -0000 > @@ -953,8 +953,15 @@ ixgbe_media_status(struct ifnet * ifp, s > ifmr->ifm_active |= IFM_100_TX | IFM_FDX; > break; > case IXGBE_LINK_SPEED_1GB_FULL: > - ifmr->ifm_active |= ((sc->optics == IFM_1000_SX) ? > - IFM_1000_SX : IFM_1000_T) | IFM_FDX; > + switch (sc->optics) { > + case IFM_1000_SX: > + case IFM_1000_LX: > + ifmr->ifm_active |= sc->optics | IFM_FDX; > + break; > + default: > + ifmr->ifm_active |= IFM_1000_T | IFM_FDX; > + break; > + } > break; > case IXGBE_LINK_SPEED_10GB_FULL: > ifmr->ifm_active |= sc->optics | IFM_FDX; > @@ -1407,6 +1414,8 @@ ixgbe_setup_optics(struct ix_softc *sc) > sc->optics = IFM_10G_CX4; > else if (layer & IXGBE_PHYSICAL_LAYER_1000BASE_SX) > sc->optics = IFM_1000_SX; > + else if (layer & IXGBE_PHYSICAL_LAYER_1000BASE_LX) > + sc->optics = IFM_1000_LX; > } > > /********************************************************************* >