Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Jun 1997 04:11:42 -0700 (PDT)
From:      chi@rd.njk.co.jp
To:        freebsd-gnats-submit@FreeBSD.ORG
Subject:   kern/3853: netboot/ns8390.c breaks NS datasheet
Message-ID:  <199706121111.EAA23129@hub.freebsd.org>
Resent-Message-ID: <199706121120.EAA23457@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         3853
>Category:       kern
>Synopsis:       netboot/ns8390.c breaks NS datasheet
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jun 12 04:20:01 PDT 1997
>Last-Modified:
>Originator:     Chiharu Shibata
>Organization:
NJK Corporation
>Release:        FreeBSD 2.1.0 or later
>Environment:
FreeBSD 2.1.0-Release i386
>Description:
About DP8390 chip(NE2000 or compatible), NS datasheet claims that
writing all 0 to bit3,4,5(means RD0,RD1,RD2) of Command Register
is "Not Allowed".
But in netboot/ns8390.c, a few statements do so.

We can get the datasheet from <http://www.national.com/pf/DP/DP83902A.html>;
(This datasheet is DP83902A, but according to "Features", it is
 100% software compatible with DP8390)

>How-To-Repeat:
None
>Fix:
--- /usr/src/sys/i386/boot/netboot/ns8390.c.orig    Thu Jun 12 13:33:50 1997
+++ /usr/src/sys/i386/boot/netboot/ns8390.c         Thu Jun 12 13:36:07 1997
@@ -480,9 +480,19 @@
        if (!(rstat & D8390_RSTAT_PRX)) return(0);
        bound = inb(eth_nic_base+D8390_P0_BOUND)+1;
        if (bound == eth_memsize) bound = eth_tx_start + D8390_TXBUF_SIZE;
-       outb(eth_nic_base+D8390_P0_COMMAND, D8390_COMMAND_PS1);
+       if (eth_flags & FLAG_790)
+               outb(eth_nic_base+D8390_P0_COMMAND, D8390_COMMAND_PS1 |
+                       D8390_COMMAND_STA);
+       else
+               outb(eth_nic_base+D8390_P0_COMMAND, D8390_COMMAND_PS1 |
+                       D8390_COMMAND_RD2 | D8390_COMMAND_STA);
        curr = inb(eth_nic_base+D8390_P1_CURR);
-       outb(eth_nic_base+D8390_P0_COMMAND, D8390_COMMAND_PS0);
+       if (eth_flags & FLAG_790)
+               outb(eth_nic_base+D8390_P0_COMMAND, D8390_COMMAND_PS0 |
+                       D8390_COMMAND_STA);
+       else
+               outb(eth_nic_base+D8390_P0_COMMAND, D8390_COMMAND_PS0 |
+                       D8390_COMMAND_RD2 | D8390_COMMAND_STA);
        if (curr == eth_memsize) curr=eth_tx_start + D8390_TXBUF_SIZE;
        if (curr == bound) return(0);
        if (eth_vendor == VENDOR_WD) {

>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199706121111.EAA23129>