Merge branch 'drm-patches' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied...
[sfrench/cifs-2.6.git] / drivers / net / wireless / netwave_cs.c
1 /*********************************************************************
2  *                
3  * Filename:      netwave_cs.c
4  * Version:       0.4.1
5  * Description:   Netwave AirSurfer Wireless LAN PC Card driver
6  * Status:        Experimental.
7  * Authors:       John Markus Bjørndalen <johnm@cs.uit.no>
8  *                Dag Brattli <dagb@cs.uit.no>
9  *                David Hinds <dahinds@users.sourceforge.net>
10  * Created at:    A long time ago!
11  * Modified at:   Mon Nov 10 11:54:37 1997
12  * Modified by:   Dag Brattli <dagb@cs.uit.no>
13  * 
14  *     Copyright (c) 1997 University of Tromsø, Norway
15  *
16  * Revision History:
17  *
18  *   08-Nov-97 15:14:47   John Markus Bjørndalen <johnm@cs.uit.no>
19  *    - Fixed some bugs in netwave_rx and cleaned it up a bit. 
20  *      (One of the bugs would have destroyed packets when receiving
21  *      multiple packets per interrupt). 
22  *    - Cleaned up parts of newave_hw_xmit. 
23  *    - A few general cleanups. 
24  *   24-Oct-97 13:17:36   Dag Brattli <dagb@cs.uit.no>
25  *    - Fixed netwave_rx receive function (got updated docs)
26  *   Others:
27  *    - Changed name from xircnw to netwave, take a look at 
28  *      http://www.netwave-wireless.com
29  *    - Some reorganizing of the code
30  *    - Removed possible race condition between interrupt handler and transmit
31  *      function
32  *    - Started to add wireless extensions, but still needs some coding
33  *    - Added watchdog for better handling of transmission timeouts 
34  *      (hopefully this works better)
35  ********************************************************************/
36
37 /* To have statistics (just packets sent) define this */
38 #undef NETWAVE_STATS
39
40 #include <linux/config.h>
41 #include <linux/module.h>
42 #include <linux/kernel.h>
43 #include <linux/init.h>
44 #include <linux/types.h>
45 #include <linux/fcntl.h>
46 #include <linux/interrupt.h>
47 #include <linux/ptrace.h>
48 #include <linux/ioport.h>
49 #include <linux/in.h>
50 #include <linux/slab.h>
51 #include <linux/string.h>
52 #include <linux/timer.h>
53 #include <linux/errno.h>
54 #include <linux/netdevice.h>
55 #include <linux/etherdevice.h>
56 #include <linux/skbuff.h>
57 #include <linux/bitops.h>
58 #include <linux/wireless.h>
59 #include <net/iw_handler.h>
60
61 #include <pcmcia/cs_types.h>
62 #include <pcmcia/cs.h>
63 #include <pcmcia/cistpl.h>
64 #include <pcmcia/cisreg.h>
65 #include <pcmcia/ds.h>
66 #include <pcmcia/mem_op.h>
67
68 #include <asm/system.h>
69 #include <asm/io.h>
70 #include <asm/dma.h>
71
72 #define NETWAVE_REGOFF         0x8000
73 /* The Netwave IO registers, offsets to iobase */
74 #define NETWAVE_REG_COR        0x0
75 #define NETWAVE_REG_CCSR       0x2
76 #define NETWAVE_REG_ASR        0x4
77 #define NETWAVE_REG_IMR        0xa
78 #define NETWAVE_REG_PMR        0xc
79 #define NETWAVE_REG_IOLOW      0x6
80 #define NETWAVE_REG_IOHI       0x7
81 #define NETWAVE_REG_IOCONTROL  0x8
82 #define NETWAVE_REG_DATA       0xf
83 /* The Netwave Extended IO registers, offsets to RamBase */
84 #define NETWAVE_EREG_ASCC      0x114
85 #define NETWAVE_EREG_RSER      0x120
86 #define NETWAVE_EREG_RSERW     0x124
87 #define NETWAVE_EREG_TSER      0x130
88 #define NETWAVE_EREG_TSERW     0x134
89 #define NETWAVE_EREG_CB        0x100
90 #define NETWAVE_EREG_SPCQ      0x154
91 #define NETWAVE_EREG_SPU       0x155
92 #define NETWAVE_EREG_LIF       0x14e
93 #define NETWAVE_EREG_ISPLQ     0x156
94 #define NETWAVE_EREG_HHC       0x158
95 #define NETWAVE_EREG_NI        0x16e
96 #define NETWAVE_EREG_MHS       0x16b
97 #define NETWAVE_EREG_TDP       0x140
98 #define NETWAVE_EREG_RDP       0x150
99 #define NETWAVE_EREG_PA        0x160
100 #define NETWAVE_EREG_EC        0x180
101 #define NETWAVE_EREG_CRBP      0x17a
102 #define NETWAVE_EREG_ARW       0x166
103
104 /*
105  * Commands used in the extended command buffer
106  * NETWAVE_EREG_CB (0x100-0x10F) 
107  */
108 #define NETWAVE_CMD_NOP        0x00
109 #define NETWAVE_CMD_SRC        0x01
110 #define NETWAVE_CMD_STC        0x02
111 #define NETWAVE_CMD_AMA        0x03
112 #define NETWAVE_CMD_DMA        0x04
113 #define NETWAVE_CMD_SAMA       0x05
114 #define NETWAVE_CMD_ER         0x06
115 #define NETWAVE_CMD_DR         0x07
116 #define NETWAVE_CMD_TL         0x08
117 #define NETWAVE_CMD_SRP        0x09
118 #define NETWAVE_CMD_SSK        0x0a
119 #define NETWAVE_CMD_SMD        0x0b
120 #define NETWAVE_CMD_SAPD       0x0c
121 #define NETWAVE_CMD_SSS        0x11
122 /* End of Command marker */
123 #define NETWAVE_CMD_EOC        0x00
124
125 /* ASR register bits */
126 #define NETWAVE_ASR_RXRDY   0x80
127 #define NETWAVE_ASR_TXBA    0x01
128
129 #define TX_TIMEOUT              ((32*HZ)/100)
130
131 static const unsigned int imrConfRFU1 = 0x10; /* RFU interrupt mask, keep high */
132 static const unsigned int imrConfIENA = 0x02; /* Interrupt enable */
133
134 static const unsigned int corConfIENA   = 0x01; /* Interrupt enable */
135 static const unsigned int corConfLVLREQ = 0x40; /* Keep high */
136
137 static const unsigned int rxConfRxEna  = 0x80; /* Receive Enable */
138 static const unsigned int rxConfMAC    = 0x20; /* MAC host receive mode*/ 
139 static const unsigned int rxConfPro    = 0x10; /* Promiscuous */
140 static const unsigned int rxConfAMP    = 0x08; /* Accept Multicast Packets */
141 static const unsigned int rxConfBcast  = 0x04; /* Accept Broadcast Packets */
142
143 static const unsigned int txConfTxEna  = 0x80; /* Transmit Enable */
144 static const unsigned int txConfMAC    = 0x20; /* Host sends MAC mode */
145 static const unsigned int txConfEUD    = 0x10; /* Enable Uni-Data packets */
146 static const unsigned int txConfKey    = 0x02; /* Scramble data packets */
147 static const unsigned int txConfLoop   = 0x01; /* Loopback mode */
148
149 /*
150    All the PCMCIA modules use PCMCIA_DEBUG to control debugging.  If
151    you do not define PCMCIA_DEBUG at all, all the debug code will be
152    left out.  If you compile with PCMCIA_DEBUG=0, the debug code will
153    be present but disabled -- but it can then be enabled for specific
154    modules at load time with a 'pc_debug=#' option to insmod.
155 */
156
157 #ifdef PCMCIA_DEBUG
158 static int pc_debug = PCMCIA_DEBUG;
159 module_param(pc_debug, int, 0);
160 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
161 static char *version =
162 "netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n";
163 #else
164 #define DEBUG(n, args...)
165 #endif
166
167 /*====================================================================*/
168
169 /* Parameters that can be set with 'insmod' */
170
171 /* Choose the domain, default is 0x100 */
172 static u_int  domain = 0x100;
173
174 /* Scramble key, range from 0x0 to 0xffff.  
175  * 0x0 is no scrambling. 
176  */
177 static u_int  scramble_key = 0x0;
178
179 /* Shared memory speed, in ns. The documentation states that 
180  * the card should not be read faster than every 400ns. 
181  * This timing should be provided by the HBA. If it becomes a 
182  * problem, try setting mem_speed to 400. 
183  */
184 static int mem_speed;
185
186 module_param(domain, int, 0);
187 module_param(scramble_key, int, 0);
188 module_param(mem_speed, int, 0);
189
190 /*====================================================================*/
191
192 /* PCMCIA (Card Services) related functions */
193 static void netwave_release(dev_link_t *link);     /* Card removal */
194 static void netwave_pcmcia_config(dev_link_t *arg); /* Runs after card 
195                                                                                                            insertion */
196 static void netwave_detach(struct pcmcia_device *p_dev);    /* Destroy instance */
197
198 /* Hardware configuration */
199 static void netwave_doreset(kio_addr_t iobase, u_char __iomem *ramBase);
200 static void netwave_reset(struct net_device *dev);
201
202 /* Misc device stuff */
203 static int netwave_open(struct net_device *dev);  /* Open the device */
204 static int netwave_close(struct net_device *dev); /* Close the device */
205
206 /* Packet transmission and Packet reception */
207 static int netwave_start_xmit( struct sk_buff *skb, struct net_device *dev);
208 static int netwave_rx( struct net_device *dev);
209
210 /* Interrupt routines */
211 static irqreturn_t netwave_interrupt(int irq, void *dev_id, struct pt_regs *regs);
212 static void netwave_watchdog(struct net_device *);
213
214 /* Statistics */
215 static void update_stats(struct net_device *dev);
216 static struct net_device_stats *netwave_get_stats(struct net_device *dev);
217
218 /* Wireless extensions */
219 static struct iw_statistics* netwave_get_wireless_stats(struct net_device *dev);
220
221 static void set_multicast_list(struct net_device *dev);
222
223 /*
224    A dev_link_t structure has fields for most things that are needed
225    to keep track of a socket, but there will usually be some device
226    specific information that also needs to be kept track of.  The
227    'priv' pointer in a dev_link_t structure can be used to point to
228    a device-specific private data structure, like this.
229
230    A driver needs to provide a dev_node_t structure for each device
231    on a card.  In some cases, there is only one device per card (for
232    example, ethernet cards, modems).  In other cases, there may be
233    many actual or logical devices (SCSI adapters, memory cards with
234    multiple partitions).  The dev_node_t structures need to be kept
235    in a linked list starting at the 'dev' field of a dev_link_t
236    structure.  We allocate them in the card's private data structure,
237    because they generally can't be allocated dynamically.
238 */
239
240 static const struct iw_handler_def      netwave_handler_def;
241
242 #define SIOCGIPSNAP     SIOCIWFIRSTPRIV + 1     /* Site Survey Snapshot */
243
244 #define MAX_ESA 10
245
246 typedef struct net_addr {
247     u_char addr48[6];
248 } net_addr;
249
250 struct site_survey {
251     u_short length;
252     u_char  struct_revision;
253     u_char  roaming_state;
254         
255     u_char  sp_existsFlag;
256     u_char  sp_link_quality;
257     u_char  sp_max_link_quality;
258     u_char  linkQualityGoodFairBoundary;
259     u_char  linkQualityFairPoorBoundary;
260     u_char  sp_utilization;
261     u_char  sp_goodness;
262     u_char  sp_hotheadcount;
263     u_char  roaming_condition;
264         
265     net_addr sp;
266     u_char   numAPs;
267     net_addr nearByAccessPoints[MAX_ESA];
268 };      
269    
270 typedef struct netwave_private {
271     dev_link_t link;
272     spinlock_t  spinlock;       /* Serialize access to the hardware (SMP) */
273     dev_node_t node;
274     u_char     __iomem *ramBase;
275     int        timeoutCounter;
276     int        lastExec;
277     struct timer_list      watchdog;    /* To avoid blocking state */
278     struct site_survey     nss;
279     struct net_device_stats stats;
280     struct iw_statistics   iw_stats;    /* Wireless stats */
281 } netwave_private;
282
283 #ifdef NETWAVE_STATS
284 static struct net_device_stats *netwave_get_stats(struct net_device *dev);
285 #endif
286
287 /*
288  * The Netwave card is little-endian, so won't work for big endian
289  * systems.
290  */
291 static inline unsigned short get_uint16(u_char __iomem *staddr) 
292 {
293     return readw(staddr); /* Return only 16 bits */
294 }
295
296 static inline short get_int16(u_char __iomem * staddr)
297 {
298     return readw(staddr);
299 }
300
301 /* 
302  * Wait until the WOC (Write Operation Complete) bit in the 
303  * ASR (Adapter Status Register) is asserted. 
304  * This should have aborted if it takes too long time. 
305  */
306 static inline void wait_WOC(unsigned int iobase)
307 {
308     /* Spin lock */
309     while ((inb(iobase + NETWAVE_REG_ASR) & 0x8) != 0x8) ; 
310 }
311
312 static void netwave_snapshot(netwave_private *priv, u_char __iomem *ramBase, 
313                              kio_addr_t iobase) {
314     u_short resultBuffer;
315
316     /* if time since last snapshot is > 1 sec. (100 jiffies?)  then take 
317      * new snapshot, else return cached data. This is the recommended rate.  
318      */
319     if ( jiffies - priv->lastExec > 100) { 
320         /* Take site survey  snapshot */ 
321         /*printk( KERN_DEBUG "Taking new snapshot. %ld\n", jiffies -
322           priv->lastExec); */
323         wait_WOC(iobase); 
324         writeb(NETWAVE_CMD_SSS, ramBase + NETWAVE_EREG_CB + 0); 
325         writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); 
326         wait_WOC(iobase); 
327
328         /* Get result and copy to cach */ 
329         resultBuffer = readw(ramBase + NETWAVE_EREG_CRBP); 
330         copy_from_pc( &priv->nss, ramBase+resultBuffer, 
331                       sizeof(struct site_survey)); 
332     } 
333 }
334
335 /*
336  * Function netwave_get_wireless_stats (dev)
337  *
338  *    Wireless extensions statistics
339  *
340  */
341 static struct iw_statistics *netwave_get_wireless_stats(struct net_device *dev)
342 {       
343     unsigned long flags;
344     kio_addr_t iobase = dev->base_addr;
345     netwave_private *priv = netdev_priv(dev);
346     u_char __iomem *ramBase = priv->ramBase;
347     struct iw_statistics* wstats;
348         
349     wstats = &priv->iw_stats;
350
351     spin_lock_irqsave(&priv->spinlock, flags);
352         
353     netwave_snapshot( priv, ramBase, iobase);
354
355     wstats->status = priv->nss.roaming_state;
356     wstats->qual.qual = readb( ramBase + NETWAVE_EREG_SPCQ); 
357     wstats->qual.level = readb( ramBase + NETWAVE_EREG_ISPLQ);
358     wstats->qual.noise = readb( ramBase + NETWAVE_EREG_SPU) & 0x3f;
359     wstats->discard.nwid = 0L;
360     wstats->discard.code = 0L;
361     wstats->discard.misc = 0L;
362
363     spin_unlock_irqrestore(&priv->spinlock, flags);
364     
365     return &priv->iw_stats;
366 }
367
368 /*
369  * Function netwave_attach (void)
370  *
371  *     Creates an "instance" of the driver, allocating local data 
372  *     structures for one device.  The device is registered with Card 
373  *     Services.
374  *
375  *     The dev_link structure is initialized, but we don't actually
376  *     configure the card at this point -- we wait until we receive a
377  *     card insertion event.
378  */
379 static int netwave_attach(struct pcmcia_device *p_dev)
380 {
381     dev_link_t *link;
382     struct net_device *dev;
383     netwave_private *priv;
384
385     DEBUG(0, "netwave_attach()\n");
386
387     /* Initialize the dev_link_t structure */
388     dev = alloc_etherdev(sizeof(netwave_private));
389     if (!dev)
390         return -ENOMEM;
391     priv = netdev_priv(dev);
392     link = &priv->link;
393     link->priv = dev;
394
395     /* The io structure describes IO port mapping */
396     link->io.NumPorts1 = 16;
397     link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
398     /* link->io.NumPorts2 = 16; 
399        link->io.Attributes2 = IO_DATA_PATH_WIDTH_16; */
400     link->io.IOAddrLines = 5;
401     
402     /* Interrupt setup */
403     link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
404     link->irq.IRQInfo1 = IRQ_LEVEL_ID;
405     link->irq.Handler = &netwave_interrupt;
406     
407     /* General socket configuration */
408     link->conf.Attributes = CONF_ENABLE_IRQ;
409     link->conf.Vcc = 50;
410     link->conf.IntType = INT_MEMORY_AND_IO;
411     link->conf.ConfigIndex = 1;
412     link->conf.Present = PRESENT_OPTION;
413
414     /* Netwave private struct init. link/dev/node already taken care of,
415      * other stuff zero'd - Jean II */
416     spin_lock_init(&priv->spinlock);
417
418     /* Netwave specific entries in the device structure */
419     SET_MODULE_OWNER(dev);
420     dev->hard_start_xmit = &netwave_start_xmit;
421     dev->get_stats  = &netwave_get_stats;
422     dev->set_multicast_list = &set_multicast_list;
423     /* wireless extensions */
424     dev->wireless_handlers = (struct iw_handler_def *)&netwave_handler_def;
425
426     dev->tx_timeout = &netwave_watchdog;
427     dev->watchdog_timeo = TX_TIMEOUT;
428
429     dev->open = &netwave_open;
430     dev->stop = &netwave_close;
431     link->irq.Instance = dev;
432
433     link->handle = p_dev;
434     p_dev->instance = link;
435
436     link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
437     netwave_pcmcia_config( link);
438
439     return 0;
440 } /* netwave_attach */
441
442 /*
443  * Function netwave_detach (link)
444  *
445  *    This deletes a driver "instance".  The device is de-registered
446  *    with Card Services.  If it has been released, all local data
447  *    structures are freed.  Otherwise, the structures will be freed
448  *    when the device is released.
449  */
450 static void netwave_detach(struct pcmcia_device *p_dev)
451 {
452         dev_link_t *link = dev_to_instance(p_dev);
453         struct net_device *dev = link->priv;
454
455         DEBUG(0, "netwave_detach(0x%p)\n", link);
456
457         if (link->state & DEV_CONFIG)
458                 netwave_release(link);
459
460         if (link->dev)
461                 unregister_netdev(dev);
462
463         free_netdev(dev);
464 } /* netwave_detach */
465
466 /*
467  * Wireless Handler : get protocol name
468  */
469 static int netwave_get_name(struct net_device *dev,
470                             struct iw_request_info *info,
471                             union iwreq_data *wrqu,
472                             char *extra)
473 {
474         strcpy(wrqu->name, "Netwave");
475         return 0;
476 }
477
478 /*
479  * Wireless Handler : set Network ID
480  */
481 static int netwave_set_nwid(struct net_device *dev,
482                             struct iw_request_info *info,
483                             union iwreq_data *wrqu,
484                             char *extra)
485 {
486         unsigned long flags;
487         kio_addr_t iobase = dev->base_addr;
488         netwave_private *priv = netdev_priv(dev);
489         u_char __iomem *ramBase = priv->ramBase;
490
491         /* Disable interrupts & save flags */
492         spin_lock_irqsave(&priv->spinlock, flags);
493
494         if(!wrqu->nwid.disabled) {
495             domain = wrqu->nwid.value;
496             printk( KERN_DEBUG "Setting domain to 0x%x%02x\n", 
497                     (domain >> 8) & 0x01, domain & 0xff);
498             wait_WOC(iobase);
499             writeb(NETWAVE_CMD_SMD, ramBase + NETWAVE_EREG_CB + 0);
500             writeb( domain & 0xff, ramBase + NETWAVE_EREG_CB + 1);
501             writeb((domain >>8 ) & 0x01,ramBase + NETWAVE_EREG_CB+2);
502             writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
503         }
504
505         /* ReEnable interrupts & restore flags */
506         spin_unlock_irqrestore(&priv->spinlock, flags);
507     
508         return 0;
509 }
510
511 /*
512  * Wireless Handler : get Network ID
513  */
514 static int netwave_get_nwid(struct net_device *dev,
515                             struct iw_request_info *info,
516                             union iwreq_data *wrqu,
517                             char *extra)
518 {
519         wrqu->nwid.value = domain;
520         wrqu->nwid.disabled = 0;
521         wrqu->nwid.fixed = 1;
522         return 0;
523 }
524
525 /*
526  * Wireless Handler : set scramble key
527  */
528 static int netwave_set_scramble(struct net_device *dev,
529                                 struct iw_request_info *info,
530                                 union iwreq_data *wrqu,
531                                 char *key)
532 {
533         unsigned long flags;
534         kio_addr_t iobase = dev->base_addr;
535         netwave_private *priv = netdev_priv(dev);
536         u_char __iomem *ramBase = priv->ramBase;
537
538         /* Disable interrupts & save flags */
539         spin_lock_irqsave(&priv->spinlock, flags);
540
541         scramble_key = (key[0] << 8) | key[1];
542         wait_WOC(iobase);
543         writeb(NETWAVE_CMD_SSK, ramBase + NETWAVE_EREG_CB + 0);
544         writeb(scramble_key & 0xff, ramBase + NETWAVE_EREG_CB + 1);
545         writeb((scramble_key>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2);
546         writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
547
548         /* ReEnable interrupts & restore flags */
549         spin_unlock_irqrestore(&priv->spinlock, flags);
550     
551         return 0;
552 }
553
554 /*
555  * Wireless Handler : get scramble key
556  */
557 static int netwave_get_scramble(struct net_device *dev,
558                                 struct iw_request_info *info,
559                                 union iwreq_data *wrqu,
560                                 char *key)
561 {
562         key[1] = scramble_key & 0xff;
563         key[0] = (scramble_key>>8) & 0xff;
564         wrqu->encoding.flags = IW_ENCODE_ENABLED;
565         wrqu->encoding.length = 2;
566         return 0;
567 }
568
569 /*
570  * Wireless Handler : get mode
571  */
572 static int netwave_get_mode(struct net_device *dev,
573                             struct iw_request_info *info,
574                             union iwreq_data *wrqu,
575                             char *extra)
576 {
577         if(domain & 0x100)
578                 wrqu->mode = IW_MODE_INFRA;
579         else
580                 wrqu->mode = IW_MODE_ADHOC;
581
582         return 0;
583 }
584
585 /*
586  * Wireless Handler : get range info
587  */
588 static int netwave_get_range(struct net_device *dev,
589                              struct iw_request_info *info,
590                              union iwreq_data *wrqu,
591                              char *extra)
592 {
593         struct iw_range *range = (struct iw_range *) extra;
594         int ret = 0;
595
596         /* Set the length (very important for backward compatibility) */
597         wrqu->data.length = sizeof(struct iw_range);
598
599         /* Set all the info we don't care or don't know about to zero */
600         memset(range, 0, sizeof(struct iw_range));
601
602         /* Set the Wireless Extension versions */
603         range->we_version_compiled = WIRELESS_EXT;
604         range->we_version_source = 9;   /* Nothing for us in v10 and v11 */
605                    
606         /* Set information in the range struct */
607         range->throughput = 450 * 1000; /* don't argue on this ! */
608         range->min_nwid = 0x0000;
609         range->max_nwid = 0x01FF;
610
611         range->num_channels = range->num_frequency = 0;
612                    
613         range->sensitivity = 0x3F;
614         range->max_qual.qual = 255;
615         range->max_qual.level = 255;
616         range->max_qual.noise = 0;
617                    
618         range->num_bitrates = 1;
619         range->bitrate[0] = 1000000;    /* 1 Mb/s */
620
621         range->encoding_size[0] = 2;            /* 16 bits scrambling */
622         range->num_encoding_sizes = 1;
623         range->max_encoding_tokens = 1; /* Only one key possible */
624
625         return ret;
626 }
627
628 /*
629  * Wireless Private Handler : get snapshot
630  */
631 static int netwave_get_snap(struct net_device *dev,
632                             struct iw_request_info *info,
633                             union iwreq_data *wrqu,
634                             char *extra)
635 {
636         unsigned long flags;
637         kio_addr_t iobase = dev->base_addr;
638         netwave_private *priv = netdev_priv(dev);
639         u_char __iomem *ramBase = priv->ramBase;
640
641         /* Disable interrupts & save flags */
642         spin_lock_irqsave(&priv->spinlock, flags);
643
644         /* Take snapshot of environment */
645         netwave_snapshot( priv, ramBase, iobase);
646         wrqu->data.length = priv->nss.length;
647         memcpy(extra, (u_char *) &priv->nss, sizeof( struct site_survey));
648
649         priv->lastExec = jiffies;
650
651         /* ReEnable interrupts & restore flags */
652         spin_unlock_irqrestore(&priv->spinlock, flags);
653     
654         return(0);
655 }
656
657 /*
658  * Structures to export the Wireless Handlers
659  *     This is the stuff that are treated the wireless extensions (iwconfig)
660  */
661
662 static const struct iw_priv_args netwave_private_args[] = {
663 /*{ cmd,         set_args,                            get_args, name } */
664   { SIOCGIPSNAP, 0, 
665     IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | sizeof(struct site_survey), 
666     "getsitesurvey" },
667 };
668
669 static const iw_handler         netwave_handler[] =
670 {
671         NULL,                           /* SIOCSIWNAME */
672         netwave_get_name,               /* SIOCGIWNAME */
673         netwave_set_nwid,               /* SIOCSIWNWID */
674         netwave_get_nwid,               /* SIOCGIWNWID */
675         NULL,                           /* SIOCSIWFREQ */
676         NULL,                           /* SIOCGIWFREQ */
677         NULL,                           /* SIOCSIWMODE */
678         netwave_get_mode,               /* SIOCGIWMODE */
679         NULL,                           /* SIOCSIWSENS */
680         NULL,                           /* SIOCGIWSENS */
681         NULL,                           /* SIOCSIWRANGE */
682         netwave_get_range,              /* SIOCGIWRANGE */
683         NULL,                           /* SIOCSIWPRIV */
684         NULL,                           /* SIOCGIWPRIV */
685         NULL,                           /* SIOCSIWSTATS */
686         NULL,                           /* SIOCGIWSTATS */
687         NULL,                           /* SIOCSIWSPY */
688         NULL,                           /* SIOCGIWSPY */
689         NULL,                           /* -- hole -- */
690         NULL,                           /* -- hole -- */
691         NULL,                           /* SIOCSIWAP */
692         NULL,                           /* SIOCGIWAP */
693         NULL,                           /* -- hole -- */
694         NULL,                           /* SIOCGIWAPLIST */
695         NULL,                           /* -- hole -- */
696         NULL,                           /* -- hole -- */
697         NULL,                           /* SIOCSIWESSID */
698         NULL,                           /* SIOCGIWESSID */
699         NULL,                           /* SIOCSIWNICKN */
700         NULL,                           /* SIOCGIWNICKN */
701         NULL,                           /* -- hole -- */
702         NULL,                           /* -- hole -- */
703         NULL,                           /* SIOCSIWRATE */
704         NULL,                           /* SIOCGIWRATE */
705         NULL,                           /* SIOCSIWRTS */
706         NULL,                           /* SIOCGIWRTS */
707         NULL,                           /* SIOCSIWFRAG */
708         NULL,                           /* SIOCGIWFRAG */
709         NULL,                           /* SIOCSIWTXPOW */
710         NULL,                           /* SIOCGIWTXPOW */
711         NULL,                           /* SIOCSIWRETRY */
712         NULL,                           /* SIOCGIWRETRY */
713         netwave_set_scramble,           /* SIOCSIWENCODE */
714         netwave_get_scramble,           /* SIOCGIWENCODE */
715 };
716
717 static const iw_handler         netwave_private_handler[] =
718 {
719         NULL,                           /* SIOCIWFIRSTPRIV */
720         netwave_get_snap,               /* SIOCIWFIRSTPRIV + 1 */
721 };
722
723 static const struct iw_handler_def      netwave_handler_def =
724 {
725         .num_standard   = sizeof(netwave_handler)/sizeof(iw_handler),
726         .num_private    = sizeof(netwave_private_handler)/sizeof(iw_handler),
727         .num_private_args = sizeof(netwave_private_args)/sizeof(struct iw_priv_args),
728         .standard       = (iw_handler *) netwave_handler,
729         .private        = (iw_handler *) netwave_private_handler,
730         .private_args   = (struct iw_priv_args *) netwave_private_args,
731         .get_wireless_stats = netwave_get_wireless_stats,
732 };
733
734 /*
735  * Function netwave_pcmcia_config (link)
736  *
737  *     netwave_pcmcia_config() is scheduled to run after a CARD_INSERTION 
738  *     event is received, to configure the PCMCIA socket, and to make the
739  *     device available to the system. 
740  *
741  */
742
743 #define CS_CHECK(fn, ret) \
744 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
745
746 static void netwave_pcmcia_config(dev_link_t *link) {
747     client_handle_t handle = link->handle;
748     struct net_device *dev = link->priv;
749     netwave_private *priv = netdev_priv(dev);
750     tuple_t tuple;
751     cisparse_t parse;
752     int i, j, last_ret, last_fn;
753     u_char buf[64];
754     win_req_t req;
755     memreq_t mem;
756     u_char __iomem *ramBase = NULL;
757
758     DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link);
759
760     /*
761       This reads the card's CONFIG tuple to find its configuration
762       registers.
763     */
764     tuple.Attributes = 0;
765     tuple.TupleData = (cisdata_t *) buf;
766     tuple.TupleDataMax = 64;
767     tuple.TupleOffset = 0;
768     tuple.DesiredTuple = CISTPL_CONFIG;
769     CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
770     CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
771     CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
772     link->conf.ConfigBase = parse.config.base;
773     link->conf.Present = parse.config.rmask[0];
774
775     /* Configure card */
776     link->state |= DEV_CONFIG;
777
778     /*
779      *  Try allocating IO ports.  This tries a few fixed addresses.
780      *  If you want, you can also read the card's config table to
781      *  pick addresses -- see the serial driver for an example.
782      */
783     for (i = j = 0x0; j < 0x400; j += 0x20) {
784         link->io.BasePort1 = j ^ 0x300;
785         i = pcmcia_request_io(link->handle, &link->io);
786         if (i == CS_SUCCESS) break;
787     }
788     if (i != CS_SUCCESS) {
789         cs_error(link->handle, RequestIO, i);
790         goto failed;
791     }
792
793     /*
794      *  Now allocate an interrupt line.  Note that this does not
795      *  actually assign a handler to the interrupt.
796      */
797     CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
798
799     /*
800      *  This actually configures the PCMCIA socket -- setting up
801      *  the I/O windows and the interrupt mapping.
802      */
803     CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
804
805     /*
806      *  Allocate a 32K memory window.  Note that the dev_link_t
807      *  structure provides space for one window handle -- if your
808      *  device needs several windows, you'll need to keep track of
809      *  the handles in your private data structure, dev->priv.
810      */
811     DEBUG(1, "Setting mem speed of %d\n", mem_speed);
812
813     req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_CM|WIN_ENABLE;
814     req.Base = 0; req.Size = 0x8000;
815     req.AccessSpeed = mem_speed;
816     CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &link->win));
817     mem.CardOffset = 0x20000; mem.Page = 0; 
818     CS_CHECK(MapMemPage, pcmcia_map_mem_page(link->win, &mem));
819
820     /* Store base address of the common window frame */
821     ramBase = ioremap(req.Base, 0x8000);
822     priv->ramBase = ramBase;
823
824     dev->irq = link->irq.AssignedIRQ;
825     dev->base_addr = link->io.BasePort1;
826     SET_NETDEV_DEV(dev, &handle_to_dev(handle));
827
828     if (register_netdev(dev) != 0) {
829         printk(KERN_DEBUG "netwave_cs: register_netdev() failed\n");
830         goto failed;
831     }
832
833     strcpy(priv->node.dev_name, dev->name);
834     link->dev = &priv->node;
835     link->state &= ~DEV_CONFIG_PENDING;
836
837     /* Reset card before reading physical address */
838     netwave_doreset(dev->base_addr, ramBase);
839
840     /* Read the ethernet address and fill in the Netwave registers. */
841     for (i = 0; i < 6; i++) 
842         dev->dev_addr[i] = readb(ramBase + NETWAVE_EREG_PA + i);
843
844     printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx id "
845            "%c%c, hw_addr ", dev->name, dev->base_addr, dev->irq,
846            (u_long) ramBase, (int) readb(ramBase+NETWAVE_EREG_NI),
847            (int) readb(ramBase+NETWAVE_EREG_NI+1));
848     for (i = 0; i < 6; i++)
849         printk("%02X%s", dev->dev_addr[i], ((i<5) ? ":" : "\n"));
850
851     /* get revision words */
852     printk(KERN_DEBUG "Netwave_reset: revision %04x %04x\n", 
853            get_uint16(ramBase + NETWAVE_EREG_ARW),
854            get_uint16(ramBase + NETWAVE_EREG_ARW+2));
855     return;
856
857 cs_failed:
858     cs_error(link->handle, last_fn, last_ret);
859 failed:
860     netwave_release(link);
861 } /* netwave_pcmcia_config */
862
863 /*
864  * Function netwave_release (arg)
865  *
866  *    After a card is removed, netwave_release() will unregister the net
867  *    device, and release the PCMCIA configuration.  If the device is
868  *    still open, this will be postponed until it is closed.
869  */
870 static void netwave_release(dev_link_t *link)
871 {
872     struct net_device *dev = link->priv;
873     netwave_private *priv = netdev_priv(dev);
874
875     DEBUG(0, "netwave_release(0x%p)\n", link);
876
877     /* Don't bother checking to see if these succeed or not */
878     if (link->win) {
879         iounmap(priv->ramBase);
880         pcmcia_release_window(link->win);
881     }
882     pcmcia_release_configuration(link->handle);
883     pcmcia_release_io(link->handle, &link->io);
884     pcmcia_release_irq(link->handle, &link->irq);
885
886     link->state &= ~DEV_CONFIG;
887 }
888
889 static int netwave_suspend(struct pcmcia_device *p_dev)
890 {
891         dev_link_t *link = dev_to_instance(p_dev);
892         struct net_device *dev = link->priv;
893
894         link->state |= DEV_SUSPEND;
895         if (link->state & DEV_CONFIG) {
896                 if (link->open)
897                         netif_device_detach(dev);
898                 pcmcia_release_configuration(link->handle);
899         }
900
901         return 0;
902 }
903
904 static int netwave_resume(struct pcmcia_device *p_dev)
905 {
906         dev_link_t *link = dev_to_instance(p_dev);
907         struct net_device *dev = link->priv;
908
909         link->state &= ~DEV_SUSPEND;
910         if (link->state & DEV_CONFIG) {
911                 pcmcia_request_configuration(link->handle, &link->conf);
912                 if (link->open) {
913                         netwave_reset(dev);
914                         netif_device_attach(dev);
915                 }
916         }
917
918         return 0;
919 }
920
921
922 /*
923  * Function netwave_doreset (ioBase, ramBase)
924  *
925  *    Proper hardware reset of the card.
926  */
927 static void netwave_doreset(kio_addr_t ioBase, u_char __iomem *ramBase)
928 {
929     /* Reset card */
930     wait_WOC(ioBase);
931     outb(0x80, ioBase + NETWAVE_REG_PMR);
932     writeb(0x08, ramBase + NETWAVE_EREG_ASCC); /* Bit 3 is WOC */
933     outb(0x0, ioBase + NETWAVE_REG_PMR); /* release reset */
934 }
935
936 /*
937  * Function netwave_reset (dev)
938  *
939  *    Reset and restore all of the netwave registers 
940  */
941 static void netwave_reset(struct net_device *dev) {
942     /* u_char state; */
943     netwave_private *priv = netdev_priv(dev);
944     u_char __iomem *ramBase = priv->ramBase;
945     kio_addr_t iobase = dev->base_addr;
946
947     DEBUG(0, "netwave_reset: Done with hardware reset\n");
948
949     priv->timeoutCounter = 0;
950
951     /* Reset card */
952     netwave_doreset(iobase, ramBase);
953     printk(KERN_DEBUG "netwave_reset: Done with hardware reset\n");
954         
955     /* Write a NOP to check the card */
956     wait_WOC(iobase);
957     writeb(NETWAVE_CMD_NOP, ramBase + NETWAVE_EREG_CB + 0);
958     writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
959         
960     /* Set receive conf */
961     wait_WOC(iobase);
962     writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0);
963     writeb(rxConfRxEna + rxConfBcast, ramBase + NETWAVE_EREG_CB + 1);
964     writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
965     
966     /* Set transmit conf */
967     wait_WOC(iobase);
968     writeb(NETWAVE_CMD_STC, ramBase + NETWAVE_EREG_CB + 0);
969     writeb(txConfTxEna, ramBase + NETWAVE_EREG_CB + 1);
970     writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
971     
972     /* Now set the MU Domain */
973     printk(KERN_DEBUG "Setting domain to 0x%x%02x\n", (domain >> 8) & 0x01, domain & 0xff);
974     wait_WOC(iobase);
975     writeb(NETWAVE_CMD_SMD, ramBase + NETWAVE_EREG_CB + 0);
976     writeb(domain & 0xff, ramBase + NETWAVE_EREG_CB + 1);
977     writeb((domain>>8) & 0x01, ramBase + NETWAVE_EREG_CB + 2);
978     writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
979         
980     /* Set scramble key */
981     printk(KERN_DEBUG "Setting scramble key to 0x%x\n", scramble_key);
982     wait_WOC(iobase);
983     writeb(NETWAVE_CMD_SSK, ramBase + NETWAVE_EREG_CB + 0);
984     writeb(scramble_key & 0xff, ramBase + NETWAVE_EREG_CB + 1);
985     writeb((scramble_key>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2);
986     writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
987
988     /* Enable interrupts, bit 4 high to keep unused
989      * source from interrupting us, bit 2 high to 
990      * set interrupt enable, 567 to enable TxDN, 
991      * RxErr and RxRdy
992      */
993     wait_WOC(iobase);
994     outb(imrConfIENA+imrConfRFU1, iobase + NETWAVE_REG_IMR);
995
996     /* Hent 4 bytes fra 0x170. Skal vaere 0a,29,88,36
997      * waitWOC
998      * skriv 80 til d000:3688
999      * sjekk om det ble 80
1000      */
1001     
1002     /* Enable Receiver */
1003     wait_WOC(iobase);
1004     writeb(NETWAVE_CMD_ER, ramBase + NETWAVE_EREG_CB + 0);
1005     writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1006         
1007     /* Set the IENA bit in COR */
1008     wait_WOC(iobase);
1009     outb(corConfIENA + corConfLVLREQ, iobase + NETWAVE_REG_COR);
1010 }
1011
1012 /*
1013  * Function netwave_hw_xmit (data, len, dev)    
1014  */
1015 static int netwave_hw_xmit(unsigned char* data, int len,
1016                            struct net_device* dev) {
1017     unsigned long flags;
1018     unsigned int TxFreeList,
1019                  curBuff,
1020                  MaxData, 
1021                  DataOffset;
1022     int tmpcount; 
1023         
1024     netwave_private *priv = netdev_priv(dev);
1025     u_char __iomem * ramBase = priv->ramBase;
1026     kio_addr_t iobase = dev->base_addr;
1027
1028     /* Disable interrupts & save flags */
1029     spin_lock_irqsave(&priv->spinlock, flags);
1030
1031     /* Check if there are transmit buffers available */
1032     wait_WOC(iobase);
1033     if ((inb(iobase+NETWAVE_REG_ASR) & NETWAVE_ASR_TXBA) == 0) {
1034         /* No buffers available */
1035         printk(KERN_DEBUG "netwave_hw_xmit: %s - no xmit buffers available.\n",
1036                dev->name);
1037         spin_unlock_irqrestore(&priv->spinlock, flags);
1038         return 1;
1039     }
1040
1041     priv->stats.tx_bytes += len;
1042
1043     DEBUG(3, "Transmitting with SPCQ %x SPU %x LIF %x ISPLQ %x\n",
1044           readb(ramBase + NETWAVE_EREG_SPCQ),
1045           readb(ramBase + NETWAVE_EREG_SPU),
1046           readb(ramBase + NETWAVE_EREG_LIF),
1047           readb(ramBase + NETWAVE_EREG_ISPLQ));
1048
1049     /* Now try to insert it into the adapters free memory */
1050     wait_WOC(iobase);
1051     TxFreeList = get_uint16(ramBase + NETWAVE_EREG_TDP);
1052     MaxData    = get_uint16(ramBase + NETWAVE_EREG_TDP+2);
1053     DataOffset = get_uint16(ramBase + NETWAVE_EREG_TDP+4);
1054         
1055     DEBUG(3, "TxFreeList %x, MaxData %x, DataOffset %x\n",
1056           TxFreeList, MaxData, DataOffset);
1057
1058     /* Copy packet to the adapter fragment buffers */
1059     curBuff = TxFreeList; 
1060     tmpcount = 0; 
1061     while (tmpcount < len) {
1062         int tmplen = len - tmpcount; 
1063         copy_to_pc(ramBase + curBuff + DataOffset, data + tmpcount, 
1064                    (tmplen < MaxData) ? tmplen : MaxData);
1065         tmpcount += MaxData;
1066                         
1067         /* Advance to next buffer */
1068         curBuff = get_uint16(ramBase + curBuff);
1069     }
1070     
1071     /* Now issue transmit list */
1072     wait_WOC(iobase);
1073     writeb(NETWAVE_CMD_TL, ramBase + NETWAVE_EREG_CB + 0);
1074     writeb(len & 0xff, ramBase + NETWAVE_EREG_CB + 1);
1075     writeb((len>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2);
1076     writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
1077
1078     spin_unlock_irqrestore(&priv->spinlock, flags);
1079     return 0;
1080 }
1081
1082 static int netwave_start_xmit(struct sk_buff *skb, struct net_device *dev) {
1083         /* This flag indicate that the hardware can't perform a transmission.
1084          * Theoritically, NET3 check it before sending a packet to the driver,
1085          * but in fact it never do that and pool continuously.
1086          * As the watchdog will abort too long transmissions, we are quite safe...
1087          */
1088
1089     netif_stop_queue(dev);
1090
1091     {
1092         short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
1093         unsigned char* buf = skb->data;
1094         
1095         if (netwave_hw_xmit( buf, length, dev) == 1) {
1096             /* Some error, let's make them call us another time? */
1097             netif_start_queue(dev);
1098         }
1099         dev->trans_start = jiffies;
1100     }
1101     dev_kfree_skb(skb);
1102     
1103     return 0;
1104 } /* netwave_start_xmit */
1105
1106 /*
1107  * Function netwave_interrupt (irq, dev_id, regs)
1108  *
1109  *    This function is the interrupt handler for the Netwave card. This
1110  *    routine will be called whenever: 
1111  *        1. A packet is received.
1112  *        2. A packet has successfully been transferred and the unit is
1113  *           ready to transmit another packet.
1114  *        3. A command has completed execution.
1115  */
1116 static irqreturn_t netwave_interrupt(int irq, void* dev_id, struct pt_regs *regs)
1117 {
1118     kio_addr_t iobase;
1119     u_char __iomem *ramBase;
1120     struct net_device *dev = (struct net_device *)dev_id;
1121     struct netwave_private *priv = netdev_priv(dev);
1122     dev_link_t *link = &priv->link;
1123     int i;
1124     
1125     if (!netif_device_present(dev))
1126         return IRQ_NONE;
1127     
1128     iobase = dev->base_addr;
1129     ramBase = priv->ramBase;
1130         
1131     /* Now find what caused the interrupt, check while interrupts ready */
1132     for (i = 0; i < 10; i++) {
1133         u_char status;
1134                 
1135         wait_WOC(iobase);       
1136         if (!(inb(iobase+NETWAVE_REG_CCSR) & 0x02))
1137             break; /* None of the interrupt sources asserted (normal exit) */
1138         
1139         status = inb(iobase + NETWAVE_REG_ASR);
1140                 
1141         if (!DEV_OK(link)) {
1142             DEBUG(1, "netwave_interrupt: Interrupt with status 0x%x "
1143                   "from removed or suspended card!\n", status);
1144             break;
1145         }
1146                 
1147         /* RxRdy */
1148         if (status & 0x80) {
1149             netwave_rx(dev);
1150             /* wait_WOC(iobase); */
1151             /* RxRdy cannot be reset directly by the host */
1152         }
1153         /* RxErr */
1154         if (status & 0x40) {
1155             u_char rser;
1156                         
1157             rser = readb(ramBase + NETWAVE_EREG_RSER);                  
1158             
1159             if (rser & 0x04) {
1160                 ++priv->stats.rx_dropped; 
1161                 ++priv->stats.rx_crc_errors;
1162             }
1163             if (rser & 0x02)
1164                 ++priv->stats.rx_frame_errors;
1165                         
1166             /* Clear the RxErr bit in RSER. RSER+4 is the
1167              * write part. Also clear the RxCRC (0x04) and 
1168              * RxBig (0x02) bits if present */
1169             wait_WOC(iobase);
1170             writeb(0x40 | (rser & 0x06), ramBase + NETWAVE_EREG_RSER + 4);
1171
1172             /* Write bit 6 high to ASCC to clear RxErr in ASR,
1173              * WOC must be set first! 
1174              */
1175             wait_WOC(iobase);
1176             writeb(0x40, ramBase + NETWAVE_EREG_ASCC);
1177
1178             /* Remember to count up priv->stats on error packets */
1179             ++priv->stats.rx_errors;
1180         }
1181         /* TxDN */
1182         if (status & 0x20) {
1183             int txStatus;
1184
1185             txStatus = readb(ramBase + NETWAVE_EREG_TSER);
1186             DEBUG(3, "Transmit done. TSER = %x id %x\n", 
1187                   txStatus, readb(ramBase + NETWAVE_EREG_TSER + 1));
1188             
1189             if (txStatus & 0x20) {
1190                 /* Transmitting was okay, clear bits */
1191                 wait_WOC(iobase);
1192                 writeb(0x2f, ramBase + NETWAVE_EREG_TSER + 4);
1193                 ++priv->stats.tx_packets;
1194             }
1195                         
1196             if (txStatus & 0xd0) {
1197                 if (txStatus & 0x80) {
1198                     ++priv->stats.collisions; /* Because of /proc/net/dev*/
1199                     /* ++priv->stats.tx_aborted_errors; */
1200                     /* printk("Collision. %ld\n", jiffies - dev->trans_start); */
1201                 }
1202                 if (txStatus & 0x40) 
1203                     ++priv->stats.tx_carrier_errors;
1204                 /* 0x80 TxGU Transmit giveup - nine times and no luck
1205                  * 0x40 TxNOAP No access point. Discarded packet.
1206                  * 0x10 TxErr Transmit error. Always set when 
1207                  *      TxGU and TxNOAP is set. (Those are the only ones
1208                  *      to set TxErr).
1209                  */
1210                 DEBUG(3, "netwave_interrupt: TxDN with error status %x\n", 
1211                       txStatus);
1212                 
1213                 /* Clear out TxGU, TxNOAP, TxErr and TxTrys */
1214                 wait_WOC(iobase);
1215                 writeb(0xdf & txStatus, ramBase+NETWAVE_EREG_TSER+4);
1216                 ++priv->stats.tx_errors;
1217             }
1218             DEBUG(3, "New status is TSER %x ASR %x\n",
1219                   readb(ramBase + NETWAVE_EREG_TSER),
1220                   inb(iobase + NETWAVE_REG_ASR));
1221
1222             netif_wake_queue(dev);
1223         }
1224         /* TxBA, this would trigger on all error packets received */
1225         /* if (status & 0x01) {
1226            DEBUG(4, "Transmit buffers available, %x\n", status);
1227            }
1228            */
1229     }
1230     /* Handled if we looped at least one time - Jean II */
1231     return IRQ_RETVAL(i);
1232 } /* netwave_interrupt */
1233
1234 /*
1235  * Function netwave_watchdog (a)
1236  *
1237  *    Watchdog : when we start a transmission, we set a timer in the
1238  *    kernel.  If the transmission complete, this timer is disabled. If
1239  *    it expire, we reset the card.
1240  *
1241  */
1242 static void netwave_watchdog(struct net_device *dev) {
1243
1244     DEBUG(1, "%s: netwave_watchdog: watchdog timer expired\n", dev->name);
1245     netwave_reset(dev);
1246     dev->trans_start = jiffies;
1247     netif_wake_queue(dev);
1248 } /* netwave_watchdog */
1249
1250 static struct net_device_stats *netwave_get_stats(struct net_device *dev) {
1251     netwave_private *priv = netdev_priv(dev);
1252
1253     update_stats(dev);
1254
1255     DEBUG(2, "netwave: SPCQ %x SPU %x LIF %x ISPLQ %x MHS %x rxtx %x"
1256           " %x tx %x %x %x %x\n", 
1257           readb(priv->ramBase + NETWAVE_EREG_SPCQ),
1258           readb(priv->ramBase + NETWAVE_EREG_SPU),
1259           readb(priv->ramBase + NETWAVE_EREG_LIF),
1260           readb(priv->ramBase + NETWAVE_EREG_ISPLQ),
1261           readb(priv->ramBase + NETWAVE_EREG_MHS),
1262           readb(priv->ramBase + NETWAVE_EREG_EC + 0xe),
1263           readb(priv->ramBase + NETWAVE_EREG_EC + 0xf),
1264           readb(priv->ramBase + NETWAVE_EREG_EC + 0x18),
1265           readb(priv->ramBase + NETWAVE_EREG_EC + 0x19),
1266           readb(priv->ramBase + NETWAVE_EREG_EC + 0x1a),
1267           readb(priv->ramBase + NETWAVE_EREG_EC + 0x1b));
1268
1269     return &priv->stats;
1270 }
1271
1272 static void update_stats(struct net_device *dev) {
1273     //unsigned long flags;
1274 /*     netwave_private *priv = netdev_priv(dev); */
1275
1276     //spin_lock_irqsave(&priv->spinlock, flags);
1277
1278 /*    priv->stats.rx_packets = readb(priv->ramBase + 0x18e); 
1279     priv->stats.tx_packets = readb(priv->ramBase + 0x18f); */
1280
1281     //spin_unlock_irqrestore(&priv->spinlock, flags);
1282 }
1283
1284 static int netwave_rx(struct net_device *dev)
1285 {
1286     netwave_private *priv = netdev_priv(dev);
1287     u_char __iomem *ramBase = priv->ramBase;
1288     kio_addr_t iobase = dev->base_addr;
1289     u_char rxStatus;
1290     struct sk_buff *skb = NULL;
1291     unsigned int curBuffer,
1292                 rcvList;
1293     int rcvLen;
1294     int tmpcount = 0;
1295     int dataCount, dataOffset;
1296     int i;
1297     u_char *ptr;
1298         
1299     DEBUG(3, "xinw_rx: Receiving ... \n");
1300
1301     /* Receive max 10 packets for now. */
1302     for (i = 0; i < 10; i++) {
1303         /* Any packets? */
1304         wait_WOC(iobase);
1305         rxStatus = readb(ramBase + NETWAVE_EREG_RSER);          
1306         if ( !( rxStatus & 0x80)) /* No more packets */
1307             break;
1308                 
1309         /* Check if multicast/broadcast or other */
1310         /* multicast = (rxStatus & 0x20);  */
1311                 
1312         /* The receive list pointer and length of the packet */
1313         wait_WOC(iobase);
1314         rcvLen  = get_int16( ramBase + NETWAVE_EREG_RDP);
1315         rcvList = get_uint16( ramBase + NETWAVE_EREG_RDP + 2);
1316                 
1317         if (rcvLen < 0) {
1318             printk(KERN_DEBUG "netwave_rx: Receive packet with len %d\n", 
1319                    rcvLen);
1320             return 0;
1321         }
1322                 
1323         skb = dev_alloc_skb(rcvLen+5);
1324         if (skb == NULL) {
1325             DEBUG(1, "netwave_rx: Could not allocate an sk_buff of "
1326                   "length %d\n", rcvLen);
1327             ++priv->stats.rx_dropped; 
1328             /* Tell the adapter to skip the packet */
1329             wait_WOC(iobase);
1330             writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0);
1331             writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1332             return 0;
1333         }
1334
1335         skb_reserve( skb, 2);  /* Align IP on 16 byte */
1336         skb_put( skb, rcvLen);
1337         skb->dev = dev;
1338
1339         /* Copy packet fragments to the skb data area */
1340         ptr = (u_char*) skb->data;
1341         curBuffer = rcvList;
1342         tmpcount = 0; 
1343         while ( tmpcount < rcvLen) {
1344             /* Get length and offset of current buffer */
1345             dataCount  = get_uint16( ramBase+curBuffer+2);
1346             dataOffset = get_uint16( ramBase+curBuffer+4);
1347                 
1348             copy_from_pc( ptr + tmpcount,
1349                           ramBase+curBuffer+dataOffset, dataCount);
1350
1351             tmpcount += dataCount;
1352                 
1353             /* Point to next buffer */
1354             curBuffer = get_uint16(ramBase + curBuffer);
1355         }
1356         
1357         skb->protocol = eth_type_trans(skb,dev);
1358         /* Queue packet for network layer */
1359         netif_rx(skb);
1360
1361         dev->last_rx = jiffies;
1362         priv->stats.rx_packets++;
1363         priv->stats.rx_bytes += rcvLen;
1364
1365         /* Got the packet, tell the adapter to skip it */
1366         wait_WOC(iobase);
1367         writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0);
1368         writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1369         DEBUG(3, "Packet reception ok\n");
1370     }
1371     return 0;
1372 }
1373
1374 static int netwave_open(struct net_device *dev) {
1375     netwave_private *priv = netdev_priv(dev);
1376     dev_link_t *link = &priv->link;
1377
1378     DEBUG(1, "netwave_open: starting.\n");
1379     
1380     if (!DEV_OK(link))
1381         return -ENODEV;
1382
1383     link->open++;
1384
1385     netif_start_queue(dev);
1386     netwave_reset(dev);
1387         
1388     return 0;
1389 }
1390
1391 static int netwave_close(struct net_device *dev) {
1392     netwave_private *priv = netdev_priv(dev);
1393     dev_link_t *link = &priv->link;
1394
1395     DEBUG(1, "netwave_close: finishing.\n");
1396
1397     link->open--;
1398     netif_stop_queue(dev);
1399
1400     return 0;
1401 }
1402
1403 static struct pcmcia_device_id netwave_ids[] = {
1404         PCMCIA_DEVICE_PROD_ID12("Xircom", "CreditCard Netwave", 0x2e3ee845, 0x54e28a28),
1405         PCMCIA_DEVICE_NULL,
1406 };
1407 MODULE_DEVICE_TABLE(pcmcia, netwave_ids);
1408
1409 static struct pcmcia_driver netwave_driver = {
1410         .owner          = THIS_MODULE,
1411         .drv            = {
1412                 .name   = "netwave_cs",
1413         },
1414         .probe          = netwave_attach,
1415         .remove         = netwave_detach,
1416         .id_table       = netwave_ids,
1417         .suspend        = netwave_suspend,
1418         .resume         = netwave_resume,
1419 };
1420
1421 static int __init init_netwave_cs(void)
1422 {
1423         return pcmcia_register_driver(&netwave_driver);
1424 }
1425
1426 static void __exit exit_netwave_cs(void)
1427 {
1428         pcmcia_unregister_driver(&netwave_driver);
1429 }
1430
1431 module_init(init_netwave_cs);
1432 module_exit(exit_netwave_cs);
1433
1434 /* Set or clear the multicast filter for this adaptor.
1435    num_addrs == -1      Promiscuous mode, receive all packets
1436    num_addrs == 0       Normal mode, clear multicast list
1437    num_addrs > 0        Multicast mode, receive normal and MC packets, and do
1438    best-effort filtering.
1439  */
1440 static void set_multicast_list(struct net_device *dev)
1441 {
1442     kio_addr_t iobase = dev->base_addr;
1443     netwave_private *priv = netdev_priv(dev);
1444     u_char __iomem * ramBase = priv->ramBase;
1445     u_char  rcvMode = 0;
1446    
1447 #ifdef PCMCIA_DEBUG
1448     if (pc_debug > 2) {
1449         static int old;
1450         if (old != dev->mc_count) {
1451             old = dev->mc_count;
1452             DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
1453                   dev->name, dev->mc_count);
1454         }
1455     }
1456 #endif
1457         
1458     if (dev->mc_count || (dev->flags & IFF_ALLMULTI)) {
1459         /* Multicast Mode */
1460         rcvMode = rxConfRxEna + rxConfAMP + rxConfBcast;
1461     } else if (dev->flags & IFF_PROMISC) {
1462         /* Promiscous mode */
1463         rcvMode = rxConfRxEna + rxConfPro + rxConfAMP + rxConfBcast;
1464     } else {
1465         /* Normal mode */
1466         rcvMode = rxConfRxEna + rxConfBcast;
1467     }
1468         
1469     /* printk("netwave set_multicast_list: rcvMode to %x\n", rcvMode);*/
1470     /* Now set receive mode */
1471     wait_WOC(iobase);
1472     writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0);
1473     writeb(rcvMode, ramBase + NETWAVE_EREG_CB + 1);
1474     writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
1475 }
1476 MODULE_LICENSE("GPL");