Module Name: src
Committed By: msaitoh
Date: Tue Jun 25 17:38:38 UTC 2013
Modified Files:
src/sys/dev/pci: if_wm.c if_wmreg.h
Log Message:
Sync the wm_enable_mng_pass_thru() function with FreeBSD. Don't check
MANC_EN_MAC_ADDR_FILTER bit. Add 82574 and 82583 specific check. This
modification may change the setting of WM_F_HAS_MANAGE flag on some machines.
Sync the wm_release_manageablilty() fucntion with FreeBSD. Set MANC_ARP_EN.
This change enables HW ARP function when entering suspend.
When the chip is 82580(ER) or I350, set WM_F_ASF_FIRMWARE_PRES flag and
check for the WM_F_ARC_SUBSYS_VALID flag. Same as FreeBSD.
To generate a diff of this commit:
cvs rdiff -u -r1.259 -r1.260 src/sys/dev/pci/if_wm.c
cvs rdiff -u -r1.53 -r1.54 src/sys/dev/pci/if_wmreg.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/if_wm.c
diff -u src/sys/dev/pci/if_wm.c:1.259 src/sys/dev/pci/if_wm.c:1.260
--- src/sys/dev/pci/if_wm.c:1.259 Tue Jun 25 02:34:00 2013
+++ src/sys/dev/pci/if_wm.c Tue Jun 25 17:38:38 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: if_wm.c,v 1.259 2013/06/25 02:34:00 msaitoh Exp $ */
+/* $NetBSD: if_wm.c,v 1.260 2013/06/25 17:38:38 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.259 2013/06/25 02:34:00 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.260 2013/06/25 17:38:38 msaitoh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -7968,8 +7968,7 @@ wm_enable_mng_pass_thru(struct wm_softc
DPRINTF(WM_DEBUG_MANAGE, ("%s: MANC (%08x)\n",
device_xname(sc->sc_dev), manc));
- if (((manc & MANC_RECV_TCO_EN) == 0)
- || ((manc & MANC_EN_MAC_ADDR_FILTER) == 0))
+ if ((manc & MANC_RECV_TCO_EN) == 0)
return 0;
if ((sc->sc_flags & WM_F_ARC_SUBSYS_VALID) != 0) {
@@ -7979,6 +7978,17 @@ wm_enable_mng_pass_thru(struct wm_softc
&& ((fwsm & FWSM_MODE_MASK)
== (MNG_ICH_IAMT_MODE << FWSM_MODE_SHIFT)))
return 1;
+ } else if ((sc->sc_type == WM_T_82574) || (sc->sc_type == WM_T_82583)){
+ uint16_t data;
+
+ factps = CSR_READ(sc, WMREG_FACTPS);
+ wm_read_eeprom(sc, EEPROM_OFF_CFG2, 1, &data);
+ DPRINTF(WM_DEBUG_MANAGE, ("%s: CFG2 (%04x)\n",
+ device_xname(sc->sc_dev), data));
+ if (((factps & FACTPS_MNGCG) == 0)
+ && ((data & EEPROM_CFG2_MNGM_MASK)
+ == (EEPROM_CFG2_MNGM_PT << EEPROM_CFG2_MNGM_SHIFT)))
+ return 1;
} else if (((manc & MANC_SMBUS_EN) != 0)
&& ((manc & MANC_ASF_EN) == 0))
return 1;
@@ -8471,6 +8481,7 @@ wm_release_manageability(struct wm_softc
if (sc->sc_flags & WM_F_HAS_MANAGE) {
uint32_t manc = CSR_READ(sc, WMREG_MANC);
+ manc |= MANC_ARP_EN;
if (sc->sc_type >= WM_T_82571)
manc &= ~MANC_EN_MNG2HOST;
@@ -8496,11 +8507,9 @@ wm_get_wakeup(struct wm_softc *sc)
case WM_T_82574:
case WM_T_82575:
case WM_T_82576:
-#if 0 /* XXX */
case WM_T_82580:
case WM_T_82580ER:
case WM_T_I350:
-#endif
if ((CSR_READ(sc, WMREG_FWSM) & FWSM_MODE_MASK) != 0)
sc->sc_flags |= WM_F_ARC_SUBSYS_VALID;
sc->sc_flags |= WM_F_ASF_FIRMWARE_PRES;
Index: src/sys/dev/pci/if_wmreg.h
diff -u src/sys/dev/pci/if_wmreg.h:1.53 src/sys/dev/pci/if_wmreg.h:1.54
--- src/sys/dev/pci/if_wmreg.h:1.53 Wed Jun 19 10:38:51 2013
+++ src/sys/dev/pci/if_wmreg.h Tue Jun 25 17:38:38 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: if_wmreg.h,v 1.53 2013/06/19 10:38:51 msaitoh Exp $ */
+/* $NetBSD: if_wmreg.h,v 1.54 2013/06/25 17:38:38 msaitoh Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@@ -350,7 +350,11 @@ struct livengood_tcpip_ctxdesc {
#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_CFG2_MNGM_SHIFT 13 /* Manageability Operation mode */
+#define EEPROM_CFG2_MNGM_MASK (3U << EEPROM_CFG2_MNGM_SHIFT)
+#define EEPROM_CFG2_MNGM_DIS 0
+#define EEPROM_CFG2_MNGM_NCSI 1
+#define EEPROM_CFG2_MNGM_PT 2
#define EEPROM_K1_CONFIG_ENABLE 0x01
@@ -870,8 +874,10 @@ struct livengood_tcpip_ctxdesc {
#define MANC_SMBUS_EN 0x00000001
#define MANC_ASF_EN 0x00000002
#define MANC_ARP_EN 0x00002000
+#define MANC_RECV_TCO_RESET 0x00010000
#define MANC_RECV_TCO_EN 0x00020000
#define MANC_BLK_PHY_RST_ON_IDE 0x00040000
+#define MANC_RECV_ALL 0x00080000
#define MANC_EN_MAC_ADDR_FILTER 0x00100000
#define MANC_EN_MNG2HOST 0x00200000