summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-07-14 14:45:05 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-07-14 14:45:05 +0000
commit3b06edafb8396ebb65aef24dc3dab4e91735f957 (patch)
treec488955b57028d1276909668250791b0a31c5bf4
parent2011-07-13 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-3b06edafb8396ebb65aef24dc3dab4e91735f957.tar.bz2
2011-07-14 Till Straumann <strauman@slac.stanford.edu>
PR 1833/bsps * ne2000/ne2000.c: Addition of multicast support disabled broadcast reception. Patch also includes support to work on big endian CPUs.
-rw-r--r--c/src/lib/libbsp/i386/pc386/ChangeLog6
-rw-r--r--c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c14
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 <strauman@slac.stanford.edu>
+
+ 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 <kjrobert at alumni dot uwaterloo dot ca>
* 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);