From owner-freebsd-bugs Thu Jun 12 04:20:04 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.5/8.8.5) id EAA23483 for bugs-outgoing; Thu, 12 Jun 1997 04:20:04 -0700 (PDT) Received: (from gnats@localhost) by hub.freebsd.org (8.8.5/8.8.5) id EAA23457; Thu, 12 Jun 1997 04:20:02 -0700 (PDT) Resent-Date: Thu, 12 Jun 1997 04:20:02 -0700 (PDT) Resent-Message-Id: <199706121120.EAA23457@hub.freebsd.org> Resent-From: gnats (GNATS Management) Resent-To: freebsd-bugs Resent-Reply-To: FreeBSD-gnats@FreeBSD.ORG, chi@rd.njk.co.jp Received: (from nobody@localhost) by hub.freebsd.org (8.8.5/8.8.5) id EAA23129; Thu, 12 Jun 1997 04:11:42 -0700 (PDT) Message-Id: <199706121111.EAA23129@hub.freebsd.org> Date: Thu, 12 Jun 1997 04:11:42 -0700 (PDT) From: chi@rd.njk.co.jp To: freebsd-gnats-submit@FreeBSD.ORG X-Send-Pr-Version: www-1.0 Subject: kern/3853: netboot/ns8390.c breaks NS datasheet Sender: owner-bugs@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk >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 (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: