rtl8139.c
上传用户:zhouquan
上传日期:2009-12-05
资源大小:16k
文件大小:51k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* rtl8139.c: A RealTek RTL8129/8139 Fast Ethernet driver for Linux. */
  2. /*
  3. Written 1997-2001 by Donald Becker.
  4. This software may be used and distributed according to the terms of
  5. the GNU General Public License (GPL), incorporated herein by reference.
  6. Drivers based on or derived from this code fall under the GPL and must
  7. retain the authorship, copyright and license notice.  This file is not
  8. a complete program and may only be used when the entire operating
  9. system is licensed under the GPL.
  10. This driver is for boards based on the RTL8129 and RTL8139 PCI ethernet
  11. chips.
  12. The author may be reached as becker@scyld.com, or C/O
  13. Scyld Computing Corporation
  14. 410 Severn Ave., Suite 210
  15. Annapolis MD 21403
  16. Support and updates available at
  17. http://www.scyld.com/network/rtl8139.html
  18. Twister-tuning table provided by Kinston <shangh@realtek.com.tw>.
  19. */
  20. /* These identify the driver base version and may not be removed. */
  21. static const char versionA[] =
  22. "rtl8139.c:v1.16a 11/13/2001 Donald Becker, becker@scyld.com.n";
  23. static const char versionB[] =
  24. " http://www.scyld.com/network/rtl8139.htmln";
  25. #ifndef USE_MEM_OPS
  26. /* Note: Register access width and timing restrictions apply in MMIO mode.
  27.    This updated driver should nominally work, but I/O mode is better tested. */
  28. #define USE_IO_OPS
  29. #endif
  30. /* The user-configurable values.
  31.    These may be modified when a driver module is loaded.*/
  32. static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */
  33. /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
  34. static int max_interrupt_work = 20;
  35. /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
  36.    The RTL chips use a 64 element hash table based on the Ethernet CRC.  It
  37.    is efficient to update the hardware filter, but recalculating the table
  38.    for a long filter list is painful.  */
  39. static int multicast_filter_limit = 32;
  40. /* Used to pass the full-duplex flag, etc. */
  41. #define MAX_UNITS 8 /* More are supported, limit only on options */
  42. static int options[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
  43. static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
  44. /* Operational parameters that are set at compile time. */
  45. /* Maximum size of the in-memory receive ring (smaller if no memory). */
  46. #define RX_BUF_LEN_IDX 2 /* 0==8K, 1==16K, 2==32K, 3==64K */
  47. /* Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4). */
  48. #define TX_BUF_SIZE 1536
  49. /* PCI Tuning Parameters
  50.    Threshold is bytes transferred to chip before transmission starts. */
  51. #define TX_FIFO_THRESH 256 /* In bytes, rounded down to 32 byte units. */
  52. /* The following settings are log_2(bytes)-4:  0 == 16 bytes .. 6==1024. */
  53. #define RX_FIFO_THRESH 4 /* Rx buffer level before first PCI xfer.  */
  54. #define RX_DMA_BURST 4 /* Maximum PCI burst, '4' is 256 bytes */
  55. #define TX_DMA_BURST 4 /* Calculate as 16<<val. */
  56. /* Operational parameters that usually are not changed. */
  57. /* Time in jiffies before concluding the transmitter is hung. */
  58. #define TX_TIMEOUT  (6*HZ)
  59. #ifndef __KERNEL__
  60. #define __KERNEL__
  61. #endif
  62. #if !defined(__OPTIMIZE__)
  63. #warning  You must compile this file with the correct options!
  64. #warning  See the last lines of the source file.
  65. #error You must compile this driver with "-O".
  66. #endif
  67. #include <linux/config.h>
  68. #if defined(CONFIG_SMP) && ! defined(__SMP__)
  69. #define __SMP__
  70. #endif
  71. #if defined(MODULE) && defined(CONFIG_MODVERSIONS) && ! defined(MODVERSIONS)
  72. #define MODVERSIONS
  73. #endif
  74. #include <linux/version.h>
  75. #include <linux/module.h>
  76. #if LINUX_VERSION_CODE < 0x20300  &&  defined(MODVERSIONS)
  77. #include <linux/modversions.h>
  78. #endif
  79. #include <linux/kernel.h>
  80. #include <linux/string.h>
  81. #include <linux/timer.h>
  82. #include <linux/errno.h>
  83. #include <linux/ioport.h>
  84. #include <linux/malloc.h>
  85. #include <linux/interrupt.h>
  86. #include <linux/pci.h>
  87. #include <linux/netdevice.h>
  88. #include <linux/etherdevice.h>
  89. #include <linux/skbuff.h>
  90. #include <asm/processor.h> /* Processor type for cache alignment. */
  91. #include <asm/bitops.h>
  92. #include <asm/io.h>
  93. #if LINUX_VERSION_CODE >= 0x20300
  94. #include <linux/spinlock.h>
  95. #elif LINUX_VERSION_CODE >= 0x20200
  96. #include <asm/spinlock.h>
  97. #endif
  98. #ifdef INLINE_PCISCAN
  99. #include "k_compat.h"
  100. #else
  101. #include "pci-scan.h"
  102. #include "kern_compat.h"
  103. #endif
  104. #ifdef CONFIG_LEDMAN
  105. #include <linux/ledman.h>
  106. #endif
  107. #if (LINUX_VERSION_CODE >= 0x20100)  &&  defined(MODULE)
  108. char kernel_version[] = UTS_RELEASE;
  109. #endif
  110. /*
  111. Theory of Operation
  112. I. Board Compatibility
  113. This device driver is designed for the RealTek RTL8129 series, the RealTek
  114. Fast Ethernet controllers for PCI and CardBus.  This chip is used on many
  115. low-end boards, sometimes with custom chip labels.
  116. II. Board-specific settings
  117. PCI bus devices are configured by the system at boot time, so no jumpers
  118. need to be set on the board.  The system BIOS will assign the
  119. PCI INTA signal to a (preferably otherwise unused) system IRQ line.
  120. Note: Kernel versions earlier than 1.3.73 do not support shared PCI
  121. interrupt lines.
  122. III. Driver operation
  123. IIIa. Rx Ring buffers
  124. The receive unit uses a single linear ring buffer rather than the more
  125. common (and more efficient) descriptor-based architecture.  Incoming frames
  126. are sequentially stored into the Rx region, and the host copies them into
  127. skbuffs.
  128. Comment: While it is theoretically possible to process many frames in place,
  129. any delay in Rx processing would block the Rx ring and cause us to drop
  130. frames.  It would be difficult to design a protocol stack where the data
  131. buffer could be recalled by the device driver.
  132. IIIb. Tx operation
  133. The RTL8129 uses a fixed set of four Tx descriptors in register space.  Tx
  134. frames must be 32 bit aligned.  Linux aligns the IP header on word
  135. boundaries, and 14 byte ethernet header means that almost all frames will
  136. need to be copied to an alignment buffer.  The driver statically allocates
  137. alignment the four alignment buffers at open() time.
  138. IVb. References
  139. http://www.realtek.com.tw/cn/cn.html
  140. http://cesdis.gsfc.nasa.gov/linux/misc/NWay.html
  141. IVc. Errata
  142. */
  143. static void *rtl8139_probe1(struct pci_dev *pdev, void *init_dev,
  144. long ioaddr, int irq, int chip_idx, int find_cnt);
  145. static int rtl_pwr_event(void *dev_instance, int event);
  146. enum chip_capability_flags {HAS_MII_XCVR=0x01, HAS_CHIP_XCVR=0x02,
  147. HAS_LNK_CHNG=0x04, HAS_DESC=0x08};
  148. #ifdef USE_IO_OPS
  149. #define RTL8139_IOTYPE  PCI_USES_MASTER|PCI_USES_IO |PCI_ADDR0
  150. #else
  151. #define RTL8139_IOTYPE  PCI_USES_MASTER|PCI_USES_MEM|PCI_ADDR1
  152. #endif
  153. #define RTL8129_CAPS  HAS_MII_XCVR
  154. #define RTL8139_CAPS  HAS_CHIP_XCVR|HAS_LNK_CHNG
  155. #define RTL8139D_CAPS  HAS_CHIP_XCVR|HAS_LNK_CHNG|HAS_DESC
  156. /* Note: Update the marked constant in _attach() if the RTL8139B entry moves.*/
  157. static struct pci_id_info pci_tbl[] = {
  158. {"RealTek RTL8139C+, 64 bit high performance",
  159.  { 0x813910ec, 0xffffffff, 0,0, 0x10, 0xff},
  160.  RTL8139_IOTYPE, 0x80, RTL8139D_CAPS, },
  161. #if 1
  162. /* Raw 8139 with no serial EEPRON will produce ID of 8129! */
  163. {"RealTek RTL8139 Fast Ethernet", { 0x812910ec, 0xffffffff,},
  164.  RTL8139_IOTYPE, 0x80, RTL8139_CAPS, },
  165. #else
  166. {"RealTek RTL8129 Fast Ethernet", { 0x812910ec, 0xffffffff,},
  167.  RTL8139_IOTYPE, 0x80, RTL8129_CAPS, },
  168. #endif
  169. {"RealTek RTL8139 Fast Ethernet", { 0x813910ec, 0xffffffff,},
  170.  RTL8139_IOTYPE, 0x80, RTL8139_CAPS, },
  171. {"RealTek RTL8139B PCI/CardBus",  { 0x813810ec, 0xffffffff,},
  172.  RTL8139_IOTYPE, 0x80, RTL8139_CAPS, },
  173. {"SMC1211TX EZCard 10/100 (RealTek RTL8139)", { 0x12111113, 0xffffffff,},
  174.  RTL8139_IOTYPE, 0x80, RTL8139_CAPS, },
  175. {"Accton MPX5030 (RealTek RTL8139)", { 0x12111113, 0xffffffff,},
  176.  RTL8139_IOTYPE, 0x80, RTL8139_CAPS, },
  177. {"D-Link DFE-538TX (RealTek RTL8139)", { 0x13001186, 0xffffffff,},
  178.  RTL8139_IOTYPE, 0x80, RTL8139_CAPS, },
  179. {0,}, /* 0 terminated list. */
  180. };
  181. struct drv_id_info rtl8139_drv_id = {
  182. "realtek", PCI_HOTSWAP, PCI_CLASS_NETWORK_ETHERNET<<8, pci_tbl,
  183. rtl8139_probe1, rtl_pwr_event };
  184. #ifndef USE_IO_OPS
  185. #undef inb
  186. #undef inw
  187. #undef inl
  188. #undef outb
  189. #undef outw
  190. #undef outl
  191. #define inb readb
  192. #define inw readw
  193. #define inl readl
  194. #define outb writeb
  195. #define outw writew
  196. #define outl writel
  197. #endif
  198. /* The rest of these values should never change. */
  199. #define NUM_TX_DESC 4 /* Number of Tx descriptor registers. */
  200. /* Symbolic offsets to registers. */
  201. enum RTL8129_registers {
  202. MAC0=0, /* Ethernet hardware address. */
  203. MAR0=8, /* Multicast filter. */
  204. TxStatus0=0x10, /* Transmit status (Four 32bit registers). */
  205. TxAddr0=0x20, /* Tx descriptors (also four 32bit). */
  206. RxBuf=0x30, RxEarlyCnt=0x34, RxEarlyStatus=0x36,
  207. ChipCmd=0x37, RxBufPtr=0x38, RxBufAddr=0x3A,
  208. IntrMask=0x3C, IntrStatus=0x3E,
  209. TxConfig=0x40, RxConfig=0x44,
  210. Timer=0x48, /* A general-purpose counter. */
  211. RxMissed=0x4C, /* 24 bits valid, write clears. */
  212. Cfg9346=0x50, Config0=0x51, Config1=0x52,
  213. FlashReg=0x54, GPPinData=0x58, GPPinDir=0x59, MII_SMI=0x5A, HltClk=0x5B,
  214. MultiIntr=0x5C, TxSummary=0x60,
  215. MII_BMCR=0x62, MII_BMSR=0x64, NWayAdvert=0x66, NWayLPAR=0x68,
  216. NWayExpansion=0x6A,
  217. /* Undocumented registers, but required for proper operation. */
  218. FIFOTMS=0x70, /* FIFO Control and test. */
  219. CSCR=0x74, /* Chip Status and Configuration Register. */
  220. PARA78=0x78, PARA7c=0x7c, /* Magic transceiver parameter register. */
  221. };
  222. enum ChipCmdBits {
  223. CmdReset=0x10, CmdRxEnb=0x08, CmdTxEnb=0x04, RxBufEmpty=0x01, };
  224. /* Interrupt register bits, using my own meaningful names. */
  225. enum IntrStatusBits {
  226. PCIErr=0x8000, PCSTimeout=0x4000,
  227. RxFIFOOver=0x40, RxUnderrun=0x20, RxOverflow=0x10,
  228. TxErr=0x08, TxOK=0x04, RxErr=0x02, RxOK=0x01,
  229. };
  230. enum TxStatusBits {
  231. TxHostOwns=0x2000, TxUnderrun=0x4000, TxStatOK=0x8000,
  232. TxOutOfWindow=0x20000000, TxAborted=0x40000000, TxCarrierLost=0x80000000,
  233. };
  234. enum RxStatusBits {
  235. RxMulticast=0x8000, RxPhysical=0x4000, RxBroadcast=0x2000,
  236. RxBadSymbol=0x0020, RxRunt=0x0010, RxTooLong=0x0008, RxCRCErr=0x0004,
  237. RxBadAlign=0x0002, RxStatusOK=0x0001,
  238. };
  239. /* Twister tuning parameters from RealTek.
  240.    Completely undocumented, but required to tune bad links. */
  241. enum CSCRBits {
  242. CSCR_LinkOKBit=0x0400, CSCR_LinkChangeBit=0x0800,
  243. CSCR_LinkStatusBits=0x0f000, CSCR_LinkDownOffCmd=0x003c0,
  244. CSCR_LinkDownCmd=0x0f3c0,
  245. };
  246. #define PARA78_default 0x78fa8388
  247. #define PARA7c_default 0xcb38de43  /* param[0][3] */
  248. #define PARA7c_xxx 0xcb38de43
  249. unsigned long param[4][4]={
  250. {0xcb39de43, 0xcb39ce43, 0xfb38de03, 0xcb38de43},
  251. {0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
  252. {0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
  253. {0xbb39de43, 0xbb39ce43, 0xbb39ce83, 0xbb39ce83}
  254. };
  255. #define PRIV_ALIGN 15  /* Desired alignment mask */
  256. struct rtl8129_private {
  257. struct net_device *next_module;
  258. void *priv_addr; /* Unaligned address for kfree */
  259. int chip_id;
  260. int drv_flags;
  261. struct pci_dev *pci_dev;
  262. struct net_device_stats stats;
  263. struct timer_list timer; /* Media selection timer. */
  264. unsigned char *rx_ring;
  265. unsigned int cur_rx; /* Index into the Rx buffer of next Rx pkt. */
  266. unsigned int rx_buf_len; /* Size (8K 16K 32K or 64KB) of the Rx ring */
  267. unsigned int rx_config;
  268. unsigned int cur_tx, dirty_tx, tx_flag;
  269. unsigned long tx_full; /* The Tx queue is full. */
  270. /* The saved address of a sent-in-place packet/buffer, for skfree(). */
  271. struct sk_buff* tx_skbuff[NUM_TX_DESC];
  272. unsigned char *tx_buf[NUM_TX_DESC]; /* Tx bounce buffers */
  273. unsigned char *tx_bufs; /* Tx bounce buffer region. */
  274. char phys[4]; /* MII device addresses. */
  275. u16 advertising; /* NWay media advertisement */
  276. char twistie, twist_row, twist_col; /* Twister tune state. */
  277. unsigned int full_duplex:1; /* Full-duplex operation requested. */
  278. unsigned int duplex_lock:1;
  279. unsigned int default_port:4; /* Last dev->if_port value. */
  280. unsigned int media2:4; /* Secondary monitored media port. */
  281. unsigned int medialock:1; /* Don't sense media type. */
  282. unsigned int mediasense:1; /* Media sensing in progress. */
  283. };
  284. MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
  285. MODULE_DESCRIPTION("RealTek RTL8129/8139 Fast Ethernet driver");
  286. MODULE_PARM(options, "1-" __MODULE_STRING(MAX_UNITS) "i");
  287. MODULE_PARM(full_duplex, "1-" __MODULE_STRING(MAX_UNITS) "i");
  288. MODULE_PARM(multicast_filter_limit, "i");
  289. MODULE_PARM(max_interrupt_work, "i");
  290. MODULE_PARM(debug, "i");
  291. static int rtl8129_open(struct net_device *dev);
  292. static void rtl_hw_start(struct net_device *dev);
  293. static int read_eeprom(long ioaddr, int location, int addr_len);
  294. static int mdio_read(struct net_device *dev, int phy_id, int location);
  295. static void mdio_write(struct net_device *dev, int phy_id, int location, int val);
  296. static void rtl8129_timer(unsigned long data);
  297. static void rtl8129_tx_timeout(struct net_device *dev);
  298. static void rtl8129_init_ring(struct net_device *dev);
  299. static int rtl8129_start_xmit(struct sk_buff *skb, struct net_device *dev);
  300. static int rtl8129_rx(struct net_device *dev);
  301. static void rtl8129_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
  302. static int rtl8129_close(struct net_device *dev);
  303. static int mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
  304. static struct net_device_stats *rtl8129_get_stats(struct net_device *dev);
  305. static inline u32 ether_crc(int length, unsigned char *data);
  306. static void set_rx_mode(struct net_device *dev);
  307. /* A list of all installed RTL8129 devices, for removing the driver module. */
  308. static struct net_device *root_rtl8129_dev = NULL;
  309. #ifndef MODULE
  310. int rtl8139_probe(struct net_device *dev)
  311. {
  312. static int did_version = 0; /* Already printed version info. */
  313. if (debug > 0  &&  did_version++ == 0)
  314. printk(KERN_INFO "%s" KERN_INFO "%s", versionA, versionB);
  315. return pci_drv_register(&rtl8139_drv_id, dev);
  316. }
  317. #endif
  318. static void *rtl8139_probe1(struct pci_dev *pdev, void *init_dev,
  319. long ioaddr, int irq, int chip_idx, int found_cnt)
  320. {
  321. struct net_device *dev;
  322. struct rtl8129_private *np;
  323. void *priv_mem;
  324. int i, option = found_cnt < MAX_UNITS ? options[found_cnt] : 0;
  325. dev = init_etherdev(init_dev, 0);
  326. printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ",
  327.    dev->name, pci_tbl[chip_idx].name, ioaddr, irq);
  328. /* Bring the chip out of low-power mode. */
  329. outb(0x00, ioaddr + Config1);
  330. #if 1
  331. for (i = 0; i < 6; i++)
  332. dev->dev_addr[i] = inb(ioaddr + MAC0 + i);
  333. #else
  334. {
  335. int addr_len = read_eeprom(ioaddr, 0, 8) == 0x8129 ? 8 : 6;
  336. for (i = 0; i < 3; i++)
  337. ((u16 *)(dev->dev_addr))[i] =
  338. le16_to_cpu(read_eeprom(ioaddr, i+7, addr_len));
  339. }
  340. #endif
  341. for (i = 0; i < 5; i++)
  342. printk("%2.2x:", dev->dev_addr[i]);
  343. printk("%2.2x.n", dev->dev_addr[i]);
  344. /* Make certain elements e.g. descriptor lists are aligned. */
  345. priv_mem = kmalloc(sizeof(*np) + PRIV_ALIGN, GFP_KERNEL);
  346. /* Check for the very unlikely case of no memory. */
  347. if (priv_mem == NULL)
  348. return NULL;
  349. /* We do a request_region() to register /proc/ioports info. */
  350. request_region(ioaddr, pci_tbl[chip_idx].io_size, dev->name);
  351. dev->base_addr = ioaddr;
  352. dev->irq = irq;
  353. dev->priv = np = (void *)(((long)priv_mem + PRIV_ALIGN) & ~PRIV_ALIGN);
  354. memset(np, 0, sizeof(*np));
  355. np->priv_addr = priv_mem;
  356. np->next_module = root_rtl8129_dev;
  357. root_rtl8129_dev = dev;
  358. np->pci_dev = pdev;
  359. np->chip_id = chip_idx;
  360. np->drv_flags = pci_tbl[chip_idx].drv_flags;
  361. /* Find the connected MII xcvrs.
  362.    Doing this in open() would allow detecting external xcvrs later, but
  363.    takes too much time. */
  364. if (np->drv_flags & HAS_MII_XCVR) {
  365. int phy, phy_idx = 0;
  366. for (phy = 0; phy < 32 && phy_idx < sizeof(np->phys); phy++) {
  367. int mii_status = mdio_read(dev, phy, 1);
  368. if (mii_status != 0xffff  &&  mii_status != 0x0000) {
  369. np->phys[phy_idx++] = phy;
  370. np->advertising = mdio_read(dev, phy, 4);
  371. printk(KERN_INFO "%s: MII transceiver %d status 0x%4.4x "
  372.    "advertising %4.4x.n",
  373.    dev->name, phy, mii_status, np->advertising);
  374. }
  375. }
  376. if (phy_idx == 0) {
  377. printk(KERN_INFO "%s: No MII transceivers found!  Assuming SYM "
  378.    "transceiver.n",
  379.    dev->name);
  380. np->phys[0] = 32;
  381. }
  382. } else
  383. np->phys[0] = 32;
  384. /* Put the chip into low-power mode. */
  385. outb(0xC0, ioaddr + Cfg9346);
  386. outb(0x03, ioaddr + Config1);
  387. outb('H', ioaddr + HltClk); /* 'R' would leave the clock running. */
  388. /* The lower four bits are the media type. */
  389. if (option > 0) {
  390. np->full_duplex = (option & 0x210) ? 1 : 0;
  391. np->default_port = option & 0xff;
  392. if (np->default_port)
  393. np->medialock = 1;
  394. }
  395. if (found_cnt < MAX_UNITS  &&  full_duplex[found_cnt] > 0)
  396. np->full_duplex = full_duplex[found_cnt];
  397. if (np->full_duplex) {
  398. printk(KERN_INFO "%s: Media type forced to Full Duplex.n", dev->name);
  399. /* Changing the MII-advertised media because might prevent
  400.    re-connection. */
  401. np->duplex_lock = 1;
  402. }
  403. if (np->default_port) {
  404. printk(KERN_INFO "  Forcing %dMbs %s-duplex operation.n",
  405.    (option & 0x20 ? 100 : 10),
  406.    (option & 0x10 ? "full" : "half"));
  407. mdio_write(dev, np->phys[0], 0,
  408.    ((option & 0x20) ? 0x2000 : 0) |  /* 100mbps? */
  409.    ((option & 0x10) ? 0x0100 : 0)); /* Full duplex? */
  410. }
  411. /* The Rtl8129-specific entries in the device structure. */
  412. dev->open = &rtl8129_open;
  413. dev->hard_start_xmit = &rtl8129_start_xmit;
  414. dev->stop = &rtl8129_close;
  415. dev->get_stats = &rtl8129_get_stats;
  416. dev->set_multicast_list = &set_rx_mode;
  417. dev->do_ioctl = &mii_ioctl;
  418. return dev;
  419. }
  420. /* Serial EEPROM section. */
  421. /*  EEPROM_Ctrl bits. */
  422. #define EE_SHIFT_CLK 0x04 /* EEPROM shift clock. */
  423. #define EE_CS 0x08 /* EEPROM chip select. */
  424. #define EE_DATA_WRITE 0x02 /* EEPROM chip data in. */
  425. #define EE_WRITE_0 0x00
  426. #define EE_WRITE_1 0x02
  427. #define EE_DATA_READ 0x01 /* EEPROM chip data out. */
  428. #define EE_ENB (0x80 | EE_CS)
  429. /* Delay between EEPROM clock transitions.
  430.    No extra delay is needed with 33Mhz PCI, but 66Mhz may change this.
  431.  */
  432. #define eeprom_delay() inl(ee_addr)
  433. /* The EEPROM commands include the alway-set leading bit. */
  434. #define EE_WRITE_CMD (5)
  435. #define EE_READ_CMD (6)
  436. #define EE_ERASE_CMD (7)
  437. static int read_eeprom(long ioaddr, int location, int addr_len)
  438. {
  439. int i;
  440. unsigned retval = 0;
  441. long ee_addr = ioaddr + Cfg9346;
  442. int read_cmd = location | (EE_READ_CMD << addr_len);
  443. outb(EE_ENB & ~EE_CS, ee_addr);
  444. outb(EE_ENB, ee_addr);
  445. /* Shift the read command bits out. */
  446. for (i = 4 + addr_len; i >= 0; i--) {
  447. int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
  448. outb(EE_ENB | dataval, ee_addr);
  449. eeprom_delay();
  450. outb(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
  451. eeprom_delay();
  452. }
  453. outb(EE_ENB, ee_addr);
  454. eeprom_delay();
  455. for (i = 16; i > 0; i--) {
  456. outb(EE_ENB | EE_SHIFT_CLK, ee_addr);
  457. eeprom_delay();
  458. retval = (retval << 1) | ((inb(ee_addr) & EE_DATA_READ) ? 1 : 0);
  459. outb(EE_ENB, ee_addr);
  460. eeprom_delay();
  461. }
  462. /* Terminate the EEPROM access. */
  463. outb(~EE_CS, ee_addr);
  464. return retval;
  465. }
  466. /* MII serial management: mostly bogus for now. */
  467. /* Read and write the MII management registers using software-generated
  468.    serial MDIO protocol.
  469.    The maximum data clock rate is 2.5 Mhz.  The minimum timing is usually
  470.    met by back-to-back PCI I/O cycles, but we insert a delay to avoid
  471.    "overclocking" issues. */
  472. #define MDIO_DIR 0x80
  473. #define MDIO_DATA_OUT 0x04
  474. #define MDIO_DATA_IN 0x02
  475. #define MDIO_CLK 0x01
  476. #define MDIO_WRITE0 (MDIO_DIR)
  477. #define MDIO_WRITE1 (MDIO_DIR | MDIO_DATA_OUT)
  478. #define mdio_delay(mdio_addr) inb(mdio_addr)
  479. static char mii_2_8139_map[8] = {MII_BMCR, MII_BMSR, 0, 0, NWayAdvert,
  480.  NWayLPAR, NWayExpansion, 0 };
  481. /* Syncronize the MII management interface by shifting 32 one bits out. */
  482. static void mdio_sync(long mdio_addr)
  483. {
  484. int i;
  485. for (i = 32; i >= 0; i--) {
  486. outb(MDIO_WRITE1, mdio_addr);
  487. mdio_delay(mdio_addr);
  488. outb(MDIO_WRITE1 | MDIO_CLK, mdio_addr);
  489. mdio_delay(mdio_addr);
  490. }
  491. return;
  492. }
  493. static int mdio_read(struct net_device *dev, int phy_id, int location)
  494. {
  495. long mdio_addr = dev->base_addr + MII_SMI;
  496. int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
  497. int retval = 0;
  498. int i;
  499. if (phy_id > 31) { /* Really a 8139.  Use internal registers. */
  500. return location < 8 && mii_2_8139_map[location] ?
  501. inw(dev->base_addr + mii_2_8139_map[location]) : 0;
  502. }
  503. mdio_sync(mdio_addr);
  504. /* Shift the read command bits out. */
  505. for (i = 15; i >= 0; i--) {
  506. int dataval = (mii_cmd & (1 << i)) ? MDIO_DATA_OUT : 0;
  507. outb(MDIO_DIR | dataval, mdio_addr);
  508. mdio_delay(mdio_addr);
  509. outb(MDIO_DIR | dataval | MDIO_CLK, mdio_addr);
  510. mdio_delay(mdio_addr);
  511. }
  512. /* Read the two transition, 16 data, and wire-idle bits. */
  513. for (i = 19; i > 0; i--) {
  514. outb(0, mdio_addr);
  515. mdio_delay(mdio_addr);
  516. retval = (retval << 1) | ((inb(mdio_addr) & MDIO_DATA_IN) ? 1 : 0);
  517. outb(MDIO_CLK, mdio_addr);
  518. mdio_delay(mdio_addr);
  519. }
  520. return (retval>>1) & 0xffff;
  521. }
  522. static void mdio_write(struct net_device *dev, int phy_id, int location,
  523.    int value)
  524. {
  525. long mdio_addr = dev->base_addr + MII_SMI;
  526. int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location<<18) | value;
  527. int i;
  528. if (phy_id > 31) { /* Really a 8139.  Use internal registers. */
  529. long ioaddr = dev->base_addr;
  530. if (location == 0) {
  531. outb(0xC0, ioaddr + Cfg9346);
  532. outw(value, ioaddr + MII_BMCR);
  533. outb(0x00, ioaddr + Cfg9346);
  534. } else if (location < 8  &&  mii_2_8139_map[location])
  535. outw(value, ioaddr + mii_2_8139_map[location]);
  536. return;
  537. }
  538. mdio_sync(mdio_addr);
  539. /* Shift the command bits out. */
  540. for (i = 31; i >= 0; i--) {
  541. int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
  542. outb(dataval, mdio_addr);
  543. mdio_delay(mdio_addr);
  544. outb(dataval | MDIO_CLK, mdio_addr);
  545. mdio_delay(mdio_addr);
  546. }
  547. /* Clear out extra bits. */
  548. for (i = 2; i > 0; i--) {
  549. outb(0, mdio_addr);
  550. mdio_delay(mdio_addr);
  551. outb(MDIO_CLK, mdio_addr);
  552. mdio_delay(mdio_addr);
  553. }
  554. return;
  555. }
  556. static int rtl8129_open(struct net_device *dev)
  557. {
  558. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  559. long ioaddr = dev->base_addr;
  560. int rx_buf_len_idx;
  561. MOD_INC_USE_COUNT;
  562. if (request_irq(dev->irq, &rtl8129_interrupt, SA_SHIRQ, dev->name, dev)) {
  563. MOD_DEC_USE_COUNT;
  564. return -EAGAIN;
  565. }
  566. /* The Rx ring allocation size is 2^N + delta, which is worst-case for
  567.    the kernel binary-buddy allocation.  We allocate the Tx bounce buffers
  568.    at the same time to use some of the otherwise wasted space.
  569.    The delta of +16 is required for dribble-over because the receiver does
  570.    not wrap when the packet terminates just beyond the end of the ring. */
  571. rx_buf_len_idx = RX_BUF_LEN_IDX;
  572. do {
  573. tp->rx_buf_len = 8192 << rx_buf_len_idx;
  574. tp->rx_ring = kmalloc(tp->rx_buf_len + 16 +
  575.   (TX_BUF_SIZE * NUM_TX_DESC), GFP_KERNEL);
  576. } while (tp->rx_ring == NULL  &&  --rx_buf_len_idx >= 0);
  577. if (tp->rx_ring == NULL) {
  578. if (debug > 0)
  579. printk(KERN_ERR "%s: Couldn't allocate a %d byte receive ring.n",
  580.    dev->name, tp->rx_buf_len);
  581. MOD_DEC_USE_COUNT;
  582. return -ENOMEM;
  583. }
  584. tp->tx_bufs = tp->rx_ring + tp->rx_buf_len + 16;
  585. rtl8129_init_ring(dev);
  586. tp->full_duplex = tp->duplex_lock;
  587. tp->tx_flag = (TX_FIFO_THRESH<<11) & 0x003f0000;
  588. tp->rx_config =
  589. (RX_FIFO_THRESH << 13) | (rx_buf_len_idx << 11) | (RX_DMA_BURST<<8);
  590. rtl_hw_start(dev);
  591. netif_start_tx_queue(dev);
  592. if (debug > 1)
  593. printk(KERN_DEBUG"%s: rtl8129_open() ioaddr %#lx IRQ %d"
  594.    " GP Pins %2.2x %s-duplex.n",
  595.    dev->name, ioaddr, dev->irq, inb(ioaddr + GPPinData),
  596.    tp->full_duplex ? "full" : "half");
  597. /* Set the timer to switch to check for link beat and perhaps switch
  598.    to an alternate media type. */
  599. init_timer(&tp->timer);
  600. tp->timer.expires = jiffies + 3*HZ;
  601. tp->timer.data = (unsigned long)dev;
  602. tp->timer.function = &rtl8129_timer;
  603. add_timer(&tp->timer);
  604. return 0;
  605. }
  606. /* Start the hardware at open or resume. */
  607. static void rtl_hw_start(struct net_device *dev)
  608. {
  609. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  610. long ioaddr = dev->base_addr;
  611. int i;
  612. /* Soft reset the chip. */
  613. outb(CmdReset, ioaddr + ChipCmd);
  614. /* Check that the chip has finished the reset. */
  615. for (i = 1000; i > 0; i--)
  616. if ((inb(ioaddr + ChipCmd) & CmdReset) == 0)
  617. break;
  618. /* Restore our idea of the MAC address. */
  619. outb(0xC0, ioaddr + Cfg9346);
  620. outl(cpu_to_le32(*(u32*)(dev->dev_addr + 0)), ioaddr + MAC0 + 0);
  621. outl(cpu_to_le32(*(u32*)(dev->dev_addr + 4)), ioaddr + MAC0 + 4);
  622. /* Hmmm, do these belong here? */
  623. tp->cur_rx = 0;
  624. /* Must enable Tx/Rx before setting transfer thresholds! */
  625. outb(CmdRxEnb | CmdTxEnb, ioaddr + ChipCmd);
  626. outl(tp->rx_config, ioaddr + RxConfig);
  627. /* Check this value: the documentation contradicts ifself.  Is the
  628.    IFG correct with bit 28:27 zero, or with |0x03000000 ? */
  629. outl((TX_DMA_BURST<<8), ioaddr + TxConfig);
  630. /* This is check_duplex() */
  631. if (tp->phys[0] >= 0  ||  (tp->drv_flags & HAS_MII_XCVR)) {
  632. u16 mii_reg5 = mdio_read(dev, tp->phys[0], 5);
  633. if (mii_reg5 == 0xffff)
  634. ; /* Not there */
  635. else if ((mii_reg5 & 0x0100) == 0x0100
  636.  || (mii_reg5 & 0x00C0) == 0x0040)
  637. tp->full_duplex = 1;
  638. if (debug > 1)
  639. printk(KERN_INFO"%s: Setting %s%s-duplex based on"
  640.    " auto-negotiated partner ability %4.4x.n", dev->name,
  641.    mii_reg5 == 0 ? "" :
  642.    (mii_reg5 & 0x0180) ? "100mbps " : "10mbps ",
  643.    tp->full_duplex ? "full" : "half", mii_reg5);
  644. }
  645. outb(tp->full_duplex ? 0x60 : 0x20, ioaddr + Config1);
  646. outb(0x00, ioaddr + Cfg9346);
  647. outl(virt_to_bus(tp->rx_ring), ioaddr + RxBuf);
  648. /* Start the chip's Tx and Rx process. */
  649. outl(0, ioaddr + RxMissed);
  650. set_rx_mode(dev);
  651. outb(CmdRxEnb | CmdTxEnb, ioaddr + ChipCmd);
  652. /* Enable all known interrupts by setting the interrupt mask. */
  653. outw(PCIErr | PCSTimeout | RxUnderrun | RxOverflow | RxFIFOOver
  654.  | TxErr | TxOK | RxErr | RxOK, ioaddr + IntrMask);
  655. }
  656. static void rtl8129_timer(unsigned long data)
  657. {
  658. struct net_device *dev = (struct net_device *)data;
  659. struct rtl8129_private *np = (struct rtl8129_private *)dev->priv;
  660. long ioaddr = dev->base_addr;
  661. int next_tick = 60*HZ;
  662. int mii_reg5 = mdio_read(dev, np->phys[0], 5);
  663. if (! np->duplex_lock  &&  mii_reg5 != 0xffff) {
  664. int duplex = (mii_reg5&0x0100) || (mii_reg5 & 0x01C0) == 0x0040;
  665. if (np->full_duplex != duplex) {
  666. np->full_duplex = duplex;
  667. printk(KERN_INFO "%s: Setting %s-duplex based on MII #%d link"
  668.    " partner ability of %4.4x.n", dev->name,
  669.    np->full_duplex ? "full" : "half", np->phys[0], mii_reg5);
  670. outb(0xC0, ioaddr + Cfg9346);
  671. outb(np->full_duplex ? 0x60 : 0x20, ioaddr + Config1);
  672. outb(0x00, ioaddr + Cfg9346);
  673. }
  674. }
  675. #if LINUX_VERSION_CODE < 0x20300
  676. /* Check for bogusness. */
  677. if (inw(ioaddr + IntrStatus) & (TxOK | RxOK)) {
  678. int status = inw(ioaddr + IntrStatus); /* Double check */
  679. if (status & (TxOK | RxOK)  &&  ! dev->interrupt) {
  680. printk(KERN_ERR "%s: RTL8139 Interrupt line blocked, status %x.n",
  681.    dev->name, status);
  682. rtl8129_interrupt(dev->irq, dev, 0);
  683. }
  684. }
  685. if (dev->tbusy  &&  jiffies - dev->trans_start >= 2*TX_TIMEOUT)
  686. rtl8129_tx_timeout(dev);
  687. #else
  688. if (netif_queue_paused(dev)  &&
  689. np->cur_tx - np->dirty_tx > 1  &&
  690. (jiffies - dev->trans_start) > TX_TIMEOUT) {
  691. rtl8129_tx_timeout(dev);
  692. }
  693. #endif
  694. #if defined(RTL_TUNE_TWISTER)
  695. /* This is a complicated state machine to configure the "twister" for
  696.    impedance/echos based on the cable length.
  697.    All of this is magic and undocumented.
  698.    */
  699. if (np->twistie) switch(np->twistie) {
  700. case 1: {
  701. if (inw(ioaddr + CSCR) & CSCR_LinkOKBit) {
  702. /* We have link beat, let us tune the twister. */
  703. outw(CSCR_LinkDownOffCmd, ioaddr + CSCR);
  704. np->twistie = 2; /* Change to state 2. */
  705. next_tick = HZ/10;
  706. } else {
  707. /* Just put in some reasonable defaults for when beat returns. */
  708. outw(CSCR_LinkDownCmd, ioaddr + CSCR);
  709. outl(0x20,ioaddr + FIFOTMS); /* Turn on cable test mode. */
  710. outl(PARA78_default ,ioaddr + PARA78);
  711. outl(PARA7c_default ,ioaddr + PARA7c);
  712. np->twistie = 0; /* Bail from future actions. */
  713. }
  714. } break;
  715. case 2: {
  716. /* Read how long it took to hear the echo. */
  717. int linkcase = inw(ioaddr + CSCR) & CSCR_LinkStatusBits;
  718. if (linkcase == 0x7000) np->twist_row = 3;
  719. else if (linkcase == 0x3000) np->twist_row = 2;
  720. else if (linkcase == 0x1000) np->twist_row = 1;
  721. else np->twist_row = 0;
  722. np->twist_col = 0;
  723. np->twistie = 3; /* Change to state 2. */
  724. next_tick = HZ/10;
  725. } break;
  726. case 3: {
  727. /* Put out four tuning parameters, one per 100msec. */
  728. if (np->twist_col == 0) outw(0, ioaddr + FIFOTMS);
  729. outl(param[(int)np->twist_row][(int)np->twist_col], ioaddr + PARA7c);
  730. next_tick = HZ/10;
  731. if (++np->twist_col >= 4) {
  732. /* For short cables we are done.
  733.    For long cables (row == 3) check for mistune. */
  734. np->twistie = (np->twist_row == 3) ? 4 : 0;
  735. }
  736. } break;
  737. case 4: {
  738. /* Special case for long cables: check for mistune. */
  739. if ((inw(ioaddr + CSCR) & CSCR_LinkStatusBits) == 0x7000) {
  740. np->twistie = 0;
  741. break;
  742. } else {
  743. outl(0xfb38de03, ioaddr + PARA7c);
  744. np->twistie = 5;
  745. next_tick = HZ/10;
  746. }
  747. } break;
  748. case 5: {
  749. /* Retune for shorter cable (column 2). */
  750. outl(0x20,ioaddr + FIFOTMS);
  751. outl(PARA78_default,  ioaddr + PARA78);
  752. outl(PARA7c_default,  ioaddr + PARA7c);
  753. outl(0x00,ioaddr + FIFOTMS);
  754. np->twist_row = 2;
  755. np->twist_col = 0;
  756. np->twistie = 3;
  757. next_tick = HZ/10;
  758. } break;
  759. }
  760. #endif
  761. if (debug > 2) {
  762. if (np->drv_flags & HAS_MII_XCVR)
  763. printk(KERN_DEBUG"%s: Media selection tick, GP pins %2.2x.n",
  764.    dev->name, inb(ioaddr + GPPinData));
  765. else
  766. printk(KERN_DEBUG"%s: Media selection tick, Link partner %4.4x.n",
  767.    dev->name, inw(ioaddr + NWayLPAR));
  768. printk(KERN_DEBUG"%s:  Other registers are IntMask %4.4x IntStatus %4.4x"
  769.    " RxStatus %4.4x.n",
  770.    dev->name, inw(ioaddr + IntrMask), inw(ioaddr + IntrStatus),
  771.    inl(ioaddr + RxEarlyStatus));
  772. printk(KERN_DEBUG"%s:  Chip config %2.2x %2.2x.n",
  773.    dev->name, inb(ioaddr + Config0), inb(ioaddr + Config1));
  774. }
  775. np->timer.expires = jiffies + next_tick;
  776. add_timer(&np->timer);
  777. }
  778. static void rtl8129_tx_timeout(struct net_device *dev)
  779. {
  780. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  781. long ioaddr = dev->base_addr;
  782. int mii_reg, i;
  783. if (debug > 0)
  784. printk(KERN_ERR "%s: Transmit timeout, status %2.2x %4.4x "
  785.    "media %2.2x.n",
  786.    dev->name, inb(ioaddr + ChipCmd), inw(ioaddr + IntrStatus),
  787.    inb(ioaddr + GPPinData));
  788. /* Disable interrupts by clearing the interrupt mask. */
  789. outw(0x0000, ioaddr + IntrMask);
  790. /* Emit info to figure out what went wrong. */
  791. printk(KERN_DEBUG "%s: Tx queue start entry %d  dirty entry %d%s.n",
  792.    dev->name, tp->cur_tx, tp->dirty_tx, tp->tx_full ? ", full" : "");
  793. for (i = 0; i < NUM_TX_DESC; i++)
  794. printk(KERN_DEBUG "%s:  Tx descriptor %d is %8.8x.%sn",
  795.    dev->name, i, inl(ioaddr + TxStatus0 + i*4),
  796.    i == tp->dirty_tx % NUM_TX_DESC ? " (queue head)" : "");
  797. printk(KERN_DEBUG "%s: MII #%d registers are:", dev->name, tp->phys[0]);
  798. for (mii_reg = 0; mii_reg < 8; mii_reg++)
  799. printk(" %4.4x", mdio_read(dev, tp->phys[0], mii_reg));
  800. printk(".n");
  801. /* Stop a shared interrupt from scavenging while we are. */
  802. tp->dirty_tx = tp->cur_tx = 0;
  803. /* Dump the unsent Tx packets. */
  804. for (i = 0; i < NUM_TX_DESC; i++) {
  805. if (tp->tx_skbuff[i]) {
  806. dev_free_skb(tp->tx_skbuff[i]);
  807. tp->tx_skbuff[i] = 0;
  808. tp->stats.tx_dropped++;
  809. }
  810. }
  811. rtl_hw_start(dev);
  812. netif_unpause_tx_queue(dev);
  813. tp->tx_full = 0;
  814. return;
  815. }
  816. /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
  817. static void
  818. rtl8129_init_ring(struct net_device *dev)
  819. {
  820. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  821. int i;
  822. tp->tx_full = 0;
  823. tp->dirty_tx = tp->cur_tx = 0;
  824. for (i = 0; i < NUM_TX_DESC; i++) {
  825. tp->tx_skbuff[i] = 0;
  826. tp->tx_buf[i] = &tp->tx_bufs[i*TX_BUF_SIZE];
  827. }
  828. }
  829. static int
  830. rtl8129_start_xmit(struct sk_buff *skb, struct net_device *dev)
  831. {
  832. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  833. long ioaddr = dev->base_addr;
  834. int entry;
  835. #ifdef CONFIG_LEDMAN
  836. ledman_cmd(LEDMAN_CMD_SET,
  837. (dev->name[3] == '0') ? LEDMAN_LAN1_TX : LEDMAN_LAN2_TX);
  838. #endif
  839. if (netif_pause_tx_queue(dev) != 0) {
  840. /* This watchdog code is redundant with the media monitor timer. */
  841. if (jiffies - dev->trans_start > TX_TIMEOUT)
  842. rtl8129_tx_timeout(dev);
  843. return 1;
  844. }
  845. /* Calculate the next Tx descriptor entry. */
  846. entry = tp->cur_tx % NUM_TX_DESC;
  847. tp->tx_skbuff[entry] = skb;
  848. if ((long)skb->data & 3) { /* Must use alignment buffer. */
  849. memcpy(tp->tx_buf[entry], skb->data, skb->len);
  850. outl(virt_to_bus(tp->tx_buf[entry]), ioaddr + TxAddr0 + entry*4);
  851. } else
  852. outl(virt_to_bus(skb->data), ioaddr + TxAddr0 + entry*4);
  853. /* Note: the chip doesn't have auto-pad! */
  854. outl(tp->tx_flag | (skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN),
  855.  ioaddr + TxStatus0 + entry*4);
  856. /* There is a race condition here -- we might read dirty_tx, take an
  857.    interrupt that clears the Tx queue, and only then set tx_full.
  858.    So we do this in two phases. */
  859. if (++tp->cur_tx - tp->dirty_tx >= NUM_TX_DESC) {
  860. set_bit(0, &tp->tx_full);
  861. if (tp->cur_tx - (volatile unsigned int)tp->dirty_tx < NUM_TX_DESC) {
  862. clear_bit(0, &tp->tx_full);
  863. netif_unpause_tx_queue(dev);
  864. } else
  865. netif_stop_tx_queue(dev);
  866. } else
  867. netif_unpause_tx_queue(dev);
  868. dev->trans_start = jiffies;
  869. if (debug > 4)
  870. printk(KERN_DEBUG"%s: Queued Tx packet at %p size %d to slot %d.n",
  871.    dev->name, skb->data, (int)skb->len, entry);
  872. return 0;
  873. }
  874. /* The interrupt handler does all of the Rx thread work and cleans up
  875.    after the Tx thread. */
  876. static void rtl8129_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
  877. {
  878. struct net_device *dev = (struct net_device *)dev_instance;
  879. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  880. int boguscnt = max_interrupt_work;
  881. long ioaddr = dev->base_addr;
  882. int link_changed = 0; /* Grrr, avoid bogus "uninitialized" warning */
  883. #if defined(__i386__)  &&  LINUX_VERSION_CODE < 0x20123
  884. /* A lock to prevent simultaneous entry bug on Intel SMP machines. */
  885. if (test_and_set_bit(0, (void*)&dev->interrupt)) {
  886. printk(KERN_ERR"%s: SMP simultaneous entry of an interrupt handler.n",
  887.    dev->name);
  888. dev->interrupt = 0; /* Avoid halting machine. */
  889. return;
  890. }
  891. #endif
  892. do {
  893. int status = inw(ioaddr + IntrStatus);
  894. /* Acknowledge all of the current interrupt sources ASAP, but
  895.    an first get an additional status bit from CSCR. */
  896. if (status & RxUnderrun)
  897. link_changed = inw(ioaddr+CSCR) & CSCR_LinkChangeBit;
  898. outw(status, ioaddr + IntrStatus);
  899. if (debug > 4)
  900. printk(KERN_DEBUG"%s: interrupt  status=%#4.4x new intstat=%#4.4x.n",
  901.    dev->name, status, inw(ioaddr + IntrStatus));
  902. if ((status & (PCIErr|PCSTimeout|RxUnderrun|RxOverflow|RxFIFOOver
  903.    |TxErr|TxOK|RxErr|RxOK)) == 0)
  904. break;
  905. if (status & (RxOK|RxUnderrun|RxOverflow|RxFIFOOver))/* Rx interrupt */
  906. rtl8129_rx(dev);
  907. if (status & (TxOK | TxErr)) {
  908. unsigned int dirty_tx = tp->dirty_tx;
  909. while (tp->cur_tx - dirty_tx > 0) {
  910. int entry = dirty_tx % NUM_TX_DESC;
  911. int txstatus = inl(ioaddr + TxStatus0 + entry*4);
  912. if ( ! (txstatus & (TxStatOK | TxUnderrun | TxAborted)))
  913. break; /* It still hasn't been Txed */
  914. /* Note: TxCarrierLost is always asserted at 100mbps. */
  915. if (txstatus & (TxOutOfWindow | TxAborted)) {
  916. /* There was an major error, log it. */
  917. if (debug > 1)
  918. printk(KERN_NOTICE"%s: Transmit error, Tx status %8.8x.n",
  919.    dev->name, txstatus);
  920. tp->stats.tx_errors++;
  921. if (txstatus&TxAborted) {
  922. tp->stats.tx_aborted_errors++;
  923. outl(TX_DMA_BURST << 8, ioaddr + TxConfig);
  924. }
  925. if (txstatus&TxCarrierLost) tp->stats.tx_carrier_errors++;
  926. if (txstatus&TxOutOfWindow) tp->stats.tx_window_errors++;
  927. #ifdef ETHER_STATS
  928. if ((txstatus & 0x0f000000) == 0x0f000000)
  929. tp->stats.collisions16++;
  930. #endif
  931. } else {
  932. if (txstatus & TxUnderrun) {
  933. /* Add 64 to the Tx FIFO threshold. */
  934. if (tp->tx_flag <  0x00300000)
  935. tp->tx_flag += 0x00020000;
  936. tp->stats.tx_fifo_errors++;
  937. }
  938. tp->stats.collisions += (txstatus >> 24) & 15;
  939. #if LINUX_VERSION_CODE > 0x20119
  940. tp->stats.tx_bytes += txstatus & 0x7ff;
  941. #endif
  942. tp->stats.tx_packets++;
  943. }
  944. /* Free the original skb. */
  945. dev_free_skb_irq(tp->tx_skbuff[entry]);
  946. tp->tx_skbuff[entry] = 0;
  947. if (test_bit(0, &tp->tx_full)) {
  948. /* The ring is no longer full, clear tbusy. */
  949. clear_bit(0, &tp->tx_full);
  950. netif_resume_tx_queue(dev);
  951. }
  952. dirty_tx++;
  953. }
  954. #ifndef final_version
  955. if (tp->cur_tx - dirty_tx > NUM_TX_DESC) {
  956. printk(KERN_ERR"%s: Out-of-sync dirty pointer, %d vs. %d, full=%d.n",
  957.    dev->name, dirty_tx, tp->cur_tx, (int)tp->tx_full);
  958. dirty_tx += NUM_TX_DESC;
  959. }
  960. #endif
  961. tp->dirty_tx = dirty_tx;
  962. }
  963. /* Check uncommon events with one test. */
  964. if (status & (PCIErr|PCSTimeout |RxUnderrun|RxOverflow|RxFIFOOver
  965.   |TxErr|RxErr)) {
  966. if (debug > 2)
  967. printk(KERN_NOTICE"%s: Abnormal interrupt, status %8.8x.n",
  968.    dev->name, status);
  969. if (status == 0xffff)
  970. break;
  971. /* Update the error count. */
  972. tp->stats.rx_missed_errors += inl(ioaddr + RxMissed);
  973. outl(0, ioaddr + RxMissed);
  974. if ((status & RxUnderrun)  &&  link_changed  &&
  975. (tp->drv_flags & HAS_LNK_CHNG)) {
  976. /* Really link-change on new chips. */
  977. int lpar = inw(ioaddr + NWayLPAR);
  978. int duplex = (lpar&0x0100) || (lpar & 0x01C0) == 0x0040
  979. || tp->duplex_lock;
  980. if (debug > 1)
  981. printk(KERN_DEBUG "%s: Link changed, link partner "
  982.    "%4.4x new duplex %d.n",
  983.    dev->name, lpar, duplex);
  984. if (tp->full_duplex != duplex) {
  985. tp->full_duplex = duplex;
  986. outb(0xC0, ioaddr + Cfg9346);
  987. outb(tp->full_duplex ? 0x60 : 0x20, ioaddr + Config1);
  988. outb(0x00, ioaddr + Cfg9346);
  989. }
  990. status &= ~RxUnderrun;
  991. }
  992. if (status & (RxUnderrun | RxOverflow | RxErr | RxFIFOOver))
  993. tp->stats.rx_errors++;
  994. if (status & (PCSTimeout)) tp->stats.rx_length_errors++;
  995. if (status & (RxUnderrun|RxFIFOOver)) tp->stats.rx_fifo_errors++;
  996. if (status & RxOverflow) {
  997. tp->stats.rx_over_errors++;
  998. tp->cur_rx = inw(ioaddr + RxBufAddr) % tp->rx_buf_len;
  999. outw(tp->cur_rx - 16, ioaddr + RxBufPtr);
  1000. }
  1001. if (status & PCIErr) {
  1002. u32 pci_cmd_status;
  1003. pci_read_config_dword(tp->pci_dev, PCI_COMMAND, &pci_cmd_status);
  1004. printk(KERN_ERR "%s: PCI Bus error %4.4x.n",
  1005.    dev->name, pci_cmd_status);
  1006. }
  1007. }
  1008. if (--boguscnt < 0) {
  1009. printk(KERN_WARNING"%s: Too much work at interrupt, "
  1010.    "IntrStatus=0x%4.4x.n",
  1011.    dev->name, status);
  1012. /* Clear all interrupt sources. */
  1013. outw(0xffff, ioaddr + IntrStatus);
  1014. break;
  1015. }
  1016. } while (1);
  1017. if (debug > 3)
  1018. printk(KERN_DEBUG"%s: exiting interrupt, intr_status=%#4.4x.n",
  1019.    dev->name, inw(ioaddr + IntrStatus));
  1020. #if defined(__i386__)  &&  LINUX_VERSION_CODE < 0x20123
  1021. clear_bit(0, (void*)&dev->interrupt);
  1022. #endif
  1023. return;
  1024. }
  1025. /* The data sheet doesn't describe the Rx ring at all, so I'm guessing at the
  1026.    field alignments and semantics. */
  1027. static int rtl8129_rx(struct net_device *dev)
  1028. {
  1029. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  1030. long ioaddr = dev->base_addr;
  1031. unsigned char *rx_ring = tp->rx_ring;
  1032. u16 cur_rx = tp->cur_rx;
  1033. if (debug > 4)
  1034. printk(KERN_DEBUG"%s: In rtl8129_rx(), current %4.4x BufAddr %4.4x,"
  1035.    " free to %4.4x, Cmd %2.2x.n",
  1036.    dev->name, cur_rx, inw(ioaddr + RxBufAddr),
  1037.    inw(ioaddr + RxBufPtr), inb(ioaddr + ChipCmd));
  1038. #ifdef CONFIG_LEDMAN
  1039. ledman_cmd(LEDMAN_CMD_SET,
  1040. (dev->name[3] == '0') ? LEDMAN_LAN1_RX : LEDMAN_LAN2_RX);
  1041. #endif
  1042. while ((inb(ioaddr + ChipCmd) & RxBufEmpty) == 0) {
  1043. int ring_offset = cur_rx % tp->rx_buf_len;
  1044. u32 rx_status = le32_to_cpu(*(u32*)(rx_ring + ring_offset));
  1045. int rx_size = rx_status >> 16;  /* Includes the CRC. */
  1046. if (debug > 4) {
  1047. int i;
  1048. printk(KERN_DEBUG"%s:  rtl8129_rx() status %4.4x, size %4.4x,"
  1049.    " cur %4.4x.n",
  1050.    dev->name, rx_status, rx_size, cur_rx);
  1051. printk(KERN_DEBUG"%s: Frame contents ", dev->name);
  1052. for (i = 0; i < 70; i++)
  1053. printk(" %2.2x", rx_ring[ring_offset + i]);
  1054. printk(".n");
  1055. }
  1056. if (rx_status & (RxBadSymbol|RxRunt|RxTooLong|RxCRCErr|RxBadAlign)) {
  1057. if (debug > 1)
  1058. printk(KERN_DEBUG"%s: Ethernet frame had errors,"
  1059.    " status %8.8x.n", dev->name, rx_status);
  1060. if (rx_status == 0xffffffff) {
  1061. if (debug > 0)
  1062. printk(KERN_NOTICE"%s: Invalid receive status at ring "
  1063.    "offset %4.4xn", dev->name, ring_offset);
  1064. rx_status = 0;
  1065. }
  1066. if (rx_status & RxTooLong) {
  1067. if (debug > 0)
  1068. printk(KERN_NOTICE"%s: Oversized Ethernet frame, status %4.4x!n",
  1069.    dev->name, rx_status);
  1070. /* A.C.: The chip hangs here. */
  1071. }
  1072. tp->stats.rx_errors++;
  1073. if (rx_status & (RxBadSymbol|RxBadAlign))
  1074. tp->stats.rx_frame_errors++;
  1075. if (rx_status & (RxRunt|RxTooLong)) tp->stats.rx_length_errors++;
  1076. if (rx_status & RxCRCErr) tp->stats.rx_crc_errors++;
  1077. /* Reset the receiver, based on RealTek recommendation. (Bug?) */
  1078. tp->cur_rx = 0;
  1079. outb(CmdTxEnb, ioaddr + ChipCmd);
  1080. /* A.C.: Reset the multicast list. */
  1081. set_rx_mode(dev);
  1082. outb(CmdRxEnb | CmdTxEnb, ioaddr + ChipCmd);
  1083. } else {
  1084. /* Malloc up new buffer, compatible with net-2e. */
  1085. /* Omit the four octet CRC from the length. */
  1086. struct sk_buff *skb;
  1087. int pkt_size = rx_size - 4;
  1088. skb = dev_alloc_skb(pkt_size + 2);
  1089. if (skb == NULL) {
  1090. printk(KERN_WARNING"%s: Memory squeeze, deferring packet.n",
  1091.    dev->name);
  1092. /* We should check that some rx space is free.
  1093.    If not, free one and mark stats->rx_dropped++. */
  1094. tp->stats.rx_dropped++;
  1095. break;
  1096. }
  1097. skb->dev = dev;
  1098. skb_reserve(skb, 2); /* 16 byte align the IP fields. */
  1099. if (ring_offset + rx_size > tp->rx_buf_len) {
  1100. int semi_count = tp->rx_buf_len - ring_offset - 4;
  1101. /* This could presumably use two calls to copy_and_sum()? */
  1102. memcpy(skb_put(skb, semi_count), &rx_ring[ring_offset + 4],
  1103.    semi_count);
  1104. memcpy(skb_put(skb, pkt_size-semi_count), rx_ring,
  1105.    pkt_size-semi_count);
  1106. if (debug > 4) {
  1107. int i;
  1108. printk(KERN_DEBUG"%s:  Frame wrap @%d",
  1109.    dev->name, semi_count);
  1110. for (i = 0; i < 16; i++)
  1111. printk(" %2.2x", rx_ring[i]);
  1112. printk(".n");
  1113. memset(rx_ring, 0xcc, 16);
  1114. }
  1115. } else {
  1116. eth_copy_and_sum(skb, &rx_ring[ring_offset + 4],
  1117.  pkt_size, 0);
  1118. skb_put(skb, pkt_size);
  1119. }
  1120. skb->protocol = eth_type_trans(skb, dev);
  1121. netif_rx(skb);
  1122. #if LINUX_VERSION_CODE > 0x20119
  1123. tp->stats.rx_bytes += pkt_size;
  1124. #endif
  1125. tp->stats.rx_packets++;
  1126. }
  1127. cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;
  1128. outw(cur_rx - 16, ioaddr + RxBufPtr);
  1129. }
  1130. if (debug > 4)
  1131. printk(KERN_DEBUG"%s: Done rtl8129_rx(), current %4.4x BufAddr %4.4x,"
  1132.    " free to %4.4x, Cmd %2.2x.n",
  1133.    dev->name, cur_rx, inw(ioaddr + RxBufAddr),
  1134.    inw(ioaddr + RxBufPtr), inb(ioaddr + ChipCmd));
  1135. tp->cur_rx = cur_rx;
  1136. return 0;
  1137. }
  1138. static int
  1139. rtl8129_close(struct net_device *dev)
  1140. {
  1141. long ioaddr = dev->base_addr;
  1142. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  1143. int i;
  1144. netif_stop_tx_queue(dev);
  1145. if (debug > 1)
  1146. printk(KERN_DEBUG"%s: Shutting down ethercard, status was 0x%4.4x.n",
  1147.    dev->name, inw(ioaddr + IntrStatus));
  1148. /* Disable interrupts by clearing the interrupt mask. */
  1149. outw(0x0000, ioaddr + IntrMask);
  1150. /* Stop the chip's Tx and Rx DMA processes. */
  1151. outb(0x00, ioaddr + ChipCmd);
  1152. /* Update the error counts. */
  1153. tp->stats.rx_missed_errors += inl(ioaddr + RxMissed);
  1154. outl(0, ioaddr + RxMissed);
  1155. del_timer(&tp->timer);
  1156. free_irq(dev->irq, dev);
  1157. for (i = 0; i < NUM_TX_DESC; i++) {
  1158. if (tp->tx_skbuff[i])
  1159. dev_free_skb(tp->tx_skbuff[i]);
  1160. tp->tx_skbuff[i] = 0;
  1161. }
  1162. kfree(tp->rx_ring);
  1163. tp->rx_ring = 0;
  1164. /* Green! Put the chip in low-power mode. */
  1165. outb(0xC0, ioaddr + Cfg9346);
  1166. outb(0x03, ioaddr + Config1);
  1167. outb('H', ioaddr + HltClk); /* 'R' would leave the clock running. */
  1168. MOD_DEC_USE_COUNT;
  1169. return 0;
  1170. }
  1171. static int mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
  1172. {
  1173. struct rtl8129_private *np = (struct rtl8129_private *)dev->priv;
  1174. u16 *data = (u16 *)&rq->ifr_data;
  1175. switch(cmd) {
  1176. case SIOCGMIIPHY: /* Get the address of the PHY in use. */
  1177. data[0] = np->phys[0] & 0x3f;
  1178. /* Fall Through */
  1179. case SIOCGMIIREG: /* Read the specified MII register. */
  1180. data[3] = mdio_read(dev, data[0], data[1] & 0x1f);
  1181. return 0;
  1182. case SIOCSMIIREG: /* Write the specified MII register */
  1183. if (!capable(CAP_NET_ADMIN))
  1184. return -EPERM;
  1185. if (data[0] == np->phys[0]) {
  1186. u16 value = data[2];
  1187. switch (data[1]) {
  1188. case 0:
  1189. /* Check for autonegotiation on or reset. */
  1190. np->medialock = (value & 0x9000) ? 0 : 1;
  1191. if (np->medialock)
  1192. np->full_duplex = (value & 0x0100) ? 1 : 0;
  1193. break;
  1194. case 4: np->advertising = value; break;
  1195. }
  1196. }
  1197. mdio_write(dev, data[0], data[1] & 0x1f, data[2]);
  1198. return 0;
  1199. default:
  1200. return -EOPNOTSUPP;
  1201. }
  1202. }
  1203. static struct net_device_stats *
  1204. rtl8129_get_stats(struct net_device *dev)
  1205. {
  1206. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  1207. long ioaddr = dev->base_addr;
  1208. if (netif_running(dev)) {
  1209. tp->stats.rx_missed_errors += inl(ioaddr + RxMissed);
  1210. outl(0, ioaddr + RxMissed);
  1211. }
  1212. return &tp->stats;
  1213. }
  1214. /* Set or clear the multicast filter for this adaptor.
  1215.    This routine is not state sensitive and need not be SMP locked. */
  1216. static unsigned const ethernet_polynomial = 0x04c11db7U;
  1217. static inline u32 ether_crc(int length, unsigned char *data)
  1218. {
  1219. int crc = -1;
  1220. while (--length >= 0) {
  1221. unsigned char current_octet = *data++;
  1222. int bit;
  1223. for (bit = 0; bit < 8; bit++, current_octet >>= 1)
  1224. crc = (crc << 1) ^
  1225. ((crc < 0) ^ (current_octet & 1) ? ethernet_polynomial : 0);
  1226. }
  1227. return crc;
  1228. }
  1229. /* Bits in RxConfig. */
  1230. enum rx_mode_bits {
  1231. AcceptErr=0x20, AcceptRunt=0x10, AcceptBroadcast=0x08,
  1232. AcceptMulticast=0x04, AcceptMyPhys=0x02, AcceptAllPhys=0x01,
  1233. };
  1234. static void set_rx_mode(struct net_device *dev)
  1235. {
  1236. struct rtl8129_private *tp = (struct rtl8129_private *)dev->priv;
  1237. long ioaddr = dev->base_addr;
  1238. u32 mc_filter[2];  /* Multicast hash filter */
  1239. int i, rx_mode;
  1240. if (debug > 3)
  1241. printk(KERN_DEBUG"%s:   set_rx_mode(%4.4x) done -- Rx config %8.8x.n",
  1242.    dev->name, dev->flags, inl(ioaddr + RxConfig));
  1243. /* Note: do not reorder, GCC is clever about common statements. */
  1244. if (dev->flags & IFF_PROMISC) {
  1245. /* Unconditionally log net taps. */
  1246. printk(KERN_NOTICE"%s: Promiscuous mode enabled.n", dev->name);
  1247. rx_mode = AcceptBroadcast|AcceptMulticast|AcceptMyPhys|AcceptAllPhys;
  1248. mc_filter[1] = mc_filter[0] = 0xffffffff;
  1249. } else if ((dev->mc_count > multicast_filter_limit)
  1250.    || (dev->flags & IFF_ALLMULTI)) {
  1251. /* Too many to filter perfectly -- accept all multicasts. */
  1252. rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
  1253. mc_filter[1] = mc_filter[0] = 0xffffffff;
  1254. } else {
  1255. struct dev_mc_list *mclist;
  1256. rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
  1257. mc_filter[1] = mc_filter[0] = 0;
  1258. for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
  1259.  i++, mclist = mclist->next)
  1260. set_bit(ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26, mc_filter);
  1261. }
  1262. /* We can safely update without stopping the chip. */
  1263. outl(tp->rx_config | rx_mode, ioaddr + RxConfig);
  1264. outl(mc_filter[0], ioaddr + MAR0 + 0);
  1265. outl(mc_filter[1], ioaddr + MAR0 + 4);
  1266. return;
  1267. }
  1268. static int rtl_pwr_event(void *dev_instance, int event)
  1269. {
  1270. struct net_device *dev = dev_instance;
  1271. struct rtl8129_private *np = (struct rtl8129_private *)dev->priv;
  1272. long ioaddr = dev->base_addr;
  1273. if (debug > 1)
  1274. printk("%s: Handling power event %d.n", dev->name, event);
  1275. switch(event) {
  1276. case DRV_ATTACH:
  1277. MOD_INC_USE_COUNT;
  1278. break;
  1279. case DRV_SUSPEND:
  1280. netif_device_detach(dev);
  1281. /* Disable interrupts, stop Tx and Rx. */
  1282. outw(0x0000, ioaddr + IntrMask);
  1283. outb(0x00, ioaddr + ChipCmd);
  1284. /* Update the error counts. */
  1285. np->stats.rx_missed_errors += inl(ioaddr + RxMissed);
  1286. outl(0, ioaddr + RxMissed);
  1287. break;
  1288. case DRV_RESUME:
  1289. netif_device_attach(dev);
  1290. rtl_hw_start(dev);
  1291. break;
  1292. case DRV_DETACH: {
  1293. struct net_device **devp, **next;
  1294. if (dev->flags & IFF_UP) {
  1295. dev_close(dev);
  1296. dev->flags &= ~(IFF_UP|IFF_RUNNING);
  1297. }
  1298. unregister_netdev(dev);
  1299. release_region(dev->base_addr, pci_tbl[np->chip_id].io_size);
  1300. #ifndef USE_IO_OPS
  1301. iounmap((char *)dev->base_addr);
  1302. #endif
  1303. for (devp = &root_rtl8129_dev; *devp; devp = next) {
  1304. next = &((struct rtl8129_private *)(*devp)->priv)->next_module;
  1305. if (*devp == dev) {
  1306. *devp = *next;
  1307. break;
  1308. }
  1309. }
  1310. if (np->priv_addr)
  1311. kfree(np->priv_addr);
  1312. kfree(dev);
  1313. MOD_DEC_USE_COUNT;
  1314. break;
  1315. }
  1316. }
  1317. return 0;
  1318. }
  1319. #ifdef CARDBUS
  1320. #include <pcmcia/driver_ops.h>
  1321. static dev_node_t *rtl8139_attach(dev_locator_t *loc)
  1322. {
  1323. struct net_device *dev;
  1324. u16 dev_id;
  1325. u32 pciaddr;
  1326. u8 bus, devfn, irq;
  1327. long hostaddr;
  1328. /* Note: the chip index should match the 8139B pci_tbl[] entry. */
  1329. int chip_idx = 2;
  1330. if (loc->bus != LOC_PCI) return NULL;
  1331. bus = loc->b.pci.bus; devfn = loc->b.pci.devfn;
  1332. printk(KERN_DEBUG "rtl8139_attach(bus %d, function %d)n", bus, devfn);
  1333. #ifdef USE_IO_OPS
  1334. pcibios_read_config_dword(bus, devfn, PCI_BASE_ADDRESS_0, &pciaddr);
  1335. hostaddr = pciaddr & PCI_BASE_ADDRESS_IO_MASK;
  1336. #else
  1337. pcibios_read_config_dword(bus, devfn, PCI_BASE_ADDRESS_1, &pciaddr);
  1338. hostaddr = (long)ioremap(pciaddr & PCI_BASE_ADDRESS_MEM_MASK,
  1339.  pci_tbl[chip_idx].io_size);
  1340. #endif
  1341. pcibios_read_config_byte(bus, devfn, PCI_INTERRUPT_LINE, &irq);
  1342. pcibios_read_config_word(bus, devfn, PCI_DEVICE_ID, &dev_id);
  1343. if (hostaddr == 0 || irq == 0) {
  1344. printk(KERN_ERR "The %s interface at %d/%d was not assigned an %s.n"
  1345.    KERN_ERR "  It will not be activated.n",
  1346.    pci_tbl[chip_idx].name, bus, devfn,
  1347.    hostaddr == 0 ? "address" : "IRQ");
  1348. return NULL;
  1349. }
  1350. dev = rtl8139_probe1(pci_find_slot(bus, devfn), NULL,
  1351.  hostaddr, irq, chip_idx, 0);
  1352. if (dev) {
  1353. dev_node_t *node = kmalloc(sizeof(dev_node_t), GFP_KERNEL);
  1354. strcpy(node->dev_name, dev->name);
  1355. node->major = node->minor = 0;
  1356. node->next = NULL;
  1357. MOD_INC_USE_COUNT;
  1358. return node;
  1359. }
  1360. return NULL;
  1361. }
  1362. static void rtl8139_detach(dev_node_t *node)
  1363. {
  1364. struct net_device **devp, **next;
  1365. printk(KERN_INFO "rtl8139_detach(%s)n", node->dev_name);
  1366. for (devp = &root_rtl8129_dev; *devp; devp = next) {
  1367. next = &((struct rtl8129_private *)(*devp)->priv)->next_module;
  1368. if (strcmp((*devp)->name, node->dev_name) == 0) break;
  1369. }
  1370. if (*devp) {
  1371. struct rtl8129_private *np =
  1372. (struct rtl8129_private *)(*devp)->priv;
  1373. unregister_netdev(*devp);
  1374. release_region((*devp)->base_addr, pci_tbl[np->chip_id].io_size);
  1375. #ifndef USE_IO_OPS
  1376. iounmap((char *)(*devp)->base_addr);
  1377. #endif
  1378. kfree(*devp);
  1379. if (np->priv_addr)
  1380. kfree(np->priv_addr);
  1381. *devp = *next;
  1382. kfree(node);
  1383. MOD_DEC_USE_COUNT;
  1384. }
  1385. }
  1386. struct driver_operations realtek_ops = {
  1387. "realtek_cb",
  1388. rtl8139_attach, /*rtl8139_suspend*/0, /*rtl8139_resume*/0, rtl8139_detach
  1389. };
  1390. #endif  /* Cardbus support */
  1391. int rtl8139_init_module(void)
  1392. {
  1393. if (debug) /* Emit version even if no cards detected. */
  1394. printk(KERN_INFO "%s" KERN_INFO "%s", versionA, versionB);
  1395. #ifdef CARDBUS
  1396. register_driver(&realtek_ops);
  1397. return 0;
  1398. #else
  1399. return pci_drv_register(&rtl8139_drv_id, NULL);
  1400. #endif
  1401. }
  1402. void rtl8139_cleanup_module(void)
  1403. {
  1404. struct net_device *next_dev;
  1405. #ifdef CARDBUS
  1406. unregister_driver(&realtek_ops);
  1407. #else
  1408. pci_drv_unregister(&rtl8139_drv_id);
  1409. #endif
  1410. while (root_rtl8129_dev) {
  1411. struct rtl8129_private *np = (void *)(root_rtl8129_dev->priv);
  1412. unregister_netdev(root_rtl8129_dev);
  1413. release_region(root_rtl8129_dev->base_addr,
  1414.    pci_tbl[np->chip_id].io_size);
  1415. #ifndef USE_IO_OPS
  1416. iounmap((char *)(root_rtl8129_dev->base_addr));
  1417. #endif
  1418. next_dev = np->next_module;
  1419. if (np->priv_addr)
  1420. kfree(np->priv_addr);
  1421. kfree(root_rtl8129_dev);
  1422. root_rtl8129_dev = next_dev;
  1423. }
  1424. }
  1425. module_init(rtl8139_init_module);
  1426. module_exit(rtl8139_cleanup_module);
  1427. /*
  1428.  * Local variables:
  1429.  *  compile-command: "gcc -DMODULE -Wall -Wstrict-prototypes -O6 -c rtl8139.c"
  1430.  *  cardbus-compile-command: "gcc -DCARDBUS -DMODULE -Wall -Wstrict-prototypes -O6 -c rtl8139.c -o realtek_cb.o -I/usr/src/pcmcia/include/"
  1431.  *  c-indent-level: 4
  1432.  *  c-basic-offset: 4
  1433.  *  tab-width: 4
  1434.  * End:
  1435.  */