diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-07-14 14:45:05 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-07-14 14:45:05 +0000 |
commit | 3b06edafb8396ebb65aef24dc3dab4e91735f957 (patch) | |
tree | c488955b57028d1276909668250791b0a31c5bf4 /c | |
parent | 2011-07-13 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff) | |
download | rtems-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.
Diffstat (limited to 'c')
-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 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); |