On 05/09/14 2:24 AM, Jonathan Gray wrote:
On Tue, Sep 02, 2014 at 07:20:30AM -0400, Brad Smith wrote:
On Tue, Sep 02, 2014 at 06:28:48AM -0400, Brad Smith wrote:
Add some feature flags and store in the softc the various max Jumbo frame sizes
for the different generations of chips. No behavioral change.

Tested with..

re0 at pci2 dev 0 function 0 "Realtek 8168" rev 0x03: RTL8168D/8111D (0x2800)
re0 at pci2 dev 0 function 0 "Realtek 8168" rev 0x0c: RTL8168G/8111G (0x4c00)

OK?

Fix a typo with RL_FLAG_HWIM.

Why not leave the assignment of sc_hwrev in re.c and stash the product
as sc_product or some such?

I had been considering that as well. I'll do that as what I had
was bugging me.

        case RL_HWREV_8168C:
        case RL_HWREV_8168CP:
-       case RL_HWREV_8168DP:
-               sc->rl_flags |= RL_FLAG_INVMAR | RL_FLAG_PHYWAKE |
-                   RL_FLAG_PAR | RL_FLAG_DESCV2 | RL_FLAG_MACSTAT |
-                   RL_FLAG_HWIM | RL_FLAG_CMDSTOP | RL_FLAG_AUTOPAD;
-               /*
-                * These controllers support jumbo frame but it seems
-                * that enabling it requires touching additional magic
-                * registers. Depending on MAC revisions some
-                * controllers need to disable checksum offload. So
-                * disable jumbo frame until I have better idea what
-                * it really requires to make it support.
-                * RTL8168C/CP : supports up to 6KB jumbo frame.
-                * RTL8111C/CP : supports up to 9KB jumbo frame.
-                */
-               sc->rl_flags |= RL_FLAG_NOJUMBO;
+               sc->rl_flags |= RL_FLAG_PHYWAKE | RL_FLAG_PAR |
+                   RL_FLAG_DESCV2 | RL_FLAG_MACSTAT | RL_FLAG_CMDSTOP |
+                   RL_FLAG_AUTOPAD | RL_FLAG_JUMBOV2 | RL_FLAG_WOL_MANLINK;
+               sc->rl_max_mtu = RL_JUMBO_MTU_6K;
                break;

Assuming the goal is the sync these flags with the FreeBSD driver this
misses:

It's to get as close as possible more or less.

case RL_HWREV_8168C:
        if (sc->rl_macrev == 0x00200000)
                sc->rl_flags |= RL_FLAG_MACSLEEP;
        /* FALLTHROUGH */
case RL_HWREV_8168CP:

macrev is not sc_hwrev but is read from the same RL_TXCFG register
with a different mask (0x00700000).

I'll see about adding that in later. I haven't seen anyone mentioning
any issues with re(4) that might be attributed to the lack of code to
kick the controller out of deep sleep mode so it isn't a priority.

The other flags and jumbo values all seem to match FreeBSD
from a quick comparison.

@@ -957,8 +981,8 @@ re_attach(struct rl_softc *sc, const cha
        ifp->if_ioctl = re_ioctl;
        ifp->if_start = re_start;
        ifp->if_watchdog = re_watchdog;
-       if ((sc->rl_flags & RL_FLAG_NOJUMBO) == 0)
-               ifp->if_hardmtu = RL_JUMBO_MTU;
+       if ((sc->rl_flags & RL_FLAG_JUMBOV2) == 0)
+               ifp->if_hardmtu = sc->rl_max_mtu;
        IFQ_SET_MAXLEN(&ifp->if_snd, RL_TX_QLEN);
        IFQ_SET_READY(&ifp->if_snd);


Anything with RL_FLAG_JUMBOV2 won't do jumbos, because
the relevant code for this isn't there at the moment?

Basically, yes.

--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Reply via email to