summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/pc386/include/wd80x3.h
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-10-20 12:57:46 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-10-20 12:57:46 +0000
commit9142bf398b6de6ce6eaf8f04ffca47b55a3b49f1 (patch)
tree7161964615f3a58285e88f162c6bc5e35afedda6 /c/src/lib/libbsp/i386/pc386/include/wd80x3.h
parent2000-10-19 Joel Sherrill <joel@OARcorp.com> (diff)
downloadrtems-9142bf398b6de6ce6eaf8f04ffca47b55a3b49f1.tar.bz2
2000-10-20 Dmitry Kargapolov <dk@gentex.ru>
* ne2000/ne2000.c: Fix some errors in the driver. 1. There was no sufficient check of data in ethernet header. The code in ne_rx_daemon() was: inport_word (dport, len); ... len -= 4; ... if (len > 0) ne_read_data (sc, startaddr, len, p); Unfortunately, sometimes my NIC gave me too big len value, the result was memory override. To fix this, I added ethernet header data checking. 2. The way overrides were serviced was not good. It was complex but sometimes did not provide reliable continuing of NIC working. I had the situation of an endless loop in ne_check_status() after override processing. 3. There was conceptual error of porting. The old method of overrides curing was ported from the OS-s, where override-processing did start immediately. But RTEMS-version uses events, and cleaning of the overrides can start later. I selected the way of ne2000 programming that is used in freebsd kernel (v4.0). Because of both problems, incorrect data in header of raw packet and receiver override, it went through ne_reset() and fully reset the ne2000. So, in summary - added detecting of the incorrect data in ethernet header; - replaced handling of receiver overrides with new scheme, via resetting of NIC, this method is used also in case of invalid header detecting.
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions