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.