Author: yongari
Date: Mon Apr 20 07:13:04 2009
New Revision: 191301
URL: http://svn.freebsd.org/changeset/base/191301

Log:
  For RTL8139C+ controllers, have controller handle padding short
  checksum offload frames. Software workaround used for broken
  controllers(RTL8169, RTL8168, RTL8168B) seem to cause watchdog
  timeouts on RTL8139C+.
  Introduce a new flag RL_FLAG_AUTOPAD to mark automatic padding
  feature of controller and set it for RTL8139C+ and controllers that
  use new descriptor format. This fixes watchdog timeouts seen on
  RTL8139C+.
  
  Reported by:  Dimitri Rodis < DimitriR <> integritasystems dot com >
  Tested by:    Dimitri Rodis < DimitriR <> integritasystems dot com >

Modified:
  head/sys/dev/re/if_re.c
  head/sys/pci/if_rlreg.h

Modified: head/sys/dev/re/if_re.c
==============================================================================
--- head/sys/dev/re/if_re.c     Mon Apr 20 03:44:54 2009        (r191300)
+++ head/sys/dev/re/if_re.c     Mon Apr 20 07:13:04 2009        (r191301)
@@ -1250,7 +1250,8 @@ re_attach(device_t dev)
 
        switch (hw_rev->rl_rev) {
        case RL_HWREV_8139CPLUS:
-               sc->rl_flags |= RL_FLAG_NOJUMBO | RL_FLAG_FASTETHER;
+               sc->rl_flags |= RL_FLAG_NOJUMBO | RL_FLAG_FASTETHER |
+                   RL_FLAG_AUTOPAD;
                break;
        case RL_HWREV_8100E:
        case RL_HWREV_8101E:
@@ -1261,7 +1262,7 @@ re_attach(device_t dev)
        case RL_HWREV_8102EL:
                sc->rl_flags |= RL_FLAG_NOJUMBO | RL_FLAG_PHYWAKE |
                    RL_FLAG_PAR | RL_FLAG_DESCV2 | RL_FLAG_MACSTAT |
-                   RL_FLAG_FASTETHER | RL_FLAG_CMDSTOP;
+                   RL_FLAG_FASTETHER | RL_FLAG_CMDSTOP | RL_FLAG_AUTOPAD;
                break;
        case RL_HWREV_8168_SPIN1:
        case RL_HWREV_8168_SPIN2:
@@ -1280,7 +1281,8 @@ re_attach(device_t dev)
        case RL_HWREV_8168CP:
        case RL_HWREV_8168D:
                sc->rl_flags |= RL_FLAG_PHYWAKE | RL_FLAG_PAR |
-                   RL_FLAG_DESCV2 | RL_FLAG_MACSTAT | RL_FLAG_CMDSTOP;
+                   RL_FLAG_DESCV2 | RL_FLAG_MACSTAT | RL_FLAG_CMDSTOP |
+                   RL_FLAG_AUTOPAD;
                /*
                 * These controllers support jumbo frame but it seems
                 * that enabling it requires touching additional magic
@@ -2250,7 +2252,7 @@ re_encap(struct rl_softc *sc, struct mbu
         * offload is enabled, we always manually pad short frames out
         * to the minimum ethernet frame size.
         */
-       if ((sc->rl_flags & RL_FLAG_DESCV2) == 0 &&
+       if ((sc->rl_flags & RL_FLAG_AUTOPAD) == 0 &&
            (*m_head)->m_pkthdr.len < RL_IP4CSUMTX_PADLEN &&
            ((*m_head)->m_pkthdr.csum_flags & CSUM_IP) != 0) {
                padlen = RL_MIN_FRAMELEN - (*m_head)->m_pkthdr.len;

Modified: head/sys/pci/if_rlreg.h
==============================================================================
--- head/sys/pci/if_rlreg.h     Mon Apr 20 03:44:54 2009        (r191300)
+++ head/sys/pci/if_rlreg.h     Mon Apr 20 07:13:04 2009        (r191301)
@@ -880,6 +880,7 @@ struct rl_softc {
        int                     rl_txstart;
        uint32_t                rl_flags;
 #define        RL_FLAG_MSI             0x0001
+#define        RL_FLAG_AUTOPAD         0x0002
 #define        RL_FLAG_PHYWAKE         0x0008
 #define        RL_FLAG_NOJUMBO         0x0010
 #define        RL_FLAG_PAR             0x0020
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to