summaryrefslogtreecommitdiff
path: root/sys/doc/ed.relnotes
diff options
context:
space:
mode:
Diffstat (limited to 'sys/doc/ed.relnotes')
-rw-r--r--sys/doc/ed.relnotes174
1 files changed, 174 insertions, 0 deletions
diff --git a/sys/doc/ed.relnotes b/sys/doc/ed.relnotes
new file mode 100644
index 000000000000..c46c26124f8f
--- /dev/null
+++ b/sys/doc/ed.relnotes
@@ -0,0 +1,174 @@
+
+ Release Notes for 'ed' Device Driver
+ David Greenman, 24-May-1993
+ ------------------------------------
+
+Last updated: 22-November-1993
+
+INTRODUCTION
+------------
+ The 'ed' device driver is a new, high performance device driver supporting
+the Western Digital/SMC 80x3 series (including 'EtherCard PLUS' 'Elite16' and
+'Ultra'), the 3Com 3c503 (both 8 and 16 bit versions), and the Novell NE1000/
+NE2000. All of the ethernet controllers use the DS8390, 83C690, or 83C790
+Network Interface Controller (NIC). The differences between the boards are in
+their memory capacity, bus width (8/16 bits), special logic (asic) used to
+configure the board, and the host access method to the NIC memory (shared or
+programmed I/O). Every effort has been made to conform to the manufactures'
+specifications for the NIC and asic. This includes both normal operation and
+error recovery.
+
+PERFORMANCE
+-----------
+
+transmit
+--------
+ The 8390 doesn't provide a mechanism for chained write buffers, so it is
+very important for maximum performance to queue the next packet for
+transmission as soon as the current one has completed. On boards with 16k or
+more of memory, the NIC memory is divided in a way that allows enough space
+for two full size packets to be buffered for transmission. When sufficient
+data is available for transmission, a packet is copied into the NIC memory,
+the transmission is started, and then an additional packet is copied into the
+NIC memory (to a different memory area). As soon as the first packet has
+completed, transmission of a second packet can then be started immediately.
+This results in nearly the highest performance possible from ethernet.
+
+Packets go out on the 'wire' with the following format:
+
+preamble dest-addr src-addr type data FCS intr-frame
+64bits 48bits 48bits 16bits 1500bytes 32bits 96bits
+
+ With 10Mbits/sec, each bit is 100ns in duration. All of the above fields,
+except for data are of fixed length. With full sized packets (1500 bytes), the
+maximum unidirectional data rate can be calculated as: 6.4us + 4.8us + 4.8us +
+1.6us + 1200us + 3.2us + 9.6us = 1230.4us/packet = 812.74382 packets/second =
+1219115.7 (1190k) bytes/second. With TCP, there is a 40 byte overhead for the
+IP and TCP headers, so there is only 1460 bytes of data per packet. This
+reduces the maximum data rate to 1186606 bytes/second. With TCP, there will
+also be periodic acknowledgments which will reduce this figure somewhat both
+because of the additional traffic in the reverse direction and because of the
+occasional collisions that this will cause. Despite this, the data rate has
+still been consistantly measured at 1125000 (~1100k) bytes/second through a TCP
+socket. In these tests, the TCP window was set to 16384 bytes. With UDP, there
+is less overhead for the headers, and with 1472 bytes of data per packet, a
+data rate of 1196358.9 (1168k) bytes/sec is possible. UDP performance hasn't
+been precisely measured with this device driver, but less precise tests show
+this to be true (measured at around 1135k/second).
+
+receive
+-------
+ The 8390 implements an NIC memory ring-buffer to store incoming packets.
+The 8bit boards (8003, 3c503, and NE1000) usually have only 8k bytes of shared
+memory. This is only enough room for about 4 full size (1500 byte) packets.
+This can sometimes be a problem, especially on the original WD8003E and 3c503.
+This is because these boards' NIC memory access speed is also quite slow
+compared to newer 16bit boards - typically less than 1MB/second. The additional
+overhead of this slow memory access, and the fact that there is only room for 4
+full-sized packets means that the ring-buffer will occassionally overflow. When
+this happens, the board must be reset to avoid a lockup problem in early
+revision 8390's. Resetting the board will cause all of the data in the ring-
+buffer to be lost - requiring it to be re-transmitted/received...slowing things
+even further. Because of these problems, maximum throughput on boards of this
+type is only about 400-600k per second. The 16bit boards, however, have 16k of
+memory as well as much faster memory access speed. Typical memory access speed
+on these boards is about 1.7-4MB/second (with the Novell NE2000 being the
+slowest and the SMC 8013 being the fastest). These boards generally have no
+problems keeping up with full ethernet speed. The only problem I've seen with
+these boards is related to the (slow) performance of the BSD Net/2 malloc code
+when additional mbufs must be added to the pool. This can sometimes increase
+the total time to remove a packet enough for a ring-buffer overflow to occur.
+This tends to be highly transient, and quite rare on fast machines. I've only
+seen this problem when doing tests with large amounts of UDP traffic without
+any acknowledgments (uni-directional). Again, this has been very rare.
+
+ All of the above tests were done using a 486DX2/66, 486DX/33, 386DX/40,
+8-9Mhz ISA bus, using FreeBSD 1.0. TCP tests were done with the 'ttcp'
+performance test utility, and also with FTP client/server. UDP tests were done
+with a modified version of ttcp (to work around a bug in the BSD Net/2 UDP
+code related to queue depth), and also with NFS.
+
+KERNEL INSTALLATION
+-------------------
+ (Note that this driver comes standard in FreeBSD 1.0, NetBSD 0.9, and 386BSD
+0.2, and therefore doesn't require installation)
+ To 'install' this driver, the files if_ed.c and if_edreg.h must be copied
+into the i386/isa kernel source directory and the following line must be
+added into the file i386/conf/files.i386:
+
+i386/isa/if_ed.c optional ed device-driver
+
+ To build a kernel that includes this driver, first comment out any 'we',
+'ec', or 'ne' devices in your kernel config file. Then, add a line similar to
+the following (modify to match your cards configuration):
+
+device ed0 at isa? port 0x300 net irq 10 iomem 0xcc000 vector edintr
+
+ Note that the 'iosiz' option is not needed because the driver automatically
+figures this out. However, if you have problems with this, it can be specified
+to force the use of the size you specify.
+ The iomem 0xcc000 option is not need for NE1000/NE2000 boards because they
+use programmed I/O rather than shared memory to access the NIC's memory.
+ On 3Com boards, the tranceiver must be enabled in software (there is no
+hardware default). In this driver, this is controlled using the "LLC0" link-
+level control flag. The default for this flag can be set in your kernel config
+file by specifying 'flags 0x01' in the 'ed' device specification line (this
+is necessary for diskless support). Otherwise, the tranceiver is easily enabled
+and disabled with a command like "ifconfig ed0 -llc0" to enable the tranceiver
+or "ifconfig ed0 llc0" to disable it; this assumes that you have the modified
+ifconfig(8) that originally appeared in the 386BSD patchkit. To specify the
+'flags' option, use a line similar to:
+
+device ed0 at isa? port 0x300 net irq 10 flags 0x01 iomem 0xcc000 vector edintr
+
+ Flags can be similarly specified to force 8 or 16bit mode, and disabling
+the use of transmitter double buffering. The various supported flag values
+are:
+
+ Disable tranceiver 0x01
+ Force 8 bit mode 0x02
+ Force 16 bit mode 0x04
+ Disable multi TX buffering 0x08
+
+ To use multiple flags, simply add the values together. Note that these
+numbers are in hexadecimal. If the 'Force 8 bit' and 'Force 16 bit' flags are
+both specified, the 8 bit flag has precedence.
+ The use of the above flags should only be necessary under exceptional
+conditions where the probe routine incorrectly determines the board type (such
+is the case with Compex boards, which require the 16bit flag and an iosiz
+16384), or where the high performance of the transmitter causes problems with
+other vendors hardware.
+
+
+KNOWN PROBLEMS
+--------------
+
+1) Early revision DS8390B chips have problems. They lock-up whenever the
+ receive ring-buffer overflows. They occassionally switch the byte order
+ of the length field in the packet ring header (several different causes
+ of this related to an off-by-one byte alignment) - resulting in "NIC
+ memory corrupt - invalid length NNNNN" messages. The board is reset
+ whenever these problems occur, but otherwise there is no problem with
+ recovering from these conditions.
+2) 16bit boards that use shared memory can conflict with 8bit BIOSes, BIOS
+ extensions (like the VGA), and 8bit devices with shared memory (again
+ like the VGA, or perhaps a second ethernet board). There is a work-
+ around for this in the driver, however. The problem is that the
+ ethernet board stays in 16bit mode, asserting its '16bit' signal on
+ the ISA bus. This signal is shared by other devices/ROMs in the same
+ 128K memory segment as the ethernet card - causing the CPU to read the
+ 8bit ROMs as if they were 16bit wide. The work-around involves setting
+ the host access to the shared memory to 16bits only when the memory is
+ actually accessed, and setting it back to 8bit mode all other times.
+ Without this work-around, the machine will hang whenever a reboot is
+ attempted. This work-around also allows the board to co-exist with
+ other 8bit devices that have shared memory. This has only been
+ implemented for SMC/WD boards, but I haven't seen this problem with
+ 3Com boards (i.e. if you have a 3Com board, you might experiance the
+ above problem - I haven't specifically tested for it).
+3) The NIC memory access to 3Com and Novell boards is much slower than it is on
+ SMC boards; it's less than 1MB on 8bit boards and less than 2MB/second
+ on the 16bit boards. This can lead to ring-buffer overruns resulting in
+ additional lost data during heavy network traffic.
+
+$Id: ed.relnotes,v 1.1 1994/03/30 20:36:33 wollman Exp $