The EtherWORKS 3  driver in this distribution is  designed to  work with all
kernels   >  1.1.33   (approx)  and  includes  tools   in  the  'ewrk3tools'
subdirectory   to  allow  set   up of   the   card,  similar  to  the  MSDOS
'NICSETUP.EXE' tools provided on  the DOS drivers  disk (type 'make' in that
subdirectory to make the tools).

The supported  cards are DE203,  DE204 and DE205.  All   other cards are NOT
supported - refer to 'depca.c' for running the LANCE based network cards and
'de4x5.c'  for the  DIGITAL   Semiconductor PCI  chip  based  adapters  from
Digital.

The ability to load  this driver as a  loadable module has been included and
used extensively  during the driver  development (to save those  long reboot
sequences). To utilise this ability, you have to do 8 things:

    0) have a copy of the loadable modules code installed on your system.
    1) copy ewrk3.c from the  /linux/drivers/net directory to your favourite
    temporary directory.
    2) edit the  source code near  line 1898 to reflect  the I/O address and
    IRQ you're using.
    3) compile  ewrk3.c, but include -DMODULE in  the command line to ensure
    that the correct bits are compiled (see end of source code).
    4) if you are wanting to add a new  card, goto 5. Otherwise, recompile a
    kernel with the ewrk3 configuration turned off and reboot.
    5) insmod ewrk3.o
          [Alan Cox: Changed this so you can insmod ewrk3.o irq=x io=y]
          [Adam Kropelin: Multiple cards now supported by irq=x1,x2 io=y1,y2]
    6) run the net startup bits for your new eth?? interface manually 
    (usually /etc/rc.inet[12] at boot time). 
    7) enjoy!

    Note that autoprobing is not allowed in loadable modules - the system is
    already up and running and you're messing with interrupts.

    To unload a module, turn off the associated interface 
    'ifconfig eth?? down' then 'rmmod ewrk3'.

The performance we've  achieved so far  has been measured through the 'ttcp'
tool   at 975kB/s.  This  measures  the  total  TCP  stack performance which
includes the   card,  so don't  expect   to get   much nearer  the  1.25MB/s
theoretical Ethernet rate.


Enjoy!

Dave
