⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtl_3c905cx_drv.h

📁 最新rtlinux内核源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*        The original file was written 1996-1999 by Donald Becker.	This software may be used and distributed according to the terms	of the GNU General Public License, incorporated herein by reference.	This driver is for the 3Com "Vortex" and "Boomerang" series ethercards.	Members of the series include Fast EtherLink 3c590/3c592/3c595/3c597	and the EtherLink XL 3c900 and 3c905 cards.	Problem reports and questions should be directed to	vortex@scyld.com	The author may be reached as becker@scyld.com, or C/O	Scyld Computing Corporation	410 Severn Ave., Suite 210	Annapolis MD 21403	Linux Kernel Additions (better to see the last one first):	 	0.99H+lk0.9 - David S. Miller - softnet, PCI DMA updates 	0.99H+lk1.0 - Jeff Garzik <jgarzik@mandrakesoft.com>		Remove compatibility defines for kernel versions < 2.2.x.		Update for new 2.3.x module interface	LK1.1.2 (March 19, 2000)	* New PCI interface (jgarzik)    LK1.1.3 25 April 2000, Andrew Morton <andrewm@uow.edu.au>    - Merged with 3c575_cb.c    - Don't set RxComplete in boomerang interrupt enable reg    - spinlock in vortex_timer to protect mdio functions    - disable local interrupts around call to vortex_interrupt in      vortex_tx_timeout() (So vortex_interrupt can use spin_lock())    - Select window 3 in vortex_timer()'s write to Wn3_MAC_Ctrl    - In vortex_start_xmit(), move the lock to _after_ we've altered      vp->cur_tx and vp->tx_full.  This defeats the race between      vortex_start_xmit() and vortex_interrupt which was identified      by Bogdan Costescu.    - Merged back support for six new cards from various sources    - Set vortex_have_pci if pci_module_init returns zero (fixes cardbus      insertion oops)    - Tell it that 3c905C has NWAY for 100bT autoneg    - Fix handling of SetStatusEnd in 'Too much work..' code, as      per 2.3.99's 3c575_cb (Dave Hinds).    - Split ISR into two for vortex & boomerang    - Fix MOD_INC/DEC races    - Handle resource allocation failures.    - Fix 3CCFE575CT LED polarity    - Make tx_interrupt_mitigation the default    LK1.1.4 25 April 2000, Andrew Morton <andrewm@uow.edu.au>        - Add extra TxReset to vortex_up() to fix 575_cb hotplug initialisation probs.    - Put vortex_info_tbl into __devinitdata    - In the vortex_error StatsFull HACK, disable stats in vp->intr_enable as well      as in the hardware.    - Increased the loop counter in issue_and_wait from 2,000 to 4,000.    LK1.1.5 28 April 2000, andrewm    - Added powerpc defines (John Daniel <jdaniel@etresoft.com> said these work...)    - Some extra diagnostics    - In vortex_error(), reset the Tx on maxCollisions.  Otherwise most      chips usually get a Tx timeout.    - Added extra_reset module parm    - Replaced some inline timer manip with mod_timer      (Franois romieu <Francois.Romieu@nic.fr>)    - In vortex_up(), don't make Wn3_config initialisation dependent upon has_nway      (this came across from 3c575_cb).    LK1.1.6 06 Jun 2000, andrewm    - Backed out the PPC defines.    - Use del_timer_sync(), mod_timer().    - Fix wrapped ulong comparison in boomerang_rx()    - Add IS_TORNADO, use it to suppress 3c905C checksum error msg      (Donald Becker, I Lee Hetherington <ilh@sls.lcs.mit.edu>)    - Replace union wn3_config with BFINS/BFEXT manipulation for      sparc64 (Pete Zaitcev, Peter Jones)    - In vortex_error, do_tx_reset and vortex_tx_timeout(Vortex):      do a netif_wake_queue() to better recover from errors. (Anders Pedersen,      Donald Becker)    - Print a warning on out-of-memory (rate limited to 1 per 10 secs)    - Added two more Cardbus 575 NICs: 5b57 and 6564 (Paul Wagland)    LK1.1.7 2 Jul 2000 andrewm    - Better handling of shared IRQs    - Reset the transmitter on a Tx reclaim error    - Fixed crash under OOM during vortex_open() (Mark Hemment)    - Fix Rx cessation problem during OOM (help from Mark Hemment)    - The spinlocks around the mdio access were blocking interrupts for 300uS.      Fix all this to use spin_lock_bh() within mdio_read/write    - Only write to TxFreeThreshold if it's a boomerang - other NICs don't      have one.    - Added 802.3x MAC-layer flow control support   LK1.1.8 13 Aug 2000 andrewm    - Ignore request_region() return value - already reserved if Cardbus.    - Merged some additional Cardbus flags from Don's 0.99Qk    - Some fixes for 3c556 (Fred Maciel)    - Fix for EISA initialisation (Jan Rekorajski)    - Renamed MII_XCVR_PWR and EEPROM_230 to align with 3c575_cb and D. Becker's drivers    - Fixed MII_XCVR_PWR for 3CCFE575CT    - Added INVERT_LED_PWR, used it.    - Backed out the extra_reset stuff   LK1.1.9 12 Sep 2000 andrewm    - Backed out the tx_reset_resume flags.  It was a no-op.    - In vortex_error, don't reset the Tx on txReclaim errors    - In vortex_error, don't reset the Tx on maxCollisions errors.      Hence backed out all the DownListPtr logic here.    - In vortex_error, give Tornado cards a partial TxReset on      maxCollisions (David Hinds).  Defined MAX_COLLISION_RESET for this.    - Redid some driver flags and device names based on pcmcia_cs-3.1.20.    - Fixed a bug where, if vp->tx_full is set when the interface      is downed, it remains set when the interface is upped.  Bad      things happen.   LK1.1.10 17 Sep 2000 andrewm    - Added EEPROM_8BIT for 3c555 (Fred Maciel)    - Added experimental support for the 3c556B Laptop Hurricane (Louis Gerbarg)    - Add HAS_NWAY to "3c900 Cyclone 10Mbps TPO"   LK1.1.11 13 Nov 2000 andrewm    - Dump MOD_INC/DEC_USE_COUNT, use SET_MODULE_OWNER   LK1.1.12 1 Jan 2001 andrewm (2.4.0-pre1)    - Call pci_enable_device before we request our IRQ (Tobias Ringstrom)    - Add 3c590 PCI latency timer hack to vortex_probe1 (from 0.99Ra)    - Added extended issue_and_wait for the 3c905CX.    - Look for an MII on PHY index 24 first (3c905CX oddity).    - Add HAS_NWAY to 3cSOHO100-TX (Brett Frankenberger)    - Don't free skbs we don't own on oom path in vortex_open().   LK1.1.13 27 Jan 2001    - Added explicit `medialock' flag so we can truly      lock the media type down with `options'.    - "check ioremap return and some tidbits" (Arnaldo Carvalho de Melo <acme@conectiva.com.br>)    - Added and used EEPROM_NORESET for 3c556B PM resumes.    - Fixed leakage of vp->rx_ring.    - Break out separate HAS_HWCKSM device capability flag.    - Kill vp->tx_full (ANK)    - Merge zerocopy fragment handling (ANK?)   LK1.1.14 15 Feb 2001    - Enable WOL.  Can be turned on with `enable_wol' module option.    - EISA and PCI initialisation fixes (jgarzik, Manfred Spraul)    - If a device's internalconfig register reports it has NWAY,      use it, even if autoselect is enabled.   LK1.1.15 6 June 2001 akpm    - Prevent double counting of received bytes (Lars Christensen)    - Add ethtool support (jgarzik)    - Add module parm descriptions (Andrzej M. Krzysztofowicz)    - Implemented alloc_etherdev() API    - Special-case the 'Tx error 82' message.   LK1.1.16 18 July 2001 akpm    - Make NETIF_F_SG dependent upon nr_free_highpages(), not on CONFIG_HIGHMEM    - Lessen verbosity of bootup messages    - Fix WOL - use new PM API functions.    - Use netif_running() instead of vp->open in suspend/resume.    - Don't reset the interface logic on open/close/rmmod.  It upsets      autonegotiation, and hence DHCP (from 0.99T).    - Back out EEPROM_NORESET flag because of the above (we do it for all      NICs).    - Correct 3c982 identification string    - Rename wait_for_completion() to issue_and_wait() to avoid completion.h      clash.=====================================================================================                          PORTING TO RT-LINUX                       =====================================================================================   LK1.1.17 14 March 2003             Sergio Perez Alca駃z <serpeal@upvnet.upv.es>              Departamento de Inform醫ica de Sistemas y Computadores                      Universidad Polit閏nica de Valencia                                         Valencia (Spain)                      	    The RTL-lwIP project has been supported by the Spanish Government Research    	    Office (CICYT) under grant TIC2002-04123-C03-03                          	    SISTEMAS DE TIEMPO REAL EMPOTRADOS, FIABLES Y DISTRIBUIDOS BASADOS EN 	    COMPONENTES	    Porting the driver to RT-Linux, that is:	    -Giving to the driver the RT-Linux driver architecture (open, close, read,	     write, ioctl).	    -Using my own buffer management.	    -No NIC stats allowed.	    -Some calls of pci stuff have been implemented.	    -Changing the interrupts management and the handler phylosophy.	    -Changing the "receive" and "send" phylosophy.	    -Introducing signaling.	    -Registering threads that want to be notified of the arrival of a packet.	    -IP filtering.	    -Ethernet filtering.	    璖ome functions added in order to ask the driver for some NIC info (such as	     the MAC address).	     - ....	     The porting is just for the 3Com905C-X card. So no other cards are supported	     (as far as I know...). 	     	     Just take a look at it.=====================================================================================    - see Documentation/networking/vortex.txt*/#include <linux/kernel.h>#include <linux/module.h>#include <linux/pci.h>#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/string.h>#include <linux/timer.h>#include <linux/errno.h>#include <linux/in.h>#include <linux/ioport.h>#include <linux/slab.h>#include <linux/interrupt.h>#include <linux/mii.h>#include <linux/init.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/skbuff.h>#include <linux/ethtool.h>#include <linux/highmem.h>#include <asm/irq.h>			/* For NR_IRQS only. */#include <asm/bitops.h>#include <asm/io.h>#include <asm/uaccess.h>#include <rtl_sched.h>#include <signal.h>#include <time.h>#define DRV_NAME	"3c59x"#define DRV_VERSION	"0.1"#define DRV_RELDATE	"27 december 2002"#define MAX_THREADS 10#define COM3_VENDOR_ID 0x10B7#define COM3_DEVICE_ID 0X9200#define BFEXT(value, offset, bitcount)  \    ((((unsigned long)(value)) >> (offset)) & ((1 << (bitcount)) - 1))#define BFINS(lhs, rhs, offset, bitcount)					\	(((lhs) & ~((((1 << (bitcount)) - 1)) << (offset))) |	\	(((rhs) & ((1 << (bitcount)) - 1)) << (offset)))#define RAM_SIZE(v)		BFEXT(v, 0, 3)#define RAM_WIDTH(v)	BFEXT(v, 3, 1)#define RAM_SPEED(v)	BFEXT(v, 4, 2)#define ROM_SIZE(v)		BFEXT(v, 6, 2)#define RAM_SPLIT(v)	BFEXT(v, 16, 2)#define XCVR(v)			BFEXT(v, 20, 4)#define AUTOSELECT(v)	BFEXT(v, 24, 1)/* Operational definitions.   These are not used by other compilation units and thus are not   exported in a ".h" file.   First the windows.  There are eight register windows, with the command   and status registers available in each.   */#define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)#define EL3_CMD 0x0e#define EL3_STATUS 0x0e/* A few values that may be tweaked. *//* Keep the ring sizes a power of two for efficiency. */#define TX_RING_SIZE	16#define RX_RING_SIZE	32#define PKT_BUF_SZ		1536			/* Size of each temporary Rx buffer.*/#define MAX_ADDR_LEN	8		/* Largest hardware address length *//* The top five bits written to EL3_CMD are a command, the lower   11 bits are the parameter, if applicable.   Note that 11 parameters bits was fine for ethernet, but the new chip   can handle FDDI length frames (~4500 octets) and now parameters count   32-bit 'Dwords' rather than octets. */enum vortex_cmd {	TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11,	RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11,	UpStall = 6<<11, UpUnstall = (6<<11)+1,	DownStall = (6<<11)+2, DownUnstall = (6<<11)+3,	RxDiscard = 8<<11, TxEnable = 9<<11, TxDisable = 10<<11, TxReset = 11<<11,	FakeIntr = 12<<11, AckIntr = 13<<11, SetIntrEnb = 14<<11,	SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11,	SetTxThreshold = 18<<11, SetTxStart = 19<<11,	StartDMAUp = 20<<11, StartDMADown = (20<<11)+1, StatsEnable = 21<<11,	StatsDisable = 22<<11, StopCoax = 23<<11, SetFilterBit = 25<<11,};/* The SetRxFilter command accepts the following classes: */enum RxFilter {	RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 };/* Bits in the general status register. */enum vortex_status {	IntLatch = 0x0001, HostError = 0x0002, TxComplete = 0x0004,	TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020,	IntReq = 0x0040, StatsFull = 0x0080,	DMADone = 1<<8, DownComplete = 1<<9, UpComplete = 1<<10,	DMAInProgress = 1<<11,			/* DMA controller is still busy.*/	CmdInProgress = 1<<12,			/* EL3_CMD is still busy.*/};/* Register window 1 offsets, the window used in normal operation.   On the Vortex this window is always mapped at offsets 0x10-0x1f. */enum Window1 {	TX_FIFO = 0x10,  RX_FIFO = 0x10,  RxErrors = 0x14,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -