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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* 3c527.c: 3Com Etherlink/MC32 driver for Linux 2.4
  2.  *
  3.  * (c) Copyright 1998 Red Hat Software Inc
  4.  * Written by Alan Cox. 
  5.  * Further debugging by Carl Drougge.
  6.  *      Modified by Richard Procter (rnp@netlink.co.nz)
  7.  *
  8.  * Based on skeleton.c written 1993-94 by Donald Becker and ne2.c
  9.  * (for the MCA stuff) written by Wim Dumon.
  10.  *
  11.  * Thanks to 3Com for making this possible by providing me with the
  12.  * documentation.
  13.  *
  14.  * This software may be used and distributed according to the terms
  15.  * of the GNU General Public License, incorporated herein by reference.
  16.  *
  17.  */
  18. #define DRV_NAME "3c527"
  19. #define DRV_VERSION "0.6a"
  20. #define DRV_RELDATE "2001/11/17"
  21. static const char *version =
  22. DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Richard Proctor (rnp@netlink.co.nz)n";
  23. /**
  24.  * DOC: Traps for the unwary
  25.  *
  26.  * The diagram (Figure 1-1) and the POS summary disagree with the
  27.  * "Interrupt Level" section in the manual.
  28.  *
  29.  * The manual contradicts itself when describing the minimum number 
  30.  * buffers in the 'configure lists' command. 
  31.  * My card accepts a buffer config of 4/4. 
  32.  *
  33.  * Setting the SAV BP bit does not save bad packets, but
  34.  * only enables RX on-card stats collection. 
  35.  *
  36.  * The documentation in places seems to miss things. In actual fact
  37.  * I've always eventually found everything is documented, it just
  38.  * requires careful study.
  39.  *
  40.  * DOC: Theory Of Operation
  41.  *
  42.  * The 3com 3c527 is a 32bit MCA bus mastering adapter with a large
  43.  * amount of on board intelligence that housekeeps a somewhat dumber
  44.  * Intel NIC. For performance we want to keep the transmit queue deep
  45.  * as the card can transmit packets while fetching others from main
  46.  * memory by bus master DMA. Transmission and reception are driven by
  47.  * circular buffer queues.
  48.  *
  49.  * The mailboxes can be used for controlling how the card traverses
  50.  * its buffer rings, but are used only for inital setup in this
  51.  * implementation.  The exec mailbox allows a variety of commands to
  52.  * be executed. Each command must complete before the next is
  53.  * executed. Primarily we use the exec mailbox for controlling the
  54.  * multicast lists.  We have to do a certain amount of interesting
  55.  * hoop jumping as the multicast list changes can occur in interrupt
  56.  * state when the card has an exec command pending. We defer such
  57.  * events until the command completion interrupt.
  58.  *
  59.  * A copy break scheme (taken from 3c59x.c) is employed whereby
  60.  * received frames exceeding a configurable length are passed
  61.  * directly to the higher networking layers without incuring a copy,
  62.  * in what amounts to a time/space trade-off.
  63.  *  
  64.  * The card also keeps a large amount of statistical information
  65.  * on-board. In a perfect world, these could be used safely at no
  66.  * cost. However, lacking information to the contrary, processing
  67.  * them without races would involve so much extra complexity as to
  68.  * make it unworthwhile to do so. In the end, a hybrid SW/HW
  69.  * implementation was made necessary --- see mc32_update_stats().  
  70.  *
  71.  * DOC: Notes
  72.  *
  73.  * It should be possible to use two or more cards, but at this stage
  74.  * only by loading two copies of the same module.
  75.  *
  76.  * The on-board 82586 NIC has trouble receiving multiple
  77.  * back-to-back frames and so is likely to drop packets from fast
  78.  * senders.
  79. **/
  80. #include <linux/module.h>
  81. #include <linux/kernel.h>
  82. #include <linux/sched.h>
  83. #include <linux/types.h>
  84. #include <linux/fcntl.h>
  85. #include <linux/interrupt.h>
  86. #include <linux/ptrace.h>
  87. #include <linux/mca.h>
  88. #include <linux/ioport.h>
  89. #include <linux/in.h>
  90. #include <linux/slab.h>
  91. #include <linux/string.h>
  92. #include <linux/ethtool.h>
  93. #include <asm/uaccess.h>
  94. #include <asm/system.h>
  95. #include <asm/bitops.h>
  96. #include <asm/io.h>
  97. #include <asm/dma.h>
  98. #include <linux/errno.h>
  99. #include <linux/init.h>
  100. #include <linux/netdevice.h>
  101. #include <linux/etherdevice.h>
  102. #include <linux/skbuff.h>
  103. #include <linux/if_ether.h>
  104. #include "3c527.h"
  105. /*
  106.  * The name of the card. Is used for messages and in the requests for
  107.  * io regions, irqs and dma channels
  108.  */
  109. static const char* cardname = DRV_NAME;
  110. /* use 0 for production, 1 for verification, >2 for debug */
  111. #ifndef NET_DEBUG
  112. #define NET_DEBUG 2
  113. #endif
  114. #undef DEBUG_IRQ
  115. static unsigned int mc32_debug = NET_DEBUG;
  116. /* The number of low I/O ports used by the ethercard. */
  117. #define MC32_IO_EXTENT 8
  118. /* As implemented, values must be a power-of-2 -- 4/8/16/32 */ 
  119. #define TX_RING_LEN     32       /* Typically the card supports 37  */
  120. #define RX_RING_LEN     8        /*     "       "        "          */
  121. /* Copy break point, see above for details. 
  122.  * Setting to > 1512 effectively disables this feature. */     
  123. #define RX_COPYBREAK    200      /* Value from 3c59x.c */
  124. /* Issue the 82586 workaround command - this is for "busy lans", but
  125.  * basically means for all lans now days - has a performance (latency) 
  126.  * cost, but best set. */ 
  127. static const int WORKAROUND_82586=1;
  128. /* Pointers to buffers and their on-card records */
  129. struct mc32_ring_desc 
  130. {
  131. volatile struct skb_header *p;                    
  132. struct sk_buff *skb;          
  133. };
  134. /* Information that needs to be kept for each board. */
  135. struct mc32_local 
  136. {
  137. struct net_device_stats net_stats;
  138. int slot;
  139. volatile struct mc32_mailbox *rx_box;
  140. volatile struct mc32_mailbox *tx_box;
  141. volatile struct mc32_mailbox *exec_box;
  142.         volatile struct mc32_stats *stats;    /* Start of on-card statistics */
  143.         u16 tx_chain;           /* Transmit list start offset */
  144. u16 rx_chain;           /* Receive list start offset */
  145.         u16 tx_len;             /* Transmit list count */ 
  146.         u16 rx_len;             /* Receive list count */
  147. u32 base;
  148. u16 exec_pending;
  149. u16 mc_reload_wait; /* a multicast load request is pending */
  150. u32 mc_list_valid; /* True when the mclist is set */
  151. u16 xceiver_state;      /* Current transceiver state. bitmapped */ 
  152. u16 desired_state;      /* The state we want the transceiver to be in */ 
  153. atomic_t tx_count; /* buffers left */
  154. wait_queue_head_t event;
  155. struct mc32_ring_desc tx_ring[TX_RING_LEN]; /* Host Transmit ring */
  156. struct mc32_ring_desc rx_ring[RX_RING_LEN]; /* Host Receive ring */
  157. u16 tx_ring_tail;       /* index to tx de-queue end */
  158. u16 tx_ring_head;       /* index to tx en-queue end */
  159. u16 rx_ring_tail;       /* index to rx de-queue end */ 
  160. };
  161. /* The station (ethernet) address prefix, used for a sanity check. */
  162. #define SA_ADDR0 0x02
  163. #define SA_ADDR1 0x60
  164. #define SA_ADDR2 0xAC
  165. struct mca_adapters_t {
  166. unsigned int id;
  167. char *name;
  168. };
  169. const struct mca_adapters_t mc32_adapters[] = {
  170. { 0x0041, "3COM EtherLink MC/32" },
  171. { 0x8EF5, "IBM High Performance Lan Adapter" },
  172. { 0x0000, NULL }
  173. };
  174. /* Macros for ring index manipulations */ 
  175. static inline u16 next_rx(u16 rx) { return (rx+1)&(RX_RING_LEN-1); };
  176. static inline u16 prev_rx(u16 rx) { return (rx-1)&(RX_RING_LEN-1); };
  177. static inline u16 next_tx(u16 tx) { return (tx+1)&(TX_RING_LEN-1); };
  178. /* Index to functions, as function prototypes. */
  179. extern int mc32_probe(struct net_device *dev);
  180. static int mc32_probe1(struct net_device *dev, int ioaddr);
  181. static int      mc32_command(struct net_device *dev, u16 cmd, void *data, int len);
  182. static int mc32_open(struct net_device *dev);
  183. static void mc32_timeout(struct net_device *dev);
  184. static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev);
  185. static void mc32_interrupt(int irq, void *dev_id, struct pt_regs *regs);
  186. static int mc32_close(struct net_device *dev);
  187. static struct net_device_stats *mc32_get_stats(struct net_device *dev);
  188. static void mc32_set_multicast_list(struct net_device *dev);
  189. static void mc32_reset_multicast_list(struct net_device *dev);
  190. static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
  191. /**
  192.  * mc32_probe  - Search for supported boards
  193.  * @dev: device to probe
  194.  *
  195.  * Because MCA bus is a real bus and we can scan for cards we could do a
  196.  * single scan for all boards here. Right now we use the passed in device
  197.  * structure and scan for only one board. This needs fixing for modules
  198.  * in paticular.
  199.  */
  200. int __init mc32_probe(struct net_device *dev)
  201. {
  202. static int current_mca_slot = -1;
  203. int i;
  204. int adapter_found = 0;
  205. SET_MODULE_OWNER(dev);
  206. /* Do not check any supplied i/o locations. 
  207.    POS registers usually don't fail :) */
  208. /* MCA cards have POS registers.  
  209.    Autodetecting MCA cards is extremely simple. 
  210.    Just search for the card. */
  211. for(i = 0; (mc32_adapters[i].name != NULL) && !adapter_found; i++) {
  212. current_mca_slot = 
  213. mca_find_unused_adapter(mc32_adapters[i].id, 0);
  214. if((current_mca_slot != MCA_NOTFOUND) && !adapter_found) {
  215. if(!mc32_probe1(dev, current_mca_slot))
  216. {
  217. mca_set_adapter_name(current_mca_slot, 
  218. mc32_adapters[i].name);
  219. mca_mark_as_used(current_mca_slot);
  220. return 0;
  221. }
  222. }
  223. }
  224. return -ENODEV;
  225. }
  226. /**
  227.  * mc32_probe1 - Check a given slot for a board and test the card
  228.  * @dev:  Device structure to fill in
  229.  * @slot: The MCA bus slot being used by this card
  230.  *
  231.  * Decode the slot data and configure the card structures. Having done this we
  232.  * can reset the card and configure it. The card does a full self test cycle
  233.  * in firmware so we have to wait for it to return and post us either a 
  234.  * failure case or some addresses we use to find the board internals.
  235.  */
  236. static int __init mc32_probe1(struct net_device *dev, int slot)
  237. {
  238. static unsigned version_printed;
  239. int i, err;
  240. u8 POS;
  241. u32 base;
  242. struct mc32_local *lp;
  243. static u16 mca_io_bases[]={
  244. 0x7280,0x7290,
  245. 0x7680,0x7690,
  246. 0x7A80,0x7A90,
  247. 0x7E80,0x7E90
  248. };
  249. static u32 mca_mem_bases[]={
  250. 0x00C0000,
  251. 0x00C4000,
  252. 0x00C8000,
  253. 0x00CC000,
  254. 0x00D0000,
  255. 0x00D4000,
  256. 0x00D8000,
  257. 0x00DC000
  258. };
  259. static char *failures[]={
  260. "Processor instruction",
  261. "Processor data bus",
  262. "Processor data bus",
  263. "Processor data bus",
  264. "Adapter bus",
  265. "ROM checksum",
  266. "Base RAM",
  267. "Extended RAM",
  268. "82586 internal loopback",
  269. "82586 initialisation failure",
  270. "Adapter list configuration error"
  271. };
  272. /* Time to play MCA games */
  273. if (mc32_debug  &&  version_printed++ == 0)
  274. printk(KERN_DEBUG "%s", version);
  275. printk(KERN_INFO "%s: %s found in slot %d:", dev->name, cardname, slot);
  276. POS = mca_read_stored_pos(slot, 2);
  277. if(!(POS&1))
  278. {
  279. printk(" disabled.n");
  280. return -ENODEV;
  281. }
  282. /* Fill in the 'dev' fields. */
  283. dev->base_addr = mca_io_bases[(POS>>1)&7];
  284. dev->mem_start = mca_mem_bases[(POS>>4)&7];
  285. POS = mca_read_stored_pos(slot, 4);
  286. if(!(POS&1))
  287. {
  288. printk("memory window disabled.n");
  289. return -ENODEV;
  290. }
  291. POS = mca_read_stored_pos(slot, 5);
  292. i=(POS>>4)&3;
  293. if(i==3)
  294. {
  295. printk("invalid memory window.n");
  296. return -ENODEV;
  297. }
  298. i*=16384;
  299. i+=16384;
  300. dev->mem_end=dev->mem_start + i;
  301. dev->irq = ((POS>>2)&3)+9;
  302. if(!request_region(dev->base_addr, MC32_IO_EXTENT, cardname))
  303. {
  304. printk("io 0x%3lX, which is busy.n", dev->base_addr);
  305. return -EBUSY;
  306. }
  307. printk("io 0x%3lX irq %d mem 0x%lX (%dK)n",
  308. dev->base_addr, dev->irq, dev->mem_start, i/1024);
  309. /* We ought to set the cache line size here.. */
  310. /*
  311.  * Go PROM browsing
  312.  */
  313.  
  314. printk("%s: Address ", dev->name);
  315.  
  316. /* Retrieve and print the ethernet address. */
  317. for (i = 0; i < 6; i++)
  318. {
  319. mca_write_pos(slot, 6, i+12);
  320. mca_write_pos(slot, 7, 0);
  321. printk(" %2.2x", dev->dev_addr[i] = mca_read_pos(slot,3));
  322. }
  323. mca_write_pos(slot, 6, 0);
  324. mca_write_pos(slot, 7, 0);
  325. POS = mca_read_stored_pos(slot, 4);
  326. if(POS&2)
  327. printk(" : BNC port selected.n");
  328. else 
  329. printk(" : AUI port selected.n");
  330. POS=inb(dev->base_addr+HOST_CTRL);
  331. POS|=HOST_CTRL_ATTN|HOST_CTRL_RESET;
  332. POS&=~HOST_CTRL_INTE;
  333. outb(POS, dev->base_addr+HOST_CTRL);
  334. /* Reset adapter */
  335. udelay(100);
  336. /* Reset off */
  337. POS&=~(HOST_CTRL_ATTN|HOST_CTRL_RESET);
  338. outb(POS, dev->base_addr+HOST_CTRL);
  339. udelay(300);
  340. /*
  341.  * Grab the IRQ
  342.  */
  343. i = request_irq(dev->irq, &mc32_interrupt, SA_SHIRQ, dev->name, dev);
  344. if (i) {
  345. release_region(dev->base_addr, MC32_IO_EXTENT);
  346. printk(KERN_ERR "%s: unable to get IRQ %d.n", dev->name, dev->irq);
  347. return i;
  348. }
  349. /* Initialize the device structure. */
  350. dev->priv = kmalloc(sizeof(struct mc32_local), GFP_KERNEL);
  351. if (dev->priv == NULL)
  352. {
  353. err = -ENOMEM;
  354. goto err_exit_irq; 
  355. }
  356. memset(dev->priv, 0, sizeof(struct mc32_local));
  357. lp = dev->priv;
  358. lp->slot = slot;
  359. i=0;
  360. base = inb(dev->base_addr);
  361. while(base == 0xFF)
  362. {
  363. i++;
  364. if(i == 1000)
  365. {
  366. printk(KERN_ERR "%s: failed to boot adapter.n", dev->name);
  367. err = -ENODEV; 
  368. goto err_exit_free;
  369. }
  370. udelay(1000);
  371. if(inb(dev->base_addr+2)&(1<<5))
  372. base = inb(dev->base_addr);
  373. }
  374. if(base>0)
  375. {
  376. if(base < 0x0C)
  377. printk(KERN_ERR "%s: %s%s.n", dev->name, failures[base-1],
  378. base<0x0A?" test failure":"");
  379. else
  380. printk(KERN_ERR "%s: unknown failure %d.n", dev->name, base);
  381. err = -ENODEV; 
  382. goto err_exit_free;
  383. }
  384. base=0;
  385. for(i=0;i<4;i++)
  386. {
  387. int n=0;
  388. while(!(inb(dev->base_addr+2)&(1<<5)))
  389. {
  390. n++;
  391. udelay(50);
  392. if(n>100)
  393. {
  394. printk(KERN_ERR "%s: mailbox read fail (%d).n", dev->name, i);
  395. err = -ENODEV;
  396. goto err_exit_free;
  397. }
  398. }
  399. base|=(inb(dev->base_addr)<<(8*i));
  400. }
  401. lp->exec_box=bus_to_virt(dev->mem_start+base);
  402. base=lp->exec_box->data[1]<<16|lp->exec_box->data[0];  
  403. lp->base = dev->mem_start+base;
  404. lp->rx_box=bus_to_virt(lp->base + lp->exec_box->data[2]); 
  405. lp->tx_box=bus_to_virt(lp->base + lp->exec_box->data[3]);
  406. lp->stats = bus_to_virt(lp->base + lp->exec_box->data[5]);
  407. /*
  408.  * Descriptor chains (card relative)
  409.  */
  410.  
  411. lp->tx_chain  = lp->exec_box->data[8];   /* Transmit list start offset */
  412. lp->rx_chain  = lp->exec_box->data[10];  /* Receive list start offset */
  413. lp->tx_len  = lp->exec_box->data[9];   /* Transmit list count */ 
  414. lp->rx_len  = lp->exec_box->data[11];  /* Receive list count */
  415. init_waitqueue_head(&lp->event);
  416. printk("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.n",
  417. dev->name, lp->exec_box->data[12], lp->rx_len, lp->tx_len, lp->base);
  418. dev->open = mc32_open;
  419. dev->stop = mc32_close;
  420. dev->hard_start_xmit = mc32_send_packet;
  421. dev->get_stats = mc32_get_stats;
  422. dev->set_multicast_list = mc32_set_multicast_list;
  423. dev->tx_timeout = mc32_timeout;
  424. dev->watchdog_timeo = HZ*5; /* Board does all the work */
  425. dev->do_ioctl = netdev_ioctl;
  426. lp->xceiver_state = HALTED; 
  427. lp->tx_ring_tail=lp->tx_ring_head=0;
  428. /* Fill in the fields of the device structure with ethernet values. */
  429. ether_setup(dev);
  430. return 0;
  431. err_exit_free:
  432. kfree(dev->priv);
  433. err_exit_irq:
  434. free_irq(dev->irq, dev);
  435. release_region(dev->base_addr, MC32_IO_EXTENT);
  436. return err;
  437. }
  438. /**
  439.  * mc32_ready_poll - wait until we can feed it a command
  440.  * @dev: The device to wait for
  441.  *
  442.  * Wait until the card becomes ready to accept a command via the
  443.  * command register. This tells us nothing about the completion
  444.  * status of any pending commands and takes very little time at all.
  445.  */
  446.  
  447. static void mc32_ready_poll(struct net_device *dev)
  448. {
  449. int ioaddr = dev->base_addr;
  450. while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
  451. }
  452. /**
  453.  * mc32_command_nowait - send a command non blocking
  454.  * @dev: The 3c527 to issue the command to
  455.  * @cmd: The command word to write to the mailbox
  456.  * @data: A data block if the command expects one
  457.  * @len: Length of the data block
  458.  *
  459.  * Send a command from interrupt state. If there is a command
  460.  * currently being executed then we return an error of -1. It simply
  461.  * isn't viable to wait around as commands may be slow. Providing we
  462.  * get in, we busy wait for the board to become ready to accept the
  463.  * command and issue it. We do not wait for the command to complete
  464.  * --- the card will interrupt us when it's done.
  465.  */
  466. static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len)
  467. {
  468. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  469. int ioaddr = dev->base_addr;
  470. if(lp->exec_pending)
  471. return -1;
  472. lp->exec_pending=3;
  473. lp->exec_box->mbox=0;
  474. lp->exec_box->mbox=cmd;
  475. memcpy((void *)lp->exec_box->data, data, len);
  476. barrier(); /* the memcpy forgot the volatile so be sure */
  477. /* Send the command */
  478. while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
  479. outb(1<<6, ioaddr+HOST_CMD);
  480. return 0;
  481. }
  482. /**
  483.  * mc32_command - send a command and sleep until completion
  484.  * @dev: The 3c527 card to issue the command to
  485.  * @cmd: The command word to write to the mailbox
  486.  * @data: A data block if the command expects one
  487.  * @len: Length of the data block
  488.  *
  489.  * Sends exec commands in a user context. This permits us to wait around
  490.  * for the replies and also to wait for the command buffer to complete
  491.  * from a previous command before we execute our command. After our 
  492.  * command completes we will complete any pending multicast reload
  493.  * we blocked off by hogging the exec buffer.
  494.  *
  495.  * You feed the card a command, you wait, it interrupts you get a 
  496.  * reply. All well and good. The complication arises because you use
  497.  * commands for filter list changes which come in at bh level from things
  498.  * like IPV6 group stuff.
  499.  *
  500.  * We have a simple state machine
  501.  *
  502.  * 0 - nothing issued
  503.  *
  504.  * 1 - command issued, wait reply
  505.  *
  506.  * 2 - reply waiting - reader then goes to state 0
  507.  *
  508.  * 3 - command issued, trash reply. In which case the irq
  509.  *   takes it back to state 0
  510.  *
  511.  */
  512.   
  513. static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len)
  514. {
  515. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  516. int ioaddr = dev->base_addr;
  517. unsigned long flags;
  518. int ret = 0;
  519. /*
  520.  * Wait for a command
  521.  */
  522.  
  523. save_flags(flags);
  524. cli();
  525.  
  526. while(lp->exec_pending)
  527. sleep_on(&lp->event);
  528. /*
  529.  * Issue mine
  530.  */
  531. lp->exec_pending=1;
  532. restore_flags(flags);
  533. lp->exec_box->mbox=0;
  534. lp->exec_box->mbox=cmd;
  535. memcpy((void *)lp->exec_box->data, data, len);
  536. barrier(); /* the memcpy forgot the volatile so be sure */
  537. /* Send the command */
  538. while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
  539. outb(1<<6, ioaddr+HOST_CMD);
  540. save_flags(flags);
  541. cli();
  542. while(lp->exec_pending!=2)
  543. sleep_on(&lp->event);
  544. lp->exec_pending=0;
  545. restore_flags(flags);
  546. if(lp->exec_box->mbox&(1<<13))
  547. ret = -1;
  548. /*
  549.  * A multicast set got blocked - do it now
  550.  */
  551. if(lp->mc_reload_wait)
  552. {
  553. mc32_reset_multicast_list(dev);
  554. }
  555. return ret;
  556. }
  557. /**
  558.  * mc32_start_transceiver - tell board to restart tx/rx
  559.  * @dev: The 3c527 card to issue the command to
  560.  *
  561.  * This may be called from the interrupt state, where it is used
  562.  * to restart the rx ring if the card runs out of rx buffers. 
  563.  *
  564.  *  First, we check if it's ok to start the transceiver. We then show
  565.  *  the card where to start in the rx ring and issue the
  566.  *  commands to start reception and transmission. We don't wait
  567.  *  around for these to complete.
  568.  */ 
  569. static void mc32_start_transceiver(struct net_device *dev) {
  570. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  571. int ioaddr = dev->base_addr;
  572. /* Ignore RX overflow on device closure */ 
  573. if (lp->desired_state==HALTED)  
  574. return; 
  575. mc32_ready_poll(dev); 
  576. lp->tx_box->mbox=0;
  577. lp->rx_box->mbox=0;
  578. /* Give the card the offset to the post-EOL-bit RX descriptor */ 
  579. lp->rx_box->data[0]=lp->rx_ring[prev_rx(lp->rx_ring_tail)].p->next; 
  580. outb(HOST_CMD_START_RX, ioaddr+HOST_CMD);      
  581. mc32_ready_poll(dev); 
  582. outb(HOST_CMD_RESTRT_TX, ioaddr+HOST_CMD);   /* card ignores this on RX restart */ 
  583. /* We are not interrupted on start completion */ 
  584. lp->xceiver_state=RUNNING; 
  585. }
  586. /**
  587.  * mc32_halt_transceiver - tell board to stop tx/rx
  588.  * @dev: The 3c527 card to issue the command to
  589.  *
  590.  * We issue the commands to halt the card's transceiver. In fact,
  591.  * after some experimenting we now simply tell the card to
  592.  * suspend. When issuing aborts occasionally odd things happened.
  593.  *
  594.  * We then sleep until the card has notified us that both rx and
  595.  * tx have been suspended.
  596.  */ 
  597. static void mc32_halt_transceiver(struct net_device *dev) 
  598. {
  599. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  600. int ioaddr = dev->base_addr;
  601. unsigned long flags;
  602. mc32_ready_poll(dev);
  603. lp->tx_box->mbox=0;
  604. lp->rx_box->mbox=0;
  605. outb(HOST_CMD_SUSPND_RX, ioaddr+HOST_CMD);
  606. mc32_ready_poll(dev); 
  607. outb(HOST_CMD_SUSPND_TX, ioaddr+HOST_CMD);
  608. save_flags(flags);
  609. cli();
  610. while(lp->xceiver_state!=HALTED) 
  611. sleep_on(&lp->event); 
  612. restore_flags(flags);
  613. /**
  614.  * mc32_load_rx_ring - load the ring of receive buffers
  615.  * @dev: 3c527 to build the ring for
  616.  *
  617.  * This initalises the on-card and driver datastructures to
  618.  * the point where mc32_start_transceiver() can be called.
  619.  *
  620.  * The card sets up the receive ring for us. We are required to use the
  621.  * ring it provides although we can change the size of the ring.
  622.  *
  623.  *  We allocate an sk_buff for each ring entry in turn and
  624.  *  initalise its house-keeping info. At the same time, we read
  625.  *  each 'next' pointer in our rx_ring array. This reduces slow
  626.  *  shared-memory reads and makes it easy to access predecessor
  627.  *  descriptors.
  628.  *
  629.  * We then set the end-of-list bit for the last entry so that the
  630.  *  card will know when it has run out of buffers.
  631.  */
  632.  
  633. static int mc32_load_rx_ring(struct net_device *dev)
  634. {
  635. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  636. int i;
  637. u16 rx_base;
  638. volatile struct skb_header *p;
  639. rx_base=lp->rx_chain;
  640. for(i=0;i<RX_RING_LEN;i++)
  641. {
  642. lp->rx_ring[i].skb=alloc_skb(1532, GFP_KERNEL);
  643. skb_reserve(lp->rx_ring[i].skb, 18);  
  644. if(lp->rx_ring[i].skb==NULL)
  645. {
  646. for(;i>=0;i--)
  647. kfree_skb(lp->rx_ring[i].skb);
  648. return -ENOBUFS;
  649. }
  650. p=bus_to_virt(lp->base+rx_base);
  651. p->control=0;
  652. p->data=virt_to_bus(lp->rx_ring[i].skb->data);
  653. p->status=0;
  654. p->length=1532;
  655. lp->rx_ring[i].p=p; 
  656. rx_base=p->next; 
  657. }
  658. lp->rx_ring[i-1].p->control |= CONTROL_EOL;
  659. lp->rx_ring_tail=0;
  660. return 0;
  661. }
  662. /**
  663.  * mc32_flush_rx_ring - free the ring of receive buffers
  664.  * @lp: Local data of 3c527 to flush the rx ring of
  665.  *
  666.  * Free the buffer for each ring slot. This may be called 
  667.  *      before mc32_load_rx_ring(), eg. on error in mc32_open().
  668.  */
  669. static void mc32_flush_rx_ring(struct net_device *dev)
  670. {
  671. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  672. struct sk_buff *skb;
  673. int i; 
  674. for(i=0; i < RX_RING_LEN; i++) 
  675. skb = lp->rx_ring[i].skb;
  676. if (skb!=NULL) {
  677. kfree_skb(skb);
  678. skb=NULL; 
  679. }
  680. lp->rx_ring[i].p=NULL; 
  681. }
  682. /**
  683.  * mc32_load_tx_ring - load transmit ring
  684.  * @dev: The 3c527 card to issue the command to
  685.  *
  686.  * This sets up the host transmit data-structures. 
  687.  *
  688.  * First, we obtain from the card it's current postion in the tx
  689.  * ring, so that we will know where to begin transmitting
  690.  * packets.
  691.  * 
  692.  *  Then, we read the 'next' pointers from the on-card tx ring into
  693.  *   our tx_ring array to reduce slow shared-mem reads. Finally, we
  694.  *  intitalise the tx house keeping variables.
  695.  * 
  696.  */ 
  697. static void mc32_load_tx_ring(struct net_device *dev)
  698. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  699. volatile struct skb_header *p;
  700. int i; 
  701. u16 tx_base;
  702. tx_base=lp->tx_box->data[0]; 
  703. for(i=0;i<lp->tx_len;i++) 
  704. {
  705. p=bus_to_virt(lp->base+tx_base);
  706. lp->tx_ring[i].p=p; 
  707. lp->tx_ring[i].skb=NULL;
  708. tx_base=p->next;
  709. }
  710. /* -1 so that tx_ring_head cannot "lap" tx_ring_tail,           */
  711. /* which would be bad news for mc32_tx_ring as cur. implemented */ 
  712. atomic_set(&lp->tx_count, TX_RING_LEN-1); 
  713. lp->tx_ring_head=lp->tx_ring_tail=0; 
  714. /**
  715.  * mc32_flush_tx_ring  - free transmit ring
  716.  * @lp: Local data of 3c527 to flush the tx ring of
  717.  *
  718.  * We have to consider two cases here. We want to free the pending
  719.  * buffers only. If the ring buffer head is past the start then the
  720.  * ring segment we wish to free wraps through zero. The tx ring 
  721.  * house-keeping variables are then reset.
  722.  */
  723. static void mc32_flush_tx_ring(struct net_device *dev)
  724. {
  725. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  726. if(lp->tx_ring_tail!=lp->tx_ring_head)
  727. {
  728. int i;
  729. if(lp->tx_ring_tail < lp->tx_ring_head)
  730. {
  731. for(i=lp->tx_ring_tail;i<lp->tx_ring_head;i++)
  732. {
  733. dev_kfree_skb(lp->tx_ring[i].skb);
  734. lp->tx_ring[i].skb=NULL;
  735. lp->tx_ring[i].p=NULL; 
  736. }
  737. }
  738. else
  739. {
  740. for(i=lp->tx_ring_tail; i<TX_RING_LEN; i++) 
  741. {
  742. dev_kfree_skb(lp->tx_ring[i].skb);
  743. lp->tx_ring[i].skb=NULL;
  744. lp->tx_ring[i].p=NULL; 
  745. }
  746. for(i=0; i<lp->tx_ring_head; i++) 
  747. {
  748. dev_kfree_skb(lp->tx_ring[i].skb);
  749. lp->tx_ring[i].skb=NULL;
  750. lp->tx_ring[i].p=NULL; 
  751. }
  752. }
  753. }
  754. atomic_set(&lp->tx_count, 0); 
  755. lp->tx_ring_tail=lp->tx_ring_head=0;
  756. }
  757.  
  758. /**
  759.  * mc32_open - handle 'up' of card
  760.  * @dev: device to open
  761.  *
  762.  * The user is trying to bring the card into ready state. This requires
  763.  * a brief dialogue with the card. Firstly we enable interrupts and then
  764.  * 'indications'. Without these enabled the card doesn't bother telling
  765.  * us what it has done. This had me puzzled for a week.
  766.  *
  767.  * We configure the number of card descriptors, then load the network
  768.  * address and multicast filters. Turn on the workaround mode. This
  769.  * works around a bug in the 82586 - it asks the firmware to do
  770.  * so. It has a performance (latency) hit but is needed on busy
  771.  * [read most] lans. We load the ring with buffers then we kick it
  772.  * all off.
  773.  */
  774. static int mc32_open(struct net_device *dev)
  775. {
  776. int ioaddr = dev->base_addr;
  777. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  778. u8 one=1;
  779. u8 regs;
  780. u16 descnumbuffs[2] = {TX_RING_LEN, RX_RING_LEN};
  781. /*
  782.  * Interrupts enabled
  783.  */
  784. regs=inb(ioaddr+HOST_CTRL);
  785. regs|=HOST_CTRL_INTE;
  786. outb(regs, ioaddr+HOST_CTRL);
  787. /*
  788.  * Send the indications on command
  789.  */
  790. mc32_command(dev, 4, &one, 2);
  791. /*
  792.  * Poke it to make sure it's really dead. 
  793.  */
  794. mc32_halt_transceiver(dev); 
  795. mc32_flush_tx_ring(dev); 
  796. /* 
  797.  * Ask card to set up on-card descriptors to our spec 
  798.  */ 
  799. if(mc32_command(dev, 8, descnumbuffs, 4)) { 
  800. printk("%s: %s rejected our buffer configuration!n",
  801.          dev->name, cardname);
  802. mc32_close(dev); 
  803. return -ENOBUFS; 
  804. }
  805. /* Report new configuration */ 
  806. mc32_command(dev, 6, NULL, 0); 
  807. lp->tx_chain  = lp->exec_box->data[8];   /* Transmit list start offset */
  808. lp->rx_chain  = lp->exec_box->data[10];  /* Receive list start offset */
  809. lp->tx_len  = lp->exec_box->data[9];   /* Transmit list count */ 
  810. lp->rx_len  = lp->exec_box->data[11];  /* Receive list count */
  811.  
  812. /* Set Network Address */
  813. mc32_command(dev, 1, dev->dev_addr, 6);
  814. /* Set the filters */
  815. mc32_set_multicast_list(dev);
  816.    
  817. if (WORKAROUND_82586) { 
  818. u16 zero_word=0;
  819. mc32_command(dev, 0x0D, &zero_word, 2);   /* 82586 bug workaround on  */
  820. }
  821. mc32_load_tx_ring(dev);
  822. if(mc32_load_rx_ring(dev)) 
  823. {
  824. mc32_close(dev);
  825. return -ENOBUFS;
  826. }
  827. lp->desired_state = RUNNING; 
  828. /* And finally, set the ball rolling... */
  829. mc32_start_transceiver(dev);
  830. netif_start_queue(dev);
  831. return 0;
  832. }
  833. /**
  834.  * mc32_timeout - handle a timeout from the network layer
  835.  * @dev: 3c527 that timed out
  836.  *
  837.  * Handle a timeout on transmit from the 3c527. This normally means
  838.  * bad things as the hardware handles cable timeouts and mess for
  839.  * us.
  840.  *
  841.  */
  842. static void mc32_timeout(struct net_device *dev)
  843. {
  844. printk(KERN_WARNING "%s: transmit timed out?n", dev->name);
  845. /* Try to restart the adaptor. */
  846. netif_wake_queue(dev);
  847. }
  848. /**
  849.  * mc32_send_packet - queue a frame for transmit
  850.  * @skb: buffer to transmit
  851.  * @dev: 3c527 to send it out of
  852.  *
  853.  * Transmit a buffer. This normally means throwing the buffer onto
  854.  * the transmit queue as the queue is quite large. If the queue is
  855.  * full then we set tx_busy and return. Once the interrupt handler
  856.  * gets messages telling it to reclaim transmit queue entries we will
  857.  * clear tx_busy and the kernel will start calling this again.
  858.  *
  859.  * We use cli rather than spinlocks. Since I have no access to an SMP
  860.  * MCA machine I don't plan to change it. It is probably the top 
  861.  * performance hit for this driver on SMP however.
  862.  */
  863. static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
  864. {
  865. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  866. unsigned long flags;
  867. volatile struct skb_header *p, *np;
  868. netif_stop_queue(dev);
  869. save_flags(flags);
  870. cli();
  871. if(atomic_read(&lp->tx_count)==0)
  872. {
  873. restore_flags(flags);
  874. return 1;
  875. }
  876. atomic_dec(&lp->tx_count); 
  877. /* P is the last sending/sent buffer as a pointer */
  878. p=lp->tx_ring[lp->tx_ring_head].p; 
  879. lp->tx_ring_head=next_tx(lp->tx_ring_head); 
  880. /* NP is the buffer we will be loading */
  881. np=lp->tx_ring[lp->tx_ring_head].p; 
  882. /* We will need this to flush the buffer out */
  883. lp->tx_ring[lp->tx_ring_head].skb=skb;
  884.        
  885. np->length = (skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len; 
  886. np->data = virt_to_bus(skb->data);
  887. np->status = 0;
  888. np->control     = CONTROL_EOP | CONTROL_EOL;     
  889. wmb();
  890. p->control     &= ~CONTROL_EOL;     /* Clear EOL on p */ 
  891. restore_flags(flags);
  892. netif_wake_queue(dev);
  893. return 0;
  894. }
  895. /**
  896.  * mc32_update_stats - pull off the on board statistics
  897.  * @dev: 3c527 to service
  898.  *
  899.  * 
  900.  * Query and reset the on-card stats. There's the small possibility
  901.  * of a race here, which would result in an underestimation of
  902.  * actual errors. As such, we'd prefer to keep all our stats
  903.  * collection in software. As a rule, we do. However it can't be
  904.  * used for rx errors and collisions as, by default, the card discards
  905.  * bad rx packets. 
  906.  *
  907.  * Setting the SAV BP in the rx filter command supposedly
  908.  * stops this behaviour. However, testing shows that it only seems to
  909.  * enable the collation of on-card rx statistics --- the driver
  910.  * never sees an RX descriptor with an error status set.
  911.  *
  912.  */
  913. static void mc32_update_stats(struct net_device *dev)
  914. {
  915. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  916. volatile struct mc32_stats *st = lp->stats; 
  917. u32 rx_errors=0; 
  918.       
  919. rx_errors+=lp->net_stats.rx_crc_errors   +=st->rx_crc_errors;         
  920.                                            st->rx_crc_errors=0;
  921. rx_errors+=lp->net_stats.rx_fifo_errors  +=st->rx_overrun_errors;   
  922.                                            st->rx_overrun_errors=0; 
  923. rx_errors+=lp->net_stats.rx_frame_errors +=st->rx_alignment_errors; 
  924.                                              st->rx_alignment_errors=0;
  925. rx_errors+=lp->net_stats.rx_length_errors+=st->rx_tooshort_errors; 
  926.                                            st->rx_tooshort_errors=0;
  927. rx_errors+=lp->net_stats.rx_missed_errors+=st->rx_outofresource_errors;
  928.                                            st->rx_outofresource_errors=0; 
  929.         lp->net_stats.rx_errors=rx_errors; 
  930.    
  931. /* Number of packets which saw one collision */
  932. lp->net_stats.collisions+=st->dataC[10];
  933. st->dataC[10]=0; 
  934. /* Number of packets which saw 2--15 collisions */ 
  935. lp->net_stats.collisions+=st->dataC[11]; 
  936. st->dataC[11]=0; 
  937. }
  938. /**
  939.  * mc32_rx_ring - process the receive ring
  940.  * @dev: 3c527 that needs its receive ring processing
  941.  *
  942.  *
  943.  * We have received one or more indications from the card that a
  944.  * receive has completed. The buffer ring thus contains dirty
  945.  * entries. We walk the ring by iterating over the circular rx_ring
  946.  * array, starting at the next dirty buffer (which happens to be the
  947.  * one we finished up at last time around).
  948.  *
  949.  * For each completed packet, we will either copy it and pass it up
  950.  *  the stack or, if the packet is near MTU sized, we allocate
  951.  * another buffer and flip the old one up the stack.
  952.  * 
  953.  * We must succeed in keeping a buffer on the ring. If neccessary we
  954.  * will toss a received packet rather than lose a ring entry. Once
  955.  * the first uncompleted descriptor is found, we move the
  956.  * End-Of-List bit to include the buffers just processed.
  957.  *
  958.  */
  959. static void mc32_rx_ring(struct net_device *dev)
  960. {
  961. struct mc32_local *lp=dev->priv;
  962. volatile struct skb_header *p;
  963. u16 rx_ring_tail = lp->rx_ring_tail;
  964. u16 rx_old_tail = rx_ring_tail; 
  965. int x=0;
  966. do
  967. p=lp->rx_ring[rx_ring_tail].p; 
  968. if(!(p->status & (1<<7))) { /* Not COMPLETED */ 
  969. break;
  970. if(p->status & (1<<6)) /* COMPLETED_OK */
  971. {         
  972. u16 length=p->length;
  973. struct sk_buff *skb; 
  974. struct sk_buff *newskb; 
  975. /* Try to save time by avoiding a copy on big frames */
  976. if ((length > RX_COPYBREAK) 
  977.     && ((newskb=dev_alloc_skb(1532)) != NULL)) 
  978. skb=lp->rx_ring[rx_ring_tail].skb;
  979. skb_put(skb, length);
  980. skb_reserve(newskb,18); 
  981. lp->rx_ring[rx_ring_tail].skb=newskb;  
  982. p->data=virt_to_bus(newskb->data);  
  983. else 
  984. {
  985. skb=dev_alloc_skb(length+2);  
  986. if(skb==NULL) {
  987. lp->net_stats.rx_dropped++; 
  988. goto dropped; 
  989. }
  990. skb_reserve(skb,2);
  991. memcpy(skb_put(skb, length),
  992.        lp->rx_ring[rx_ring_tail].skb->data, length);
  993. }
  994. skb->protocol=eth_type_trans(skb,dev); 
  995. skb->dev=dev; 
  996. dev->last_rx = jiffies;
  997.   lp->net_stats.rx_packets++; 
  998.   lp->net_stats.rx_bytes += length; 
  999. netif_rx(skb);
  1000. }
  1001. dropped:
  1002. p->length = 1532; 
  1003. p->status = 0;
  1004. rx_ring_tail=next_rx(rx_ring_tail); 
  1005. }
  1006.         while(x++<48);  
  1007. /* If there was actually a frame to be processed, place the EOL bit */ 
  1008. /* at the descriptor prior to the one to be filled next */ 
  1009. if (rx_ring_tail != rx_old_tail) 
  1010. lp->rx_ring[prev_rx(rx_ring_tail)].p->control |=  CONTROL_EOL; 
  1011. lp->rx_ring[prev_rx(rx_old_tail)].p->control  &= ~CONTROL_EOL; 
  1012. lp->rx_ring_tail=rx_ring_tail; 
  1013. }
  1014. }
  1015. /**
  1016.  * mc32_tx_ring - process completed transmits
  1017.  * @dev: 3c527 that needs its transmit ring processing
  1018.  *
  1019.  *
  1020.  * This operates in a similar fashion to mc32_rx_ring. We iterate
  1021.  * over the transmit ring. For each descriptor which has been
  1022.  * processed by the card, we free its associated buffer and note
  1023.  * any errors. This continues until the transmit ring is emptied
  1024.  * or we reach a descriptor that hasn't yet been processed by the
  1025.  * card.
  1026.  * 
  1027.  */
  1028. static void mc32_tx_ring(struct net_device *dev) 
  1029. {
  1030. struct mc32_local *lp=(struct mc32_local *)dev->priv;
  1031. volatile struct skb_header *np;
  1032. /* NB: lp->tx_count=TX_RING_LEN-1 so that tx_ring_head cannot "lap" tail here */
  1033. while (lp->tx_ring_tail != lp->tx_ring_head)  
  1034. {   
  1035. u16 t; 
  1036. t=next_tx(lp->tx_ring_tail); 
  1037. np=lp->tx_ring[t].p; 
  1038. if(!(np->status & (1<<7))) 
  1039. {
  1040. /* Not COMPLETED */ 
  1041. break; 
  1042. lp->net_stats.tx_packets++;
  1043. if(!(np->status & (1<<6))) /* Not COMPLETED_OK */
  1044. {
  1045. lp->net_stats.tx_errors++;   
  1046. switch(np->status&0x0F)
  1047. {
  1048. case 1:
  1049. lp->net_stats.tx_aborted_errors++;
  1050. break; /* Max collisions */ 
  1051. case 2:
  1052. lp->net_stats.tx_fifo_errors++;
  1053. break;
  1054. case 3:
  1055. lp->net_stats.tx_carrier_errors++;
  1056. break;
  1057. case 4:
  1058. lp->net_stats.tx_window_errors++;
  1059. break;  /* CTS Lost */ 
  1060. case 5:
  1061. lp->net_stats.tx_aborted_errors++;
  1062. break; /* Transmit timeout */ 
  1063. }
  1064. }
  1065. /* Packets are sent in order - this is
  1066.     basically a FIFO queue of buffers matching
  1067.     the card ring */
  1068. lp->net_stats.tx_bytes+=lp->tx_ring[t].skb->len;
  1069. dev_kfree_skb_irq(lp->tx_ring[t].skb);
  1070. lp->tx_ring[t].skb=NULL;
  1071. atomic_inc(&lp->tx_count);
  1072. netif_wake_queue(dev);
  1073. lp->tx_ring_tail=t; 
  1074. }
  1075. /**
  1076.  * mc32_interrupt - handle an interrupt from a 3c527
  1077.  * @irq: Interrupt number
  1078.  * @dev_id: 3c527 that requires servicing
  1079.  * @regs: Registers (unused)
  1080.  *
  1081.  *
  1082.  * An interrupt is raised whenever the 3c527 writes to the command
  1083.  * register. This register contains the message it wishes to send us
  1084.  * packed into a single byte field. We keep reading status entries
  1085.  * until we have processed all the control items, but simply count
  1086.  * transmit and receive reports. When all reports are in we empty the
  1087.  * transceiver rings as appropriate. This saves the overhead of
  1088.  * multiple command requests.
  1089.  *
  1090.  * Because MCA is level-triggered, we shouldn't miss indications.
  1091.  * Therefore, we needn't ask the card to suspend interrupts within
  1092.  * this handler. The card receives an implicit acknowledgment of the
  1093.  * current interrupt when we read the command register.
  1094.  *
  1095.  */
  1096. static void mc32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
  1097. {
  1098. struct net_device *dev = dev_id;
  1099. struct mc32_local *lp;
  1100. int ioaddr, status, boguscount = 0;
  1101. int rx_event = 0;
  1102. int tx_event = 0; 
  1103. if (dev == NULL) {
  1104. printk(KERN_WARNING "%s: irq %d for unknown device.n", cardname, irq);
  1105. return;
  1106. }
  1107.  
  1108. ioaddr = dev->base_addr;
  1109. lp = (struct mc32_local *)dev->priv;
  1110. /* See whats cooking */
  1111. while((inb(ioaddr+HOST_STATUS)&HOST_STATUS_CWR) && boguscount++<2000)
  1112. {
  1113. status=inb(ioaddr+HOST_CMD);
  1114. #ifdef DEBUG_IRQ
  1115. printk("Status TX%d RX%d EX%d OV%d BC%dn",
  1116. (status&7), (status>>3)&7, (status>>6)&1,
  1117. (status>>7)&1, boguscount);
  1118. #endif
  1119. switch(status&7)
  1120. {
  1121. case 0:
  1122. break;
  1123. case 6: /* TX fail */
  1124. case 2: /* TX ok */
  1125. tx_event = 1; 
  1126. break;
  1127. case 3: /* Halt */
  1128. case 4: /* Abort */
  1129. lp->xceiver_state |= TX_HALTED; 
  1130. wake_up(&lp->event);
  1131. break;
  1132. default:
  1133. printk("%s: strange tx ack %dn", dev->name, status&7);
  1134. }
  1135. status>>=3;
  1136. switch(status&7)
  1137. {
  1138. case 0:
  1139. break;
  1140. case 2: /* RX */
  1141. rx_event=1; 
  1142. break;
  1143. case 3: /* Halt */
  1144. case 4: /* Abort */
  1145. lp->xceiver_state |= RX_HALTED;
  1146. wake_up(&lp->event);
  1147. break;
  1148. case 6:
  1149. /* Out of RX buffers stat */
  1150. /* Must restart rx */
  1151. lp->net_stats.rx_dropped++;
  1152. mc32_rx_ring(dev); 
  1153. mc32_start_transceiver(dev); 
  1154. break;
  1155. default:
  1156. printk("%s: strange rx ack %dn", 
  1157. dev->name, status&7);
  1158. }
  1159. status>>=3;
  1160. if(status&1)
  1161. {
  1162. /* 0=no 1=yes 2=replied, get cmd, 3 = wait reply & dump it */
  1163. if(lp->exec_pending!=3) {
  1164. lp->exec_pending=2;
  1165. wake_up(&lp->event);
  1166. }
  1167. else 
  1168. {
  1169.    lp->exec_pending=0;
  1170. /* A new multicast set may have been
  1171.    blocked while the old one was
  1172.    running. If so, do it now. */
  1173.    
  1174. if (lp->mc_reload_wait) 
  1175. mc32_reset_multicast_list(dev);
  1176. else 
  1177. wake_up(&lp->event);        
  1178. }
  1179. }
  1180. if(status&2)
  1181. {
  1182. /*
  1183.  * We get interrupted once per
  1184.  * counter that is about to overflow. 
  1185.  */
  1186. mc32_update_stats(dev);
  1187. }
  1188. }
  1189. /*
  1190.  * Process the transmit and receive rings 
  1191.          */
  1192. if(tx_event) 
  1193. mc32_tx_ring(dev);
  1194.  
  1195. if(rx_event) 
  1196. mc32_rx_ring(dev);
  1197. return;
  1198. }
  1199. /**
  1200.  * mc32_close - user configuring the 3c527 down
  1201.  * @dev: 3c527 card to shut down
  1202.  *
  1203.  * The 3c527 is a bus mastering device. We must be careful how we
  1204.  * shut it down. It may also be running shared interrupt so we have
  1205.  * to be sure to silence it properly
  1206.  *
  1207.  * We indicate that the card is closing to the rest of the
  1208.  * driver.  Otherwise, it is possible that the card may run out
  1209.  * of receive buffers and restart the transceiver while we're
  1210.  * trying to close it.
  1211.  * 
  1212.  * We abort any receive and transmits going on and then wait until
  1213.  * any pending exec commands have completed in other code threads.
  1214.  * In theory we can't get here while that is true, in practice I am
  1215.  * paranoid
  1216.  *
  1217.  * We turn off the interrupt enable for the board to be sure it can't
  1218.  * intefere with other devices.
  1219.  */
  1220. static int mc32_close(struct net_device *dev)
  1221. {
  1222. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  1223. int ioaddr = dev->base_addr;
  1224. u8 regs;
  1225. u16 one=1;
  1226. lp->desired_state = HALTED;
  1227. netif_stop_queue(dev);
  1228. /*
  1229.  * Send the indications on command (handy debug check)
  1230.  */
  1231. mc32_command(dev, 4, &one, 2);
  1232. /* Shut down the transceiver */
  1233. mc32_halt_transceiver(dev); 
  1234. /* Catch any waiting commands */
  1235. while(lp->exec_pending==1)
  1236. sleep_on(&lp->event);
  1237.        
  1238. /* Ok the card is now stopping */
  1239. regs=inb(ioaddr+HOST_CTRL);
  1240. regs&=~HOST_CTRL_INTE;
  1241. outb(regs, ioaddr+HOST_CTRL);
  1242. mc32_flush_rx_ring(dev);
  1243. mc32_flush_tx_ring(dev);
  1244. mc32_update_stats(dev); 
  1245. return 0;
  1246. }
  1247. /**
  1248.  * mc32_get_stats - hand back stats to network layer
  1249.  * @dev: The 3c527 card to handle
  1250.  *
  1251.  * We've collected all the stats we can in software already. Now
  1252.  * it's time to update those kept on-card and return the lot. 
  1253.  * 
  1254.  */
  1255. static struct net_device_stats *mc32_get_stats(struct net_device *dev)
  1256. {
  1257. struct mc32_local *lp;
  1258. mc32_update_stats(dev); 
  1259. lp = (struct mc32_local *)dev->priv;
  1260. return &lp->net_stats;
  1261. }
  1262. /**
  1263.  * do_mc32_set_multicast_list - attempt to update multicasts
  1264.  * @dev: 3c527 device to load the list on
  1265.  * @retry: indicates this is not the first call. 
  1266.  *
  1267.  *
  1268.  *  Actually set or clear the multicast filter for this adaptor. The
  1269.  * locking issues are handled by this routine. We have to track
  1270.  * state as it may take multiple calls to get the command sequence
  1271.  * completed. We just keep trying to schedule the loads until we
  1272.  * manage to process them all.
  1273.  * 
  1274.  * num_addrs == -1 Promiscuous mode, receive all packets
  1275.  * 
  1276.  * num_addrs == 0 Normal mode, clear multicast list
  1277.  * 
  1278.  * num_addrs > 0 Multicast mode, receive normal and MC packets, 
  1279.  * and do best-effort filtering. 
  1280.  *
  1281.  * See mc32_update_stats() regards setting the SAV BP bit. 
  1282.  *
  1283.  */
  1284. static void do_mc32_set_multicast_list(struct net_device *dev, int retry)
  1285. {
  1286. struct mc32_local *lp = (struct mc32_local *)dev->priv;
  1287. u16 filt = (1<<2); /* Save Bad Packets, for stats purposes */ 
  1288. if (dev->flags&IFF_PROMISC)
  1289. /* Enable promiscuous mode */
  1290. filt |= 1;
  1291. else if((dev->flags&IFF_ALLMULTI) || dev->mc_count > 10)
  1292. {
  1293. dev->flags|=IFF_PROMISC;
  1294. filt |= 1;
  1295. }
  1296. else if(dev->mc_count)
  1297. {
  1298. unsigned char block[62];
  1299. unsigned char *bp;
  1300. struct dev_mc_list *dmc=dev->mc_list;
  1301. int i;
  1302.        
  1303. if(retry==0)
  1304. lp->mc_list_valid = 0;
  1305. if(!lp->mc_list_valid)
  1306. {
  1307. block[1]=0;
  1308. block[0]=dev->mc_count;
  1309. bp=block+2;
  1310. for(i=0;i<dev->mc_count;i++)
  1311. {
  1312. memcpy(bp, dmc->dmi_addr, 6);
  1313. bp+=6;
  1314. dmc=dmc->next;
  1315. }
  1316. if(mc32_command_nowait(dev, 2, block, 2+6*dev->mc_count)==-1)
  1317. {
  1318. lp->mc_reload_wait = 1;
  1319. return;
  1320. }
  1321. lp->mc_list_valid=1;
  1322. }
  1323. }
  1324. if(mc32_command_nowait(dev, 0, &filt, 2)==-1) 
  1325. {
  1326. lp->mc_reload_wait = 1;
  1327. else { 
  1328. lp->mc_reload_wait = 0;
  1329. }
  1330. }
  1331. /**
  1332.  * mc32_set_multicast_list - queue multicast list update
  1333.  * @dev: The 3c527 to use
  1334.  *
  1335.  * Commence loading the multicast list. This is called when the kernel
  1336.  * changes the lists. It will override any pending list we are trying to
  1337.  * load.
  1338.  */
  1339. static void mc32_set_multicast_list(struct net_device *dev)
  1340. {
  1341. do_mc32_set_multicast_list(dev,0);
  1342. }
  1343. /**
  1344.  * mc32_reset_multicast_list - reset multicast list
  1345.  * @dev: The 3c527 to use
  1346.  *
  1347.  * Attempt the next step in loading the multicast lists. If this attempt
  1348.  * fails to complete then it will be scheduled and this function called
  1349.  * again later from elsewhere.
  1350.  */
  1351. static void mc32_reset_multicast_list(struct net_device *dev)
  1352. {
  1353. do_mc32_set_multicast_list(dev,1);
  1354. }
  1355. /**
  1356.  * netdev_ethtool_ioctl: Handle network interface SIOCETHTOOL ioctls
  1357.  * @dev: network interface on which out-of-band action is to be performed
  1358.  * @useraddr: userspace address to which data is to be read and returned
  1359.  *
  1360.  * Process the various commands of the SIOCETHTOOL interface.
  1361.  */
  1362. static int netdev_ethtool_ioctl (struct net_device *dev, void *useraddr)
  1363. {
  1364. u32 ethcmd;
  1365. /* dev_ioctl() in ../../net/core/dev.c has already checked
  1366.    capable(CAP_NET_ADMIN), so don't bother with that here.  */
  1367. if (get_user(ethcmd, (u32 *)useraddr))
  1368. return -EFAULT;
  1369. switch (ethcmd) {
  1370. case ETHTOOL_GDRVINFO: {
  1371. struct ethtool_drvinfo info = { ETHTOOL_GDRVINFO };
  1372. strcpy (info.driver, DRV_NAME);
  1373. strcpy (info.version, DRV_VERSION);
  1374. sprintf(info.bus_info, "MCA 0x%lx", dev->base_addr);
  1375. if (copy_to_user (useraddr, &info, sizeof (info)))
  1376. return -EFAULT;
  1377. return 0;
  1378. }
  1379. /* get message-level */
  1380. case ETHTOOL_GMSGLVL: {
  1381. struct ethtool_value edata = {ETHTOOL_GMSGLVL};
  1382. edata.data = mc32_debug;
  1383. if (copy_to_user(useraddr, &edata, sizeof(edata)))
  1384. return -EFAULT;
  1385. return 0;
  1386. }
  1387. /* set message-level */
  1388. case ETHTOOL_SMSGLVL: {
  1389. struct ethtool_value edata;
  1390. if (copy_from_user(&edata, useraddr, sizeof(edata)))
  1391. return -EFAULT;
  1392. mc32_debug = edata.data;
  1393. return 0;
  1394. }
  1395. default:
  1396. break;
  1397. }
  1398. return -EOPNOTSUPP;
  1399. }
  1400. /**
  1401.  * netdev_ioctl: Handle network interface ioctls
  1402.  * @dev: network interface on which out-of-band action is to be performed
  1403.  * @rq: user request data
  1404.  * @cmd: command issued by user
  1405.  *
  1406.  * Process the various out-of-band ioctls passed to this driver.
  1407.  */
  1408. static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
  1409. {
  1410. int rc = 0;
  1411. switch (cmd) {
  1412. case SIOCETHTOOL:
  1413. rc = netdev_ethtool_ioctl(dev, (void *) rq->ifr_data);
  1414. break;
  1415. default:
  1416. rc = -EOPNOTSUPP;
  1417. break;
  1418. }
  1419. return rc;
  1420. }
  1421.  
  1422. #ifdef MODULE
  1423. static struct net_device this_device;
  1424. /**
  1425.  * init_module - entry point
  1426.  *
  1427.  * Probe and locate a 3c527 card. This really should probe and locate
  1428.  * all the 3c527 cards in the machine not just one of them. Yes you can
  1429.  * insmod multiple modules for now but it's a hack.
  1430.  */
  1431. int init_module(void)
  1432. {
  1433. int result;
  1434. this_device.init = mc32_probe;
  1435. if ((result = register_netdev(&this_device)) != 0)
  1436. return result;
  1437. return 0;
  1438. }
  1439. /**
  1440.  * cleanup_module - free resources for an unload
  1441.  *
  1442.  * Unloading time. We release the MCA bus resources and the interrupt
  1443.  * at which point everything is ready to unload. The card must be stopped
  1444.  * at this point or we would not have been called. When we unload we
  1445.  * leave the card stopped but not totally shut down. When the card is
  1446.  * initialized it must be rebooted or the rings reloaded before any
  1447.  * transmit operations are allowed to start scribbling into memory.
  1448.  */
  1449. void cleanup_module(void)
  1450. {
  1451. int slot;
  1452. /* No need to check MOD_IN_USE, as sys_delete_module() checks. */
  1453. unregister_netdev(&this_device);
  1454. /*
  1455.  * If we don't do this, we can't re-insmod it later.
  1456.  */
  1457.  
  1458. if (this_device.priv)
  1459. {
  1460. struct mc32_local *lp=this_device.priv;
  1461. slot = lp->slot;
  1462. mca_mark_as_unused(slot);
  1463. mca_set_adapter_name(slot, NULL);
  1464. kfree(this_device.priv);
  1465. }
  1466. free_irq(this_device.irq, &this_device);
  1467. release_region(this_device.base_addr, MC32_IO_EXTENT);
  1468. }
  1469. #endif /* MODULE */