mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 16:38:31 +00:00 
			
		
		
		
	 1da177e4c3
			
		
	
	
		1da177e4c3
		
	
	
	
	
		
			
			Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
		
			
				
	
	
		
			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.
 |