dl2k.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:45k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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