dl2k.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:45k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*  D-Link DL2000-based Gigabit Ethernet Adapter Linux driver */
  2. /*
  3.     Copyright (c) 2001, 2002 by D-Link Corporation
  4.     Written by Edward Peng.<edward_peng@dlink.com.tw>
  5.     Created 03-May-2001, base on Linux' sundance.c.
  6.     This program is free software; you can redistribute it and/or modify
  7.     it under the terms of the GNU General Public License as published by
  8.     the Free Software Foundation; either version 2 of the License, or
  9.     (at your option) any later version.
  10. */
  11. /*
  12.     Rev Date Description
  13.     ==========================================================================
  14.     0.01 2001/05/03 Created DL2000-based linux driver
  15.     0.02 2001/05/21 Added VLAN and hardware checksum support.
  16.     1.00 2001/06/26 Added jumbo frame support.
  17.     1.01 2001/08/21 Added two parameters, rx_coalesce and rx_timeout.
  18.     1.02 2001/10/08 Supported fiber media.
  19.      Added flow control parameters.
  20.     1.03 2001/10/12 Changed the default media to 1000mbps_fd for 
  21.      the fiber devices.
  22.     1.04 2001/11/08 Fixed Tx stopped when tx very busy.
  23.     1.05 2001/11/22 Fixed Tx stopped when unidirectional tx busy.
  24.     1.06 2001/12/13 Fixed disconnect bug at 10Mbps mode.
  25.      Fixed tx_full flag incorrect.
  26. Added tx_coalesce paramter.
  27.     1.07 2002/01/03 Fixed miscount of RX frame error.
  28.     1.08 2002/01/17 Fixed the multicast bug.
  29.     1.09 2002/03/07 Move rx-poll-now to re-fill loop.
  30.      Added rio_timer() to watch rx buffers. 
  31.     1.10 2002/04/16 Fixed miscount of carrier error.
  32.     1.11 2002/05/23 Added ISR schedule scheme.
  33.      Fixed miscount of rx frame error for DGE-550SX.
  34.      Fixed VLAN bug.
  35.     1.12 2002/06/13 Lock tx_coalesce=1 on 10/100Mbps mode.
  36.  */
  37. #include "dl2k.h"
  38. static char version[] __devinitdata =
  39.     KERN_INFO "D-Link DL2000-based linux driver v1.12 2002/06/13n";
  40. #define MAX_UNITS 8
  41. static int mtu[MAX_UNITS];
  42. static int vlan[MAX_UNITS];
  43. static int jumbo[MAX_UNITS];
  44. static char *media[MAX_UNITS];
  45. static int tx_flow=-1;
  46. static int rx_flow=-1;
  47. static int copy_thresh;
  48. static int rx_coalesce=10; /* Rx frame count each interrupt */
  49. static int rx_timeout=200; /* Rx DMA wait time in 640ns increments */
  50. static int tx_coalesce=16; /* HW xmit count each TxDMAComplete */
  51. MODULE_AUTHOR ("Edward Peng");
  52. MODULE_DESCRIPTION ("D-Link DL2000-based Gigabit Ethernet Adapter");
  53. MODULE_LICENSE("GPL");
  54. MODULE_PARM (mtu, "1-" __MODULE_STRING (MAX_UNITS) "i");
  55. MODULE_PARM (media, "1-" __MODULE_STRING (MAX_UNITS) "s");
  56. MODULE_PARM (vlan, "1-" __MODULE_STRING (MAX_UNITS) "i");
  57. MODULE_PARM (jumbo, "1-" __MODULE_STRING (MAX_UNITS) "i");
  58. MODULE_PARM (tx_flow, "i");
  59. MODULE_PARM (rx_flow, "i");
  60. MODULE_PARM (copy_thresh, "i");
  61. MODULE_PARM (rx_coalesce, "i"); /* Rx frame count each interrupt */
  62. MODULE_PARM (rx_timeout, "i"); /* Rx DMA wait time in 64ns increments */
  63. MODULE_PARM (tx_coalesce, "i"); /* HW xmit count each TxDMAComplete */
  64. /* Enable the default interrupts */
  65. #define DEFAULT_INTR (RxDMAComplete | HostError | IntRequested | TxDMAComplete| 
  66.        UpdateStats | LinkEvent)
  67. #define EnableInt() 
  68. writew(DEFAULT_INTR, ioaddr + IntEnable)
  69. static int max_intrloop = 50;
  70. static int multicast_filter_limit = 0x40;
  71. static int rio_open (struct net_device *dev);
  72. static void rio_timer (unsigned long data);
  73. static void rio_tx_timeout (struct net_device *dev);
  74. static void alloc_list (struct net_device *dev);
  75. static int start_xmit (struct sk_buff *skb, struct net_device *dev);
  76. static void rio_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
  77. static void rio_free_tx (struct net_device *dev, int irq);
  78. static void tx_error (struct net_device *dev, int tx_status);
  79. static int receive_packet (struct net_device *dev);
  80. static void rio_error (struct net_device *dev, int int_status);
  81. static int change_mtu (struct net_device *dev, int new_mtu);
  82. static void set_multicast (struct net_device *dev);
  83. static struct net_device_stats *get_stats (struct net_device *dev);
  84. static int clear_stats (struct net_device *dev);
  85. static int rio_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
  86. static int rio_close (struct net_device *dev);
  87. static int find_miiphy (struct net_device *dev);
  88. static int parse_eeprom (struct net_device *dev);
  89. static int read_eeprom (long ioaddr, int eep_addr);
  90. static int mii_wait_link (struct net_device *dev, int wait);
  91. static int mii_set_media (struct net_device *dev);
  92. static int mii_get_media (struct net_device *dev);
  93. static int mii_set_media_pcs (struct net_device *dev);
  94. static int mii_get_media_pcs (struct net_device *dev);
  95. static int mii_read (struct net_device *dev, int phy_addr, int reg_num);
  96. static int mii_write (struct net_device *dev, int phy_addr, int reg_num,
  97.       u16 data);
  98. static int __devinit
  99. rio_probe1 (struct pci_dev *pdev, const struct pci_device_id *ent)
  100. {
  101. struct net_device *dev;
  102. struct netdev_private *np;
  103. static int card_idx;
  104. int chip_idx = ent->driver_data;
  105. int err, irq;
  106. long ioaddr;
  107. static int version_printed;
  108. void *ring_space;
  109. dma_addr_t ring_dma;
  110. if (!version_printed++)
  111. printk ("%s", version);
  112. err = pci_enable_device (pdev);
  113. if (err)
  114. return err;
  115. irq = pdev->irq;
  116. err = pci_request_regions (pdev, "dl2k");
  117. if (err)
  118. goto err_out_disable;
  119. pci_set_master (pdev);
  120. dev = alloc_etherdev (sizeof (*np));
  121. if (!dev) {
  122. err = -ENOMEM;
  123. goto err_out_res;
  124. }
  125. SET_MODULE_OWNER (dev);
  126. #ifdef MEM_MAPPING
  127. ioaddr = pci_resource_start (pdev, 1);
  128. ioaddr = (long) ioremap (ioaddr, RIO_IO_SIZE);
  129. if (!ioaddr) {
  130. err = -ENOMEM;
  131. goto err_out_dev;
  132. }
  133. #else
  134. ioaddr = pci_resource_start (pdev, 0);
  135. #endif
  136. dev->base_addr = ioaddr;
  137. dev->irq = irq;
  138. np = dev->priv;
  139. np->chip_id = chip_idx;
  140. np->pdev = pdev;
  141. spin_lock_init (&np->tx_lock);
  142. spin_lock_init (&np->rx_lock);
  143. /* Parse manual configuration */
  144. np->an_enable = 1;
  145. np->tx_coalesce = 1;
  146. if (card_idx < MAX_UNITS) {
  147. if (media[card_idx] != NULL) {
  148. np->an_enable = 0;
  149. if (strcmp (media[card_idx], "auto") == 0 ||
  150.     strcmp (media[card_idx], "autosense") == 0 || 
  151.     strcmp (media[card_idx], "0") == 0 ) {
  152. np->an_enable = 2; 
  153. } else if (strcmp (media[card_idx], "100mbps_fd") == 0 ||
  154.     strcmp (media[card_idx], "4") == 0) {
  155. np->speed = 100;
  156. np->full_duplex = 1;
  157. } else if (strcmp (media[card_idx], "100mbps_hd") == 0
  158.    || strcmp (media[card_idx], "3") == 0) {
  159. np->speed = 100;
  160. np->full_duplex = 0;
  161. } else if (strcmp (media[card_idx], "10mbps_fd") == 0 ||
  162.    strcmp (media[card_idx], "2") == 0) {
  163. np->speed = 10;
  164. np->full_duplex = 1;
  165. } else if (strcmp (media[card_idx], "10mbps_hd") == 0 ||
  166.    strcmp (media[card_idx], "1") == 0) {
  167. np->speed = 10;
  168. np->full_duplex = 0;
  169. } else if (strcmp (media[card_idx], "1000mbps_fd") == 0 ||
  170.  strcmp (media[card_idx], "6") == 0) {
  171. np->speed=1000;
  172. np->full_duplex=1;
  173. } else if (strcmp (media[card_idx], "1000mbps_hd") == 0 ||
  174.  strcmp (media[card_idx], "5") == 0) {
  175. np->speed = 1000;
  176. np->full_duplex = 0;
  177. } else {
  178. np->an_enable = 1;
  179. }
  180. }
  181. if (jumbo[card_idx] != 0) {
  182. np->jumbo = 1;
  183. dev->mtu = MAX_JUMBO;
  184. } else {
  185. np->jumbo = 0;
  186. if (mtu[card_idx] > 0 && mtu[card_idx] < PACKET_SIZE)
  187. dev->mtu = mtu[card_idx];
  188. }
  189. np->vlan = (vlan[card_idx] > 0 && vlan[card_idx] < 4096) ?
  190.     vlan[card_idx] : 0;
  191. if (rx_coalesce > 0 && rx_timeout > 0) {
  192. np->rx_coalesce = rx_coalesce;
  193. np->rx_timeout = rx_timeout;
  194. np->coalesce = 1;
  195. }
  196. np->tx_flow = (tx_flow == 0) ? 0 : 1;
  197. np->rx_flow = (rx_flow == 0) ? 0 : 1;
  198. if (tx_coalesce < 1)
  199. tx_coalesce = 1;
  200. else if (tx_coalesce > TX_RING_SIZE-1)
  201. tx_coalesce = TX_RING_SIZE - 1;
  202. }
  203. dev->open = &rio_open;
  204. dev->hard_start_xmit = &start_xmit;
  205. dev->stop = &rio_close;
  206. dev->get_stats = &get_stats;
  207. dev->set_multicast_list = &set_multicast;
  208. dev->do_ioctl = &rio_ioctl;
  209. dev->tx_timeout = &rio_tx_timeout;
  210. dev->watchdog_timeo = TX_TIMEOUT;
  211. dev->change_mtu = &change_mtu;
  212. #if 0
  213. dev->features = NETIF_F_IP_CSUM;
  214. #endif
  215. pci_set_drvdata (pdev, dev);
  216. ring_space = pci_alloc_consistent (pdev, TX_TOTAL_SIZE, &ring_dma);
  217. if (!ring_space)
  218. goto err_out_iounmap;
  219. np->tx_ring = (struct netdev_desc *) ring_space;
  220. np->tx_ring_dma = ring_dma;
  221. ring_space = pci_alloc_consistent (pdev, RX_TOTAL_SIZE, &ring_dma);
  222. if (!ring_space)
  223. goto err_out_unmap_tx;
  224. np->rx_ring = (struct netdev_desc *) ring_space;
  225. np->rx_ring_dma = ring_dma;
  226. /* Parse eeprom data */
  227. parse_eeprom (dev);
  228. /* Find PHY address */
  229. err = find_miiphy (dev);
  230. if (err)
  231. goto err_out_unmap_rx;
  232. /* Fiber device? */
  233. np->phy_media = (readw(ioaddr + ASICCtrl) & PhyMedia) ? 1 : 0;
  234. np->link_status = 0;
  235. /* Set media and reset PHY */
  236. if (np->phy_media) {
  237. /* default 1000mbps_fd for fiber deivices */
  238. if (np->an_enable == 1) {
  239. np->an_enable = 0;
  240. np->speed = 1000;
  241. np->full_duplex = 1;
  242. } else if (np->an_enable == 2) {
  243. np->an_enable = 1;
  244. }
  245. mii_set_media_pcs (dev);
  246. } else {
  247. /* Auto-Negotiation is mandatory for 1000BASE-T,
  248.    IEEE 802.3ab Annex 28D page 14 */
  249. if (np->speed == 1000)
  250. np->an_enable = 1;
  251. mii_set_media (dev);
  252. }
  253. pci_read_config_byte(pdev, PCI_REVISION_ID, &np->pci_rev_id);
  254. /* Reset all logic functions */
  255. writew (GlobalReset | DMAReset | FIFOReset | NetworkReset | HostReset,
  256. ioaddr + ASICCtrl + 2);
  257. err = register_netdev (dev);
  258. if (err)
  259. goto err_out_unmap_rx;
  260. card_idx++;
  261. printk (KERN_INFO "%s: %s, %02x:%02x:%02x:%02x:%02x:%02x, IRQ %dn",
  262. dev->name, np->name,
  263. dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
  264. dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5], irq);
  265. if (tx_coalesce > 1)
  266. printk(KERN_INFO "tx_coalesce:t%d packetsn", 
  267. tx_coalesce);
  268. if (np->coalesce)
  269. printk(KERN_INFO "rx_coalesce:t%d packetsn"
  270.        KERN_INFO "rx_timeout: t%d nsn", 
  271. np->rx_coalesce, np->rx_timeout*640);
  272. if (np->vlan)
  273. printk(KERN_INFO "vlan(id):t%dn", np->vlan);
  274. return 0;
  275.       err_out_unmap_rx:
  276. pci_free_consistent (pdev, RX_TOTAL_SIZE, np->rx_ring, np->rx_ring_dma);
  277.       err_out_unmap_tx:
  278. pci_free_consistent (pdev, TX_TOTAL_SIZE, np->tx_ring, np->tx_ring_dma);
  279.       err_out_iounmap:
  280. #ifdef MEM_MAPPING
  281. iounmap ((void *) ioaddr);
  282.       err_out_dev:
  283. #endif
  284. kfree (dev);
  285.       err_out_res:
  286. pci_release_regions (pdev);
  287.       err_out_disable:
  288. pci_disable_device (pdev);
  289. return err;
  290. }
  291. int
  292. find_miiphy (struct net_device *dev)
  293. {
  294. int i, phy_found = 0;
  295. struct netdev_private *np;
  296. long ioaddr;
  297. np = dev->priv;
  298. ioaddr = dev->base_addr;
  299. np->phy_addr = 1;
  300. for (i = 31; i >= 0; i--) {
  301. int mii_status = mii_read (dev, i, 1);
  302. if (mii_status != 0xffff && mii_status != 0x0000) {
  303. np->phy_addr = i;
  304. phy_found++;
  305. }
  306. }
  307. if (!phy_found) {
  308. printk (KERN_ERR "%s: No MII PHY found!n", dev->name);
  309. return -ENODEV;
  310. }
  311. return 0;
  312. }
  313. int
  314. parse_eeprom (struct net_device *dev)
  315. {
  316. int i, j;
  317. long ioaddr = dev->base_addr;
  318. u8 sromdata[256];
  319. u8 *psib;
  320. u32 crc;
  321. PSROM_t psrom = (PSROM_t) sromdata;
  322. struct netdev_private *np = dev->priv;
  323. int cid, next;
  324. /* Read eeprom */
  325. for (i = 0; i < 128; i++) {
  326. ((u16 *) sromdata)[i] = le16_to_cpu (read_eeprom (ioaddr, i));
  327. }
  328. /* Check CRC */
  329. crc = ~ether_crc_le (256 - 4, sromdata);
  330. if (psrom->crc != crc) {
  331. printk (KERN_ERR "%s: EEPROM data CRC error.n", dev->name);
  332. return -1;
  333. }
  334. /* Set MAC address */
  335. for (i = 0; i < 6; i++)
  336. dev->dev_addr[i] = psrom->mac_addr[i];
  337. /* Parse Software Infomation Block */
  338. i = 0x30;
  339. psib = (u8 *) sromdata;
  340. do {
  341. cid = psib[i++];
  342. next = psib[i++];
  343. if ((cid == 0 && next == 0) || (cid == 0xff && next == 0xff)) {
  344. printk (KERN_ERR "Cell data errorn");
  345. return -1;
  346. }
  347. switch (cid) {
  348. case 0: /* Format version */
  349. break;
  350. case 1: /* End of cell */
  351. return 0;
  352. case 2: /* Duplex Polarity */
  353. np->duplex_polarity = psib[i];
  354. writeb (readb (ioaddr + PhyCtrl) | psib[i],
  355. ioaddr + PhyCtrl);
  356. break;
  357. case 3: /* Wake Polarity */
  358. np->wake_polarity = psib[i];
  359. break;
  360. case 9: /* Adapter description */
  361. j = (next - i > 255) ? 255 : next - i;
  362. memcpy (np->name, &(psib[i]), j);
  363. break;
  364. case 4:
  365. case 5:
  366. case 6:
  367. case 7:
  368. case 8: /* Reversed */
  369. break;
  370. default: /* Unknown cell */
  371. return -1;
  372. }
  373. i = next;
  374. } while (1);
  375. return 0;
  376. }
  377. static int
  378. rio_open (struct net_device *dev)
  379. {
  380. struct netdev_private *np = dev->priv;
  381. long ioaddr = dev->base_addr;
  382. int i;
  383. i = request_irq (dev->irq, &rio_interrupt, SA_SHIRQ, dev->name, dev);
  384. if (i)
  385. return i;
  386. /* DebugCtrl bit 4, 5, 9 must set */
  387. writel (readl (ioaddr + DebugCtrl) | 0x0230, ioaddr + DebugCtrl);
  388. /* Jumbo frame */
  389. if (np->jumbo != 0)
  390. writew (MAX_JUMBO+14, ioaddr + MaxFrameSize);
  391. alloc_list (dev);
  392. /* Get station address */
  393. for (i = 0; i < 6; i++)
  394. writeb (dev->dev_addr[i], ioaddr + StationAddr0 + i);
  395. set_multicast (dev);
  396. if (np->coalesce) {
  397. writel (np->rx_coalesce | np->rx_timeout << 16,
  398. ioaddr + RxDMAIntCtrl);
  399. }
  400. /* Set RIO to poll every N*320nsec. */
  401. writeb (0x20, ioaddr + RxDMAPollPeriod);
  402. writeb (0xff, ioaddr + TxDMAPollPeriod);
  403. writeb (0x30, ioaddr + RxDMABurstThresh);
  404. writeb (0x30, ioaddr + RxDMAUrgentThresh);
  405. /* clear statistics */
  406. clear_stats (dev);
  407. /* VLAN supported */
  408. if (np->vlan) {
  409. /* priority field in RxDMAIntCtrl  */
  410. writel (readl(ioaddr + RxDMAIntCtrl) | 0x7 << 10, 
  411. ioaddr + RxDMAIntCtrl);
  412. /* VLANId */
  413. writew (np->vlan, ioaddr + VLANId);
  414. /* Length/Type should be 0x8100 */
  415. writel (0x8100 << 16 | np->vlan, ioaddr + VLANTag);
  416. /* Enable AutoVLANuntagging, but disable AutoVLANtagging.
  417.    VLAN information tagged by TFC' VID, CFI fields. */
  418. writel (readl (ioaddr + MACCtrl) | AutoVLANuntagging,
  419. ioaddr + MACCtrl);
  420. }
  421. /* Enable default interrupts */
  422. EnableInt ();
  423. init_timer (&np->timer);
  424. np->timer.expires = jiffies + 1*HZ;
  425. np->timer.data = (unsigned long) dev;
  426. np->timer.function = &rio_timer;
  427. add_timer (&np->timer);
  428. /* Start Tx/Rx */
  429. writel (readl (ioaddr + MACCtrl) | StatsEnable | RxEnable | TxEnable, 
  430. ioaddr + MACCtrl);
  431. netif_start_queue (dev);
  432. return 0;
  433. }
  434. static void 
  435. rio_timer (unsigned long data)
  436. {
  437. struct net_device *dev = (struct net_device *)data;
  438. struct netdev_private *np = dev->priv;
  439. unsigned int entry;
  440. int next_tick = 1*HZ;
  441. unsigned long flags;
  442. spin_lock_irqsave(&np->rx_lock, flags);
  443. /* Recover rx ring exhausted error */
  444. if (np->cur_rx - np->old_rx >= RX_RING_SIZE) {
  445. printk(KERN_INFO "Try to recover rx ring exhausted...n");
  446. /* Re-allocate skbuffs to fill the descriptor ring */
  447. for (; np->cur_rx - np->old_rx > 0; np->old_rx++) {
  448. struct sk_buff *skb;
  449. entry = np->old_rx % RX_RING_SIZE;
  450. /* Dropped packets don't need to re-allocate */
  451. if (np->rx_skbuff[entry] == NULL) {
  452. skb = dev_alloc_skb (np->rx_buf_sz);
  453. if (skb == NULL) {
  454. np->rx_ring[entry].fraginfo = 0;
  455. printk (KERN_INFO
  456. "%s: Still unable to re-allocate Rx skbuff.#%dn",
  457. dev->name, entry);
  458. break;
  459. }
  460. np->rx_skbuff[entry] = skb;
  461. skb->dev = dev;
  462. /* 16 byte align the IP header */
  463. skb_reserve (skb, 2);
  464. np->rx_ring[entry].fraginfo =
  465.     cpu_to_le64 (pci_map_single
  466.  (np->pdev, skb->tail, np->rx_buf_sz,
  467.   PCI_DMA_FROMDEVICE));
  468. }
  469. np->rx_ring[entry].fraginfo |=
  470.     cpu_to_le64 (np->rx_buf_sz) << 48;
  471. np->rx_ring[entry].status = 0;
  472. } /* end for */
  473. } /* end if */
  474. spin_unlock_irqrestore (&np->rx_lock, flags);
  475. np->timer.expires = jiffies + next_tick;
  476. add_timer(&np->timer);
  477. }
  478. static void
  479. rio_tx_timeout (struct net_device *dev)
  480. {
  481. long ioaddr = dev->base_addr;
  482. printk (KERN_INFO "%s: Tx timed out (%4.4x), is buffer full?n",
  483. dev->name, readl (ioaddr + TxStatus));
  484. rio_free_tx(dev, 0);
  485. dev->if_port = 0;
  486. dev->trans_start = jiffies;
  487. }
  488.  /* allocate and initialize Tx and Rx descriptors */
  489. static void
  490. alloc_list (struct net_device *dev)
  491. {
  492. struct netdev_private *np = dev->priv;
  493. int i;
  494. np->cur_rx = np->cur_tx = 0;
  495. np->old_rx = np->old_tx = 0;
  496. np->rx_buf_sz = (dev->mtu <= 1500 ? PACKET_SIZE : dev->mtu + 32);
  497. /* Initialize Tx descriptors, TFDListPtr leaves in start_xmit(). */
  498. for (i = 0; i < TX_RING_SIZE; i++) {
  499. np->tx_skbuff[i] = 0;
  500. np->tx_ring[i].status = cpu_to_le64 (TFDDone);
  501. np->tx_ring[i].next_desc = cpu_to_le64 (np->tx_ring_dma +
  502.       ((i+1)%TX_RING_SIZE) *
  503.       sizeof (struct netdev_desc));
  504. }
  505. /* Initialize Rx descriptors */
  506. for (i = 0; i < RX_RING_SIZE; i++) {
  507. np->rx_ring[i].next_desc = cpu_to_le64 (np->rx_ring_dma +
  508. ((i + 1) % RX_RING_SIZE) *
  509. sizeof (struct netdev_desc));
  510. np->rx_ring[i].status = 0;
  511. np->rx_ring[i].fraginfo = 0;
  512. np->rx_skbuff[i] = 0;
  513. }
  514. /* Allocate the rx buffers */
  515. for (i = 0; i < RX_RING_SIZE; i++) {
  516. /* Allocated fixed size of skbuff */
  517. struct sk_buff *skb = dev_alloc_skb (np->rx_buf_sz);
  518. np->rx_skbuff[i] = skb;
  519. if (skb == NULL) {
  520. printk (KERN_ERR
  521. "%s: alloc_list: allocate Rx buffer error! ",
  522. dev->name);
  523. break;
  524. }
  525. skb->dev = dev; /* Mark as being used by this device. */
  526. skb_reserve (skb, 2); /* 16 byte align the IP header. */
  527. /* Rubicon now supports 40 bits of addressing space. */
  528. np->rx_ring[i].fraginfo =
  529.     cpu_to_le64 ( pci_map_single (
  530.     np->pdev, skb->tail, np->rx_buf_sz,
  531.   PCI_DMA_FROMDEVICE));
  532. np->rx_ring[i].fraginfo |= cpu_to_le64 (np->rx_buf_sz) << 48;
  533. }
  534. /* Set RFDListPtr */
  535. writel (cpu_to_le32 (np->rx_ring_dma), dev->base_addr + RFDListPtr0);
  536. writel (0, dev->base_addr + RFDListPtr1);
  537. return;
  538. }
  539. static int
  540. start_xmit (struct sk_buff *skb, struct net_device *dev)
  541. {
  542. struct netdev_private *np = dev->priv;
  543. struct netdev_desc *txdesc;
  544. unsigned entry;
  545. u32 ioaddr;
  546. u64 tfc_vlan_tag = 0;
  547. if (np->link_status == 0) { /* Link Down */
  548. dev_kfree_skb(skb);
  549. return 0;
  550. }
  551. ioaddr = dev->base_addr;
  552. entry = np->cur_tx % TX_RING_SIZE;
  553. np->tx_skbuff[entry] = skb;
  554. txdesc = &np->tx_ring[entry];
  555. #if 0
  556. if (skb->ip_summed == CHECKSUM_HW) {
  557. txdesc->status |=
  558.     cpu_to_le64 (TCPChecksumEnable | UDPChecksumEnable |
  559.  IPChecksumEnable);
  560. }
  561. #endif
  562. if (np->vlan) {
  563. txdesc->status |=
  564.     cpu_to_le64 (VLANTagInsert) |
  565.     (cpu_to_le64 (np->vlan) << 32) |
  566.     (cpu_to_le64 (skb->priority) << 45);
  567. }
  568. txdesc->fraginfo = cpu_to_le64 (pci_map_single (np->pdev, skb->data,
  569. skb->len,
  570. PCI_DMA_TODEVICE));
  571. txdesc->fraginfo |= cpu_to_le64 (skb->len) << 48;
  572. /* DL2K bug: DMA fails to get next descriptor ptr in 10Mbps mode
  573.  * Work around: Always use 1 descriptor in 10Mbps mode */
  574. if (entry % np->tx_coalesce == 0 || np->speed == 10)
  575. txdesc->status = cpu_to_le64 (entry | tfc_vlan_tag |
  576.       WordAlignDisable | 
  577.       TxDMAIndicate |
  578.       (1 << FragCountShift));
  579. else
  580. txdesc->status = cpu_to_le64 (entry | tfc_vlan_tag |
  581.       WordAlignDisable | 
  582.       (1 << FragCountShift));
  583. /* TxDMAPollNow */
  584. writel (readl (ioaddr + DMACtrl) | 0x00001000, ioaddr + DMACtrl);
  585. /* Schedule ISR */
  586. writel(10000, ioaddr + CountDown);
  587. np->cur_tx = (np->cur_tx + 1) % TX_RING_SIZE;
  588. if ((np->cur_tx - np->old_tx + TX_RING_SIZE) % TX_RING_SIZE
  589. < TX_QUEUE_LEN - 1 && np->speed != 10) {
  590. /* do nothing */
  591. } else if (!netif_queue_stopped(dev)) {
  592. netif_stop_queue (dev);
  593. }
  594. /* The first TFDListPtr */
  595. if (readl (dev->base_addr + TFDListPtr0) == 0) {
  596. writel (np->tx_ring_dma + entry * sizeof (struct netdev_desc),
  597. dev->base_addr + TFDListPtr0);
  598. writel (0, dev->base_addr + TFDListPtr1);
  599. }
  600. /* NETDEV WATCHDOG timer */
  601. dev->trans_start = jiffies;
  602. return 0;
  603. }
  604. static void
  605. rio_interrupt (int irq, void *dev_instance, struct pt_regs *rgs)
  606. {
  607. struct net_device *dev = dev_instance;
  608. struct netdev_private *np;
  609. unsigned int_status;
  610. long ioaddr;
  611. int cnt = max_intrloop;
  612. ioaddr = dev->base_addr;
  613. np = dev->priv;
  614. while (1) {
  615. int_status = readw (ioaddr + IntStatus); 
  616. writew (int_status, ioaddr + IntStatus);
  617. int_status &= DEFAULT_INTR;
  618. if (int_status == 0 || --cnt < 0)
  619. break;
  620. /* Processing received packets */
  621. if (int_status & RxDMAComplete)
  622. receive_packet (dev);
  623. /* TxDMAComplete interrupt */
  624. if ((int_status & (TxDMAComplete|IntRequested))) {
  625. int tx_status;
  626. tx_status = readl (ioaddr + TxStatus);
  627. if (tx_status & 0x01)
  628. tx_error (dev, tx_status);
  629. /* Free used tx skbuffs */
  630. rio_free_tx (dev, 1);
  631. }
  632. /* Handle uncommon events */
  633. if (int_status &
  634.     (HostError | LinkEvent | UpdateStats))
  635. rio_error (dev, int_status);
  636. }
  637. if (np->cur_tx != np->old_tx)
  638. writel (100, ioaddr + CountDown);
  639. }
  640. static void 
  641. rio_free_tx (struct net_device *dev, int irq) 
  642. {
  643. struct netdev_private *np = (struct netdev_private *) dev->priv;
  644. int entry = np->old_tx % TX_RING_SIZE;
  645. int tx_use = 0;
  646. long flag = 0;
  647. if (irq)
  648. spin_lock_irqsave(&np->tx_lock, flag);
  649. else
  650. spin_lock(&np->tx_lock);
  651. /* Free used tx skbuffs */
  652. while (entry != np->cur_tx) {
  653. struct sk_buff *skb;
  654. if (!(np->tx_ring[entry].status & TFDDone))
  655. break;
  656. skb = np->tx_skbuff[entry];
  657. pci_unmap_single (np->pdev,
  658.   np->tx_ring[entry].fraginfo,
  659.   skb->len, PCI_DMA_TODEVICE);
  660. if (irq)
  661. dev_kfree_skb_irq (skb);
  662. else
  663. dev_kfree_skb (skb);
  664. np->tx_skbuff[entry] = 0;
  665. entry = (entry + 1) % TX_RING_SIZE;
  666. tx_use++;
  667. }
  668. if (irq)
  669. spin_unlock_irqrestore(&np->tx_lock, flag);
  670. else
  671. spin_unlock(&np->tx_lock);
  672. np->old_tx = entry;
  673. /* If the ring is no longer full, clear tx_full and 
  674.    call netif_wake_queue() */
  675. if (netif_queue_stopped(dev) &&
  676.     ((np->cur_tx - np->old_tx + TX_RING_SIZE) % TX_RING_SIZE 
  677.     < TX_QUEUE_LEN - 1 || np->speed == 10)) {
  678. netif_wake_queue (dev);
  679. }
  680. }
  681. static void
  682. tx_error (struct net_device *dev, int tx_status)
  683. {
  684. struct netdev_private *np;
  685. long ioaddr = dev->base_addr;
  686. int frame_id;
  687. int i;
  688. np = dev->priv;
  689. frame_id = (tx_status & 0xffff0000);
  690. printk (KERN_ERR "%s: Transmit error, TxStatus %4.4x, FrameId %d.n",
  691. dev->name, tx_status, frame_id);
  692. np->stats.tx_errors++;
  693. /* Ttransmit Underrun */
  694. if (tx_status & 0x10) {
  695. np->stats.tx_fifo_errors++;
  696. writew (readw (ioaddr + TxStartThresh) + 0x10,
  697. ioaddr + TxStartThresh);
  698. /* Transmit Underrun need to set TxReset, DMARest, FIFOReset */
  699. writew (TxReset | DMAReset | FIFOReset | NetworkReset,
  700. ioaddr + ASICCtrl + 2);
  701. /* Wait for ResetBusy bit clear */
  702. for (i = 50; i > 0; i--) {
  703. if ((readw (ioaddr + ASICCtrl + 2) & ResetBusy) == 0)
  704. break;
  705. mdelay (1);
  706. }
  707. rio_free_tx (dev, 1);
  708. /* Reset TFDListPtr */
  709. writel (np->tx_ring_dma +
  710. np->old_tx * sizeof (struct netdev_desc),
  711. dev->base_addr + TFDListPtr0);
  712. writel (0, dev->base_addr + TFDListPtr1);
  713. /* Let TxStartThresh stay default value */
  714. }
  715. /* Late Collision */
  716. if (tx_status & 0x04) {
  717. np->stats.tx_fifo_errors++;
  718. /* TxReset and clear FIFO */
  719. writew (TxReset | FIFOReset, ioaddr + ASICCtrl + 2);
  720. /* Wait reset done */
  721. for (i = 50; i > 0; i--) {
  722. if ((readw (ioaddr + ASICCtrl + 2) & ResetBusy) == 0)
  723. break;
  724. mdelay (1);
  725. }
  726. /* Let TxStartThresh stay default value */
  727. }
  728. /* Maximum Collisions */
  729. if (tx_status & 0x08) 
  730. np->stats.collisions++;
  731. /* Restart the Tx */
  732. writel (readw (dev->base_addr + MACCtrl) | TxEnable, ioaddr + MACCtrl);
  733. }
  734. static int
  735. receive_packet (struct net_device *dev)
  736. {
  737. struct netdev_private *np = (struct netdev_private *) dev->priv;
  738. int entry = np->cur_rx % RX_RING_SIZE;
  739. int cnt = 30;
  740. /* If RFDDone, FrameStart and FrameEnd set, there is a new packet in. */
  741. while (1) {
  742. struct netdev_desc *desc = &np->rx_ring[entry];
  743. int pkt_len;
  744. u64 frame_status;
  745. if (!(desc->status & RFDDone) ||
  746.     !(desc->status & FrameStart) || !(desc->status & FrameEnd))
  747. break;
  748. /* Chip omits the CRC. */
  749. pkt_len = le64_to_cpu (desc->status & 0xffff);
  750. frame_status = le64_to_cpu (desc->status);
  751. if (--cnt < 0)
  752. break;
  753. pci_dma_sync_single (np->pdev, desc->fraginfo, np->rx_buf_sz,
  754.      PCI_DMA_FROMDEVICE);
  755. /* Update rx error statistics, drop packet. */
  756. if (frame_status & RFS_Errors) {
  757. np->stats.rx_errors++;
  758. if (frame_status & (RxRuntFrame | RxLengthError))
  759. np->stats.rx_length_errors++;
  760. if (frame_status & RxFCSError)
  761. np->stats.rx_crc_errors++;
  762. if (frame_status & RxAlignmentError && np->speed != 1000)
  763. np->stats.rx_frame_errors++;
  764. if (frame_status & RxFIFOOverrun)
  765.   np->stats.rx_fifo_errors++;
  766. } else {
  767. struct sk_buff *skb;
  768. /* Small skbuffs for short packets */
  769. if (pkt_len > copy_thresh) {
  770. pci_unmap_single (np->pdev, desc->fraginfo,
  771.   np->rx_buf_sz,
  772.   PCI_DMA_FROMDEVICE);
  773. skb_put (skb = np->rx_skbuff[entry], pkt_len);
  774. np->rx_skbuff[entry] = NULL;
  775. } else if ((skb = dev_alloc_skb (pkt_len + 2)) != NULL) {
  776. skb->dev = dev;
  777. /* 16 byte align the IP header */
  778. skb_reserve (skb, 2);
  779. eth_copy_and_sum (skb,
  780.   np->rx_skbuff[entry]->tail,
  781.   pkt_len, 0);
  782. skb_put (skb, pkt_len);
  783. }
  784. skb->protocol = eth_type_trans (skb, dev);
  785. #if 0
  786. /* Checksum done by hw, but csum value unavailable. */
  787. if (np->pci_rev_id >= 0x0c && 
  788. !(frame_status & (TCPError | UDPError | IPError))) {
  789. skb->ip_summed = CHECKSUM_UNNECESSARY;
  790. #endif
  791. netif_rx (skb);
  792. dev->last_rx = jiffies;
  793. }
  794. entry = (entry + 1) % RX_RING_SIZE;
  795. }
  796. spin_lock(&np->rx_lock);
  797. np->cur_rx = entry;
  798. /* Re-allocate skbuffs to fill the descriptor ring */
  799. entry = np->old_rx;
  800. while (entry != np->cur_rx) {
  801. struct sk_buff *skb;
  802. /* Dropped packets don't need to re-allocate */
  803. if (np->rx_skbuff[entry] == NULL) {
  804. skb = dev_alloc_skb (np->rx_buf_sz);
  805. if (skb == NULL) {
  806. np->rx_ring[entry].fraginfo = 0;
  807. printk (KERN_INFO
  808. "%s: receive_packet: "
  809. "Unable to re-allocate Rx skbuff.#%dn",
  810. dev->name, entry);
  811. break;
  812. }
  813. np->rx_skbuff[entry] = skb;
  814. skb->dev = dev;
  815. /* 16 byte align the IP header */
  816. skb_reserve (skb, 2);
  817. np->rx_ring[entry].fraginfo =
  818.     cpu_to_le64 (pci_map_single
  819.  (np->pdev, skb->tail, np->rx_buf_sz,
  820.   PCI_DMA_FROMDEVICE));
  821. }
  822. np->rx_ring[entry].fraginfo |=
  823.     cpu_to_le64 (np->rx_buf_sz) << 48;
  824. np->rx_ring[entry].status = 0;
  825. entry = (entry + 1) % RX_RING_SIZE;
  826. }
  827. np->old_rx = entry;
  828. spin_unlock(&np->rx_lock);
  829. return 0;
  830. }
  831. static void
  832. rio_error (struct net_device *dev, int int_status)
  833. {
  834. long ioaddr = dev->base_addr;
  835. struct netdev_private *np = dev->priv;
  836. u16 macctrl;
  837. /* Link change event */
  838. if (int_status & LinkEvent) {
  839. if (mii_wait_link (dev, 10) == 0) {
  840. printk (KERN_INFO "%s: Link upn", dev->name);
  841. if (np->phy_media)
  842. mii_get_media_pcs (dev);
  843. else
  844. mii_get_media (dev);
  845. if (np->speed == 1000)
  846. np->tx_coalesce = tx_coalesce;
  847. else 
  848. np->tx_coalesce = 1;
  849. macctrl = 0;
  850. macctrl |= (np->vlan) ? AutoVLANuntagging : 0;
  851. macctrl |= (np->full_duplex) ? DuplexSelect : 0;
  852. macctrl |= (np->tx_flow) ? 
  853. TxFlowControlEnable : 0;
  854. macctrl |= (np->rx_flow) ? 
  855. RxFlowControlEnable : 0;
  856. writew(macctrl, ioaddr + MACCtrl);
  857. np->link_status = 1;
  858. netif_carrier_on(dev);
  859. } else {
  860. printk (KERN_INFO "%s: Link offn", dev->name);
  861. np->link_status = 0;
  862. netif_carrier_off(dev);
  863. }
  864. }
  865. /* UpdateStats statistics registers */
  866. if (int_status & UpdateStats) {
  867. get_stats (dev);
  868. }
  869. /* PCI Error, a catastronphic error related to the bus interface 
  870.    occurs, set GlobalReset and HostReset to reset. */
  871. if (int_status & HostError) {
  872. printk (KERN_ERR "%s: HostError! IntStatus %4.4x.n",
  873. dev->name, int_status);
  874. writew (GlobalReset | HostReset, ioaddr + ASICCtrl + 2);
  875. mdelay (500);
  876. }
  877. }
  878. static struct net_device_stats *
  879. get_stats (struct net_device *dev)
  880. {
  881. long ioaddr = dev->base_addr;
  882. struct netdev_private *np = dev->priv;
  883. int i;
  884. unsigned int stat_reg;
  885. /* All statistics registers need to be acknowledged,
  886.    else statistic overflow could cause problems */
  887. np->stats.rx_packets += readl (ioaddr + FramesRcvOk);
  888. np->stats.tx_packets += readl (ioaddr + FramesXmtOk);
  889. np->stats.rx_bytes += readl (ioaddr + OctetRcvOk);
  890. np->stats.tx_bytes += readl (ioaddr + OctetXmtOk);
  891. np->stats.multicast = readl (ioaddr + McstFramesRcvdOk);
  892. np->stats.collisions += readl (ioaddr + SingleColFrames) 
  893.      +  readl (ioaddr + MultiColFrames); 
  894. /* detailed tx errors */
  895. stat_reg = readw (ioaddr + FramesAbortXSColls);
  896. np->stats.tx_aborted_errors += stat_reg;
  897. np->stats.tx_errors += stat_reg;
  898. stat_reg = readw (ioaddr + CarrierSenseErrors);
  899. np->stats.tx_carrier_errors += stat_reg;
  900. np->stats.tx_errors += stat_reg;
  901. /* Clear all other statistic register. */
  902. readl (ioaddr + McstOctetXmtOk);
  903. readw (ioaddr + BcstFramesXmtdOk);
  904. readl (ioaddr + McstFramesXmtdOk);
  905. readw (ioaddr + BcstFramesRcvdOk);
  906. readw (ioaddr + MacControlFramesRcvd);
  907. readw (ioaddr + FrameTooLongErrors);
  908. readw (ioaddr + InRangeLengthErrors);
  909. readw (ioaddr + FramesCheckSeqErrors);
  910. readw (ioaddr + FramesLostRxErrors);
  911. readl (ioaddr + McstOctetXmtOk);
  912. readl (ioaddr + BcstOctetXmtOk);
  913. readl (ioaddr + McstFramesXmtdOk);
  914. readl (ioaddr + FramesWDeferredXmt);
  915. readl (ioaddr + LateCollisions);
  916. readw (ioaddr + BcstFramesXmtdOk);
  917. readw (ioaddr + MacControlFramesXmtd);
  918. readw (ioaddr + FramesWEXDeferal);
  919. for (i = 0x100; i <= 0x150; i += 4)
  920. readl (ioaddr + i);
  921. readw (ioaddr + TxJumboFrames);
  922. readw (ioaddr + RxJumboFrames);
  923. readw (ioaddr + TCPCheckSumErrors);
  924. readw (ioaddr + UDPCheckSumErrors);
  925. readw (ioaddr + IPCheckSumErrors);
  926. return &np->stats;
  927. }
  928. static int
  929. clear_stats (struct net_device *dev)
  930. {
  931. long ioaddr = dev->base_addr;
  932. int i;
  933. /* All statistics registers need to be acknowledged,
  934.    else statistic overflow could cause problems */
  935. readl (ioaddr + FramesRcvOk);
  936. readl (ioaddr + FramesXmtOk);
  937. readl (ioaddr + OctetRcvOk);
  938. readl (ioaddr + OctetXmtOk);
  939. readl (ioaddr + McstFramesRcvdOk);
  940. readl (ioaddr + SingleColFrames);
  941. readl (ioaddr + MultiColFrames);
  942. readl (ioaddr + LateCollisions);
  943. /* detailed rx errors */
  944. readw (ioaddr + FrameTooLongErrors);
  945. readw (ioaddr + InRangeLengthErrors);
  946. readw (ioaddr + FramesCheckSeqErrors);
  947. readw (ioaddr + FramesLostRxErrors);
  948. /* detailed tx errors */
  949. readw (ioaddr + FramesAbortXSColls);
  950. readw (ioaddr + CarrierSenseErrors);
  951. /* Clear all other statistic register. */
  952. readl (ioaddr + McstOctetXmtOk);
  953. readw (ioaddr + BcstFramesXmtdOk);
  954. readl (ioaddr + McstFramesXmtdOk);
  955. readw (ioaddr + BcstFramesRcvdOk);
  956. readw (ioaddr + MacControlFramesRcvd);
  957. readl (ioaddr + McstOctetXmtOk);
  958. readl (ioaddr + BcstOctetXmtOk);
  959. readl (ioaddr + McstFramesXmtdOk);
  960. readl (ioaddr + FramesWDeferredXmt);
  961. readw (ioaddr + BcstFramesXmtdOk);
  962. readw (ioaddr + MacControlFramesXmtd);
  963. readw (ioaddr + FramesWEXDeferal);
  964. for (i = 0x100; i <= 0x150; i += 4)
  965. readl (ioaddr + i);
  966. readw (ioaddr + TxJumboFrames);
  967. readw (ioaddr + RxJumboFrames);
  968. readw (ioaddr + TCPCheckSumErrors);
  969. readw (ioaddr + UDPCheckSumErrors);
  970. readw (ioaddr + IPCheckSumErrors);
  971. return 0;
  972. }
  973. int
  974. change_mtu (struct net_device *dev, int new_mtu)
  975. {
  976. struct netdev_private *np = dev->priv;
  977. int max = (np->jumbo) ? MAX_JUMBO : 1536;
  978. if ((new_mtu < 68) || (new_mtu > max)) {
  979. return -EINVAL;
  980. }
  981. dev->mtu = new_mtu;
  982. return 0;
  983. }
  984. static void
  985. set_multicast (struct net_device *dev)
  986. {
  987. long ioaddr = dev->base_addr;
  988. u32 hash_table[2];
  989. u16 rx_mode = 0;
  990. int i;
  991. int bit;
  992. struct dev_mc_list *mclist;
  993. struct netdev_private *np = dev->priv;
  994. hash_table[0] = hash_table[1] = 0;
  995. /* RxFlowcontrol DA: 01-80-C2-00-00-01. Hash index=0x39 */
  996. hash_table[1] |= cpu_to_le32(0x02000000);
  997. if (dev->flags & IFF_PROMISC) {
  998. /* Receive all frames promiscuously. */
  999. rx_mode = ReceiveAllFrames;
  1000. } else if ((dev->flags & IFF_ALLMULTI) || 
  1001. (dev->mc_count > multicast_filter_limit)) {
  1002. /* Receive broadcast and multicast frames */
  1003. rx_mode = ReceiveBroadcast | ReceiveMulticast | ReceiveUnicast;
  1004. } else if (dev->mc_count > 0) {
  1005. /* Receive broadcast frames and multicast frames filtering 
  1006.    by Hashtable */
  1007. rx_mode =
  1008.     ReceiveBroadcast | ReceiveMulticastHash | ReceiveUnicast;
  1009. for (i=0, mclist = dev->mc_list; mclist && i < dev->mc_count; 
  1010. i++, mclist=mclist->next) {
  1011. int index = 0;
  1012. int crc = ether_crc_le (ETH_ALEN, mclist->dmi_addr);
  1013. /* The inverted high significant 6 bits of CRC are
  1014.    used as an index to hashtable */
  1015. for (bit = 0; bit < 6; bit++)
  1016. if (crc & (1 << (31 - bit)))
  1017. index |= (1 << bit);
  1018. hash_table[index / 32] |= (1 << (index % 32));
  1019. }
  1020. } else {
  1021. rx_mode = ReceiveBroadcast | ReceiveUnicast;
  1022. }
  1023. if (np->vlan) {
  1024. /* ReceiveVLANMatch field in ReceiveMode */
  1025. rx_mode |= ReceiveVLANMatch;
  1026. }
  1027. writel (hash_table[0], ioaddr + HashTable0);
  1028. writel (hash_table[1], ioaddr + HashTable1);
  1029. writew (rx_mode, ioaddr + ReceiveMode);
  1030. }
  1031. static int
  1032. rio_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
  1033. {
  1034. int phy_addr;
  1035. struct netdev_private *np = dev->priv;
  1036. struct mii_data *miidata = (struct mii_data *) &rq->ifr_data;
  1037. struct netdev_desc *desc;
  1038. int i;
  1039. phy_addr = np->phy_addr;
  1040. switch (cmd) {
  1041. case SIOCDEVPRIVATE:
  1042. break;
  1043. case SIOCDEVPRIVATE + 1:
  1044. miidata->out_value = mii_read (dev, phy_addr, miidata->reg_num);
  1045. break;
  1046. case SIOCDEVPRIVATE + 2:
  1047. mii_write (dev, phy_addr, miidata->reg_num, miidata->in_value);
  1048. break;
  1049. case SIOCDEVPRIVATE + 3:
  1050. break;
  1051. case SIOCDEVPRIVATE + 4:
  1052. break;
  1053. case SIOCDEVPRIVATE + 5:
  1054. netif_stop_queue (dev);
  1055. break;
  1056. case SIOCDEVPRIVATE + 6:
  1057. netif_wake_queue (dev);
  1058. break;
  1059. case SIOCDEVPRIVATE + 7:
  1060. printk
  1061.     ("tx_full=%x cur_tx=%lx old_tx=%lx cur_rx=%lx old_rx=%lxn",
  1062.      netif_queue_stopped(dev), np->cur_tx, np->old_tx, np->cur_rx,
  1063.      np->old_rx);
  1064. break;
  1065. case SIOCDEVPRIVATE + 8:
  1066. printk("TX ring:n");
  1067. for (i = 0; i < TX_RING_SIZE; i++) {
  1068. desc = &np->tx_ring[i];
  1069. printk
  1070.     ("%02x:cur:%08x next:%08x status:%08x frag1:%08x frag0:%08x",
  1071.      i,
  1072.      (u32) (np->tx_ring_dma + i * sizeof (*desc)),
  1073.      (u32) desc->next_desc,
  1074.      (u32) desc->status, (u32) (desc->fraginfo >> 32),
  1075.      (u32) desc->fraginfo);
  1076. printk ("n");
  1077. }
  1078. printk ("n");
  1079. break;
  1080. default:
  1081. return -EOPNOTSUPP;
  1082. }
  1083. return 0;
  1084. }
  1085. #define EEP_READ 0x0200
  1086. #define EEP_BUSY 0x8000
  1087. /* Read the EEPROM word */
  1088. int
  1089. read_eeprom (long ioaddr, int eep_addr)
  1090. {
  1091. int i = 1000;
  1092. writew (EEP_READ | (eep_addr & 0xff), ioaddr + EepromCtrl);
  1093. while (i-- > 0) {
  1094. if (!(readw (ioaddr + EepromCtrl) & EEP_BUSY)) {
  1095. return readw (ioaddr + EepromData);
  1096. }
  1097. }
  1098. return 0;
  1099. }
  1100. enum phy_ctrl_bits {
  1101. MII_READ = 0x00, MII_CLK = 0x01, MII_DATA1 = 0x02, MII_WRITE = 0x04,
  1102. MII_DUPLEX = 0x08,
  1103. };
  1104. #define mii_delay() readb(ioaddr)
  1105. static void
  1106. mii_sendbit (struct net_device *dev, u32 data)
  1107. {
  1108. long ioaddr = dev->base_addr + PhyCtrl;
  1109. data = (data) ? MII_DATA1 : 0;
  1110. data |= MII_WRITE;
  1111. data |= (readb (ioaddr) & 0xf8) | MII_WRITE;
  1112. writeb (data, ioaddr);
  1113. mii_delay ();
  1114. writeb (data | MII_CLK, ioaddr);
  1115. mii_delay ();
  1116. }
  1117. static int
  1118. mii_getbit (struct net_device *dev)
  1119. {
  1120. long ioaddr = dev->base_addr + PhyCtrl;
  1121. u8 data;
  1122. data = (readb (ioaddr) & 0xf8) | MII_READ;
  1123. writeb (data, ioaddr);
  1124. mii_delay ();
  1125. writeb (data | MII_CLK, ioaddr);
  1126. mii_delay ();
  1127. return ((readb (ioaddr) >> 1) & 1);
  1128. }
  1129. static void
  1130. mii_send_bits (struct net_device *dev, u32 data, int len)
  1131. {
  1132. int i;
  1133. for (i = len - 1; i >= 0; i--) {
  1134. mii_sendbit (dev, data & (1 << i));
  1135. }
  1136. }
  1137. static int
  1138. mii_read (struct net_device *dev, int phy_addr, int reg_num)
  1139. {
  1140. u32 cmd;
  1141. int i;
  1142. u32 retval = 0;
  1143. /* Preamble */
  1144. mii_send_bits (dev, 0xffffffff, 32);
  1145. /* ST(2), OP(2), ADDR(5), REG#(5), TA(2), Data(16) total 32 bits */
  1146. /* ST,OP = 0110'b for read operation */
  1147. cmd = (0x06 << 10 | phy_addr << 5 | reg_num);
  1148. mii_send_bits (dev, cmd, 14);
  1149. /* Turnaround */
  1150. if (mii_getbit (dev))
  1151. goto err_out;
  1152. /* Read data */
  1153. for (i = 0; i < 16; i++) {
  1154. retval |= mii_getbit (dev);
  1155. retval <<= 1;
  1156. }
  1157. /* End cycle */
  1158. mii_getbit (dev);
  1159. return (retval >> 1) & 0xffff;
  1160.       err_out:
  1161. return 0;
  1162. }
  1163. static int
  1164. mii_write (struct net_device *dev, int phy_addr, int reg_num, u16 data)
  1165. {
  1166. u32 cmd;
  1167. /* Preamble */
  1168. mii_send_bits (dev, 0xffffffff, 32);
  1169. /* ST(2), OP(2), ADDR(5), REG#(5), TA(2), Data(16) total 32 bits */
  1170. /* ST,OP,AAAAA,RRRRR,TA = 0101xxxxxxxxxx10'b = 0x5002 for write */
  1171. cmd = (0x5002 << 16) | (phy_addr << 23) | (reg_num << 18) | data;
  1172. mii_send_bits (dev, cmd, 32);
  1173. /* End cycle */
  1174. mii_getbit (dev);
  1175. return 0;
  1176. }
  1177. static int
  1178. mii_wait_link (struct net_device *dev, int wait)
  1179. {
  1180. BMSR_t bmsr;
  1181. int phy_addr;
  1182. struct netdev_private *np;
  1183. np = dev->priv;
  1184. phy_addr = np->phy_addr;
  1185. do {
  1186. bmsr.image = mii_read (dev, phy_addr, MII_BMSR);
  1187. if (bmsr.bits.link_status)
  1188. return 0;
  1189. mdelay (1);
  1190. } while (--wait > 0);
  1191. return -1;
  1192. }
  1193. static int
  1194. mii_get_media (struct net_device *dev)
  1195. {
  1196. ANAR_t negotiate;
  1197. BMSR_t bmsr;
  1198. BMCR_t bmcr;
  1199. MSCR_t mscr;
  1200. MSSR_t mssr;
  1201. int phy_addr;
  1202. struct netdev_private *np;
  1203. np = dev->priv;
  1204. phy_addr = np->phy_addr;
  1205. bmsr.image = mii_read (dev, phy_addr, MII_BMSR);
  1206. if (np->an_enable) {
  1207. if (!bmsr.bits.an_complete) {
  1208. /* Auto-Negotiation not completed */
  1209. return -1;
  1210. }
  1211. negotiate.image = mii_read (dev, phy_addr, MII_ANAR) & 
  1212. mii_read (dev, phy_addr, MII_ANLPAR);
  1213. mscr.image = mii_read (dev, phy_addr, MII_MSCR);
  1214. mssr.image = mii_read (dev, phy_addr, MII_MSSR);
  1215. if (mscr.bits.media_1000BT_FD & mssr.bits.lp_1000BT_FD) {
  1216. np->speed = 1000;
  1217. np->full_duplex = 1;
  1218. printk (KERN_INFO "Auto 1000 Mbps, Full duplexn");
  1219. } else if (mscr.bits.media_1000BT_HD & mssr.bits.lp_1000BT_HD) {
  1220. np->speed = 1000;
  1221. np->full_duplex = 0;
  1222. printk (KERN_INFO "Auto 1000 Mbps, Half duplexn");
  1223. } else if (negotiate.bits.media_100BX_FD) {
  1224. np->speed = 100;
  1225. np->full_duplex = 1;
  1226. printk (KERN_INFO "Auto 100 Mbps, Full duplexn");
  1227. } else if (negotiate.bits.media_100BX_HD) {
  1228. np->speed = 100;
  1229. np->full_duplex = 0;
  1230. printk (KERN_INFO "Auto 100 Mbps, Half duplexn");
  1231. } else if (negotiate.bits.media_10BT_FD) {
  1232. np->speed = 10;
  1233. np->full_duplex = 1;
  1234. printk (KERN_INFO "Auto 10 Mbps, Full duplexn");
  1235. } else if (negotiate.bits.media_10BT_HD) {
  1236. np->speed = 10;
  1237. np->full_duplex = 0;
  1238. printk (KERN_INFO "Auto 10 Mbps, Half duplexn");
  1239. }
  1240. if (negotiate.bits.pause) {
  1241. np->tx_flow &= 1;
  1242. np->rx_flow &= 1;
  1243. } else if (negotiate.bits.asymmetric) {
  1244. np->tx_flow = 0;
  1245. np->rx_flow &= 1;
  1246. }
  1247. /* else tx_flow, rx_flow = user select  */
  1248. } else {
  1249. bmcr.image = mii_read (dev, phy_addr, MII_BMCR);
  1250. if (bmcr.bits.speed100 == 1 && bmcr.bits.speed1000 == 0) {
  1251. printk (KERN_INFO "Operating at 100 Mbps, ");
  1252. } else if (bmcr.bits.speed100 == 0 && bmcr.bits.speed1000 == 0) {
  1253. printk (KERN_INFO "Operating at 10 Mbps, ");
  1254. } else if (bmcr.bits.speed100 == 0 && bmcr.bits.speed1000 == 1) {
  1255. printk (KERN_INFO "Operating at 1000 Mbps, ");
  1256. }
  1257. if (bmcr.bits.duplex_mode) {
  1258. printk ("Full duplexn");
  1259. } else {
  1260. printk ("Half duplexn");
  1261. }
  1262. }
  1263. if (np->tx_flow) 
  1264. printk(KERN_INFO "Enable Tx Flow Controln");
  1265. else
  1266. printk(KERN_INFO "Disable Tx Flow Controln");
  1267. if (np->rx_flow)
  1268. printk(KERN_INFO "Enable Rx Flow Controln");
  1269. else
  1270. printk(KERN_INFO "Disable Rx Flow Controln");
  1271. return 0;
  1272. }
  1273. static int
  1274. mii_set_media (struct net_device *dev)
  1275. {
  1276. PHY_SCR_t pscr;
  1277. BMCR_t bmcr;
  1278. BMSR_t bmsr;
  1279. ANAR_t anar;
  1280. int phy_addr;
  1281. struct netdev_private *np;
  1282. np = dev->priv;
  1283. phy_addr = np->phy_addr;
  1284. /* Does user set speed? */
  1285. if (np->an_enable) {
  1286. /* Advertise capabilities */
  1287. bmsr.image = mii_read (dev, phy_addr, MII_BMSR);
  1288. anar.image = mii_read (dev, phy_addr, MII_ANAR);
  1289. anar.bits.media_100BX_FD = bmsr.bits.media_100BX_FD;
  1290. anar.bits.media_100BX_HD = bmsr.bits.media_100BX_HD;
  1291. anar.bits.media_100BT4 = bmsr.bits.media_100BT4;
  1292. anar.bits.media_10BT_FD = bmsr.bits.media_10BT_FD;
  1293. anar.bits.media_10BT_HD = bmsr.bits.media_10BT_HD;
  1294. anar.bits.pause = 1;
  1295. anar.bits.asymmetric = 1;
  1296. mii_write (dev, phy_addr, MII_ANAR, anar.image);
  1297. /* Enable Auto crossover */
  1298. pscr.image = mii_read (dev, phy_addr, MII_PHY_SCR);
  1299. pscr.bits.mdi_crossover_mode = 3; /* 11'b */
  1300. mii_write (dev, phy_addr, MII_PHY_SCR, pscr.image);
  1301. /* Soft reset PHY */
  1302. mii_write (dev, phy_addr, MII_BMCR, MII_BMCR_RESET);
  1303. bmcr.image = 0;
  1304. bmcr.bits.an_enable = 1;
  1305. bmcr.bits.restart_an = 1;
  1306. bmcr.bits.reset = 1;
  1307. mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
  1308. mdelay(1);
  1309. } else {
  1310. /* Force speed setting */
  1311. /* 1) Disable Auto crossover */
  1312. pscr.image = mii_read (dev, phy_addr, MII_PHY_SCR);
  1313. pscr.bits.mdi_crossover_mode = 0;
  1314. mii_write (dev, phy_addr, MII_PHY_SCR, pscr.image);
  1315. /* 2) PHY Reset */
  1316. bmcr.image = mii_read (dev, phy_addr, MII_BMCR);
  1317. bmcr.bits.reset = 1;
  1318. mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
  1319. /* 3) Power Down */
  1320. bmcr.image = 0x1940; /* must be 0x1940 */
  1321. mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
  1322. mdelay (10); /* wait a certain time */
  1323. /* 4) Advertise nothing */
  1324. mii_write (dev, phy_addr, MII_ANAR, 0);
  1325. /* 5) Set media and Power Up */
  1326. bmcr.image = 0;
  1327. bmcr.bits.power_down = 1;
  1328. if (np->speed == 100) {
  1329. bmcr.bits.speed100 = 1;
  1330. bmcr.bits.speed1000 = 0;
  1331. printk (KERN_INFO "Manual 100 Mbps, ");
  1332. } else if (np->speed == 10) {
  1333. bmcr.bits.speed100 = 0;
  1334. bmcr.bits.speed1000 = 0;
  1335. printk (KERN_INFO "Manual 10 Mbps, ");
  1336. }
  1337. if (np->full_duplex) {
  1338. bmcr.bits.duplex_mode = 1;
  1339. printk ("Full duplexn");
  1340. } else {
  1341. bmcr.bits.duplex_mode = 0;
  1342. printk ("Half duplexn");
  1343. }
  1344. #if 0
  1345. /* Set 1000BaseT Master/Slave setting */
  1346. mscr.image = mii_read (dev, phy_addr, MII_MSCR);
  1347. mscr.bits.cfg_enable = 1;
  1348. mscr.bits.cfg_value = 0;
  1349. #endif
  1350. mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
  1351. mdelay(10);
  1352. }
  1353. return 0;
  1354. }
  1355. static int
  1356. mii_get_media_pcs (struct net_device *dev)
  1357. {
  1358. ANAR_PCS_t negotiate;
  1359. BMSR_t bmsr;
  1360. BMCR_t bmcr;
  1361. int phy_addr;
  1362. struct netdev_private *np;
  1363. np = dev->priv;
  1364. phy_addr = np->phy_addr;
  1365. bmsr.image = mii_read (dev, phy_addr, PCS_BMSR);
  1366. if (np->an_enable) {
  1367. if (!bmsr.bits.an_complete) {
  1368. /* Auto-Negotiation not completed */
  1369. return -1;
  1370. }
  1371. negotiate.image = mii_read (dev, phy_addr, PCS_ANAR) & 
  1372. mii_read (dev, phy_addr, PCS_ANLPAR);
  1373. np->speed = 1000;
  1374. if (negotiate.bits.full_duplex) {
  1375. printk (KERN_INFO "Auto 1000 Mbps, Full duplexn");
  1376. np->full_duplex = 1;
  1377. } else {
  1378. printk (KERN_INFO "Auto 1000 Mbps, half duplexn");
  1379. np->full_duplex = 0;
  1380. }
  1381. if (negotiate.bits.pause) {
  1382. np->tx_flow &= 1;
  1383. np->rx_flow &= 1;
  1384. } else if (negotiate.bits.asymmetric) {
  1385. np->tx_flow = 0;
  1386. np->rx_flow &= 1;
  1387. }
  1388. /* else tx_flow, rx_flow = user select  */
  1389. } else {
  1390. bmcr.image = mii_read (dev, phy_addr, PCS_BMCR);
  1391. printk (KERN_INFO "Operating at 1000 Mbps, ");
  1392. if (bmcr.bits.duplex_mode) {
  1393. printk ("Full duplexn");
  1394. } else {
  1395. printk ("Half duplexn");
  1396. }
  1397. }
  1398. if (np->tx_flow) 
  1399. printk(KERN_INFO "Enable Tx Flow Controln");
  1400. else
  1401. printk(KERN_INFO "Disable Tx Flow Controln");
  1402. if (np->rx_flow)
  1403. printk(KERN_INFO "Enable Rx Flow Controln");
  1404. else
  1405. printk(KERN_INFO "Disable Rx Flow Controln");
  1406. return 0;
  1407. }
  1408. static int
  1409. mii_set_media_pcs (struct net_device *dev)
  1410. {
  1411. BMCR_t bmcr;
  1412. ESR_t esr;
  1413. ANAR_PCS_t anar;
  1414. int phy_addr;
  1415. struct netdev_private *np;
  1416. np = dev->priv;
  1417. phy_addr = np->phy_addr;
  1418. /* Auto-Negotiation? */
  1419. if (np->an_enable) {
  1420. /* Advertise capabilities */
  1421. esr.image = mii_read (dev, phy_addr, PCS_ESR);
  1422. anar.image = mii_read (dev, phy_addr, MII_ANAR);
  1423. anar.bits.half_duplex = 
  1424. esr.bits.media_1000BT_HD | esr.bits.media_1000BX_HD;
  1425. anar.bits.full_duplex = 
  1426. esr.bits.media_1000BT_FD | esr.bits.media_1000BX_FD;
  1427. anar.bits.pause = 1;
  1428. anar.bits.asymmetric = 1;
  1429. mii_write (dev, phy_addr, MII_ANAR, anar.image);
  1430. /* Soft reset PHY */
  1431. mii_write (dev, phy_addr, MII_BMCR, MII_BMCR_RESET);
  1432. bmcr.image = 0;
  1433. bmcr.bits.an_enable = 1;
  1434. bmcr.bits.restart_an = 1;
  1435. bmcr.bits.reset = 1;
  1436. mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
  1437. mdelay(1);
  1438. } else {
  1439. /* Force speed setting */
  1440. /* PHY Reset */
  1441. bmcr.image = 0;
  1442. bmcr.bits.reset = 1;
  1443. mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
  1444. mdelay(10);
  1445. bmcr.image = 0;
  1446. bmcr.bits.an_enable = 0;
  1447. if (np->full_duplex) {
  1448. bmcr.bits.duplex_mode = 1;
  1449. printk (KERN_INFO "Manual full duplexn");
  1450. } else {
  1451. bmcr.bits.duplex_mode = 0;
  1452. printk (KERN_INFO "Manual half duplexn");
  1453. }
  1454. mii_write (dev, phy_addr, MII_BMCR, bmcr.image);
  1455. mdelay(10);
  1456. /*  Advertise nothing */
  1457. mii_write (dev, phy_addr, MII_ANAR, 0);
  1458. }
  1459. return 0;
  1460. }
  1461. static int
  1462. rio_close (struct net_device *dev)
  1463. {
  1464. long ioaddr = dev->base_addr;
  1465. struct netdev_private *np = dev->priv;
  1466. struct sk_buff *skb;
  1467. int i;
  1468. netif_stop_queue (dev);
  1469. /* Disable interrupts */
  1470. writew (0, ioaddr + IntEnable);
  1471. /* Stop Tx and Rx logics */
  1472. writel (TxDisable | RxDisable | StatsDisable, ioaddr + MACCtrl);
  1473. synchronize_irq ();
  1474. free_irq (dev->irq, dev);
  1475. del_timer_sync (&np->timer);
  1476. /* Free all the skbuffs in the queue. */
  1477. for (i = 0; i < RX_RING_SIZE; i++) {
  1478. np->rx_ring[i].status = 0;
  1479. np->rx_ring[i].fraginfo = 0;
  1480. skb = np->rx_skbuff[i];
  1481. if (skb) {
  1482. pci_unmap_single (np->pdev, np->rx_ring[i].fraginfo,
  1483.   skb->len, PCI_DMA_FROMDEVICE);
  1484. dev_kfree_skb (skb);
  1485. np->rx_skbuff[i] = 0;
  1486. }
  1487. }
  1488. for (i = 0; i < TX_RING_SIZE; i++) {
  1489. skb = np->tx_skbuff[i];
  1490. if (skb) {
  1491. pci_unmap_single (np->pdev, np->tx_ring[i].fraginfo,
  1492.   skb->len, PCI_DMA_TODEVICE);
  1493. dev_kfree_skb (skb);
  1494. np->tx_skbuff[i] = 0;
  1495. }
  1496. }
  1497. return 0;
  1498. }
  1499. static void __devexit
  1500. rio_remove1 (struct pci_dev *pdev)
  1501. {
  1502. struct net_device *dev = pci_get_drvdata (pdev);
  1503. if (dev) {
  1504. struct netdev_private *np = dev->priv;
  1505. unregister_netdev (dev);
  1506. pci_free_consistent (pdev, RX_TOTAL_SIZE, np->rx_ring,
  1507.      np->rx_ring_dma);
  1508. pci_free_consistent (pdev, TX_TOTAL_SIZE, np->tx_ring,
  1509.      np->tx_ring_dma);
  1510. #ifdef MEM_MAPPING
  1511. iounmap ((char *) (dev->base_addr));
  1512. #endif
  1513. kfree (dev);
  1514. pci_release_regions (pdev);
  1515. pci_disable_device (pdev);
  1516. }
  1517. pci_set_drvdata (pdev, NULL);
  1518. }
  1519. static struct pci_driver rio_driver = {
  1520. name: "dl2k",
  1521. id_table: rio_pci_tbl,
  1522. probe: rio_probe1,
  1523. remove: __devexit_p(rio_remove1),
  1524. };
  1525. static int __init
  1526. rio_init (void)
  1527. {
  1528. return pci_module_init (&rio_driver);
  1529. }
  1530. static void __exit
  1531. rio_exit (void)
  1532. {
  1533. pci_unregister_driver (&rio_driver);
  1534. }
  1535. module_init (rio_init);
  1536. module_exit (rio_exit);
  1537. /*
  1538.  
  1539. Compile command: 
  1540.  
  1541. gcc -D__KERNEL__ -DMODULE -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -c dl2k.c
  1542. Read Documentation/networking/dl2k.txt for details.
  1543. */