179 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			179 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
    Originally,   this  driver  was    written  for the  Digital   Equipment
 | 
						|
    Corporation series of EtherWORKS Ethernet cards:
 | 
						|
 | 
						|
        DE425 TP/COAX EISA
 | 
						|
	DE434 TP PCI
 | 
						|
	DE435 TP/COAX/AUI PCI
 | 
						|
	DE450 TP/COAX/AUI PCI
 | 
						|
	DE500 10/100 PCI Fasternet
 | 
						|
 | 
						|
    but it  will  now attempt  to  support all  cards which   conform to the
 | 
						|
    Digital Semiconductor   SROM   Specification.    The  driver   currently
 | 
						|
    recognises the following chips:
 | 
						|
 | 
						|
        DC21040  (no SROM) 
 | 
						|
	DC21041[A]  
 | 
						|
	DC21140[A] 
 | 
						|
	DC21142 
 | 
						|
	DC21143 
 | 
						|
 | 
						|
    So far the driver is known to work with the following cards:
 | 
						|
 | 
						|
        KINGSTON
 | 
						|
	Linksys
 | 
						|
	ZNYX342
 | 
						|
	SMC8432
 | 
						|
	SMC9332 (w/new SROM)
 | 
						|
	ZNYX31[45]
 | 
						|
	ZNYX346 10/100 4 port (can act as a 10/100 bridge!) 
 | 
						|
 | 
						|
    The driver has been tested on a relatively busy network using the DE425,
 | 
						|
    DE434, DE435 and DE500 cards and benchmarked with 'ttcp': it transferred
 | 
						|
    16M of data to a DECstation 5000/200 as follows:
 | 
						|
 | 
						|
                TCP           UDP
 | 
						|
             TX     RX     TX     RX
 | 
						|
    DE425   1030k  997k   1170k  1128k
 | 
						|
    DE434   1063k  995k   1170k  1125k
 | 
						|
    DE435   1063k  995k   1170k  1125k
 | 
						|
    DE500   1063k  998k   1170k  1125k  in 10Mb/s mode
 | 
						|
 | 
						|
    All  values are typical (in   kBytes/sec) from a  sample  of 4 for  each
 | 
						|
    measurement. Their error is +/-20k on a quiet (private) network and also
 | 
						|
    depend on what load the CPU has.
 | 
						|
 | 
						|
    =========================================================================
 | 
						|
 | 
						|
    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).  Loadable module support  under PCI and EISA has been
 | 
						|
    achieved by letting the driver autoprobe as if it were compiled into the
 | 
						|
    kernel. Do make sure  you're not sharing  interrupts with anything  that
 | 
						|
    cannot accommodate  interrupt  sharing!
 | 
						|
 | 
						|
    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 de4x5.c from the  /linux/drivers/net directory to your favourite
 | 
						|
    temporary directory.
 | 
						|
    2) for fixed  autoprobes (not  recommended),  edit the source code  near
 | 
						|
    line 5594 to reflect the I/O address  you're using, or assign these when
 | 
						|
    loading by:
 | 
						|
 | 
						|
                   insmod de4x5 io=0xghh           where g = bus number
 | 
						|
		                                        hh = device number   
 | 
						|
 | 
						|
       NB: autoprobing for modules is now supported by default. You may just
 | 
						|
           use:
 | 
						|
 | 
						|
                   insmod de4x5
 | 
						|
 | 
						|
           to load all available boards. For a specific board, still use
 | 
						|
	   the 'io=?' above.
 | 
						|
    3) compile  de4x5.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 de4x5 configuration turned off and reboot.
 | 
						|
    5) insmod de4x5 [io=0xghh]
 | 
						|
    6) run the net startup bits for your new eth?? interface(s) manually 
 | 
						|
    (usually /etc/rc.inet[12] at boot time). 
 | 
						|
    7) enjoy!
 | 
						|
 | 
						|
    To unload a module, turn off the associated interface(s) 
 | 
						|
    'ifconfig eth?? down' then 'rmmod de4x5'.
 | 
						|
 | 
						|
    Automedia detection is included so that in  principle you can disconnect
 | 
						|
    from, e.g.  TP, reconnect  to BNC  and  things will still work  (after a
 | 
						|
    pause whilst the   driver figures out   where its media went).  My tests
 | 
						|
    using ping showed that it appears to work....
 | 
						|
 | 
						|
    By  default,  the driver will  now   autodetect any  DECchip based card.
 | 
						|
    Should you have a need to restrict the driver to DIGITAL only cards, you
 | 
						|
    can compile with a  DEC_ONLY define, or if  loading as a module, use the
 | 
						|
    'dec_only=1'  parameter. 
 | 
						|
 | 
						|
    I've changed the timing routines to  use the kernel timer and scheduling
 | 
						|
    functions  so that the  hangs  and other assorted problems that occurred
 | 
						|
    while autosensing the  media  should be gone.  A  bonus  for the DC21040
 | 
						|
    auto  media sense algorithm is  that it can now  use one that is more in
 | 
						|
    line with the  rest (the DC21040  chip doesn't  have a hardware  timer).
 | 
						|
    The downside is the 1 'jiffies' (10ms) resolution.
 | 
						|
 | 
						|
    IEEE 802.3u MII interface code has  been added in anticipation that some
 | 
						|
    products may use it in the future.
 | 
						|
 | 
						|
    The SMC9332 card  has a non-compliant SROM  which needs fixing -  I have
 | 
						|
    patched this  driver to detect it  because the SROM format used complies
 | 
						|
    to a previous DEC-STD format.
 | 
						|
 | 
						|
    I have removed the buffer copies needed for receive on Intels.  I cannot
 | 
						|
    remove them for   Alphas since  the  Tulip hardware   only does longword
 | 
						|
    aligned  DMA transfers  and  the  Alphas get   alignment traps with  non
 | 
						|
    longword aligned data copies (which makes them really slow). No comment.
 | 
						|
 | 
						|
    I  have added SROM decoding  routines to make this  driver work with any
 | 
						|
    card that  supports the Digital  Semiconductor SROM spec. This will help
 | 
						|
    all  cards running the dc2114x  series chips in particular.  Cards using
 | 
						|
    the dc2104x  chips should run correctly with  the basic  driver.  I'm in
 | 
						|
    debt to <mjacob@feral.com> for the  testing and feedback that helped get
 | 
						|
    this feature working.  So far we have  tested KINGSTON, SMC8432, SMC9332
 | 
						|
    (with the latest SROM complying  with the SROM spec  V3: their first was
 | 
						|
    broken), ZNYX342  and  LinkSys. ZNYX314 (dual  21041  MAC) and  ZNYX 315
 | 
						|
    (quad 21041 MAC)  cards also  appear  to work despite their  incorrectly
 | 
						|
    wired IRQs.
 | 
						|
 | 
						|
    I have added a temporary fix for interrupt problems when some SCSI cards
 | 
						|
    share the same interrupt as the DECchip based  cards. The problem occurs
 | 
						|
    because  the SCSI card wants to  grab the interrupt  as a fast interrupt
 | 
						|
    (runs the   service routine with interrupts turned   off) vs.  this card
 | 
						|
    which really needs to run the service routine with interrupts turned on.
 | 
						|
    This driver will  now   add the interrupt service   routine  as  a  fast
 | 
						|
    interrupt if it   is bounced from the   slow interrupt.  THIS IS NOT   A
 | 
						|
    RECOMMENDED WAY TO RUN THE DRIVER  and has been done  for a limited time
 | 
						|
    until  people   sort  out their  compatibility    issues and the  kernel
 | 
						|
    interrupt  service code  is  fixed.   YOU  SHOULD SEPARATE OUT  THE FAST
 | 
						|
    INTERRUPT CARDS FROM THE SLOW INTERRUPT CARDS to ensure that they do not
 | 
						|
    run on the same interrupt. PCMCIA/CardBus is another can of worms...
 | 
						|
 | 
						|
    Finally, I think  I have really  fixed  the module  loading problem with
 | 
						|
    more than one DECchip based  card.  As a  side effect, I don't mess with
 | 
						|
    the  device structure any  more which means that  if more than 1 card in
 | 
						|
    2.0.x is    installed (4  in   2.1.x),  the  user   will have   to  edit
 | 
						|
    linux/drivers/net/Space.c  to make room for  them. Hence, module loading
 | 
						|
    is  the preferred way to use   this driver, since  it  doesn't have this
 | 
						|
    limitation.
 | 
						|
 | 
						|
    Where SROM media  detection is used and  full duplex is specified in the
 | 
						|
    SROM,  the feature is  ignored unless  lp->params.fdx  is set at compile
 | 
						|
    time  OR during  a   module load  (insmod  de4x5   args='eth??:fdx' [see
 | 
						|
    below]).  This is because there  is no way  to automatically detect full
 | 
						|
    duplex   links  except through   autonegotiation.    When I  include the
 | 
						|
    autonegotiation feature in  the SROM autoconf  code, this detection will
 | 
						|
    occur automatically for that case.
 | 
						|
 | 
						|
    Command line  arguments are  now allowed, similar to  passing  arguments
 | 
						|
    through LILO. This will allow a per adapter board set  up of full duplex
 | 
						|
    and media. The only lexical constraints are:  the board name (dev->name)
 | 
						|
    appears in  the list before its parameters.  The list of parameters ends
 | 
						|
    either at the end of the parameter list or with another board name.  The
 | 
						|
    following parameters are allowed:
 | 
						|
 | 
						|
            fdx        for full duplex
 | 
						|
	    autosense  to set the media/speed; with the following 
 | 
						|
	               sub-parameters:
 | 
						|
		       TP, TP_NW, BNC, AUI, BNC_AUI, 100Mb, 10Mb, AUTO
 | 
						|
 | 
						|
    Case sensitivity is important  for  the sub-parameters. They *must*   be
 | 
						|
    upper case. Examples:
 | 
						|
 | 
						|
        insmod de4x5 args='eth1:fdx autosense=BNC eth0:autosense=100Mb'.
 | 
						|
 | 
						|
    For a compiled in driver, in linux/drivers/net/CONFIG, place e.g.
 | 
						|
	DE4X5_OPTS = -DDE4X5_PARM='"eth0:fdx autosense=AUI eth2:autosense=TP"' 
 | 
						|
 | 
						|
    Yes,  I know full duplex  isn't permissible on BNC  or AUI; they're just
 | 
						|
    examples. By default, full duplex is turned  off and AUTO is the default
 | 
						|
    autosense setting. In  reality, I expect only the  full duplex option to
 | 
						|
    be used. Note the use of single quotes in the two examples above and the
 | 
						|
    lack of commas to separate items.
 |