Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/pci Fix the checking of jumbo frame function though ...



details:   https://anonhg.NetBSD.org/src/rev/e39bc0977553
branches:  trunk
changeset: 750535:e39bc0977553
user:      msaitoh <msaitoh%NetBSD.org@localhost>
date:      Tue Jan 05 10:02:01 2010 +0000

description:
Fix the checking of jumbo frame function though I don't know whether
the function wokrs or not...

 Remove the extra macro definition for the offset 0x1a in EEPROM.

diffstat:

 sys/dev/pci/if_wm.c    |  48 ++++++++++++++++++++++++++++++++++++------------
 sys/dev/pci/if_wmreg.h |   9 +++++----
 2 files changed, 41 insertions(+), 16 deletions(-)

diffs (130 lines):

diff -r 49ac72da0d18 -r e39bc0977553 sys/dev/pci/if_wm.c
--- a/sys/dev/pci/if_wm.c       Tue Jan 05 09:31:21 2010 +0000
+++ b/sys/dev/pci/if_wm.c       Tue Jan 05 10:02:01 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wm.c,v 1.186 2010/01/05 09:31:21 msaitoh Exp $      */
+/*     $NetBSD: if_wm.c,v 1.187 2010/01/05 10:02:01 msaitoh Exp $      */
 
 /*
  * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.186 2010/01/05 09:31:21 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.187 2010/01/05 10:02:01 msaitoh Exp $");
 
 #include "bpfilter.h"
 #include "rnd.h"
@@ -941,7 +941,7 @@
        prop_data_t ea;
        prop_number_t pn;
        uint8_t enaddr[ETHER_ADDR_LEN];
-       uint16_t myea[ETHER_ADDR_LEN / 2], cfg1, cfg2, swdpin;
+       uint16_t myea[ETHER_ADDR_LEN / 2], cfg1, cfg2, swdpin, io3;
        pcireg_t preg, memtype;
        uint32_t reg;
 
@@ -1576,9 +1576,34 @@
        IFQ_SET_MAXLEN(&ifp->if_snd, max(WM_IFQUEUELEN, IFQ_MAXLEN));
        IFQ_SET_READY(&ifp->if_snd);
 
-       if (sc->sc_type != WM_T_82573 && sc->sc_type != WM_T_82574 &&
-           sc->sc_type != WM_T_82583 && sc->sc_type != WM_T_ICH8)
+       /* Check for jumbo frame */
+       switch (sc->sc_type) {
+       case WM_T_82573:
+               /* XXX limited to 9234 if ASPM is disabled */
+               wm_read_eeprom(sc, EEPROM_INIT_3GIO_3, 1, &io3);
+               if ((io3 & EEPROM_3GIO_3_ASPM_MASK) != 0)
+                       sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU;
+               break;
+       case WM_T_82571:
+       case WM_T_82572:
+       case WM_T_82574:
+       case WM_T_80003:
+       case WM_T_ICH9:
+       case WM_T_ICH10:
+               /* XXX limited to 9234 */
                sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU;
+               break;
+       case WM_T_82542_2_0:
+       case WM_T_82542_2_1:
+       case WM_T_82583:
+       case WM_T_ICH8:
+               /* No support for jumbo frame */
+               break;
+       default:
+               /* ETHER_MAX_LEN_JUMBO */
+               sc->sc_ethercom.ec_capabilities |= ETHERCAP_JUMBO_MTU;
+               break;
+       }
 
        /*
         * If we're a i82543 or greater, we can support VLANs.
@@ -3483,10 +3508,9 @@
        sc->sc_rctl = RCTL_EN | RCTL_LBM_NONE | RCTL_RDMTS_1_2 | RCTL_DPF
            | RCTL_MO(sc->sc_mchash_type);
 
-       /* 82573 doesn't support jumbo frame */
-       if (sc->sc_type != WM_T_82573 && sc->sc_type != WM_T_82574 &&
-           sc->sc_type != WM_T_82583 && sc->sc_type != WM_T_ICH8)
-               sc->sc_rctl |= RCTL_LPE;
+       if (((sc->sc_ethercom.ec_capabilities & ETHERCAP_JUMBO_MTU) != 0)
+           && (ifp->if_mtu > ETHERMTU))
+                       sc->sc_rctl |= RCTL_LPE;
 
        if (MCLBYTES == 2048) {
                sc->sc_rctl |= RCTL_2k;
@@ -5689,9 +5713,9 @@
 {
        uint16_t data;
 
-       wm_read_eeprom(sc, NVM_INIT_CONTROL2_REG, 1, &data);
-
-       if ((data & NVM_INIT_CTRL2_MNGM) != 0)
+       wm_read_eeprom(sc, EEPROM_OFF_CFG2, 1, &data);
+
+       if ((data & EEPROM_CFG2_MNGM_MASK) != 0)
                return 1;
 
        return 0;
diff -r 49ac72da0d18 -r e39bc0977553 sys/dev/pci/if_wmreg.h
--- a/sys/dev/pci/if_wmreg.h    Tue Jan 05 09:31:21 2010 +0000
+++ b/sys/dev/pci/if_wmreg.h    Tue Jan 05 10:02:01 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wmreg.h,v 1.29 2009/12/29 16:01:21 msaitoh Exp $    */
+/*     $NetBSD: if_wmreg.h,v 1.30 2010/01/05 10:02:01 msaitoh Exp $    */
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -273,6 +273,7 @@
 #define        EEPROM_OFF_MACADDR      0x00    /* MAC address offset */
 #define        EEPROM_OFF_CFG1         0x0a    /* config word 1 */
 #define        EEPROM_OFF_CFG2         0x0f    /* config word 2 */
+#define        EEPROM_INIT_3GIO_3      0x1a    /* PCIe Initial Configuration Word 3 */ 
 #define        EEPROM_OFF_SWDPIN       0x20    /* SWD Pins (Cordova) */
 
 #define        EEPROM_CFG1_LVDID       (1U << 0)
@@ -304,11 +305,14 @@
 #define        EEPROM_CFG2_APM_PME     (1U << 15)
 #define        EEPROM_CFG2_SWDPIO_SHIFT 4
 #define        EEPROM_CFG2_SWDPIO_MASK (0xf << EEPROM_CFG2_SWDPIO_SHIFT)
+#define        EEPROM_CFG2_MNGM_MASK   (3U << 13) /* Manageability Operation mode */
 
 #define        EEPROM_SWDPIN_MASK      0xdf
 #define        EEPROM_SWDPIN_SWDPIN_SHIFT 0
 #define        EEPROM_SWDPIN_SWDPIO_SHIFT 8
 
+#define EEPROM_3GIO_3_ASPM_MASK        (0x3 << 2)      /* Active State PM Support */
+
 #define        WMREG_EERD      0x0014  /* EEPROM read */
 #define        EERD_DONE       0x02    /* done bit */
 #define        EERD_START      0x01    /* First bit for telling part to start operation */
@@ -750,6 +754,3 @@
 
 #define ICH_NVM_SIG_WORD       0x13
 #define ICH_NVM_SIG_MASK       0xc000
-
-#define        NVM_INIT_CONTROL2_REG   0x000f
-#define        NVM_INIT_CTRL2_MNGM     0x6000



Home | Main Index | Thread Index | Old Index