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 */
474 #if WIRELESS_EXT <= 16
475 dev->get_wireless_stats = &netwave_get_wireless_stats;
476 #endif /* WIRELESS_EXT <= 16 */
477 #if WIRELESS_EXT > 12
478 dev->wireless_handlers = (struct iw_handler_def *)&netwave_handler_def;
479 #endif /* WIRELESS_EXT > 12 */
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,
842 #if WIRELESS_EXT > 16
843 .get_wireless_stats = netwave_get_wireless_stats,
844 #endif /* WIRELESS_EXT > 16 */
846 #endif /* WIRELESS_EXT > 12 */
849 * Function netwave_ioctl (dev, rq, cmd)
851 * Perform ioctl : config & info stuff
852 * This is the stuff that are treated the wireless extensions (iwconfig)
855 static int netwave_ioctl(struct net_device *dev, /* ioctl device */
856 struct ifreq *rq, /* Data passed */
857 int cmd) /* Ioctl number */
861 #if WIRELESS_EXT <= 12
862 struct iwreq *wrq = (struct iwreq *) rq;
866 DEBUG(0, "%s: ->netwave_ioctl(cmd=0x%X)\n", dev->name, cmd);
868 /* Look what is the request */
870 /* --------------- WIRELESS EXTENSIONS --------------- */
872 #if WIRELESS_EXT <= 12
874 netwave_get_name(dev, NULL, &(wrq->u), NULL);
877 ret = netwave_set_nwid(dev, NULL, &(wrq->u), NULL);
880 ret = netwave_get_nwid(dev, NULL, &(wrq->u), NULL);
882 #if WIRELESS_EXT > 8 /* Note : The API did change... */
884 /* Get scramble key */
885 if(wrq->u.encoding.pointer != (caddr_t) 0)
888 ret = netwave_get_scramble(dev, NULL, &(wrq->u), key);
889 if(copy_to_user(wrq->u.encoding.pointer, key, 2))
894 /* Set scramble key */
895 if(wrq->u.encoding.pointer != (caddr_t) 0)
898 if(copy_from_user(key, wrq->u.encoding.pointer, 2))
903 ret = netwave_set_scramble(dev, NULL, &(wrq->u), key);
907 /* Mode of operation */
908 ret = netwave_get_mode(dev, NULL, &(wrq->u), NULL);
910 #else /* WIRELESS_EXT > 8 */
912 /* Get scramble key */
913 ret = netwave_get_scramble(dev, NULL, &(wrq->u),
914 (char *) &wrq->u.encoding.code);
917 /* Set scramble key */
918 ret = netwave_set_scramble(dev, NULL, &(wrq->u),
919 (char *) &wrq->u.encoding.code);
921 #endif /* WIRELESS_EXT > 8 */
923 /* Basic checking... */
924 if(wrq->u.data.pointer != (caddr_t) 0) {
925 struct iw_range range;
926 ret = netwave_get_range(dev, NULL, &(wrq->u), (char *) &range);
927 if (copy_to_user(wrq->u.data.pointer, &range,
928 sizeof(struct iw_range)))
933 /* Basic checking... */
934 if(wrq->u.data.pointer != (caddr_t) 0) {
935 /* Set the number of ioctl available */
936 wrq->u.data.length = sizeof(netwave_private_args) / sizeof(netwave_private_args[0]);
938 /* Copy structure to the user buffer */
939 if(copy_to_user(wrq->u.data.pointer,
940 (u_char *) netwave_private_args,
941 sizeof(netwave_private_args)))
946 if(wrq->u.data.pointer != (caddr_t) 0) {
947 char buffer[sizeof( struct site_survey)];
948 ret = netwave_get_snap(dev, NULL, &(wrq->u), buffer);
949 /* Copy structure to the user buffer */
950 if(copy_to_user(wrq->u.data.pointer,
952 sizeof( struct site_survey)))
954 printk(KERN_DEBUG "Bad buffer!\n");
959 #endif /* WIRELESS_EXT <= 12 */
960 #endif /* WIRELESS_EXT */
969 * Function netwave_pcmcia_config (link)
971 * netwave_pcmcia_config() is scheduled to run after a CARD_INSERTION
972 * event is received, to configure the PCMCIA socket, and to make the
973 * device available to the system.
977 #define CS_CHECK(fn, ret) \
978 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
980 static void netwave_pcmcia_config(dev_link_t *link) {
981 client_handle_t handle = link->handle;
982 struct net_device *dev = link->priv;
983 netwave_private *priv = netdev_priv(dev);
986 int i, j, last_ret, last_fn;
990 u_char __iomem *ramBase = NULL;
992 DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link);
995 This reads the card's CONFIG tuple to find its configuration
998 tuple.Attributes = 0;
999 tuple.TupleData = (cisdata_t *) buf;
1000 tuple.TupleDataMax = 64;
1001 tuple.TupleOffset = 0;
1002 tuple.DesiredTuple = CISTPL_CONFIG;
1003 CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
1004 CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
1005 CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
1006 link->conf.ConfigBase = parse.config.base;
1007 link->conf.Present = parse.config.rmask[0];
1009 /* Configure card */
1010 link->state |= DEV_CONFIG;
1013 * Try allocating IO ports. This tries a few fixed addresses.
1014 * If you want, you can also read the card's config table to
1015 * pick addresses -- see the serial driver for an example.
1017 for (i = j = 0x0; j < 0x400; j += 0x20) {
1018 link->io.BasePort1 = j ^ 0x300;
1019 i = pcmcia_request_io(link->handle, &link->io);
1020 if (i == CS_SUCCESS) break;
1022 if (i != CS_SUCCESS) {
1023 cs_error(link->handle, RequestIO, i);
1028 * Now allocate an interrupt line. Note that this does not
1029 * actually assign a handler to the interrupt.
1031 CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
1034 * This actually configures the PCMCIA socket -- setting up
1035 * the I/O windows and the interrupt mapping.
1037 CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
1040 * Allocate a 32K memory window. Note that the dev_link_t
1041 * structure provides space for one window handle -- if your
1042 * device needs several windows, you'll need to keep track of
1043 * the handles in your private data structure, dev->priv.
1045 DEBUG(1, "Setting mem speed of %d\n", mem_speed);
1047 req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_CM|WIN_ENABLE;
1048 req.Base = 0; req.Size = 0x8000;
1049 req.AccessSpeed = mem_speed;
1050 CS_CHECK(RequestWindow, pcmcia_request_window(&link->handle, &req, &link->win));
1051 mem.CardOffset = 0x20000; mem.Page = 0;
1052 CS_CHECK(MapMemPage, pcmcia_map_mem_page(link->win, &mem));
1054 /* Store base address of the common window frame */
1055 ramBase = ioremap(req.Base, 0x8000);
1056 priv->ramBase = ramBase;
1058 dev->irq = link->irq.AssignedIRQ;
1059 dev->base_addr = link->io.BasePort1;
1060 SET_NETDEV_DEV(dev, &handle_to_dev(handle));
1062 if (register_netdev(dev) != 0) {
1063 printk(KERN_DEBUG "netwave_cs: register_netdev() failed\n");
1067 strcpy(priv->node.dev_name, dev->name);
1068 link->dev = &priv->node;
1069 link->state &= ~DEV_CONFIG_PENDING;
1071 /* Reset card before reading physical address */
1072 netwave_doreset(dev->base_addr, ramBase);
1074 /* Read the ethernet address and fill in the Netwave registers. */
1075 for (i = 0; i < 6; i++)
1076 dev->dev_addr[i] = readb(ramBase + NETWAVE_EREG_PA + i);
1078 printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx id "
1079 "%c%c, hw_addr ", dev->name, dev->base_addr, dev->irq,
1080 (u_long) ramBase, (int) readb(ramBase+NETWAVE_EREG_NI),
1081 (int) readb(ramBase+NETWAVE_EREG_NI+1));
1082 for (i = 0; i < 6; i++)
1083 printk("%02X%s", dev->dev_addr[i], ((i<5) ? ":" : "\n"));
1085 /* get revision words */
1086 printk(KERN_DEBUG "Netwave_reset: revision %04x %04x\n",
1087 get_uint16(ramBase + NETWAVE_EREG_ARW),
1088 get_uint16(ramBase + NETWAVE_EREG_ARW+2));
1092 cs_error(link->handle, last_fn, last_ret);
1094 netwave_release(link);
1095 } /* netwave_pcmcia_config */
1098 * Function netwave_release (arg)
1100 * After a card is removed, netwave_release() will unregister the net
1101 * device, and release the PCMCIA configuration. If the device is
1102 * still open, this will be postponed until it is closed.
1104 static void netwave_release(dev_link_t *link)
1106 struct net_device *dev = link->priv;
1107 netwave_private *priv = netdev_priv(dev);
1109 DEBUG(0, "netwave_release(0x%p)\n", link);
1111 /* Don't bother checking to see if these succeed or not */
1113 iounmap(priv->ramBase);
1114 pcmcia_release_window(link->win);
1116 pcmcia_release_configuration(link->handle);
1117 pcmcia_release_io(link->handle, &link->io);
1118 pcmcia_release_irq(link->handle, &link->irq);
1120 link->state &= ~DEV_CONFIG;
1124 * Function netwave_event (event, priority, args)
1126 * The card status event handler. Mostly, this schedules other
1127 * stuff to run after an event is received. A CARD_REMOVAL event
1128 * also sets some flags to discourage the net drivers from trying
1129 * to talk to the card any more.
1131 * When a CARD_REMOVAL event is received, we immediately set a flag
1132 * to block future accesses to this device. All the functions that
1133 * actually access the device should check this flag to make sure
1134 * the card is still present.
1137 static int netwave_event(event_t event, int priority,
1138 event_callback_args_t *args)
1140 dev_link_t *link = args->client_data;
1141 struct net_device *dev = link->priv;
1143 DEBUG(1, "netwave_event(0x%06x)\n", event);
1146 case CS_EVENT_REGISTRATION_COMPLETE:
1147 DEBUG(0, "netwave_cs: registration complete\n");
1150 case CS_EVENT_CARD_REMOVAL:
1151 link->state &= ~DEV_PRESENT;
1152 if (link->state & DEV_CONFIG) {
1153 netif_device_detach(dev);
1154 netwave_release(link);
1157 case CS_EVENT_CARD_INSERTION:
1158 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
1159 netwave_pcmcia_config( link);
1161 case CS_EVENT_PM_SUSPEND:
1162 link->state |= DEV_SUSPEND;
1163 /* Fall through... */
1164 case CS_EVENT_RESET_PHYSICAL:
1165 if (link->state & DEV_CONFIG) {
1167 netif_device_detach(dev);
1168 pcmcia_release_configuration(link->handle);
1171 case CS_EVENT_PM_RESUME:
1172 link->state &= ~DEV_SUSPEND;
1173 /* Fall through... */
1174 case CS_EVENT_CARD_RESET:
1175 if (link->state & DEV_CONFIG) {
1176 pcmcia_request_configuration(link->handle, &link->conf);
1179 netif_device_attach(dev);
1185 } /* netwave_event */
1188 * Function netwave_doreset (ioBase, ramBase)
1190 * Proper hardware reset of the card.
1192 static void netwave_doreset(kio_addr_t ioBase, u_char __iomem *ramBase)
1196 outb(0x80, ioBase + NETWAVE_REG_PMR);
1197 writeb(0x08, ramBase + NETWAVE_EREG_ASCC); /* Bit 3 is WOC */
1198 outb(0x0, ioBase + NETWAVE_REG_PMR); /* release reset */
1202 * Function netwave_reset (dev)
1204 * Reset and restore all of the netwave registers
1206 static void netwave_reset(struct net_device *dev) {
1208 netwave_private *priv = netdev_priv(dev);
1209 u_char __iomem *ramBase = priv->ramBase;
1210 kio_addr_t iobase = dev->base_addr;
1212 DEBUG(0, "netwave_reset: Done with hardware reset\n");
1214 priv->timeoutCounter = 0;
1217 netwave_doreset(iobase, ramBase);
1218 printk(KERN_DEBUG "netwave_reset: Done with hardware reset\n");
1220 /* Write a NOP to check the card */
1222 writeb(NETWAVE_CMD_NOP, ramBase + NETWAVE_EREG_CB + 0);
1223 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1225 /* Set receive conf */
1227 writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0);
1228 writeb(rxConfRxEna + rxConfBcast, ramBase + NETWAVE_EREG_CB + 1);
1229 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
1231 /* Set transmit conf */
1233 writeb(NETWAVE_CMD_STC, ramBase + NETWAVE_EREG_CB + 0);
1234 writeb(txConfTxEna, ramBase + NETWAVE_EREG_CB + 1);
1235 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
1237 /* Now set the MU Domain */
1238 printk(KERN_DEBUG "Setting domain to 0x%x%02x\n", (domain >> 8) & 0x01, domain & 0xff);
1240 writeb(NETWAVE_CMD_SMD, ramBase + NETWAVE_EREG_CB + 0);
1241 writeb(domain & 0xff, ramBase + NETWAVE_EREG_CB + 1);
1242 writeb((domain>>8) & 0x01, ramBase + NETWAVE_EREG_CB + 2);
1243 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
1245 /* Set scramble key */
1246 printk(KERN_DEBUG "Setting scramble key to 0x%x\n", scramble_key);
1248 writeb(NETWAVE_CMD_SSK, ramBase + NETWAVE_EREG_CB + 0);
1249 writeb(scramble_key & 0xff, ramBase + NETWAVE_EREG_CB + 1);
1250 writeb((scramble_key>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2);
1251 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
1253 /* Enable interrupts, bit 4 high to keep unused
1254 * source from interrupting us, bit 2 high to
1255 * set interrupt enable, 567 to enable TxDN,
1259 outb(imrConfIENA+imrConfRFU1, iobase + NETWAVE_REG_IMR);
1261 /* Hent 4 bytes fra 0x170. Skal vaere 0a,29,88,36
1263 * skriv 80 til d000:3688
1264 * sjekk om det ble 80
1267 /* Enable Receiver */
1269 writeb(NETWAVE_CMD_ER, ramBase + NETWAVE_EREG_CB + 0);
1270 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1272 /* Set the IENA bit in COR */
1274 outb(corConfIENA + corConfLVLREQ, iobase + NETWAVE_REG_COR);
1278 * Function netwave_hw_xmit (data, len, dev)
1280 static int netwave_hw_xmit(unsigned char* data, int len,
1281 struct net_device* dev) {
1282 unsigned long flags;
1283 unsigned int TxFreeList,
1289 netwave_private *priv = netdev_priv(dev);
1290 u_char __iomem * ramBase = priv->ramBase;
1291 kio_addr_t iobase = dev->base_addr;
1293 /* Disable interrupts & save flags */
1294 spin_lock_irqsave(&priv->spinlock, flags);
1296 /* Check if there are transmit buffers available */
1298 if ((inb(iobase+NETWAVE_REG_ASR) & NETWAVE_ASR_TXBA) == 0) {
1299 /* No buffers available */
1300 printk(KERN_DEBUG "netwave_hw_xmit: %s - no xmit buffers available.\n",
1302 spin_unlock_irqrestore(&priv->spinlock, flags);
1306 priv->stats.tx_bytes += len;
1308 DEBUG(3, "Transmitting with SPCQ %x SPU %x LIF %x ISPLQ %x\n",
1309 readb(ramBase + NETWAVE_EREG_SPCQ),
1310 readb(ramBase + NETWAVE_EREG_SPU),
1311 readb(ramBase + NETWAVE_EREG_LIF),
1312 readb(ramBase + NETWAVE_EREG_ISPLQ));
1314 /* Now try to insert it into the adapters free memory */
1316 TxFreeList = get_uint16(ramBase + NETWAVE_EREG_TDP);
1317 MaxData = get_uint16(ramBase + NETWAVE_EREG_TDP+2);
1318 DataOffset = get_uint16(ramBase + NETWAVE_EREG_TDP+4);
1320 DEBUG(3, "TxFreeList %x, MaxData %x, DataOffset %x\n",
1321 TxFreeList, MaxData, DataOffset);
1323 /* Copy packet to the adapter fragment buffers */
1324 curBuff = TxFreeList;
1326 while (tmpcount < len) {
1327 int tmplen = len - tmpcount;
1328 copy_to_pc(ramBase + curBuff + DataOffset, data + tmpcount,
1329 (tmplen < MaxData) ? tmplen : MaxData);
1330 tmpcount += MaxData;
1332 /* Advance to next buffer */
1333 curBuff = get_uint16(ramBase + curBuff);
1336 /* Now issue transmit list */
1338 writeb(NETWAVE_CMD_TL, ramBase + NETWAVE_EREG_CB + 0);
1339 writeb(len & 0xff, ramBase + NETWAVE_EREG_CB + 1);
1340 writeb((len>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2);
1341 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3);
1343 spin_unlock_irqrestore(&priv->spinlock, flags);
1347 static int netwave_start_xmit(struct sk_buff *skb, struct net_device *dev) {
1348 /* This flag indicate that the hardware can't perform a transmission.
1349 * Theoritically, NET3 check it before sending a packet to the driver,
1350 * but in fact it never do that and pool continuously.
1351 * As the watchdog will abort too long transmissions, we are quite safe...
1354 netif_stop_queue(dev);
1357 short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
1358 unsigned char* buf = skb->data;
1360 if (netwave_hw_xmit( buf, length, dev) == 1) {
1361 /* Some error, let's make them call us another time? */
1362 netif_start_queue(dev);
1364 dev->trans_start = jiffies;
1369 } /* netwave_start_xmit */
1372 * Function netwave_interrupt (irq, dev_id, regs)
1374 * This function is the interrupt handler for the Netwave card. This
1375 * routine will be called whenever:
1376 * 1. A packet is received.
1377 * 2. A packet has successfully been transferred and the unit is
1378 * ready to transmit another packet.
1379 * 3. A command has completed execution.
1381 static irqreturn_t netwave_interrupt(int irq, void* dev_id, struct pt_regs *regs)
1384 u_char __iomem *ramBase;
1385 struct net_device *dev = (struct net_device *)dev_id;
1386 struct netwave_private *priv = netdev_priv(dev);
1387 dev_link_t *link = &priv->link;
1390 if (!netif_device_present(dev))
1393 iobase = dev->base_addr;
1394 ramBase = priv->ramBase;
1396 /* Now find what caused the interrupt, check while interrupts ready */
1397 for (i = 0; i < 10; i++) {
1401 if (!(inb(iobase+NETWAVE_REG_CCSR) & 0x02))
1402 break; /* None of the interrupt sources asserted (normal exit) */
1404 status = inb(iobase + NETWAVE_REG_ASR);
1406 if (!DEV_OK(link)) {
1407 DEBUG(1, "netwave_interrupt: Interrupt with status 0x%x "
1408 "from removed or suspended card!\n", status);
1413 if (status & 0x80) {
1415 /* wait_WOC(iobase); */
1416 /* RxRdy cannot be reset directly by the host */
1419 if (status & 0x40) {
1422 rser = readb(ramBase + NETWAVE_EREG_RSER);
1425 ++priv->stats.rx_dropped;
1426 ++priv->stats.rx_crc_errors;
1429 ++priv->stats.rx_frame_errors;
1431 /* Clear the RxErr bit in RSER. RSER+4 is the
1432 * write part. Also clear the RxCRC (0x04) and
1433 * RxBig (0x02) bits if present */
1435 writeb(0x40 | (rser & 0x06), ramBase + NETWAVE_EREG_RSER + 4);
1437 /* Write bit 6 high to ASCC to clear RxErr in ASR,
1438 * WOC must be set first!
1441 writeb(0x40, ramBase + NETWAVE_EREG_ASCC);
1443 /* Remember to count up priv->stats on error packets */
1444 ++priv->stats.rx_errors;
1447 if (status & 0x20) {
1450 txStatus = readb(ramBase + NETWAVE_EREG_TSER);
1451 DEBUG(3, "Transmit done. TSER = %x id %x\n",
1452 txStatus, readb(ramBase + NETWAVE_EREG_TSER + 1));
1454 if (txStatus & 0x20) {
1455 /* Transmitting was okay, clear bits */
1457 writeb(0x2f, ramBase + NETWAVE_EREG_TSER + 4);
1458 ++priv->stats.tx_packets;
1461 if (txStatus & 0xd0) {
1462 if (txStatus & 0x80) {
1463 ++priv->stats.collisions; /* Because of /proc/net/dev*/
1464 /* ++priv->stats.tx_aborted_errors; */
1465 /* printk("Collision. %ld\n", jiffies - dev->trans_start); */
1467 if (txStatus & 0x40)
1468 ++priv->stats.tx_carrier_errors;
1469 /* 0x80 TxGU Transmit giveup - nine times and no luck
1470 * 0x40 TxNOAP No access point. Discarded packet.
1471 * 0x10 TxErr Transmit error. Always set when
1472 * TxGU and TxNOAP is set. (Those are the only ones
1475 DEBUG(3, "netwave_interrupt: TxDN with error status %x\n",
1478 /* Clear out TxGU, TxNOAP, TxErr and TxTrys */
1480 writeb(0xdf & txStatus, ramBase+NETWAVE_EREG_TSER+4);
1481 ++priv->stats.tx_errors;
1483 DEBUG(3, "New status is TSER %x ASR %x\n",
1484 readb(ramBase + NETWAVE_EREG_TSER),
1485 inb(iobase + NETWAVE_REG_ASR));
1487 netif_wake_queue(dev);
1489 /* TxBA, this would trigger on all error packets received */
1490 /* if (status & 0x01) {
1491 DEBUG(4, "Transmit buffers available, %x\n", status);
1495 /* Handled if we looped at least one time - Jean II */
1496 return IRQ_RETVAL(i);
1497 } /* netwave_interrupt */
1500 * Function netwave_watchdog (a)
1502 * Watchdog : when we start a transmission, we set a timer in the
1503 * kernel. If the transmission complete, this timer is disabled. If
1504 * it expire, we reset the card.
1507 static void netwave_watchdog(struct net_device *dev) {
1509 DEBUG(1, "%s: netwave_watchdog: watchdog timer expired\n", dev->name);
1511 dev->trans_start = jiffies;
1512 netif_wake_queue(dev);
1513 } /* netwave_watchdog */
1515 static struct net_device_stats *netwave_get_stats(struct net_device *dev) {
1516 netwave_private *priv = netdev_priv(dev);
1520 DEBUG(2, "netwave: SPCQ %x SPU %x LIF %x ISPLQ %x MHS %x rxtx %x"
1521 " %x tx %x %x %x %x\n",
1522 readb(priv->ramBase + NETWAVE_EREG_SPCQ),
1523 readb(priv->ramBase + NETWAVE_EREG_SPU),
1524 readb(priv->ramBase + NETWAVE_EREG_LIF),
1525 readb(priv->ramBase + NETWAVE_EREG_ISPLQ),
1526 readb(priv->ramBase + NETWAVE_EREG_MHS),
1527 readb(priv->ramBase + NETWAVE_EREG_EC + 0xe),
1528 readb(priv->ramBase + NETWAVE_EREG_EC + 0xf),
1529 readb(priv->ramBase + NETWAVE_EREG_EC + 0x18),
1530 readb(priv->ramBase + NETWAVE_EREG_EC + 0x19),
1531 readb(priv->ramBase + NETWAVE_EREG_EC + 0x1a),
1532 readb(priv->ramBase + NETWAVE_EREG_EC + 0x1b));
1534 return &priv->stats;
1537 static void update_stats(struct net_device *dev) {
1538 //unsigned long flags;
1539 /* netwave_private *priv = netdev_priv(dev); */
1541 //spin_lock_irqsave(&priv->spinlock, flags);
1543 /* priv->stats.rx_packets = readb(priv->ramBase + 0x18e);
1544 priv->stats.tx_packets = readb(priv->ramBase + 0x18f); */
1546 //spin_unlock_irqrestore(&priv->spinlock, flags);
1549 static int netwave_rx(struct net_device *dev)
1551 netwave_private *priv = netdev_priv(dev);
1552 u_char __iomem *ramBase = priv->ramBase;
1553 kio_addr_t iobase = dev->base_addr;
1555 struct sk_buff *skb = NULL;
1556 unsigned int curBuffer,
1560 int dataCount, dataOffset;
1564 DEBUG(3, "xinw_rx: Receiving ... \n");
1566 /* Receive max 10 packets for now. */
1567 for (i = 0; i < 10; i++) {
1570 rxStatus = readb(ramBase + NETWAVE_EREG_RSER);
1571 if ( !( rxStatus & 0x80)) /* No more packets */
1574 /* Check if multicast/broadcast or other */
1575 /* multicast = (rxStatus & 0x20); */
1577 /* The receive list pointer and length of the packet */
1579 rcvLen = get_int16( ramBase + NETWAVE_EREG_RDP);
1580 rcvList = get_uint16( ramBase + NETWAVE_EREG_RDP + 2);
1583 printk(KERN_DEBUG "netwave_rx: Receive packet with len %d\n",
1588 skb = dev_alloc_skb(rcvLen+5);
1590 DEBUG(1, "netwave_rx: Could not allocate an sk_buff of "
1591 "length %d\n", rcvLen);
1592 ++priv->stats.rx_dropped;
1593 /* Tell the adapter to skip the packet */
1595 writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0);
1596 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1600 skb_reserve( skb, 2); /* Align IP on 16 byte */
1601 skb_put( skb, rcvLen);
1604 /* Copy packet fragments to the skb data area */
1605 ptr = (u_char*) skb->data;
1606 curBuffer = rcvList;
1608 while ( tmpcount < rcvLen) {
1609 /* Get length and offset of current buffer */
1610 dataCount = get_uint16( ramBase+curBuffer+2);
1611 dataOffset = get_uint16( ramBase+curBuffer+4);
1613 copy_from_pc( ptr + tmpcount,
1614 ramBase+curBuffer+dataOffset, dataCount);
1616 tmpcount += dataCount;
1618 /* Point to next buffer */
1619 curBuffer = get_uint16(ramBase + curBuffer);
1622 skb->protocol = eth_type_trans(skb,dev);
1623 /* Queue packet for network layer */
1626 dev->last_rx = jiffies;
1627 priv->stats.rx_packets++;
1628 priv->stats.rx_bytes += rcvLen;
1630 /* Got the packet, tell the adapter to skip it */
1632 writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0);
1633 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
1634 DEBUG(3, "Packet reception ok\n");
1639 static int netwave_open(struct net_device *dev) {
1640 netwave_private *priv = netdev_priv(dev);
1641 dev_link_t *link = &priv->link;
1643 DEBUG(1, "netwave_open: starting.\n");
1650 netif_start_queue(dev);
1656 static int netwave_close(struct net_device *dev) {
1657 netwave_private *priv = netdev_priv(dev);
1658 dev_link_t *link = &priv->link;
1660 DEBUG(1, "netwave_close: finishing.\n");
1663 netif_stop_queue(dev);
1668 static struct pcmcia_device_id netwave_ids[] = {
1669 PCMCIA_DEVICE_PROD_ID12("Xircom", "CreditCard Netwave", 0x2e3ee845, 0x54e28a28),
1672 MODULE_DEVICE_TABLE(pcmcia, netwave_ids);
1674 static struct pcmcia_driver netwave_driver = {
1675 .owner = THIS_MODULE,
1677 .name = "netwave_cs",
1679 .attach = netwave_attach,
1680 .event = netwave_event,
1681 .detach = netwave_detach,
1682 .id_table = netwave_ids,
1685 static int __init init_netwave_cs(void)
1687 return pcmcia_register_driver(&netwave_driver);
1690 static void __exit exit_netwave_cs(void)
1692 pcmcia_unregister_driver(&netwave_driver);
1693 BUG_ON(dev_list != NULL);
1696 module_init(init_netwave_cs);
1697 module_exit(exit_netwave_cs);
1699 /* Set or clear the multicast filter for this adaptor.
1700 num_addrs == -1 Promiscuous mode, receive all packets
1701 num_addrs == 0 Normal mode, clear multicast list
1702 num_addrs > 0 Multicast mode, receive normal and MC packets, and do
1703 best-effort filtering.
1705 static void set_multicast_list(struct net_device *dev)
1707 kio_addr_t iobase = dev->base_addr;
1708 netwave_private *priv = netdev_priv(dev);
1709 u_char __iomem * ramBase = priv->ramBase;
1715 if (old != dev->mc_count) {
1716 old = dev->mc_count;
1717 DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
1718 dev->name, dev->mc_count);
1723 if (dev->mc_count || (dev->flags & IFF_ALLMULTI)) {
1724 /* Multicast Mode */
1725 rcvMode = rxConfRxEna + rxConfAMP + rxConfBcast;
1726 } else if (dev->flags & IFF_PROMISC) {
1727 /* Promiscous mode */
1728 rcvMode = rxConfRxEna + rxConfPro + rxConfAMP + rxConfBcast;
1731 rcvMode = rxConfRxEna + rxConfBcast;
1734 /* printk("netwave set_multicast_list: rcvMode to %x\n", rcvMode);*/
1735 /* Now set receive mode */
1737 writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0);
1738 writeb(rcvMode, ramBase + NETWAVE_EREG_CB + 1);
1739 writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2);
1741 MODULE_LICENSE("GPL");