Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Dec 1995 11:18:12 +0100 (MET)
From:      Thomas Graichen <graichen@omega.physik.fu-berlin.de>
To:        dk+@ua.net
Cc:        bugs@freebsd.org
Subject:   Re: i386/906: netboot ca't find NE2000-compat card (DP83905 chip, Dauphin notebook)
Message-ID:  <199512211018.LAA02275@mordillo>
In-Reply-To: <199512202040.WAA03820@snark.ukma.kiev.ua> from "Dmitry Kohmanyuk" at Dec 20, 95 10:40:41 pm

next in thread | previous in thread | raw e-mail | index | archive | help
this came up some time before - it works if you uncomment the other
types wd etc. - but this is only a hack

t

hasn't Dmitry Kohmanyuk said ? ...
> 
> 
> >Number:         906
> >Category:       i386
> >Synopsis:       /sys/i386/boot/netboot/nb8390.com cannot recognize NE2000-comp. card
> >Confidential:   no
> >Severity:       serious
> >Priority:       high
> >Responsible:    freebsd-bugs
> >State:          open
> >Class:          sw-bug
> >Submitter-Id:   current-users
> >Arrival-Date:   Wed Dec 20 13:00:02 PST 1995
> >Last-Modified:
> >Originator:     Dmitry Kohmanyuk
> >Organization:
> FARM Computing Association
> >Release:        FreeBSD snark.ukma.kiev.ua 2.0.5-RELEASE
> >Environment:
> 
> 	
> 	I have Douphin DTR-1 notebook (bought it yesterday).
> 	It is 486SLC (no coprocessor), has 6 megs of RAM, small HD,
> 	and built-in Ethernet card.  
> 
> 	The documentation claims that the card is NE-2000 compatible,
> 	based on DP83905 chip from NS, controller is AT/LANTIC,
> 	connection is TP, RJ-45,
> 	and it has 8K x 8 static RAM buffer (so, should be fast),
> 	256 bit EEPROM (for port/irq/etc setup), 16 byte FIFO.
> 	Then, doc says:  "Mode:  I/O Port mode, 
> 		compatible with 8BIT Mode offered by Novell NE2000" 
> 
> >Description:
> 
> 	I try to setup my notebook to be a diskless FreeBSD workstation
> 	(I think it should work fine at least in text mode).
> 
> 	I boot bare-bones DOS (F5 on boot), run the supplied "lanon"
> 	program (it enables the card); the light on hub goes on after that).
> 	I run the setup/diagnostic program in "packet sniffer" mode and it 
> 	indeed shows all my rwho packets flowing on the wire (and some others, too).
> 	The setup/diag program, when tests reading NIC regs, says: "8 bit slot found",
> 	so I assume card should work in 8-bit mode.
> 
> 	I already have 2 diskless PCs running FreeBSD (2.0.5 and 2.1) here.
> 	Then, I run nb8390.com program (from floppy).
> 	I know there can be some problems with supplied nb8390.com since it's configured
> 	to probe for both WD and NE, so I built a custom version which probes only for NE.  
> 
> 	the stock version says, "No adapter found".  My version (that same file
> 	which boots 2 other boxes) hangs.
> 
> 	The card is set to port 0x300, irq 5.  The boot program is set to port 0x300.
> 	I have patched source to insert some debug printf's, and found that it
> 	fails testing for 8-bit card, and hangs when testing for 16-bit card.
> 	I have read the if_ed.c from 2.0.5 (it seems 2.1 is the same for NE2000s),
> 	and copied the ed_probe_generic8390() code to test the board. it succeeds!
> 	This is a relevant piece of code from /sys/i386/boot/netboot/ns8390.c
> 	(DPRINTF() and DELAY() are mine, as well as long if() followed by goto):
> 
> 	[ the last thing printed is ne-3, so it hangs before ne-3.1 ]
> 	[ note that bcompare() returns 1 on memory equal, unlike bcmp() ]
> 
> 	[...]
>                 DPRINTF(("NE*000 card... "));
>                 eth_bmem = (char *)0;           /* No shared memory */
>                 eth_asic_base = NE_BASE + NE_ASIC_OFFSET;
>                 eth_nic_base = NE_BASE;
>                 eth_vendor = VENDOR_NOVELL;
>                 eth_flags = FLAG_PIO;
>                 eth_memsize = MEM_16384;
>                 eth_tx_start = 32;
>                 c = inb(eth_asic_base + NE_RESET);
>                 outb(eth_asic_base + NE_RESET, c);
>                 DELAY(5000);
>                 inb(0x84);
>                 outb(eth_nic_base + D8390_P0_COMMAND, D8390_COMMAND_STP |
>                         D8390_COMMAND_RD2);
>                 DELAY(5000);
>                 DPRINTF(("ne-1 "));
>                 /* dk: test for 8390 chip, from 2.0.5's driver */
>                 if ((inb(eth_nic_base + D8390_P0_COMMAND) &
>                      (D8390_COMMAND_RD2 | D8390_COMMAND_TXP |
>                       D8390_COMMAND_STA | D8390_COMMAND_STP)) !=
>                      (D8390_COMMAND_RD2 | D8390_COMMAND_STP) ||
>                     (inb(eth_nic_base + D8390_P0_ISR) & D8390_ISR_RST) != D8390_ISR_RST)
>                         goto no_novell;
>                 DPRINTF(("ne-1.2 "));
>                 outb(eth_nic_base + D8390_P0_RCR, D8390_RCR_MON);
>                 outb(eth_nic_base + D8390_P0_DCR, D8390_DCR_FT1 | D8390_DCR_LS);
>                 outb(eth_nic_base + D8390_P0_PSTART, MEM_8192);
>                 outb(eth_nic_base + D8390_P0_PSTOP, MEM_16384);
>                 DPRINTF(("ne-2 "));
>                 eth_pio_write(test, 8192, sizeof(test));
>                 eth_pio_read(8192, testbuf, sizeof(test));
>                 if (!bcompare(test, testbuf, sizeof(test))) {
>                         DPRINTF(("ne-3 "));
>                         eth_flags |= FLAG_16BIT;
>                         eth_memsize = MEM_32768;
>                         eth_tx_start = 64;
>                         outb(eth_nic_base + D8390_P0_DCR, D8390_DCR_WTS |
>                                 D8390_DCR_FT1 | D8390_DCR_LS);
>                         outb(eth_nic_base + D8390_P0_PSTART, MEM_16384);
>                         outb(eth_nic_base + D8390_P0_PSTOP, MEM_32768);
>                         eth_pio_write(test, 16384, sizeof(test));
>                         eth_pio_read(16384, testbuf, sizeof(test));
>                         DPRINTF(("ne-3.1 "));
>                         if (!bcompare(testbuf, test, sizeof(test))) return (0);
>                 }
>                 DPRINTF(("ne-4 "));
>                 eth_pio_read(0, romdata, 16);
>                 DPRINTF(("ne-5 "));
>                 printf("\r\nNE1000/NE2000 base 0x%x, addr ", eth_nic_base);
> 	[...]
> 
> 	I have tried to enable shared memory mode.
> 	I have tried to set 64K mode instead of 16K ("Novell-compatible" as setup prog
> 		says)
> 
> 	I have "CHRDY after BALE high", "IO16 after strobe", "read cycles enhanced",
> 	"TPI link integrity checking enabled" settings, but I haven't touched them.
> 
> 	I have written down the NIC registers (thanks great diag program
> 	which comes with board!)
> 	CR	22
> 	TSK	83
> 	ISR	15
> 	IMR	00
> 	RSR	11
> 	RCR	1C
> 	TCR	00
> 	DCR	58
> 	although I doubt this is relevant here.
> 
> >How-To-Repeat:
> 
> 	just run the nb8390.com program.
> 
> >Fix:
> 	
> 	none known ;-( 
> 
> 	sorry for this long report, I have tried to provide _ALL_ the info 
> 	which can help.
> 
> >Audit-Trail:
> >Unformatted:
> 
> 

  _______________________________________________________||___________________
                                                   __||
  Perfection is reached, not when there is no  __||     thomas graichen
  longer anything to add, but when there   __||    freie universitaet berlin
  is no longer anything to take away   __||           fachbereich physik
                                   __||                      
  - Antoine de Saint-Exupery - __||        graichen@mail.physik.fu-berlin.de
  ___________________________||__________________graichen@FreeBSD.org_________



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