1 /*********************************************************************
3 * Filename: netwave_cs.c
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>
14 * Copyright (c) 1997 University of Tromsø, Norway
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)
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
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 ********************************************************************/
37 /* To have statistics (just packets sent) define this */
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>
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 #ifdef CONFIG_NET_RADIO
59 #include <linux/wireless.h>
61 #include <net/iw_handler.h>
62 #endif /* WIRELESS_EXT > 12 */
65 #include <pcmcia/cs_types.h>
66 #include <pcmcia/cs.h>
67 #include <pcmcia/cistpl.h>
68 #include <pcmcia/cisreg.h>
69 #include <pcmcia/ds.h>
70 #include <pcmcia/mem_op.h>
72 #include <asm/system.h>
76 #define NETWAVE_REGOFF 0x8000
77 /* The Netwave IO registers, offsets to iobase */
78 #define NETWAVE_REG_COR 0x0
79 #define NETWAVE_REG_CCSR 0x2
80 #define NETWAVE_REG_ASR 0x4
81 #define NETWAVE_REG_IMR 0xa
82 #define NETWAVE_REG_PMR 0xc
83 #define NETWAVE_REG_IOLOW 0x6
84 #define NETWAVE_REG_IOHI 0x7
85 #define NETWAVE_REG_IOCONTROL 0x8
86 #define NETWAVE_REG_DATA 0xf
87 /* The Netwave Extended IO registers, offsets to RamBase */
88 #define NETWAVE_EREG_ASCC 0x114
89 #define NETWAVE_EREG_RSER 0x120
90 #define NETWAVE_EREG_RSERW 0x124
91 #define NETWAVE_EREG_TSER 0x130
92 #define NETWAVE_EREG_TSERW 0x134
93 #define NETWAVE_EREG_CB 0x100
94 #define NETWAVE_EREG_SPCQ 0x154
95 #define NETWAVE_EREG_SPU 0x155
96 #define NETWAVE_EREG_LIF 0x14e
97 #define NETWAVE_EREG_ISPLQ 0x156
98 #define NETWAVE_EREG_HHC 0x158
99 #define NETWAVE_EREG_NI 0x16e
100 #define NETWAVE_EREG_MHS 0x16b
101 #define NETWAVE_EREG_TDP 0x140
102 #define NETWAVE_EREG_RDP 0x150
103 #define NETWAVE_EREG_PA 0x160
104 #define NETWAVE_EREG_EC 0x180
105 #define NETWAVE_EREG_CRBP 0x17a
106 #define NETWAVE_EREG_ARW 0x166
109 * Commands used in the extended command buffer
110 * NETWAVE_EREG_CB (0x100-0x10F)
112 #define NETWAVE_CMD_NOP 0x00
113 #define NETWAVE_CMD_SRC 0x01
114 #define NETWAVE_CMD_STC 0x02
115 #define NETWAVE_CMD_AMA 0x03
116 #define NETWAVE_CMD_DMA 0x04
117 #define NETWAVE_CMD_SAMA 0x05
118 #define NETWAVE_CMD_ER 0x06
119 #define NETWAVE_CMD_DR 0x07
120 #define NETWAVE_CMD_TL 0x08
121 #define NETWAVE_CMD_SRP 0x09
122 #define NETWAVE_CMD_SSK 0x0a
123 #define NETWAVE_CMD_SMD 0x0b
124 #define NETWAVE_CMD_SAPD 0x0c
125 #define NETWAVE_CMD_SSS 0x11
126 /* End of Command marker */
127 #define NETWAVE_CMD_EOC 0x00
129 /* ASR register bits */
130 #define NETWAVE_ASR_RXRDY 0x80
131 #define NETWAVE_ASR_TXBA 0x01
133 #define TX_TIMEOUT ((32*HZ)/100)
135 static const unsigned int imrConfRFU1 = 0x10; /* RFU interrupt mask, keep high */
136 static const unsigned int imrConfIENA = 0x02; /* Interrupt enable */
138 static const unsigned int corConfIENA = 0x01; /* Interrupt enable */
139 static const unsigned int corConfLVLREQ = 0x40; /* Keep high */
141 static const unsigned int rxConfRxEna = 0x80; /* Receive Enable */
142 static const unsigned int rxConfMAC = 0x20; /* MAC host receive mode*/
143 static const unsigned int rxConfPro = 0x10; /* Promiscuous */
144 static const unsigned int rxConfAMP = 0x08; /* Accept Multicast Packets */
145 static const unsigned int rxConfBcast = 0x04; /* Accept Broadcast Packets */
147 static const unsigned int txConfTxEna = 0x80; /* Transmit Enable */
148 static const unsigned int txConfMAC = 0x20; /* Host sends MAC mode */
149 static const unsigned int txConfEUD = 0x10; /* Enable Uni-Data packets */
150 static const unsigned int txConfKey = 0x02; /* Scramble data packets */
151 static const unsigned int txConfLoop = 0x01; /* Loopback mode */
154 All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If
155 you do not define PCMCIA_DEBUG at all, all the debug code will be
156 left out. If you compile with PCMCIA_DEBUG=0, the debug code will
157 be present but disabled -- but it can then be enabled for specific
158 modules at load time with a 'pc_debug=#' option to insmod.
162 static int pc_debug = PCMCIA_DEBUG;
163 module_param(pc_debug, int, 0);
164 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
165 static char *version =
166 "netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n";
168 #define DEBUG(n, args...)
171 static dev_info_t dev_info = "netwave_cs";
173 /*====================================================================*/
175 /* Parameters that can be set with 'insmod' */
177 /* Choose the domain, default is 0x100 */
178 static u_int domain = 0x100;
180 /* Scramble key, range from 0x0 to 0xffff.
181 * 0x0 is no scrambling.
183 static u_int scramble_key = 0x0;
185 /* Shared memory speed, in ns. The documentation states that
186 * the card should not be read faster than every 400ns.
187 * This timing should be provided by the HBA. If it becomes a
188 * problem, try setting mem_speed to 400.
190 static int mem_speed;
192 module_param(domain, int, 0);
193 module_param(scramble_key, int, 0);
194 module_param(mem_speed, int, 0);
196 /*====================================================================*/
198 /* PCMCIA (Card Services) related functions */
199 static void netwave_release(dev_link_t *link); /* Card removal */
200 static int netwave_event(event_t event, int priority,
201 event_callback_args_t *args);
202 static void netwave_pcmcia_config(dev_link_t *arg); /* Runs after card
204 static dev_link_t *netwave_attach(void); /* Create instance */
205 static void netwave_detach(dev_link_t *); /* Destroy instance */
207 /* Hardware configuration */
208 static void netwave_doreset(kio_addr_t iobase, u_char __iomem *ramBase);
209 static void netwave_reset(struct net_device *dev);
211 /* Misc device stuff */
212 static int netwave_open(struct net_device *dev); /* Open the device */
213 static int netwave_close(struct net_device *dev); /* Close the device */
215 /* Packet transmission and Packet reception */
216 static int netwave_start_xmit( struct sk_buff *skb, struct net_device *dev);
217 static int netwave_rx( struct net_device *dev);
219 /* Interrupt routines */
220 static irqreturn_t netwave_interrupt(int irq, void *dev_id, struct pt_regs *regs);
221 static void netwave_watchdog(struct net_device *);
224 static void update_stats(struct net_device *dev);
225 static struct net_device_stats *netwave_get_stats(struct net_device *dev);
227 /* Wireless extensions */
229 static struct iw_statistics* netwave_get_wireless_stats(struct net_device *dev);
231 static int netwave_ioctl(struct net_device *, struct ifreq *, int);
233 static void set_multicast_list(struct net_device *dev);
236 A linked list of "instances" of the skeleton device. Each actual
237 PCMCIA card corresponds to one device instance, and is described
238 by one dev_link_t structure (defined in ds.h).
240 You may not want to use a linked list for this -- for example, the
241 memory card driver uses an array of dev_link_t pointers, where minor
242 device numbers are used to derive the corresponding array index.
244 static dev_link_t *dev_list;
247 A dev_link_t structure has fields for most things that are needed
248 to keep track of a socket, but there will usually be some device
249 specific information that also needs to be kept track of. The
250 'priv' pointer in a dev_link_t structure can be used to point to
251 a device-specific private data structure, like this.
253 A driver needs to provide a dev_node_t structure for each device
254 on a card. In some cases, there is only one device per card (for
255 example, ethernet cards, modems). In other cases, there may be
256 many actual or logical devices (SCSI adapters, memory cards with
257 multiple partitions). The dev_node_t structures need to be kept
258 in a linked list starting at the 'dev' field of a dev_link_t
259 structure. We allocate them in the card's private data structure,
260 because they generally can't be allocated dynamically.
263 #if WIRELESS_EXT <= 12
264 /* Wireless extensions backward compatibility */
266 /* Part of iw_handler prototype we need */
267 struct iw_request_info
269 __u16 cmd; /* Wireless Extension command */
270 __u16 flags; /* More to come ;-) */
273 /* Wireless Extension Backward compatibility - Jean II
274 * If the new wireless device private ioctl range is not defined,
275 * default to standard device private ioctl range */
276 #ifndef SIOCIWFIRSTPRIV
277 #define SIOCIWFIRSTPRIV SIOCDEVPRIVATE
278 #endif /* SIOCIWFIRSTPRIV */
280 #else /* WIRELESS_EXT <= 12 */
281 static const struct iw_handler_def netwave_handler_def;
282 #endif /* WIRELESS_EXT <= 12 */
284 #define SIOCGIPSNAP SIOCIWFIRSTPRIV + 1 /* Site Survey Snapshot */
288 typedef struct net_addr {
294 u_char struct_revision;
295 u_char roaming_state;
297 u_char sp_existsFlag;
298 u_char sp_link_quality;
299 u_char sp_max_link_quality;
300 u_char linkQualityGoodFairBoundary;
301 u_char linkQualityFairPoorBoundary;
302 u_char sp_utilization;
304 u_char sp_hotheadcount;
305 u_char roaming_condition;
309 net_addr nearByAccessPoints[MAX_ESA];
312 typedef struct netwave_private {
314 spinlock_t spinlock; /* Serialize access to the hardware (SMP) */
316 u_char __iomem *ramBase;
319 struct timer_list watchdog; /* To avoid blocking state */
320 struct site_survey nss;
321 struct net_device_stats stats;
323 struct iw_statistics iw_stats; /* Wireless stats */
328 static struct net_device_stats *netwave_get_stats(struct net_device *dev);
332 * The Netwave card is little-endian, so won't work for big endian
335 static inline unsigned short get_uint16(u_char __iomem *staddr)
337 return readw(staddr); /* Return only 16 bits */
340 static inline short get_int16(u_char __iomem * staddr)
342 return readw(staddr);
346 * Wait until the WOC (Write Operation Complete) bit in the
347 * ASR (Adapter Status Register) is asserted.
348 * This should have aborted if it takes too long time.
350 static inline void wait_WOC(unsigned int iobase)
353 while ((inb(iobase + NETWAVE_REG_ASR) & 0x8) != 0x8) ;
357 static void netwave_snapshot(netwave_private *priv, u_char __iomem *ramBase,
359 u_short resultBuffer;
361 /* if time since last snapshot is > 1 sec. (100 jiffies?) then take
362 * new snapshot, else return cached data. This is the recommended rate.
364 if ( jiffies - priv->lastExec > 100) {
365 /* Take site survey snapshot */
366 /*printk( KERN_DEBUG "Taking new snapshot. %ld\n", jiffies -
369 writeb(NETWAVE_CMD_SSS, ramBase + NETWAVE_EREG_CB + 0);
370 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
373 /* Get result and copy to cach */
374 resultBuffer = readw(ramBase + NETWAVE_EREG_CRBP);
375 copy_from_pc( &priv->nss, ramBase+resultBuffer,
376 sizeof(struct site_survey));
383 * Function netwave_get_wireless_stats (dev)
385 * Wireless extensions statistics
388 static struct iw_statistics *netwave_get_wireless_stats(struct net_device *dev)
391 kio_addr_t iobase = dev->base_addr;
392 netwave_private *priv = netdev_priv(dev);
393 u_char __iomem *ramBase = priv->ramBase;
394 struct iw_statistics* wstats;
396 wstats = &priv->iw_stats;
398 spin_lock_irqsave(&priv->spinlock, flags);
400 netwave_snapshot( priv, ramBase, iobase);
402 wstats->status = priv->nss.roaming_state;
403 wstats->qual.qual = readb( ramBase + NETWAVE_EREG_SPCQ);
404 wstats->qual.level = readb( ramBase + NETWAVE_EREG_ISPLQ);
405 wstats->qual.noise = readb( ramBase + NETWAVE_EREG_SPU) & 0x3f;
406 wstats->discard.nwid = 0L;
407 wstats->discard.code = 0L;
408 wstats->discard.misc = 0L;
410 spin_unlock_irqrestore(&priv->spinlock, flags);
412 return &priv->iw_stats;
417 * Function netwave_attach (void)
419 * Creates an "instance" of the driver, allocating local data
420 * structures for one device. The device is registered with Card
423 * The dev_link structure is initialized, but we don't actually
424 * configure the card at this point -- we wait until we receive a
425 * card insertion event.
427 static dev_link_t *netwave_attach(void)
429 client_reg_t client_reg;
431 struct net_device *dev;
432 netwave_private *priv;
435 DEBUG(0, "netwave_attach()\n");
437 /* Initialize the dev_link_t structure */
438 dev = alloc_etherdev(sizeof(netwave_private));
441 priv = netdev_priv(dev);
445 /* The io structure describes IO port mapping */
446 link->io.NumPorts1 = 16;
447 link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
448 /* link->io.NumPorts2 = 16;
449 link->io.Attributes2 = IO_DATA_PATH_WIDTH_16; */
450 link->io.IOAddrLines = 5;
452 /* Interrupt setup */
453 link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
454 link->irq.IRQInfo1 = IRQ_LEVEL_ID;
455 link->irq.Handler = &netwave_interrupt;
457 /* General socket configuration */
458 link->conf.Attributes = CONF_ENABLE_IRQ;
460 link->conf.IntType = INT_MEMORY_AND_IO;
461 link->conf.ConfigIndex = 1;
462 link->conf.Present = PRESENT_OPTION;
464 /* Netwave private struct init. link/dev/node already taken care of,
465 * other stuff zero'd - Jean II */
466 spin_lock_init(&priv->spinlock);
468 /* Netwave specific entries in the device structure */
469 SET_MODULE_OWNER(dev);
470 dev->hard_start_xmit = &netwave_start_xmit;
471 dev->get_stats = &netwave_get_stats;
472 dev->set_multicast_list = &set_multicast_list;
473 /* wireless extensions */
475 dev->get_wireless_stats = &netwave_get_wireless_stats;
476 #if WIRELESS_EXT > 12
477 dev->wireless_handlers = (struct iw_handler_def *)&netwave_handler_def;
478 #endif /* WIRELESS_EXT > 12 */
479 #endif /* WIRELESS_EXT */
480 dev->do_ioctl = &netwave_ioctl;
482 dev->tx_timeout = &netwave_watchdog;
483 dev->watchdog_timeo = TX_TIMEOUT;
485 dev->open = &netwave_open;
486 dev->stop = &netwave_close;
487 link->irq.Instance = dev;
489 /* Register with Card Services */
490 link->next = dev_list;
492 client_reg.dev_info = &dev_info;
493 client_reg.Version = 0x0210;
494 client_reg.event_callback_args.client_data = link;
495 ret = pcmcia_register_client(&link->handle, &client_reg);
497 cs_error(link->handle, RegisterClient, ret);
498 netwave_detach(link);
503 } /* netwave_attach */
506 * Function netwave_detach (link)
508 * This deletes a driver "instance". The device is de-registered
509 * with Card Services. If it has been released, all local data
510 * structures are freed. Otherwise, the structures will be freed
511 * when the device is released.
513 static void netwave_detach(dev_link_t *link)
515 struct net_device *dev = link->priv;
518 DEBUG(0, "netwave_detach(0x%p)\n", link);
521 If the device is currently configured and active, we won't
522 actually delete it yet. Instead, it is marked so that when
523 the release() function is called, that will trigger a proper
526 if (link->state & DEV_CONFIG)
527 netwave_release(link);
529 /* Break the link with Card Services */
531 pcmcia_deregister_client(link->handle);
533 /* Locate device structure */
534 for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
535 if (*linkp == link) break;
538 DEBUG(1, "netwave_cs: detach fail, '%s' not in list\n",
539 link->dev->dev_name);
543 /* Unlink device structure, free pieces */
546 unregister_netdev(dev);
549 } /* netwave_detach */
552 * Wireless Handler : get protocol name
554 static int netwave_get_name(struct net_device *dev,
555 struct iw_request_info *info,
556 union iwreq_data *wrqu,
559 strcpy(wrqu->name, "Netwave");
564 * Wireless Handler : set Network ID
566 static int netwave_set_nwid(struct net_device *dev,
567 struct iw_request_info *info,
568 union iwreq_data *wrqu,
572 kio_addr_t iobase = dev->base_addr;
573 netwave_private *priv = netdev_priv(dev);
574 u_char __iomem *ramBase = priv->ramBase;
576 /* Disable interrupts & save flags */
577 spin_lock_irqsave(&priv->spinlock, flags);
580 if(!wrqu->nwid.disabled) {
581 domain = wrqu->nwid.value;
582 #else /* WIRELESS_EXT > 8 */
584 domain = wrqu->nwid.nwid;
585 #endif /* WIRELESS_EXT > 8 */
586 printk( KERN_DEBUG "Setting domain to 0x%x%02x\n",
587 (domain >> 8) & 0x01, domain & 0xff);
589 writeb(NETWAVE_CMD_SMD, ramBase + NETWAVE_EREG_CB + 0);
590 writeb( domain & 0xff, ramBase + NETWAVE_EREG_CB + 1);
591 writeb((domain >>8 ) & 0x01,ramBase + NETWAVE_EREG_CB+2);
592 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
595 /* ReEnable interrupts & restore flags */
596 spin_unlock_irqrestore(&priv->spinlock, flags);
602 * Wireless Handler : get Network ID
604 static int netwave_get_nwid(struct net_device *dev,
605 struct iw_request_info *info,
606 union iwreq_data *wrqu,
610 wrqu->nwid.value = domain;
611 wrqu->nwid.disabled = 0;
612 wrqu->nwid.fixed = 1;
613 #else /* WIRELESS_EXT > 8 */
614 wrqu->nwid.nwid = domain;
616 #endif /* WIRELESS_EXT > 8 */
622 * Wireless Handler : set scramble key
624 static int netwave_set_scramble(struct net_device *dev,
625 struct iw_request_info *info,
626 union iwreq_data *wrqu,
630 kio_addr_t iobase = dev->base_addr;
631 netwave_private *priv = netdev_priv(dev);
632 u_char __iomem *ramBase = priv->ramBase;
634 /* Disable interrupts & save flags */
635 spin_lock_irqsave(&priv->spinlock, flags);
637 scramble_key = (key[0] << 8) | key[1];
639 writeb(NETWAVE_CMD_SSK, ramBase + NETWAVE_EREG_CB + 0);
640 writeb(scramble_key & 0xff, ramBase + NETWAVE_EREG_CB + 1);
641 writeb((scramble_key>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2);
642 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
644 /* ReEnable interrupts & restore flags */
645 spin_unlock_irqrestore(&priv->spinlock, flags);
651 * Wireless Handler : get scramble key
653 static int netwave_get_scramble(struct net_device *dev,
654 struct iw_request_info *info,
655 union iwreq_data *wrqu,
658 key[1] = scramble_key & 0xff;
659 key[0] = (scramble_key>>8) & 0xff;
661 wrqu->encoding.flags = IW_ENCODE_ENABLED;
662 wrqu->encoding.length = 2;
663 #else /* WIRELESS_EXT > 8 */
664 wrqu->encoding.method = 1;
665 #endif /* WIRELESS_EXT > 8 */
672 * Wireless Handler : get mode
674 static int netwave_get_mode(struct net_device *dev,
675 struct iw_request_info *info,
676 union iwreq_data *wrqu,
680 wrqu->mode = IW_MODE_INFRA;
682 wrqu->mode = IW_MODE_ADHOC;
686 #endif /* WIRELESS_EXT > 8 */
689 * Wireless Handler : get range info
691 static int netwave_get_range(struct net_device *dev,
692 struct iw_request_info *info,
693 union iwreq_data *wrqu,
696 struct iw_range *range = (struct iw_range *) extra;
699 /* Set the length (very important for backward compatibility) */
700 wrqu->data.length = sizeof(struct iw_range);
702 /* Set all the info we don't care or don't know about to zero */
703 memset(range, 0, sizeof(struct iw_range));
705 #if WIRELESS_EXT > 10
706 /* Set the Wireless Extension versions */
707 range->we_version_compiled = WIRELESS_EXT;
708 range->we_version_source = 9; /* Nothing for us in v10 and v11 */
709 #endif /* WIRELESS_EXT > 10 */
711 /* Set information in the range struct */
712 range->throughput = 450 * 1000; /* don't argue on this ! */
713 range->min_nwid = 0x0000;
714 range->max_nwid = 0x01FF;
716 range->num_channels = range->num_frequency = 0;
718 range->sensitivity = 0x3F;
719 range->max_qual.qual = 255;
720 range->max_qual.level = 255;
721 range->max_qual.noise = 0;
724 range->num_bitrates = 1;
725 range->bitrate[0] = 1000000; /* 1 Mb/s */
726 #endif /* WIRELESS_EXT > 7 */
729 range->encoding_size[0] = 2; /* 16 bits scrambling */
730 range->num_encoding_sizes = 1;
731 range->max_encoding_tokens = 1; /* Only one key possible */
732 #endif /* WIRELESS_EXT > 8 */
738 * Wireless Private Handler : get snapshot
740 static int netwave_get_snap(struct net_device *dev,
741 struct iw_request_info *info,
742 union iwreq_data *wrqu,
746 kio_addr_t iobase = dev->base_addr;
747 netwave_private *priv = netdev_priv(dev);
748 u_char __iomem *ramBase = priv->ramBase;
750 /* Disable interrupts & save flags */
751 spin_lock_irqsave(&priv->spinlock, flags);
753 /* Take snapshot of environment */
754 netwave_snapshot( priv, ramBase, iobase);
755 wrqu->data.length = priv->nss.length;
756 memcpy(extra, (u_char *) &priv->nss, sizeof( struct site_survey));
758 priv->lastExec = jiffies;
760 /* ReEnable interrupts & restore flags */
761 spin_unlock_irqrestore(&priv->spinlock, flags);
767 * Structures to export the Wireless Handlers
768 * This is the stuff that are treated the wireless extensions (iwconfig)
771 static const struct iw_priv_args netwave_private_args[] = {
772 /*{ cmd, set_args, get_args, name } */
774 IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | sizeof(struct site_survey),
778 #if WIRELESS_EXT > 12
780 static const iw_handler netwave_handler[] =
782 NULL, /* SIOCSIWNAME */
783 netwave_get_name, /* SIOCGIWNAME */
784 netwave_set_nwid, /* SIOCSIWNWID */
785 netwave_get_nwid, /* SIOCGIWNWID */
786 NULL, /* SIOCSIWFREQ */
787 NULL, /* SIOCGIWFREQ */
788 NULL, /* SIOCSIWMODE */
789 netwave_get_mode, /* SIOCGIWMODE */
790 NULL, /* SIOCSIWSENS */
791 NULL, /* SIOCGIWSENS */
792 NULL, /* SIOCSIWRANGE */
793 netwave_get_range, /* SIOCGIWRANGE */
794 NULL, /* SIOCSIWPRIV */
795 NULL, /* SIOCGIWPRIV */
796 NULL, /* SIOCSIWSTATS */
797 NULL, /* SIOCGIWSTATS */
798 NULL, /* SIOCSIWSPY */
799 NULL, /* SIOCGIWSPY */
800 NULL, /* -- hole -- */
801 NULL, /* -- hole -- */
802 NULL, /* SIOCSIWAP */
803 NULL, /* SIOCGIWAP */
804 NULL, /* -- hole -- */
805 NULL, /* SIOCGIWAPLIST */
806 NULL, /* -- hole -- */
807 NULL, /* -- hole -- */
808 NULL, /* SIOCSIWESSID */
809 NULL, /* SIOCGIWESSID */
810 NULL, /* SIOCSIWNICKN */
811 NULL, /* SIOCGIWNICKN */
812 NULL, /* -- hole -- */
813 NULL, /* -- hole -- */
814 NULL, /* SIOCSIWRATE */
815 NULL, /* SIOCGIWRATE */
816 NULL, /* SIOCSIWRTS */
817 NULL, /* SIOCGIWRTS */
818 NULL, /* SIOCSIWFRAG */
819 NULL, /* SIOCGIWFRAG */
820 NULL, /* SIOCSIWTXPOW */
821 NULL, /* SIOCGIWTXPOW */
822 NULL, /* SIOCSIWRETRY */
823 NULL, /* SIOCGIWRETRY */
824 netwave_set_scramble, /* SIOCSIWENCODE */
825 netwave_get_scramble, /* SIOCGIWENCODE */
828 static const iw_handler netwave_private_handler[] =
830 NULL, /* SIOCIWFIRSTPRIV */
831 netwave_get_snap, /* SIOCIWFIRSTPRIV + 1 */
834 static const struct iw_handler_def netwave_handler_def =
836 .num_standard = sizeof(netwave_handler)/sizeof(iw_handler),
837 .num_private = sizeof(netwave_private_handler)/sizeof(iw_handler),
838 .num_private_args = sizeof(netwave_private_args)/sizeof(struct iw_priv_args),
839 .standard = (iw_handler *) netwave_handler,
840 .private = (iw_handler *) netwave_private_handler,
841 .private_args = (struct iw_priv_args *) netwave_private_args,
843 #endif /* WIRELESS_EXT > 12 */
846 * Function netwave_ioctl (dev, rq, cmd)
848 * Perform ioctl : config & info stuff
849 * This is the stuff that are treated the wireless extensions (iwconfig)
852 static int netwave_ioctl(struct net_device *dev, /* ioctl device */
853 struct ifreq *rq, /* Data passed */
854 int cmd) /* Ioctl number */
858 #if WIRELESS_EXT <= 12
859 struct iwreq *wrq = (struct iwreq *) rq;
863 DEBUG(0, "%s: ->netwave_ioctl(cmd=0x%X)\n", dev->name, cmd);
865 /* Look what is the request */
867 /* --------------- WIRELESS EXTENSIONS --------------- */
869 #if WIRELESS_EXT <= 12
871 netwave_get_name(dev, NULL, &(wrq->u), NULL);
874 ret = netwave_set_nwid(dev, NULL, &(wrq->u), NULL);
877 ret = netwave_get_nwid(dev, NULL, &(wrq->u), NULL);
879 #if WIRELESS_EXT > 8 /* Note : The API did change... */
881 /* Get scramble key */
882 if(wrq->u.encoding.pointer != (caddr_t) 0)
885 ret = netwave_get_scramble(dev, NULL, &(wrq->u), key);
886 if(copy_to_user(wrq->u.encoding.pointer, key, 2))
891 /* Set scramble key */
892 if(wrq->u.encoding.pointer != (caddr_t) 0)
895 if(copy_from_user(key, wrq->u.encoding.pointer, 2))
900 ret = netwave_set_scramble(dev, NULL, &(wrq->u), key);
904 /* Mode of operation */
905 ret = netwave_get_mode(dev, NULL, &(wrq->u), NULL);
907 #else /* WIRELESS_EXT > 8 */
909 /* Get scramble key */
910 ret = netwave_get_scramble(dev, NULL, &(wrq->u),
911 (char *) &wrq->u.encoding.code);
914 /* Set scramble key */
915 ret = netwave_set_scramble(dev, NULL, &(wrq->u),
916 (char *) &wrq->u.encoding.code);
918 #endif /* WIRELESS_EXT > 8 */
920 /* Basic checking... */
921 if(wrq->u.data.pointer != (caddr_t) 0) {
922 struct iw_range range;
923 ret = netwave_get_range(dev, NULL, &(wrq->u), (char *) &range);
924 if (copy_to_user(wrq->u.data.pointer, &range,
925 sizeof(struct iw_range)))
930 /* Basic checking... */
931 if(wrq->u.data.pointer != (caddr_t) 0) {
932 /* Set the number of ioctl available */
933 wrq->u.data.length = sizeof(netwave_private_args) / sizeof(netwave_private_args[0]);
935 /* Copy structure to the user buffer */
936 if(copy_to_user(wrq->u.data.pointer,
937 (u_char *) netwave_private_args,
938 sizeof(netwave_private_args)))
943 if(wrq->u.data.pointer != (caddr_t) 0) {
944 char buffer[sizeof( struct site_survey)];
945 ret = netwave_get_snap(dev, NULL, &(wrq->u), buffer);
946 /* Copy structure to the user buffer */
947 if(copy_to_user(wrq->u.data.pointer,
949 sizeof( struct site_survey)))
951 printk(KERN_DEBUG "Bad buffer!\n");
956 #endif /* WIRELESS_EXT <= 12 */
957 #endif /* WIRELESS_EXT */
966 * Function netwave_pcmcia_config (link)
968 * netwave_pcmcia_config() is scheduled to run after a CARD_INSERTION
969 * event is received, to configure the PCMCIA socket, and to make the
970 * device available to the system.
974 #define CS_CHECK(fn, ret) \
975 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
977 static void netwave_pcmcia_config(dev_link_t *link) {
978 client_handle_t handle = link->handle;
979 struct net_device *dev = link->priv;
980 netwave_private *priv = netdev_priv(dev);
983 int i, j, last_ret, last_fn;
987 u_char __iomem *ramBase = NULL;
989 DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link);
992 This reads the card's CONFIG tuple to find its configuration
995 tuple.Attributes = 0;
996 tuple.TupleData = (cisdata_t *) buf;
997 tuple.TupleDataMax = 64;
998 tuple.TupleOffset = 0;
999 tuple.DesiredTuple = CISTPL_CONFIG;
1000 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
1001 CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
1002 CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
1003 link->conf.ConfigBase = parse.config.base;
1004 link->conf.Present = parse.config.rmask[0];
1006 /* Configure card */
1007 link->state |= DEV_CONFIG;
1010 * Try allocating IO ports. This tries a few fixed addresses.
1011 * If you want, you can also read the card's config table to
1012 * pick addresses -- see the serial driver for an example.
1014 for (i = j = 0x0; j < 0x400; j += 0x20) {
1015 link->io.BasePort1 = j ^ 0x300;
1016 i = pcmcia_request_io(link->handle, &link->io);
1017 if (i == CS_SUCCESS) break;
1019 if (i != CS_SUCCESS) {
1020 cs_error(link->handle, RequestIO, i);
1025 * Now allocate an interrupt line. Note that this does not
1026 * actually assign a handler to the interrupt.
1028 CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
1031 * This actually configures the PCMCIA socket -- setting up
1032 * the I/O windows and the interrupt mapping.
1034 CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
1037 * Allocate a 32K memory window. Note that the dev_link_t
1038 * structure provides space for one window handle -- if your
1039 * device needs several windows, you'll need to keep track of
1040 * the handles in your private data structure, dev->priv.
1042 DEBUG(1, "Setting mem speed of %d\n", mem_speed);
1044 req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_CM|WIN_ENABLE;
1045 req.Base = 0; req.Size = 0x8000;
1046 req.AccessSpeed = mem_speed;
1047 CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &link->win));
1048 mem.CardOffset = 0x20000; mem.Page = 0;
1049 CS_CHECK(MapMemPage, pcmcia_map_mem_page(link->win, &mem));
1051 /* Store base address of the common window frame */
1052 ramBase = ioremap(req.Base, 0x8000);
1053 priv->ramBase = ramBase;
1055 dev->irq = link->irq.AssignedIRQ;
1056 dev->base_addr = link->io.BasePort1;
1057 SET_NETDEV_DEV(dev, &handle_to_dev(handle));
1059 if (register_netdev(dev) != 0) {
1060 printk(KERN_DEBUG "netwave_cs: register_netdev() failed\n");
1064 strcpy(priv->node.dev_name, dev->name);
1065 link->dev = &priv->node;
1066 link->state &= ~DEV_CONFIG_PENDING;
1068 /* Reset card before reading physical address */
1069 netwave_doreset(dev->base_addr, ramBase);
1071 /* Read the ethernet address and fill in the Netwave registers. */
1072 for (i = 0; i < 6; i++)
1073 dev->dev_addr[i] = readb(ramBase + NETWAVE_EREG_PA + i);
1075 printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx id "
1076 "%c%c, hw_addr ", dev->name, dev->base_addr, dev->irq,
1077 (u_long) ramBase, (int) readb(ramBase+NETWAVE_EREG_NI),
1078 (int) readb(ramBase+NETWAVE_EREG_NI+1));
1079 for (i = 0; i < 6; i++)
1080 printk("%02X%s", dev->dev_addr[i], ((i<5) ? ":" : "\n"));
1082 /* get revision words */
1083 printk(KERN_DEBUG "Netwave_reset: revision %04x %04x\n",
1084 get_uint16(ramBase + NETWAVE_EREG_ARW),
1085 get_uint16(ramBase + NETWAVE_EREG_ARW+2));
1089 cs_error(link->handle, last_fn, last_ret);
1091 netwave_release(link);
1092 } /* netwave_pcmcia_config */
1095 * Function netwave_release (arg)
1097 * After a card is removed, netwave_release() will unregister the net
1098 * device, and release the PCMCIA configuration. If the device is
1099 * still open, this will be postponed until it is closed.
1101 static void netwave_release(dev_link_t *link)
1103 struct net_device *dev = link->priv;
1104 netwave_private *priv = netdev_priv(dev);
1106 DEBUG(0, "netwave_release(0x%p)\n", link);
1108 /* Don't bother checking to see if these succeed or not */
1110 iounmap(priv->ramBase);
1111 pcmcia_release_window(link->win);
1113 pcmcia_release_configuration(link->handle);
1114 pcmcia_release_io(link->handle, &link->io);
1115 pcmcia_release_irq(link->handle, &link->irq);
1117 link->state &= ~DEV_CONFIG;
1121 * Function netwave_event (event, priority, args)
1123 * The card status event handler. Mostly, this schedules other
1124 * stuff to run after an event is received. A CARD_REMOVAL event
1125 * also sets some flags to discourage the net drivers from trying
1126 * to talk to the card any more.
1128 * When a CARD_REMOVAL event is received, we immediately set a flag
1129 * to block future accesses to this device. All the functions that
1130 * actually access the device should check this flag to make sure
1131 * the card is still present.
1134 static int netwave_event(event_t event, int priority,
1135 event_callback_args_t *args)
1137 dev_link_t *link = args->client_data;
1138 struct net_device *dev = link->priv;
1140 DEBUG(1, "netwave_event(0x%06x)\n", event);
1143 case CS_EVENT_REGISTRATION_COMPLETE:
1144 DEBUG(0, "netwave_cs: registration complete\n");
1147 case CS_EVENT_CARD_REMOVAL:
1148 link->state &= ~DEV_PRESENT;
1149 if (link->state & DEV_CONFIG) {
1150 netif_device_detach(dev);
1151 netwave_release(link);
1154 case CS_EVENT_CARD_INSERTION:
1155 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
1156 netwave_pcmcia_config( link);
1158 case CS_EVENT_PM_SUSPEND:
1159 link->state |= DEV_SUSPEND;
1160 /* Fall through... */
1161 case CS_EVENT_RESET_PHYSICAL:
1162 if (link->state & DEV_CONFIG) {
1164 netif_device_detach(dev);
1165 pcmcia_release_configuration(link->handle);
1168 case CS_EVENT_PM_RESUME:
1169 link->state &= ~DEV_SUSPEND;
1170 /* Fall through... */
1171 case CS_EVENT_CARD_RESET:
1172 if (link->state & DEV_CONFIG) {
1173 pcmcia_request_configuration(link->handle, &link->conf);
1176 netif_device_attach(dev);
1182 } /* netwave_event */
1185 * Function netwave_doreset (ioBase, ramBase)
1187 * Proper hardware reset of the card.
1189 static void netwave_doreset(kio_addr_t ioBase, u_char __iomem *ramBase)
1193 outb(0x80, ioBase + NETWAVE_REG_PMR);
1194 writeb(0x08, ramBase + NETWAVE_EREG_ASCC); /* Bit 3 is WOC */
1195 outb(0x0, ioBase + NETWAVE_REG_PMR); /* release reset */
1199 * Function netwave_reset (dev)
1201 * Reset and restore all of the netwave registers
1203 static void netwave_reset(struct net_device *dev) {
1205 netwave_private *priv = netdev_priv(dev);
1206 u_char __iomem *ramBase = priv->ramBase;
1207 kio_addr_t iobase = dev->base_addr;
1209 DEBUG(0, "netwave_reset: Done with hardware reset\n");
1211 priv->timeoutCounter = 0;
1214 netwave_doreset(iobase, ramBase);
1215 printk(KERN_DEBUG "netwave_reset: Done with hardware reset\n");
1217 /* Write a NOP to check the card */
1219 writeb(NETWAVE_CMD_NOP, ramBase + NETWAVE_EREG_CB + 0);
1220 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1222 /* Set receive conf */
1224 writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0);
1225 writeb(rxConfRxEna + rxConfBcast, ramBase + NETWAVE_EREG_CB + 1);
1226 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
1228 /* Set transmit conf */
1230 writeb(NETWAVE_CMD_STC, ramBase + NETWAVE_EREG_CB + 0);
1231 writeb(txConfTxEna, ramBase + NETWAVE_EREG_CB + 1);
1232 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
1234 /* Now set the MU Domain */
1235 printk(KERN_DEBUG "Setting domain to 0x%x%02x\n", (domain >> 8) & 0x01, domain & 0xff);
1237 writeb(NETWAVE_CMD_SMD, ramBase + NETWAVE_EREG_CB + 0);
1238 writeb(domain & 0xff, ramBase + NETWAVE_EREG_CB + 1);
1239 writeb((domain>>8) & 0x01, ramBase + NETWAVE_EREG_CB + 2);
1240 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
1242 /* Set scramble key */
1243 printk(KERN_DEBUG "Setting scramble key to 0x%x\n", scramble_key);
1245 writeb(NETWAVE_CMD_SSK, ramBase + NETWAVE_EREG_CB + 0);
1246 writeb(scramble_key & 0xff, ramBase + NETWAVE_EREG_CB + 1);
1247 writeb((scramble_key>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2);
1248 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
1250 /* Enable interrupts, bit 4 high to keep unused
1251 * source from interrupting us, bit 2 high to
1252 * set interrupt enable, 567 to enable TxDN,
1256 outb(imrConfIENA+imrConfRFU1, iobase + NETWAVE_REG_IMR);
1258 /* Hent 4 bytes fra 0x170. Skal vaere 0a,29,88,36
1260 * skriv 80 til d000:3688
1261 * sjekk om det ble 80
1264 /* Enable Receiver */
1266 writeb(NETWAVE_CMD_ER, ramBase + NETWAVE_EREG_CB + 0);
1267 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1269 /* Set the IENA bit in COR */
1271 outb(corConfIENA + corConfLVLREQ, iobase + NETWAVE_REG_COR);
1275 * Function netwave_hw_xmit (data, len, dev)
1277 static int netwave_hw_xmit(unsigned char* data, int len,
1278 struct net_device* dev) {
1279 unsigned long flags;
1280 unsigned int TxFreeList,
1286 netwave_private *priv = netdev_priv(dev);
1287 u_char __iomem * ramBase = priv->ramBase;
1288 kio_addr_t iobase = dev->base_addr;
1290 /* Disable interrupts & save flags */
1291 spin_lock_irqsave(&priv->spinlock, flags);
1293 /* Check if there are transmit buffers available */
1295 if ((inb(iobase+NETWAVE_REG_ASR) & NETWAVE_ASR_TXBA) == 0) {
1296 /* No buffers available */
1297 printk(KERN_DEBUG "netwave_hw_xmit: %s - no xmit buffers available.\n",
1299 spin_unlock_irqrestore(&priv->spinlock, flags);
1303 priv->stats.tx_bytes += len;
1305 DEBUG(3, "Transmitting with SPCQ %x SPU %x LIF %x ISPLQ %x\n",
1306 readb(ramBase + NETWAVE_EREG_SPCQ),
1307 readb(ramBase + NETWAVE_EREG_SPU),
1308 readb(ramBase + NETWAVE_EREG_LIF),
1309 readb(ramBase + NETWAVE_EREG_ISPLQ));
1311 /* Now try to insert it into the adapters free memory */
1313 TxFreeList = get_uint16(ramBase + NETWAVE_EREG_TDP);
1314 MaxData = get_uint16(ramBase + NETWAVE_EREG_TDP+2);
1315 DataOffset = get_uint16(ramBase + NETWAVE_EREG_TDP+4);
1317 DEBUG(3, "TxFreeList %x, MaxData %x, DataOffset %x\n",
1318 TxFreeList, MaxData, DataOffset);
1320 /* Copy packet to the adapter fragment buffers */
1321 curBuff = TxFreeList;
1323 while (tmpcount < len) {
1324 int tmplen = len - tmpcount;
1325 copy_to_pc(ramBase + curBuff + DataOffset, data + tmpcount,
1326 (tmplen < MaxData) ? tmplen : MaxData);
1327 tmpcount += MaxData;
1329 /* Advance to next buffer */
1330 curBuff = get_uint16(ramBase + curBuff);
1333 /* Now issue transmit list */
1335 writeb(NETWAVE_CMD_TL, ramBase + NETWAVE_EREG_CB + 0);
1336 writeb(len & 0xff, ramBase + NETWAVE_EREG_CB + 1);
1337 writeb((len>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2);
1338 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
1340 spin_unlock_irqrestore(&priv->spinlock, flags);
1344 static int netwave_start_xmit(struct sk_buff *skb, struct net_device *dev) {
1345 /* This flag indicate that the hardware can't perform a transmission.
1346 * Theoritically, NET3 check it before sending a packet to the driver,
1347 * but in fact it never do that and pool continuously.
1348 * As the watchdog will abort too long transmissions, we are quite safe...
1351 netif_stop_queue(dev);
1354 short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
1355 unsigned char* buf = skb->data;
1357 if (netwave_hw_xmit( buf, length, dev) == 1) {
1358 /* Some error, let's make them call us another time? */
1359 netif_start_queue(dev);
1361 dev->trans_start = jiffies;
1366 } /* netwave_start_xmit */
1369 * Function netwave_interrupt (irq, dev_id, regs)
1371 * This function is the interrupt handler for the Netwave card. This
1372 * routine will be called whenever:
1373 * 1. A packet is received.
1374 * 2. A packet has successfully been transferred and the unit is
1375 * ready to transmit another packet.
1376 * 3. A command has completed execution.
1378 static irqreturn_t netwave_interrupt(int irq, void* dev_id, struct pt_regs *regs)
1381 u_char __iomem *ramBase;
1382 struct net_device *dev = (struct net_device *)dev_id;
1383 struct netwave_private *priv = netdev_priv(dev);
1384 dev_link_t *link = &priv->link;
1387 if (!netif_device_present(dev))
1390 iobase = dev->base_addr;
1391 ramBase = priv->ramBase;
1393 /* Now find what caused the interrupt, check while interrupts ready */
1394 for (i = 0; i < 10; i++) {
1398 if (!(inb(iobase+NETWAVE_REG_CCSR) & 0x02))
1399 break; /* None of the interrupt sources asserted (normal exit) */
1401 status = inb(iobase + NETWAVE_REG_ASR);
1403 if (!DEV_OK(link)) {
1404 DEBUG(1, "netwave_interrupt: Interrupt with status 0x%x "
1405 "from removed or suspended card!\n", status);
1410 if (status & 0x80) {
1412 /* wait_WOC(iobase); */
1413 /* RxRdy cannot be reset directly by the host */
1416 if (status & 0x40) {
1419 rser = readb(ramBase + NETWAVE_EREG_RSER);
1422 ++priv->stats.rx_dropped;
1423 ++priv->stats.rx_crc_errors;
1426 ++priv->stats.rx_frame_errors;
1428 /* Clear the RxErr bit in RSER. RSER+4 is the
1429 * write part. Also clear the RxCRC (0x04) and
1430 * RxBig (0x02) bits if present */
1432 writeb(0x40 | (rser & 0x06), ramBase + NETWAVE_EREG_RSER + 4);
1434 /* Write bit 6 high to ASCC to clear RxErr in ASR,
1435 * WOC must be set first!
1438 writeb(0x40, ramBase + NETWAVE_EREG_ASCC);
1440 /* Remember to count up priv->stats on error packets */
1441 ++priv->stats.rx_errors;
1444 if (status & 0x20) {
1447 txStatus = readb(ramBase + NETWAVE_EREG_TSER);
1448 DEBUG(3, "Transmit done. TSER = %x id %x\n",
1449 txStatus, readb(ramBase + NETWAVE_EREG_TSER + 1));
1451 if (txStatus & 0x20) {
1452 /* Transmitting was okay, clear bits */
1454 writeb(0x2f, ramBase + NETWAVE_EREG_TSER + 4);
1455 ++priv->stats.tx_packets;
1458 if (txStatus & 0xd0) {
1459 if (txStatus & 0x80) {
1460 ++priv->stats.collisions; /* Because of /proc/net/dev*/
1461 /* ++priv->stats.tx_aborted_errors; */
1462 /* printk("Collision. %ld\n", jiffies - dev->trans_start); */
1464 if (txStatus & 0x40)
1465 ++priv->stats.tx_carrier_errors;
1466 /* 0x80 TxGU Transmit giveup - nine times and no luck
1467 * 0x40 TxNOAP No access point. Discarded packet.
1468 * 0x10 TxErr Transmit error. Always set when
1469 * TxGU and TxNOAP is set. (Those are the only ones
1472 DEBUG(3, "netwave_interrupt: TxDN with error status %x\n",
1475 /* Clear out TxGU, TxNOAP, TxErr and TxTrys */
1477 writeb(0xdf & txStatus, ramBase+NETWAVE_EREG_TSER+4);
1478 ++priv->stats.tx_errors;
1480 DEBUG(3, "New status is TSER %x ASR %x\n",
1481 readb(ramBase + NETWAVE_EREG_TSER),
1482 inb(iobase + NETWAVE_REG_ASR));
1484 netif_wake_queue(dev);
1486 /* TxBA, this would trigger on all error packets received */
1487 /* if (status & 0x01) {
1488 DEBUG(4, "Transmit buffers available, %x\n", status);
1492 /* Handled if we looped at least one time - Jean II */
1493 return IRQ_RETVAL(i);
1494 } /* netwave_interrupt */
1497 * Function netwave_watchdog (a)
1499 * Watchdog : when we start a transmission, we set a timer in the
1500 * kernel. If the transmission complete, this timer is disabled. If
1501 * it expire, we reset the card.
1504 static void netwave_watchdog(struct net_device *dev) {
1506 DEBUG(1, "%s: netwave_watchdog: watchdog timer expired\n", dev->name);
1508 dev->trans_start = jiffies;
1509 netif_wake_queue(dev);
1510 } /* netwave_watchdog */
1512 static struct net_device_stats *netwave_get_stats(struct net_device *dev) {
1513 netwave_private *priv = netdev_priv(dev);
1517 DEBUG(2, "netwave: SPCQ %x SPU %x LIF %x ISPLQ %x MHS %x rxtx %x"
1518 " %x tx %x %x %x %x\n",
1519 readb(priv->ramBase + NETWAVE_EREG_SPCQ),
1520 readb(priv->ramBase + NETWAVE_EREG_SPU),
1521 readb(priv->ramBase + NETWAVE_EREG_LIF),
1522 readb(priv->ramBase + NETWAVE_EREG_ISPLQ),
1523 readb(priv->ramBase + NETWAVE_EREG_MHS),
1524 readb(priv->ramBase + NETWAVE_EREG_EC + 0xe),
1525 readb(priv->ramBase + NETWAVE_EREG_EC + 0xf),
1526 readb(priv->ramBase + NETWAVE_EREG_EC + 0x18),
1527 readb(priv->ramBase + NETWAVE_EREG_EC + 0x19),
1528 readb(priv->ramBase + NETWAVE_EREG_EC + 0x1a),
1529 readb(priv->ramBase + NETWAVE_EREG_EC + 0x1b));
1531 return &priv->stats;
1534 static void update_stats(struct net_device *dev) {
1535 //unsigned long flags;
1536 /* netwave_private *priv = netdev_priv(dev); */
1538 //spin_lock_irqsave(&priv->spinlock, flags);
1540 /* priv->stats.rx_packets = readb(priv->ramBase + 0x18e);
1541 priv->stats.tx_packets = readb(priv->ramBase + 0x18f); */
1543 //spin_unlock_irqrestore(&priv->spinlock, flags);
1546 static int netwave_rx(struct net_device *dev)
1548 netwave_private *priv = netdev_priv(dev);
1549 u_char __iomem *ramBase = priv->ramBase;
1550 kio_addr_t iobase = dev->base_addr;
1552 struct sk_buff *skb = NULL;
1553 unsigned int curBuffer,
1557 int dataCount, dataOffset;
1561 DEBUG(3, "xinw_rx: Receiving ... \n");
1563 /* Receive max 10 packets for now. */
1564 for (i = 0; i < 10; i++) {
1567 rxStatus = readb(ramBase + NETWAVE_EREG_RSER);
1568 if ( !( rxStatus & 0x80)) /* No more packets */
1571 /* Check if multicast/broadcast or other */
1572 /* multicast = (rxStatus & 0x20); */
1574 /* The receive list pointer and length of the packet */
1576 rcvLen = get_int16( ramBase + NETWAVE_EREG_RDP);
1577 rcvList = get_uint16( ramBase + NETWAVE_EREG_RDP + 2);
1580 printk(KERN_DEBUG "netwave_rx: Receive packet with len %d\n",
1585 skb = dev_alloc_skb(rcvLen+5);
1587 DEBUG(1, "netwave_rx: Could not allocate an sk_buff of "
1588 "length %d\n", rcvLen);
1589 ++priv->stats.rx_dropped;
1590 /* Tell the adapter to skip the packet */
1592 writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0);
1593 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1597 skb_reserve( skb, 2); /* Align IP on 16 byte */
1598 skb_put( skb, rcvLen);
1601 /* Copy packet fragments to the skb data area */
1602 ptr = (u_char*) skb->data;
1603 curBuffer = rcvList;
1605 while ( tmpcount < rcvLen) {
1606 /* Get length and offset of current buffer */
1607 dataCount = get_uint16( ramBase+curBuffer+2);
1608 dataOffset = get_uint16( ramBase+curBuffer+4);
1610 copy_from_pc( ptr + tmpcount,
1611 ramBase+curBuffer+dataOffset, dataCount);
1613 tmpcount += dataCount;
1615 /* Point to next buffer */
1616 curBuffer = get_uint16(ramBase + curBuffer);
1619 skb->protocol = eth_type_trans(skb,dev);
1620 /* Queue packet for network layer */
1623 dev->last_rx = jiffies;
1624 priv->stats.rx_packets++;
1625 priv->stats.rx_bytes += rcvLen;
1627 /* Got the packet, tell the adapter to skip it */
1629 writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0);
1630 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1631 DEBUG(3, "Packet reception ok\n");
1636 static int netwave_open(struct net_device *dev) {
1637 netwave_private *priv = netdev_priv(dev);
1638 dev_link_t *link = &priv->link;
1640 DEBUG(1, "netwave_open: starting.\n");
1647 netif_start_queue(dev);
1653 static int netwave_close(struct net_device *dev) {
1654 netwave_private *priv = netdev_priv(dev);
1655 dev_link_t *link = &priv->link;
1657 DEBUG(1, "netwave_close: finishing.\n");
1660 netif_stop_queue(dev);
1665 static struct pcmcia_device_id netwave_ids[] = {
1666 PCMCIA_DEVICE_PROD_ID12("Xircom", "CreditCard Netwave", 0x2e3ee845, 0x54e28a28),
1669 MODULE_DEVICE_TABLE(pcmcia, netwave_ids);
1671 static struct pcmcia_driver netwave_driver = {
1672 .owner = THIS_MODULE,
1674 .name = "netwave_cs",
1676 .attach = netwave_attach,
1677 .event = netwave_event,
1678 .detach = netwave_detach,
1679 .id_table = netwave_ids,
1682 static int __init init_netwave_cs(void)
1684 return pcmcia_register_driver(&netwave_driver);
1687 static void __exit exit_netwave_cs(void)
1689 pcmcia_unregister_driver(&netwave_driver);
1690 BUG_ON(dev_list != NULL);
1693 module_init(init_netwave_cs);
1694 module_exit(exit_netwave_cs);
1696 /* Set or clear the multicast filter for this adaptor.
1697 num_addrs == -1 Promiscuous mode, receive all packets
1698 num_addrs == 0 Normal mode, clear multicast list
1699 num_addrs > 0 Multicast mode, receive normal and MC packets, and do
1700 best-effort filtering.
1702 static void set_multicast_list(struct net_device *dev)
1704 kio_addr_t iobase = dev->base_addr;
1705 netwave_private *priv = netdev_priv(dev);
1706 u_char __iomem * ramBase = priv->ramBase;
1712 if (old != dev->mc_count) {
1713 old = dev->mc_count;
1714 DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
1715 dev->name, dev->mc_count);
1720 if (dev->mc_count || (dev->flags & IFF_ALLMULTI)) {
1721 /* Multicast Mode */
1722 rcvMode = rxConfRxEna + rxConfAMP + rxConfBcast;
1723 } else if (dev->flags & IFF_PROMISC) {
1724 /* Promiscous mode */
1725 rcvMode = rxConfRxEna + rxConfPro + rxConfAMP + rxConfBcast;
1728 rcvMode = rxConfRxEna + rxConfBcast;
1731 /* printk("netwave set_multicast_list: rcvMode to %x\n", rcvMode);*/
1732 /* Now set receive mode */
1734 writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0);
1735 writeb(rcvMode, ramBase + NETWAVE_EREG_CB + 1);
1736 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
1738 MODULE_LICENSE("GPL");