Module Name:src
Committed By: riz
Date: Tue Nov 20 22:26:03 UTC 2012
Modified Files:
src/sys/dev/marvell [netbsd-6]: if_mvgbe.c mvgbereg.h
Log Message:
Apply patch (requested by msaitoh in ticket #671):
sys/dev/marvell/if_mvgbe.c 1.19-1.23, 1.26-1.31
sys/dev/marvell/mvgbereg.h 1.4-1.5, 1.7
Add missing bus_dmamap_sync() for the RX buffer.
Fix device timeout problem.
Fix broken hardware checksumming.
Fix a bug that kernel panics when the system get a packet while calling
mvgbe_stop (via ifconfig down).
Add missing mii_tick() call.
Change style a bit.
Don't use M_HASFCS flag.
When an interrput is link change, notify link change to mii layer using
mii_pollstat().
Fix a bug that the alignment of jumbo buffer(MVGBE_JLEN) is miscalculated.
To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.16.2.1 src/sys/dev/marvell/if_mvgbe.c
cvs rdiff -u -r1.3 -r1.3.10.1 src/sys/dev/marvell/mvgbereg.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/marvell/if_mvgbe.c
diff -u src/sys/dev/marvell/if_mvgbe.c:1.16 src/sys/dev/marvell/if_mvgbe.c:1.16.2.1
--- src/sys/dev/marvell/if_mvgbe.c:1.16 Thu Feb 2 19:43:04 2012
+++ src/sys/dev/marvell/if_mvgbe.c Tue Nov 20 22:26:03 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: if_mvgbe.c,v 1.16 2012/02/02 19:43:04 tls Exp $ */
+/* $NetBSD: if_mvgbe.c,v 1.16.2.1 2012/11/20 22:26:03 riz Exp $ */
/*
* Copyright (c) 2007, 2008 KIYOHARA Takashi
* All rights reserved.
@@ -25,13 +25,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include sys/cdefs.h
-__KERNEL_RCSID(0, $NetBSD: if_mvgbe.c,v 1.16 2012/02/02 19:43:04 tls Exp $);
+__KERNEL_RCSID(0, $NetBSD: if_mvgbe.c,v 1.16.2.1 2012/11/20 22:26:03 riz Exp $);
#include sys/param.h
#include sys/bus.h
+#include sys/callout.h
#include sys/device.h
#include sys/endian.h
#include sys/errno.h
+#include sys/kernel.h
#include sys/kmem.h
#include sys/mutex.h
#include sys/sockio.h
@@ -89,7 +91,9 @@ CTASSERT(MVGBE_RX_RING_CNT 1 MVGBE_
(MVGBE_RX_RING_CNT + 1) % MVGBE_RX_RING_CNT);
#define MVGBE_JSLOTS 384 /* */
-#define MVGBE_JLEN ((MVGBE_MRU + MVGBE_RXBUF_ALIGN)~MVGBE_RXBUF_MASK)
+#define MVGBE_JLEN \
+((MVGBE_MRU + MVGBE_HWHEADER_SIZE + MVGBE_RXBUF_ALIGN - 1) \
+~MVGBE_RXBUF_MASK)
#define MVGBE_NTXSEG 30
#define MVGBE_JPAGESZ PAGE_SIZE
#define MVGBE_RESID \
@@ -195,17 +199,20 @@ struct mvgbe_softc {
bus_space_tag_t sc_iot;
bus_space_handle_t sc_ioh;
- bus_space_handle_t sc_dafh; /* dest address filter handle */
+ bus_space_handle_t sc_dafh; /* dest address filter handle */
bus_dma_tag_t sc_dmat;
struct ethercom sc_ethercom;
struct mii_data sc_mii;
u_int8_t sc_enaddr[ETHER_ADDR_LEN]; /* station addr */
+ callout_t sc_tick_ch; /* tick callout */
+
struct mvgbe_chain_data sc_cdata;
struct mvgbe_ring_data *sc_rdata;
bus_dmamap_t sc_ring_map;
int sc_if_flags;
+ int sc_wdogsoft;
LIST_HEAD(__mvgbe_jfreehead, mvgbe_jpool_entry) sc_jfree_listhead;
LIST_HEAD(__mvgbe_jinusehead, mvgbe_jpool_entry) sc_jinuse_listhead;
@@ -235,6 +242,7 @@ static void mvgbec_wininit(struct mvgbec
static int mvgbe_match(device_t, struct cfdata *, void *);
static void mvgbe_attach(device_t, device_t, void *);
+static void mvgbe_tick(void *);
static int mvgbe_intr(void *);
static void mvgbe_start(struct ifnet *);
@@ -336,7 +344,7 @@ mvgbec_match(device_t parent, cfdata_t m
static void
mvgbec_attach(device_t parent, device_t self, void *aux)
{
- struct mvgbec_softc *sc = device_private(self);
+ struct mvgbec_softc *csc = device_private(self);
struct marvell_attach_args *mva = aux, gbea;
struct mvgbe_softc *port;
struct mii_softc *mii;
@@ -347,10 +355,10 @@ mvgbec_attach(device_t parent, device_t
aprint_naive(\n);
aprint_normal(: Marvell Gigabit Ethernet Controller\n);
- sc-sc_dev = self;
- sc-sc_iot = mva-mva_iot;
+ csc-sc_dev = self;
+ csc-sc_iot = mva-mva_iot;
if (bus_space_subregion(mva-mva_iot, mva-mva_ioh, mva-mva_offset,
- mva-mva_size, sc-sc_ioh)) {
+ mva-mva_size, csc-sc_ioh)) {
aprint_error_dev(self, Cannot map registers\n);
return;
}
@@ -359,15 +367,15 @@ mvgbec_attach(device_t parent, device_t
mvgbec0 = self;
phyaddr = 0;
- MVGBE_WRITE(sc, MVGBE_PHYADDR, phyaddr);
+ MVGBE_WRITE(csc, MVGBE_PHYADDR, phyaddr);
- mutex_init(sc-sc_mtx, MUTEX_DEFAULT, IPL_NET);
+ mutex_init(csc-sc_mtx, MUTEX_DEFAULT, IPL_NET);
/* Disable and clear Gigabit Ethernet Unit interrupts */
- MVGBE_WRITE(sc, MVGBE_EUIM, 0);
- MVGBE_WRITE(sc, MVGBE_EUIC, 0);
+ MVGBE_WRITE(csc, MVGBE_EUIM, 0);
+ MVGBE_WRITE(csc, MVGBE_EUIC, 0);
- mvgbec_wininit(sc);
+ mvgbec_wininit(csc);
memset(gbea, 0, sizeof(gbea));
for (i = 0; i __arraycount(mvgbe_ports); i++) {
@@ -375,17 +383,17 @@ mvgbec_attach(device_t parent, device_t
mvgbe_ports[i].unit != mva-mva_unit)
continue;
- sc-sc_flags = mvgbe_ports[i].flags;
+ csc-sc_flags =