Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

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