summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-07-14 14:45:13 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-07-14 14:45:13 +0000
commitc756999a4765c3e2fa2ee2a06318f47408de1b53 (patch)
treea0743a9589fff41d6f2f6493486594b209a3fd7b
parente4daba4f56cde355565fa8e5522ac5a8f2813bcb (diff)
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 70614bb9f8..8f387f04c5 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 ba647fa464..44e43f973c 100644
--- a/c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c
+++ b/c/src/lib/libbsp/i386/pc386/ne2000/ne2000.c
@@ -204,7 +204,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 */
@@ -501,11 +502,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);
@@ -604,7 +602,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
@@ -683,7 +681,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);