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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  * Alchemy Semi Au1000 ethernet driver
  4.  *
  5.  * Copyright 2001 MontaVista Software Inc.
  6.  * Author: MontaVista Software, Inc.
  7.  *          ppopov@mvista.com or source@mvista.com
  8.  *
  9.  * ########################################################################
  10.  *
  11.  *  This program is free software; you can distribute it and/or modify it
  12.  *  under the terms of the GNU General Public License (Version 2) as
  13.  *  published by the Free Software Foundation.
  14.  *
  15.  *  This program is distributed in the hope it will be useful, but WITHOUT
  16.  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  17.  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  18.  *  for more details.
  19.  *
  20.  *  You should have received a copy of the GNU General Public License along
  21.  *  with this program; if not, write to the Free Software Foundation, Inc.,
  22.  *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
  23.  *
  24.  * ########################################################################
  25.  *
  26.  * 
  27.  */
  28. #ifndef __mips__
  29. #error This driver only works with MIPS architectures!
  30. #endif
  31. #include <linux/module.h>
  32. #include <linux/kernel.h>
  33. #include <linux/sched.h>
  34. #include <linux/string.h>
  35. #include <linux/timer.h>
  36. #include <linux/errno.h>
  37. #include <linux/in.h>
  38. #include <linux/ioport.h>
  39. #include <linux/slab.h>
  40. #include <linux/interrupt.h>
  41. #include <linux/pci.h>
  42. #include <linux/init.h>
  43. #include <linux/netdevice.h>
  44. #include <linux/etherdevice.h>
  45. #include <linux/skbuff.h>
  46. #include <linux/delay.h>
  47. #include <asm/irq.h>
  48. #include <asm/bitops.h>
  49. #include <asm/io.h>
  50. #include <asm/au1000.h>
  51. #include "au1000_eth.h"
  52. #ifdef AU1000_ETH_DEBUG
  53. static int au1000_debug = 10;
  54. #else
  55. static int au1000_debug = 3;
  56. #endif
  57. // prototypes
  58. static void *dma_alloc(size_t, dma_addr_t *);
  59. static void dma_free(void *, size_t);
  60. static void hard_stop(struct net_device *);
  61. static int __init au1000_probe1(struct net_device *, long, int, int);
  62. static int au1000_init(struct net_device *);
  63. static int au1000_open(struct net_device *);
  64. static int au1000_close(struct net_device *);
  65. static int au1000_tx(struct sk_buff *, struct net_device *);
  66. static int au1000_rx(struct net_device *);
  67. static void au1000_interrupt(int, void *, struct pt_regs *);
  68. static void au1000_tx_timeout(struct net_device *);
  69. static int au1000_set_config(struct net_device *dev, struct ifmap *map);
  70. static void set_rx_mode(struct net_device *);
  71. static struct net_device_stats *au1000_get_stats(struct net_device *);
  72. static inline void update_tx_stats(struct net_device *, u32, u32);
  73. static inline void update_rx_stats(struct net_device *, u32);
  74. static void au1000_timer(unsigned long);
  75. static void cleanup_buffers(struct net_device *);
  76. static int au1000_ioctl(struct net_device *, struct ifreq *, int);
  77. static int mdio_read(struct net_device *, int, int);
  78. static void mdio_write(struct net_device *, int, int, u16);
  79. static inline void sync(void);
  80. extern  void ack_rise_edge_irq(unsigned int);
  81. static int next_dev;
  82. /*
  83.  * Theory of operation
  84.  *
  85.  * The Au1000 MACs use a simple rx and tx descriptor ring scheme. 
  86.  * There are four receive and four transmit descriptors.  These 
  87.  * descriptors are not in memory; rather, they are just a set of 
  88.  * hardware registers.
  89.  *
  90.  * Since the Au1000 has a coherent data cache, the receive and
  91.  * transmit buffers are allocated from the KSEG0 segment. The 
  92.  * hardware registers, however, are still mapped at KSEG1 to
  93.  * make sure there's no out-of-order writes, and that all writes
  94.  * complete immediately.
  95.  */
  96. /*
  97.  * Base address and interupt of the Au1000 ethernet macs
  98.  */
  99. static struct {
  100. unsigned int port;
  101. int irq;
  102. } au1000_iflist[NUM_INTERFACES] = {
  103. {AU1000_ETH0_BASE, AU1000_ETH0_IRQ}, 
  104. {AU1000_ETH1_BASE, AU1000_ETH1_IRQ}
  105. };
  106. static char version[] __devinitdata =
  107.     "au1000eth.c:0.1 ppopov@mvista.comn";
  108. // FIX! Need real Ethernet addresses
  109. static unsigned char au1000_mac_addr[2][6] __devinitdata = { 
  110. {0x00, 0x50, 0xc2, 0x0c, 0x30, 0x00},
  111. {0x00, 0x50, 0xc2, 0x0c, 0x40, 0x00}
  112. };
  113. #define nibswap(x) ((((x) >> 4) & 0x0f) | (((x) << 4) & 0xf0))
  114. #define RUN_AT(x) (jiffies + (x))
  115. // For reading/writing 32-bit words from/to DMA memory
  116. #define cpu_to_dma32 cpu_to_be32
  117. #define dma32_to_cpu be32_to_cpu
  118. /* CPU pipeline flush */
  119. static inline void sync(void)
  120. {
  121. asm volatile ("sync");
  122. }
  123. /* FIXME 
  124.  * All of the PHY code really should be detached from the MAC 
  125.  * code.
  126.  */
  127. static char *phy_link[] = 
  128. {"unknown", 
  129. "10Base2", "10BaseT", 
  130. "AUI",
  131. "100BaseT", "100BaseTX", "100BaseFX"};
  132. int bcm_5201_init(struct net_device *dev, int phy_addr)
  133. {
  134. s16 data;
  135. /* Stop auto-negotiation */
  136. //printk("bcm_5201_initn");
  137. data = mdio_read(dev, phy_addr, MII_CONTROL);
  138. mdio_write(dev, phy_addr, MII_CONTROL, data & ~MII_CNTL_AUTO);
  139. /* Set advertisement to 10/100 and Half/Full duplex
  140.  * (full capabilities) */
  141. data = mdio_read(dev, phy_addr, MII_ANADV);
  142. data |= MII_NWAY_TX | MII_NWAY_TX_FDX | MII_NWAY_T_FDX | MII_NWAY_T;
  143. mdio_write(dev, phy_addr, MII_ANADV, data);
  144. /* Restart auto-negotiation */
  145. data = mdio_read(dev, phy_addr, MII_CONTROL);
  146. data |= MII_CNTL_RST_AUTO | MII_CNTL_AUTO;
  147. mdio_write(dev, phy_addr, MII_CONTROL, data);
  148. //dump_mii(dev, phy_addr);
  149. return 0;
  150. }
  151. int bcm_5201_reset(struct net_device *dev, int phy_addr)
  152. {
  153. s16 mii_control, timeout;
  154. //printk("bcm_5201_resetn");
  155. mii_control = mdio_read(dev, phy_addr, MII_CONTROL);
  156. mdio_write(dev, phy_addr, MII_CONTROL, mii_control | MII_CNTL_RESET);
  157. mdelay(1);
  158. for (timeout = 100; timeout > 0; --timeout) {
  159. mii_control = mdio_read(dev, phy_addr, MII_CONTROL);
  160. if ((mii_control & MII_CNTL_RESET) == 0)
  161. break;
  162. mdelay(1);
  163. }
  164. if (mii_control & MII_CNTL_RESET) {
  165. printk(KERN_ERR "%s PHY reset timeout !n", dev->name);
  166. return -1;
  167. }
  168. return 0;
  169. }
  170. int 
  171. bcm_5201_status(struct net_device *dev, int phy_addr, u16 *link, u16 *speed)
  172. {
  173. u16 mii_data;
  174. struct au1000_private *aup;
  175. if (!dev) {
  176. printk(KERN_ERR "bcm_5201_status error: NULL devn");
  177. return -1;
  178. }
  179. aup = (struct au1000_private *) dev->priv;
  180. mii_data = mdio_read(dev, aup->phy_addr, MII_STATUS);
  181. if (mii_data & MII_STAT_LINK) {
  182. *link = 1;
  183. mii_data = mdio_read(dev, aup->phy_addr, MII_AUX_CNTRL);
  184. if (mii_data & MII_AUX_100) {
  185. if (mii_data & MII_AUX_FDX) {
  186. *speed = IF_PORT_100BASEFX;
  187. dev->if_port = IF_PORT_100BASEFX;
  188. }
  189. else {
  190. *speed = IF_PORT_100BASETX;
  191. dev->if_port = IF_PORT_100BASETX;
  192. }
  193. }
  194. else  {
  195. *speed = IF_PORT_10BASET;
  196. dev->if_port = IF_PORT_10BASET;
  197. }
  198. }
  199. else {
  200. *link = 0;
  201. *speed = 0;
  202. }
  203. return 0;
  204. }
  205. int am79c901_init(struct net_device *dev, int phy_addr)
  206. {
  207. printk("am79c901_initn");
  208. return 0;
  209. }
  210. int am79c901_reset(struct net_device *dev, int phy_addr)
  211. {
  212. printk("am79c901_resetn");
  213. return 0;
  214. }
  215. int 
  216. am79c901_status(struct net_device *dev, int phy_addr, u16 *link, u16 *speed)
  217. {
  218. return 0;
  219. }
  220. struct phy_ops bcm_5201_ops = {
  221. bcm_5201_init,
  222. bcm_5201_reset,
  223. bcm_5201_status,
  224. };
  225. struct phy_ops am79c901_ops = {
  226. am79c901_init,
  227. am79c901_reset,
  228. am79c901_status,
  229. };
  230. static struct mii_chip_info {
  231. const char * name;
  232. u16 phy_id0;
  233. u16 phy_id1;
  234. struct phy_ops *phy_ops;
  235. } mii_chip_table[] = {
  236. {"Broadcom BCM5201 10/100 BaseT PHY",  0x0040, 0x6212, &bcm_5201_ops },
  237. {"AMD 79C901 HomePNA PHY",  0x0000, 0x35c8, &am79c901_ops },
  238. {0,},
  239. };
  240. static int mdio_read(struct net_device *dev, int phy_id, int reg)
  241. {
  242. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  243. u32 timedout = 20;
  244. u32 mii_control;
  245. while (aup->mac->mii_control & MAC_MII_BUSY) {
  246. mdelay(1);
  247. if (--timedout == 0) {
  248. printk(KERN_ERR "%s: read_MII busy timeout!!n", dev->name);
  249. return -1;
  250. }
  251. }
  252. mii_control = MAC_SET_MII_SELECT_REG(reg) | 
  253. MAC_SET_MII_SELECT_PHY(phy_id) | MAC_MII_READ;
  254. aup->mac->mii_control = mii_control;
  255. timedout = 20;
  256. while (aup->mac->mii_control & MAC_MII_BUSY) {
  257. mdelay(1);
  258. if (--timedout == 0) {
  259. printk(KERN_ERR "%s: mdio_read busy timeout!!n", dev->name);
  260. return -1;
  261. }
  262. }
  263. return (int)aup->mac->mii_data;
  264. }
  265. static void mdio_write(struct net_device *dev, int phy_id, int reg, u16 value)
  266. {
  267. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  268. u32 timedout = 20;
  269. u32 mii_control;
  270. while (aup->mac->mii_control & MAC_MII_BUSY) {
  271. mdelay(1);
  272. if (--timedout == 0) {
  273. printk(KERN_ERR "%s: mdio_write busy timeout!!n", dev->name);
  274. return;
  275. }
  276. }
  277. mii_control = MAC_SET_MII_SELECT_REG(reg) | 
  278. MAC_SET_MII_SELECT_PHY(phy_id) | MAC_MII_WRITE;
  279. aup->mac->mii_data = value;
  280. aup->mac->mii_control = mii_control;
  281. }
  282. static void dump_mii(struct net_device *dev, int phy_id)
  283. {
  284. int i, val;
  285. for (i = 0; i < 7; i++) {
  286. if ((val = mdio_read(dev, phy_id, i)) >= 0)
  287. printk("%s: MII Reg %d=%xn", dev->name, i, val);
  288. }
  289. for (i = 16; i < 25; i++) {
  290. if ((val = mdio_read(dev, phy_id, i)) >= 0)
  291. printk("%s: MII Reg %d=%xn", dev->name, i, val);
  292. }
  293. }
  294. static int __init mii_probe (struct net_device * dev)
  295. {
  296. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  297. int phy_addr;
  298. aup->mii = NULL;
  299. /* search for total of 32 possible mii phy addresses */
  300. for (phy_addr = 0; phy_addr < 32; phy_addr++) {
  301. u16 mii_status;
  302. u16 phy_id0, phy_id1;
  303. int i;
  304. mii_status = mdio_read(dev, phy_addr, MII_STATUS);
  305. if (mii_status == 0xffff || mii_status == 0x0000)
  306. /* the mii is not accessable, try next one */
  307. continue;
  308. phy_id0 = mdio_read(dev, phy_addr, MII_PHY_ID0);
  309. phy_id1 = mdio_read(dev, phy_addr, MII_PHY_ID1);
  310. /* search our mii table for the current mii */ 
  311. for (i = 0; mii_chip_table[i].phy_id1; i++)
  312. if (phy_id0 == mii_chip_table[i].phy_id0 &&
  313.     phy_id1 == mii_chip_table[i].phy_id1) {
  314. struct mii_phy * mii_phy;
  315. printk(KERN_INFO "%s: %s found at phy address %dn",
  316.        dev->name, mii_chip_table[i].name, phy_addr);
  317. if ((mii_phy = kmalloc(sizeof(struct mii_phy), GFP_KERNEL)) != NULL) {
  318. mii_phy->chip_info = mii_chip_table+i;
  319. mii_phy->phy_addr = phy_addr;
  320. //mii_phy->status = mdio_read(dev, phy_addr, MII_STATUS);
  321. mii_phy->next = aup->mii;
  322. aup->phy_ops = mii_chip_table[i].phy_ops;
  323. aup->mii = mii_phy;
  324. }
  325. /* the current mii is on our mii_info_table,
  326.    try next address */
  327. break;
  328. }
  329. }
  330. if (aup->mii == NULL) {
  331. printk(KERN_ERR "%s: No MII transceivers found!n", dev->name);
  332. return -1;
  333. }
  334. /* use last PHY */
  335. aup->phy_addr = aup->mii->phy_addr;
  336. printk(KERN_INFO "%s: Using %s as defaultn", dev->name, aup->mii->chip_info->name);
  337. return 0;
  338. }
  339. /*
  340.  * Buffer allocation/deallocation routines. The buffer descriptor returned
  341.  * has the virtual and dma address of a buffer suitable for 
  342.  * both, receive and transmit operations.
  343.  */
  344. static db_dest_t *GetFreeDB(struct au1000_private *aup)
  345. {
  346. db_dest_t *pDB;
  347. pDB = aup->pDBfree;
  348. if (pDB) {
  349. aup->pDBfree = pDB->pnext;
  350. }
  351. //printk("GetFreeDB: %xn", pDB);
  352. return pDB;
  353. }
  354. void ReleaseDB(struct au1000_private *aup, db_dest_t *pDB)
  355. {
  356. db_dest_t *pDBfree = aup->pDBfree;
  357. if (pDBfree)
  358. pDBfree->pnext = pDB;
  359. aup->pDBfree = pDB;
  360. }
  361. /*
  362.   DMA memory allocation, derived from pci_alloc_consistent.
  363.   However, the Au1000 data cache is coherent (when programmed
  364.   so), therefore we return KSEG0 address, not KSEG1.
  365. */
  366. static void *dma_alloc(size_t size, dma_addr_t * dma_handle)
  367. {
  368. void *ret;
  369. int gfp = GFP_ATOMIC | GFP_DMA;
  370. ret = (void *) __get_free_pages(gfp, get_order(size));
  371. if (ret != NULL) {
  372. memset(ret, 0, size);
  373. *dma_handle = virt_to_bus(ret);
  374. ret = KSEG0ADDR(ret);
  375. }
  376. return ret;
  377. }
  378. static void dma_free(void *vaddr, size_t size)
  379. {
  380. vaddr = KSEG0ADDR(vaddr);
  381. free_pages((unsigned long) vaddr, get_order(size));
  382. }
  383. static void hard_stop(struct net_device *dev)
  384. {
  385. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  386. if (au1000_debug > 4)
  387. printk(KERN_INFO "%s: hard stopn", dev->name);
  388. aup->mac->control &= ~(MAC_RX_ENABLE | MAC_TX_ENABLE);
  389. sync();
  390. mdelay(10);
  391. }
  392. static void reset_mac(struct net_device *dev)
  393. {
  394. u32 flags;
  395. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  396. if (au1000_debug > 4)
  397. printk(KERN_INFO "%s: reset mac, aup %xn", dev->name, (unsigned)aup);
  398. spin_lock_irqsave(&aup->lock, flags);
  399. del_timer(&aup->timer);
  400. hard_stop(dev);
  401. *aup->enable |= MAC_DMA_RESET;
  402. sync();
  403. mdelay(10);
  404. aup->tx_full = 0;
  405. spin_unlock_irqrestore(&aup->lock, flags);
  406. }
  407. static void cleanup_buffers(struct net_device *dev)
  408. {
  409. int i;
  410. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  411. for (i=0; i<NUM_RX_DMA; i++) {
  412. if (aup->rx_db_inuse[i]) {
  413. ReleaseDB(aup, aup->rx_db_inuse[i]);
  414. aup->rx_db_inuse[i] = 0;
  415. }
  416. }
  417. for (i=0; i<NUM_TX_DMA; i++) {
  418. if (aup->tx_db_inuse[i]) {
  419. ReleaseDB(aup, aup->tx_db_inuse[i]);
  420. aup->tx_db_inuse[i] = 0;
  421. }
  422. }
  423. }
  424. /* 
  425.  * Setup the receive and transmit "rings".  These pointers are the addresses
  426.  * of the rx and tx MAC DMA registers so they are fixed by the hardware --
  427.  * these are not descriptors sitting in memory.
  428.  */
  429. static void 
  430. setup_hw_rings(struct au1000_private *aup, u32 rx_base, u32 tx_base)
  431. {
  432. int i;
  433. for (i=0; i<NUM_RX_DMA; i++) {
  434. aup->rx_dma_ring[i] = (volatile rx_dma_t *) ioremap_nocache((unsigned long)
  435. (rx_base + sizeof(rx_dma_t)*i), sizeof(rx_dma_t));
  436. }
  437. for (i=0; i<NUM_TX_DMA; i++) {
  438. aup->tx_dma_ring[i] = (volatile tx_dma_t *)ioremap_nocache((unsigned long)
  439. (tx_base + sizeof(tx_dma_t)*i), sizeof(tx_dma_t));
  440. }
  441. }
  442. /*
  443.  * Probe for a AU1000 ethernet controller.
  444.  */
  445. int __init au1000_probe(struct net_device *dev)
  446. {
  447. int base_addr = au1000_iflist[next_dev].port;
  448. int irq = au1000_iflist[next_dev].irq;
  449. #ifndef CONFIG_MIPS_AU1000_ENET
  450. return -ENODEV;
  451. #endif
  452. if (au1000_debug > 4)
  453. printk(KERN_INFO "%s: au1000_probe base_addr %xn", 
  454. dev->name, base_addr);
  455. if (next_dev >= NUM_INTERFACES) {
  456. return -ENODEV;
  457. }
  458. if (au1000_probe1(dev, base_addr, irq, next_dev) == 0) {
  459. next_dev++;
  460. return 0;
  461. }
  462. next_dev++;
  463. return -ENODEV;
  464. }
  465. static int __init
  466. au1000_probe1(struct net_device *dev, long ioaddr, int irq, int port_num)
  467. {
  468. static unsigned version_printed = 0;
  469. struct au1000_private *aup = NULL;
  470. int i, retval = 0;
  471. db_dest_t *pDB, *pDBfree;
  472. u16 link, speed;
  473. if ((ioaddr != AU1000_ETH0_BASE) && (ioaddr != AU1000_ETH1_BASE))  {
  474. return -ENODEV;
  475. }
  476. if (!request_region(ioaddr, MAC_IOSIZE, "Au1000 ENET")) {
  477.  return -ENODEV;
  478. }
  479. if (version_printed++ == 0) printk(version);
  480. if (!dev) {
  481. dev = init_etherdev(0, sizeof(struct au1000_private));
  482. }
  483. if (!dev) {
  484.  printk (KERN_ERR "au1000 eth: init_etherdev failedn");  
  485.  return -ENODEV;
  486. }
  487. printk("%s: Au1000 ethernet found at 0x%lx, irq %dn",
  488.        dev->name, ioaddr, irq);
  489. /* Initialize our private structure */
  490. if (dev->priv == NULL) {
  491. aup = (struct au1000_private *) kmalloc(sizeof(*aup), GFP_KERNEL);
  492. if (aup == NULL) {
  493. retval = -ENOMEM;
  494. goto free_region;
  495. }
  496. dev->priv = aup;
  497. }
  498. aup = dev->priv;
  499. memset(aup, 0, sizeof(*aup));
  500. /* Allocate the data buffers */
  501. aup->vaddr = (u32)dma_alloc(MAX_BUF_SIZE * (NUM_TX_BUFFS+NUM_RX_BUFFS), &aup->dma_addr);
  502. if (!aup->vaddr) {
  503. retval = -ENOMEM;
  504. goto free_region;
  505. }
  506. /* aup->mac is the base address of the MAC's registers */
  507. aup->mac = (volatile mac_reg_t *)ioremap_nocache((unsigned long)ioaddr, sizeof(*aup->mac));
  508. /* Setup some variables for quick register address access */
  509. if (ioaddr == AU1000_ETH0_BASE) {
  510. aup->enable = (volatile u32 *)
  511. ioremap_nocache((unsigned long)MAC0_ENABLE, sizeof(*aup->enable)); 
  512. memcpy(dev->dev_addr, au1000_mac_addr[0], sizeof(dev->dev_addr));
  513. setup_hw_rings(aup, MAC0_RX_DMA_ADDR, MAC0_TX_DMA_ADDR);
  514. }
  515. else if (ioaddr == AU1000_ETH1_BASE) {
  516. aup->enable = (volatile u32 *)
  517. ioremap_nocache((unsigned long)MAC1_ENABLE, sizeof(*aup->enable)); 
  518. memcpy(dev->dev_addr, au1000_mac_addr[1], sizeof(dev->dev_addr));
  519. setup_hw_rings(aup, MAC1_RX_DMA_ADDR, MAC1_TX_DMA_ADDR);
  520. }
  521. else { /* should never happen */
  522.  printk (KERN_ERR "au1000 eth: bad ioaddr %xn", (unsigned)ioaddr);  
  523.  retval = -ENODEV;
  524.  goto free_region;
  525. }
  526. aup->phy_addr = PHY_ADDRESS;
  527. /* bring the device out of reset, otherwise probing the mii
  528.  * will hang */
  529. *aup->enable = MAC_EN_RESET0 | MAC_EN_RESET1 | MAC_EN_RESET2 |
  530. MAC_EN_CLOCK_ENABLE | MAC_EN_TOSS;
  531. sync();
  532. mdelay(2);
  533. if (mii_probe(dev) != 0) {
  534.  goto free_region;
  535. }
  536. aup->phy_ops->phy_status(dev, aup->phy_addr, &link, &speed);
  537. if (!link) {
  538. printk(KERN_INFO "%s: link down resetting...n", dev->name);
  539. aup->phy_ops->phy_reset(dev, aup->phy_addr);
  540. aup->phy_ops->phy_init(dev, aup->phy_addr);
  541. }
  542. else {
  543. printk(KERN_INFO "%s: link up (%s)n", dev->name, phy_link[speed]);
  544. }
  545. pDBfree = NULL;
  546. /* setup the data buffer descriptors and attach a buffer to each one */
  547. pDB = aup->db;
  548. for (i=0; i<(NUM_TX_BUFFS+NUM_RX_BUFFS); i++) {
  549. pDB->pnext = pDBfree;
  550. pDBfree = pDB;
  551. pDB->vaddr = (u32 *)((unsigned)aup->vaddr + MAX_BUF_SIZE*i);
  552. pDB->dma_addr = (dma_addr_t)virt_to_bus(pDB->vaddr);
  553. pDB++;
  554. }
  555. aup->pDBfree = pDBfree;
  556. for (i=0; i<NUM_RX_DMA; i++) {
  557. pDB = GetFreeDB(aup);
  558. if (!pDB) goto free_region;
  559. aup->rx_dma_ring[i]->buff_stat = (unsigned)pDB->dma_addr;
  560. aup->rx_db_inuse[i] = pDB;
  561. }
  562. for (i=0; i<NUM_TX_DMA; i++) {
  563. pDB = GetFreeDB(aup);
  564. if (!pDB) goto free_region;
  565. aup->tx_dma_ring[i]->buff_stat = (unsigned)pDB->dma_addr;
  566. aup->tx_dma_ring[i]->len = 0;
  567. aup->tx_db_inuse[i] = pDB;
  568. }
  569. spin_lock_init(&aup->lock);
  570. dev->base_addr = ioaddr;
  571. dev->irq = irq;
  572. dev->open = au1000_open;
  573. dev->hard_start_xmit = au1000_tx;
  574. dev->stop = au1000_close;
  575. dev->get_stats = au1000_get_stats;
  576. dev->set_multicast_list = &set_rx_mode;
  577. dev->do_ioctl = &au1000_ioctl;
  578. dev->set_config = &au1000_set_config;
  579. dev->tx_timeout = au1000_tx_timeout;
  580. dev->watchdog_timeo = ETH_TX_TIMEOUT;
  581. /* Fill in the fields of the device structure with ethernet values. */
  582. ether_setup(dev);
  583. /* 
  584.  * The boot code uses the ethernet controller, so reset it to start fresh.
  585.  * au1000_init() expects that the device is in reset state.
  586.  */
  587. reset_mac(dev);
  588. return 0;
  589. free_region:
  590. release_region(ioaddr, MAC_IOSIZE);
  591. unregister_netdev(dev);
  592. if (aup->vaddr)
  593. dma_free((void *)aup->vaddr, MAX_BUF_SIZE * (NUM_TX_BUFFS+NUM_RX_BUFFS));
  594. if (dev->priv != NULL)
  595. kfree(dev->priv);
  596. kfree(dev);
  597. printk(KERN_ERR "%s: au1000_probe1 failed.  Returns %dn",
  598.        dev->name, retval);
  599. return retval;
  600. }
  601. /* 
  602.  * Initialize the interface.
  603.  *
  604.  * When the device powers up, the clocks are disabled and the
  605.  * mac is in reset state.  When the interface is closed, we
  606.  * do the same -- reset the device and disable the clocks to
  607.  * conserve power. Thus, whenever au1000_init() is called,
  608.  * the device should already be in reset state.
  609.  */
  610. static int au1000_init(struct net_device *dev)
  611. {
  612. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  613. u32 flags;
  614. int i;
  615. u32 value, control;
  616. if (au1000_debug > 4) printk("%s: au1000_init", dev->name);
  617. spin_lock_irqsave(&aup->lock, flags);
  618. /* bring the device out of reset */
  619. value = MAC_EN_RESET0 | MAC_EN_RESET1 | MAC_EN_RESET2 |
  620. MAC_EN_CLOCK_ENABLE | MAC_EN_TOSS;
  621. *aup->enable = value;
  622. sync();
  623. mdelay(200);
  624. aup->mac->control = 0;
  625. aup->tx_head = (aup->tx_dma_ring[0]->buff_stat & 0xC) >> 2;
  626. aup->tx_tail = aup->tx_head;
  627. aup->rx_head = (aup->rx_dma_ring[0]->buff_stat & 0xC) >> 2;
  628. aup->mac->mac_addr_high = dev->dev_addr[5]<<8 | dev->dev_addr[4];
  629. aup->mac->mac_addr_low = dev->dev_addr[3]<<24 | dev->dev_addr[2]<<16 |
  630. dev->dev_addr[1]<<8 | dev->dev_addr[0];
  631. for (i=0; i<NUM_RX_DMA; i++) {
  632. aup->rx_dma_ring[i]->buff_stat |= RX_DMA_ENABLE;
  633. }
  634. sync();
  635. control = MAC_DISABLE_RX_OWN | MAC_RX_ENABLE | MAC_TX_ENABLE;
  636. #ifndef CONFIG_CPU_LITTLE_ENDIAN
  637. control |= MAC_BIG_ENDIAN;
  638. #endif
  639. aup->mac->control = control;
  640. spin_unlock_irqrestore(&aup->lock, flags);
  641. return 0;
  642. }
  643. static void au1000_timer(unsigned long data)
  644. {
  645. struct net_device *dev = (struct net_device *)data;
  646. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  647. u16 mii_data, link, speed;
  648. if (!dev) {
  649. /* fatal error, don't restart the timer */
  650. printk(KERN_ERR "au1000_timer error: NULL devn");
  651. return;
  652. }
  653. if (!(dev->flags & IFF_UP)) {
  654. goto set_timer;
  655. }
  656. if (aup->phy_ops->phy_status(dev, aup->phy_addr, &link, &speed) == 0) {
  657. if (link) {
  658. if (!(dev->flags & IFF_RUNNING)) {
  659. netif_carrier_on(dev);
  660. dev->flags |= IFF_RUNNING;
  661. printk(KERN_DEBUG "%s: link upn", dev->name);
  662. }
  663. }
  664. else {
  665. if (dev->flags & IFF_RUNNING) {
  666. netif_carrier_off(dev);
  667. dev->flags &= ~IFF_RUNNING;
  668. dev->if_port = 0;
  669. printk(KERN_DEBUG "%s: link downn", dev->name);
  670. }
  671. }
  672. }
  673. set_timer:
  674. aup->timer.expires = RUN_AT((1*HZ)); 
  675. aup->timer.data = (unsigned long)dev;
  676. aup->timer.function = &au1000_timer; /* timer handler */
  677. add_timer(&aup->timer);
  678. }
  679. static int au1000_open(struct net_device *dev)
  680. {
  681. int retval;
  682. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  683. MOD_INC_USE_COUNT;
  684. if (au1000_debug > 4)
  685. printk("%s: open: dev=%pn", dev->name, dev);
  686. if ((retval = au1000_init(dev))) {
  687. printk(KERN_ERR "%s: error in au1000_initn", dev->name);
  688. free_irq(dev->irq, dev);
  689. MOD_DEC_USE_COUNT;
  690. return retval;
  691. }
  692. netif_start_queue(dev);
  693. if ((retval = request_irq(dev->irq, &au1000_interrupt, 0, dev->name, dev))) {
  694. printk(KERN_ERR "%s: unable to get IRQ %dn", dev->name, dev->irq);
  695. MOD_DEC_USE_COUNT;
  696. return retval;
  697. }
  698. aup->timer.expires = RUN_AT((3*HZ)); 
  699. aup->timer.data = (unsigned long)dev;
  700. aup->timer.function = &au1000_timer; /* timer handler */
  701. add_timer(&aup->timer);
  702. if (au1000_debug > 4)
  703. printk("%s: open: Initialization done.n", dev->name);
  704. return 0;
  705. }
  706. static int au1000_close(struct net_device *dev)
  707. {
  708. u32 flags;
  709. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  710. if (au1000_debug > 4)
  711. printk("%s: close: dev=%pn", dev->name, dev);
  712. spin_lock_irqsave(&aup->lock, flags);
  713. /* stop the device */
  714. if (netif_device_present(dev)) {
  715. netif_stop_queue(dev);
  716. }
  717. /* disable the interrupt */
  718. free_irq(dev->irq, dev);
  719. spin_unlock_irqrestore(&aup->lock, flags);
  720. reset_mac(dev);
  721. MOD_DEC_USE_COUNT;
  722. return 0;
  723. }
  724. static inline void update_tx_stats(struct net_device *dev, u32 status, u32 pkt_len)
  725. {
  726. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  727. struct net_device_stats *ps = &aup->stats;
  728. ps->tx_packets++;
  729. ps->tx_bytes += pkt_len;
  730. if (status & TX_FRAME_ABORTED) {
  731. ps->tx_errors++;
  732. ps->tx_aborted_errors++;
  733. if (status & (TX_NO_CARRIER | TX_LOSS_CARRIER))
  734. ps->tx_carrier_errors++;
  735. }
  736. }
  737. /*
  738.  * Called from the interrupt service routine to acknowledge
  739.  * the TX DONE bits.  This is a must if the irq is setup as
  740.  * edge triggered.
  741.  */
  742. static void au1000_tx_ack(struct net_device *dev)
  743. {
  744. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  745. volatile tx_dma_t *ptxd;
  746. ptxd = aup->tx_dma_ring[aup->tx_tail];
  747. while (ptxd->buff_stat & TX_T_DONE) {
  748. update_tx_stats(dev, ptxd->status, ptxd->len & 0x3ff);
  749. ptxd->buff_stat &= ~TX_T_DONE;
  750. ptxd->len = 0;
  751. sync();
  752. aup->tx_tail = (aup->tx_tail + 1) & (NUM_TX_DMA - 1);
  753. ptxd = aup->tx_dma_ring[aup->tx_tail];
  754. if (aup->tx_full) {
  755. aup->tx_full = 0;
  756. netif_wake_queue(dev);
  757. }
  758. }
  759. }
  760. /*
  761.  * Au1000 transmit routine.
  762.  */
  763. static int au1000_tx(struct sk_buff *skb, struct net_device *dev)
  764. {
  765. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  766. //unsigned long flags;
  767. volatile tx_dma_t *ptxd;
  768. u32 buff_stat;
  769. db_dest_t *pDB;
  770. int i;
  771. if (au1000_debug > 4)
  772. printk("%s: tx: aup %x len=%d, data=%p, head %dn",
  773.        dev->name, (unsigned)aup, skb->len, skb->data, aup->tx_head);
  774. /* Prevent interrupts from changing the Tx ring */
  775. //spin_lock_irqsave(&aup->lock, flags);
  776. ptxd = aup->tx_dma_ring[aup->tx_head];
  777. buff_stat = ptxd->buff_stat;
  778. if (buff_stat & TX_DMA_ENABLE) {
  779. /* We've wrapped around and the transmitter is still busy */
  780. netif_stop_queue(dev);
  781. aup->tx_full = 1;
  782. //spin_unlock_irqrestore(&aup->lock, flags);
  783. return 1;
  784. }
  785. else if (buff_stat & TX_T_DONE) {
  786. update_tx_stats(dev, ptxd->status, ptxd->len & 0x3ff);
  787. ptxd->len = 0;
  788. }
  789. if (aup->tx_full) {
  790. aup->tx_full = 0;
  791. netif_wake_queue(dev);
  792. }
  793. pDB = aup->tx_db_inuse[aup->tx_head];
  794. memcpy((void *)pDB->vaddr, skb->data, skb->len);
  795. if (skb->len < MAC_MIN_PKT_SIZE) {
  796. for (i=skb->len; i<MAC_MIN_PKT_SIZE; i++) { 
  797. ((char *)pDB->vaddr)[i] = 0;
  798. }
  799. ptxd->len = MAC_MIN_PKT_SIZE;
  800. }
  801. else
  802. ptxd->len = skb->len;
  803. ptxd->buff_stat = pDB->dma_addr | TX_DMA_ENABLE;
  804. sync();
  805. dev_kfree_skb(skb);
  806. aup->tx_head = (aup->tx_head + 1) & (NUM_TX_DMA - 1);
  807. dev->trans_start = jiffies;
  808. //spin_unlock_irqrestore(&aup->lock, flags);
  809. return 0;
  810. }
  811. static inline void update_rx_stats(struct net_device *dev, u32 status)
  812. {
  813. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  814. struct net_device_stats *ps = &aup->stats;
  815. ps->rx_packets++;
  816. if (status & RX_MCAST_FRAME)
  817. ps->multicast++;
  818. if (status & RX_ERROR) {
  819. ps->rx_errors++;
  820. if (status & RX_MISSED_FRAME)
  821. ps->rx_missed_errors++;
  822. if (status & (RX_OVERLEN | RX_OVERLEN | RX_LEN_ERROR))
  823. ps->rx_length_errors++;
  824. if (status & RX_CRC_ERROR)
  825. ps->rx_crc_errors++;
  826. if (status & RX_COLL)
  827. ps->collisions++;
  828. }
  829. else 
  830. ps->rx_bytes += status & RX_FRAME_LEN_MASK;
  831. }
  832. /*
  833.  * Au1000 receive routine.
  834.  */
  835. static int au1000_rx(struct net_device *dev)
  836. {
  837. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  838. struct sk_buff *skb;
  839. volatile rx_dma_t *prxd;
  840. u32 buff_stat, status;
  841. db_dest_t *pDB;
  842. if (au1000_debug > 4)
  843. printk("%s: au1000_rx head %dn", dev->name, aup->rx_head);
  844. prxd = aup->rx_dma_ring[aup->rx_head];
  845. buff_stat = prxd->buff_stat;
  846. while (buff_stat & RX_T_DONE)  {
  847. status = prxd->status;
  848. pDB = aup->rx_db_inuse[aup->rx_head];
  849. update_rx_stats(dev, status);
  850. if (!(status & RX_ERROR))  {
  851. /* good frame */
  852. skb = dev_alloc_skb((status & RX_FRAME_LEN_MASK) + 2);
  853. if (skb == NULL) {
  854. printk(KERN_ERR
  855.        "%s: Memory squeeze, dropping packet.n",
  856.        dev->name);
  857. aup->stats.rx_dropped++;
  858. continue;
  859. }
  860. skb->dev = dev;
  861. skb_reserve(skb, 2); /* 16 byte IP header align */
  862. eth_copy_and_sum(skb, (unsigned char *)pDB->vaddr, 
  863. status & RX_FRAME_LEN_MASK, 0);
  864. skb_put(skb, status & RX_FRAME_LEN_MASK); /* Make room */
  865. skb->protocol = eth_type_trans(skb, dev);
  866. netif_rx(skb); /* pass the packet to upper layers */
  867. }
  868. else {
  869. if (au1000_debug > 4) {
  870. if (status & RX_MISSED_FRAME) 
  871. printk("rx missn");
  872. if (status & RX_WDOG_TIMER) 
  873. printk("rx wdogn");
  874. if (status & RX_RUNT) 
  875. printk("rx runtn");
  876. if (status & RX_OVERLEN) 
  877. printk("rx overlenn");
  878. if (status & RX_COLL)
  879. printk("rx colln");
  880. if (status & RX_MII_ERROR)
  881. printk("rx mii errorn");
  882. if (status & RX_CRC_ERROR)
  883. printk("rx crc errorn");
  884. if (status & RX_LEN_ERROR)
  885. printk("rx len errorn");
  886. if (status & RX_U_CNTRL_FRAME)
  887. printk("rx u control framen");
  888. if (status & RX_MISSED_FRAME)
  889. printk("rx missn");
  890. }
  891. }
  892. prxd->buff_stat = (u32)(pDB->dma_addr | RX_DMA_ENABLE);
  893. aup->rx_head = (aup->rx_head + 1) & (NUM_RX_DMA - 1);
  894. sync();
  895. /* next descriptor */
  896. prxd = aup->rx_dma_ring[aup->rx_head];
  897. buff_stat = prxd->buff_stat;
  898. dev->last_rx = jiffies;
  899. }
  900. return 0;
  901. }
  902. /*
  903.  * Au1000 interrupt service routine.
  904.  */
  905. void au1000_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  906. {
  907. struct net_device *dev = (struct net_device *) dev_id;
  908. if (dev == NULL) {
  909. printk(KERN_ERR "%s: isr: null dev ptrn", dev->name);
  910. return;
  911. }
  912. au1000_rx(dev);
  913. au1000_tx_ack(dev);
  914. }
  915. /*
  916.  * The Tx ring has been full longer than the watchdog timeout
  917.  * value. The transmitter must be hung?
  918.  */
  919. static void au1000_tx_timeout(struct net_device *dev)
  920. {
  921. printk(KERN_ERR "%s: au1000_tx_timeout: dev=%pn", dev->name, dev);
  922. reset_mac(dev);
  923. au1000_init(dev);
  924. }
  925. static unsigned const ethernet_polynomial = 0x04c11db7U;
  926. static inline u32 ether_crc(int length, unsigned char *data)
  927. {
  928.     int crc = -1;
  929.     while(--length >= 0) {
  930. unsigned char current_octet = *data++;
  931. int bit;
  932. for (bit = 0; bit < 8; bit++, current_octet >>= 1)
  933. crc = (crc << 1) ^
  934. ((crc < 0) ^ (current_octet & 1) ? ethernet_polynomial : 0);
  935.     }
  936.     return crc;
  937. }
  938. static void set_rx_mode(struct net_device *dev)
  939. {
  940. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  941. /* fixme */
  942. if (au1000_debug > 4) 
  943. printk("%s: set_multicast: flags=%xn", dev->name, dev->flags);
  944. if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
  945. aup->mac->control |= MAC_PROMISCUOUS;
  946. printk(KERN_INFO "%s: Promiscuous mode enabled.n", dev->name);
  947. } else if ((dev->flags & IFF_ALLMULTI)  ||
  948.    dev->mc_count > MULTICAST_FILTER_LIMIT) {
  949. aup->mac->control |= MAC_PASS_ALL_MULTI;
  950. aup->mac->control &= ~MAC_PROMISCUOUS;
  951. printk(KERN_INFO "%s: Pass all multicastn", dev->name);
  952. } else {
  953. int i;
  954. struct dev_mc_list *mclist;
  955. u32 mc_filter[2]; /* Multicast hash filter */
  956. mc_filter[1] = mc_filter[0] = 0;
  957. for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
  958.  i++, mclist = mclist->next) {
  959. set_bit(ether_crc(ETH_ALEN, mclist->dmi_addr)>>26, mc_filter);
  960. }
  961. aup->mac->multi_hash_high = mc_filter[1];
  962. aup->mac->multi_hash_low = mc_filter[0];
  963. aup->mac->control |= MAC_HASH_MODE;
  964. }
  965. }
  966. static int au1000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
  967. {
  968. //struct au1000_private *aup = (struct au1000_private *) dev->priv;
  969. u16 *data = (u16 *)&rq->ifr_data;
  970. /* fixme */
  971. switch(cmd) { 
  972. case SIOCGMIIPHY: /* Get the address of the PHY in use. */
  973. case SIOCDEVPRIVATE: /* binary compat, remove in 2.5 */
  974. data[0] = PHY_ADDRESS;
  975. case SIOCGMIIREG: /* Read the specified MII register. */
  976. case SIOCDEVPRIVATE+1: /* binary compat, remove in 2.5 */
  977. //data[3] = mdio_read(ioaddr, data[0], data[1]); 
  978. return 0;
  979. case SIOCSMIIREG: /* Write the specified MII register */
  980. case SIOCDEVPRIVATE+2: /* binary compat, remove in 2.5 */
  981. if (!capable(CAP_NET_ADMIN))
  982. return -EPERM;
  983. //mdio_write(ioaddr, data[0], data[1], data[2]);
  984. return 0;
  985. default:
  986. return -EOPNOTSUPP;
  987. }
  988. }
  989. static int au1000_set_config(struct net_device *dev, struct ifmap *map)
  990. {
  991. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  992. u16 control;
  993. if (au1000_debug > 4)  {
  994. printk("%s: set_config called: dev->if_port %d map->port %xn", 
  995. dev->name, dev->if_port, map->port);
  996. }
  997. switch(map->port){
  998. case IF_PORT_UNKNOWN: /* use auto here */   
  999. printk("auto\n");
  1000. dev->if_port = map->port;
  1001. /* Link Down: the timer will bring it up */
  1002. netif_carrier_off(dev);
  1003. /* read current control */
  1004. control = mdio_read(dev, aup->phy_addr, MII_CONTROL);
  1005. control &= ~(MII_CNTL_FDX | MII_CNTL_F100);
  1006. /* enable auto negotiation and reset the negotiation */
  1007. mdio_write(dev, aup->phy_addr,
  1008.    MII_CONTROL, control | MII_CNTL_AUTO | MII_CNTL_RST_AUTO);
  1009. break;
  1010.     
  1011. case IF_PORT_10BASET: /* 10BaseT */         
  1012. printk("10baseTn");
  1013. dev->if_port = map->port;
  1014. /* Link Down: the timer will bring it up */
  1015. netif_carrier_off(dev);
  1016. /* set Speed to 10Mbps, Half Duplex */
  1017. control = mdio_read(dev, aup->phy_addr, MII_CONTROL);
  1018. printk("read control %xn", control);
  1019. control &= ~(MII_CNTL_F100 | MII_CNTL_AUTO | MII_CNTL_FDX);
  1020. /* disable auto negotiation and force 10M/HD mode*/
  1021. mdio_write(dev, aup->phy_addr, MII_CONTROL, control);
  1022. break;
  1023.     
  1024. case IF_PORT_100BASET: /* 100BaseT */
  1025. case IF_PORT_100BASETX: /* 100BaseTx */ 
  1026. printk("100 base T/TXn");
  1027. dev->if_port = map->port;
  1028. /* Link Down: the timer will bring it up */
  1029. netif_carrier_off(dev);
  1030. /* set Speed to 100Mbps, Half Duplex */
  1031. /* disable auto negotiation and enable 100MBit Mode */
  1032. control = mdio_read(dev, aup->phy_addr, MII_CONTROL);
  1033. printk("read control %xn", control);
  1034. control &= ~(MII_CNTL_AUTO | MII_CNTL_FDX);
  1035. control |= MII_CNTL_F100;
  1036. mdio_write(dev, aup->phy_addr, MII_CONTROL, control);
  1037. break;
  1038.     
  1039. case IF_PORT_100BASEFX: /* 100BaseFx */
  1040. printk("100 Base FXn");
  1041. dev->if_port = map->port;
  1042. /* Link Down: the timer will bring it up */
  1043. netif_carrier_off(dev);
  1044. /* set Speed to 100Mbps, Full Duplex */
  1045. /* disable auto negotiation and enable 100MBit Mode */
  1046. control = mdio_read(dev, aup->phy_addr, MII_CONTROL);
  1047. control &= ~MII_CNTL_AUTO;
  1048. control |=  MII_CNTL_F100 | MII_CNTL_FDX;
  1049. mdio_write(dev, aup->phy_addr, MII_CONTROL, control);
  1050. break;
  1051. case IF_PORT_10BASE2: /* 10Base2 */
  1052. case IF_PORT_AUI: /* AUI */
  1053. /* These Modes are not supported (are they?)*/
  1054. printk(KERN_INFO "Not supported");
  1055. return -EOPNOTSUPP;
  1056. break;
  1057.     
  1058. default:
  1059. printk("Invalid");
  1060. return -EINVAL;
  1061. }
  1062. return 0;
  1063. }
  1064. static struct net_device_stats *au1000_get_stats(struct net_device *dev)
  1065. {
  1066. struct au1000_private *aup = (struct au1000_private *) dev->priv;
  1067. if (au1000_debug > 4)
  1068. printk("%s: au1000_get_stats: dev=%pn", dev->name, dev);
  1069. if (netif_device_present(dev)) {
  1070. return &aup->stats;
  1071. }
  1072. return 0;
  1073. }