From 3b06edafb8396ebb65aef24dc3dab4e91735f957 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 14 Jul 2011 14:45:05 +0000 Subject: 2011-07-14 Till Straumann PR 1833/bsps * ne2000/ne2000.c: Addition of multicast support disabled broadcast reception. Patch also includes support to work on big endian CPUs. --- c/src/lib/libbsp/i386/pc386/ChangeLog | 6 ++++++ c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c | 14 ++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/c/src/lib/libbsp/i386/pc386/ChangeLog b/c/src/lib/libbsp/i386/pc386/ChangeLog index 0dcac998a2..dfdc82d051 100644 --- a/c/src/lib/libbsp/i386/pc386/ChangeLog +++ b/c/src/lib/libbsp/i386/pc386/ChangeLog @@ -1,3 +1,9 @@ +2011-07-14 Till Straumann + + PR 1833/bsps + * ne2000/ne2000.c: Addition of multicast support disabled broadcast + reception. Patch also includes support to work on big endian CPUs. + 2011-04-11 Keith Robertson * ne2000/ne2000.c: Add multicast support. Patch submitted to mailing diff --git a/c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c b/c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c index 26cc11a6bd..936ae54ab0 100644 --- a/c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c +++ b/c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c @@ -205,7 +205,8 @@ struct ne_ring { unsigned char rsr; /* receiver status */ unsigned char next; /* pointer to next packet */ - unsigned short count; /* bytes in packet (length + 4) */ + unsigned char cnt_lo; /* bytes in packet (length + 4) */ + unsigned char cnt_hi; /* 16-bit, little-endian value */ }; /* Forward declarations to avoid warnings */ @@ -502,11 +503,8 @@ ne_init_hardware (struct ne_softc *sc) /* Set page 0 registers */ outport_byte (port + CMDR, MSK_PG0 | MSK_RD2 | MSK_STP); - /* accept broadcast */ - outport_byte (port + RCR, (sc->accept_broadcasts ? MSK_AB : 0)); - - /* accept multicast */ - outport_byte (port + RCR, MSK_AM); + /* accept broadcast + multicast */ + outport_byte (port + RCR, (sc->accept_broadcasts ? MSK_AB : 0) | MSK_AM); /* Start interface */ outport_byte (port + CMDR, MSK_PG0 | MSK_RD2 | MSK_STA); @@ -605,7 +603,7 @@ ne_rx_daemon (void *arg) next = NE_FIRST_RX_PAGE; /* check packet length */ - len = hdr.count; + len = ( hdr.cnt_hi << 8 ) | hdr.cnt_lo; if (currpage < startpage) cnt1 = currpage + (NE_STOP_PAGE - NE_FIRST_RX_PAGE) - startpage; else @@ -684,7 +682,7 @@ ne_rx_daemon (void *arg) m->m_data += sizeof (struct ether_header); #ifdef DEBUG_NE - /* printk("[r%d]", hdr.count - sizeof(hdr)); */ + /* printk("[r%d]", ((hdr.cnt_hi<<8) + hdr.cnt_lo - sizeof(hdr))); */ printk("<"); #endif ether_input (ifp, eh, m); -- cgit v1.2.3