diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-07-14 14:45:13 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-07-14 14:45:13 +0000 |
commit | c756999a4765c3e2fa2ee2a06318f47408de1b53 (patch) | |
tree | a0743a9589fff41d6f2f6493486594b209a3fd7b | |
parent | e4daba4f56cde355565fa8e5522ac5a8f2813bcb (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/ChangeLog | 6 | ||||
-rw-r--r-- | 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 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); |