Module Name: src
Committed By: sborrill
Date: Fri Apr 8 13:56:51 UTC 2011
Modified Files:
src/sys/dev/pci: if_alc.c if_bge.c
src/sys/net: if_vlan.c
Log Message:
PR kern/38871
Fix LAN on bge(4), alc(4). Flag VLAN capability in ec_capenable as used by
network
card drivers.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/pci/if_alc.c
cvs rdiff -u -r1.190 -r1.191 src/sys/dev/pci/if_bge.c
cvs rdiff -u -r1.66 -r1.67 src/sys/net/if_vlan.c
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_alc.c
diff -u src/sys/dev/pci/if_alc.c:1.2 src/sys/dev/pci/if_alc.c:1.3
--- src/sys/dev/pci/if_alc.c:1.2 Wed Feb 23 02:25:04 2011
+++ src/sys/dev/pci/if_alc.c Fri Apr 8 13:56:51 2011
@@ -2586,11 +2586,10 @@
static void
alc_rxvlan(struct alc_softc *sc)
{
- struct ifnet *ifp = &sc->sc_ec.ec_if;
uint32_t reg;
reg = CSR_READ_4(sc, ALC_MAC_CFG);
- if (ifp->if_capabilities & ETHERCAP_VLAN_HWTAGGING)
+ if (sc->sc_ec.ec_capenable & ETHERCAP_VLAN_HWTAGGING)
reg |= MAC_CFG_VLAN_TAG_STRIP;
else
reg &= ~MAC_CFG_VLAN_TAG_STRIP;
Index: src/sys/dev/pci/if_bge.c
diff -u src/sys/dev/pci/if_bge.c:1.190 src/sys/dev/pci/if_bge.c:1.191
--- src/sys/dev/pci/if_bge.c:1.190 Sun Jan 9 13:01:03 2011
+++ src/sys/dev/pci/if_bge.c Fri Apr 8 13:56:51 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bge.c,v 1.190 2011/01/09 13:01:03 jruoho Exp $ */
+/* $NetBSD: if_bge.c,v 1.191 2011/04/08 13:56:51 sborrill Exp $ */
/*
* Copyright (c) 2001 Wind River Systems
@@ -79,7 +79,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.190 2011/01/09 13:01:03 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.191 2011/04/08 13:56:51 sborrill Exp $");
#include "vlan.h"
#include "rnd.h"
@@ -221,6 +221,7 @@
static uint8_t bge_eeprom_getbyte(struct bge_softc *, int, uint8_t *);
static int bge_read_eeprom(struct bge_softc *, void *, int, int);
static void bge_setmulti(struct bge_softc *);
+static void bge_setvlan(struct bge_softc *);
static void bge_handle_events(struct bge_softc *);
static int bge_alloc_jumbo_mem(struct bge_softc *);
@@ -1648,6 +1649,18 @@
}
static void
+bge_setvlan(struct bge_softc *sc)
+{
+ struct ethercom *ac = &sc->ethercom;
+
+ /* Enable or disable VLAN tag stripping as needed. */
+ if (ac->ec_capenable & ETHERCAP_VLAN_HWTAGGING)
+ BGE_CLRBIT(sc, BGE_RX_MODE, BGE_RXMODE_RX_KEEP_VLAN_DIAG);
+ else
+ BGE_CLRBIT(sc, BGE_RX_MODE, BGE_RXMODE_RX_KEEP_VLAN_DIAG);
+}
+
+static void
bge_sig_pre_reset(struct bge_softc *sc, int type)
{
/*
@@ -4318,6 +4331,9 @@
/* Program multicast filter. */
bge_setmulti(sc);
+ /* Program VLAN tag stripping */
+ bge_setvlan(sc);
+
/* Init RX ring. */
bge_init_rx_ring_std(sc);
Index: src/sys/net/if_vlan.c
diff -u src/sys/net/if_vlan.c:1.66 src/sys/net/if_vlan.c:1.67
--- src/sys/net/if_vlan.c:1.66 Mon Apr 5 07:22:24 2010
+++ src/sys/net/if_vlan.c Fri Apr 8 13:56:51 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vlan.c,v 1.66 2010/04/05 07:22:24 joerg Exp $ */
+/* $NetBSD: if_vlan.c,v 1.67 2011/04/08 13:56:51 sborrill Exp $ */
/*-
* Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
@@ -78,7 +78,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vlan.c,v 1.66 2010/04/05 07:22:24 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vlan.c,v 1.67 2011/04/08 13:56:51 sborrill Exp $");
#include "opt_inet.h"
@@ -316,7 +316,8 @@
* assisted checksumming flags and tcp segmentation
* offload.
*/
- if (ec->ec_capabilities & ETHERCAP_VLAN_HWTAGGING)
+ if (ec->ec_capabilities & ETHERCAP_VLAN_HWTAGGING) {
+ ec->ec_capenable |= ETHERCAP_VLAN_HWTAGGING;
ifp->if_capabilities = p->if_capabilities &
(IFCAP_TSOv4 | IFCAP_TSOv6 |
IFCAP_CSUM_IPv4_Tx|IFCAP_CSUM_IPv4_Rx|
@@ -324,7 +325,7 @@
IFCAP_CSUM_UDPv4_Tx|IFCAP_CSUM_UDPv4_Rx|
IFCAP_CSUM_TCPv6_Tx|IFCAP_CSUM_TCPv6_Rx|
IFCAP_CSUM_UDPv6_Tx|IFCAP_CSUM_UDPv6_Rx);
-
+ }
/*
* We inherit the parent's Ethernet address.
*/