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>
60 #include <net/iw_handler.h>
63 #include <pcmcia/cs_types.h>
64 #include <pcmcia/cs.h>
65 #include <pcmcia/cistpl.h>
66 #include <pcmcia/cisreg.h>
67 #include <pcmcia/ds.h>
68 #include <pcmcia/mem_op.h>
70 #include <asm/system.h>
74 #define NETWAVE_REGOFF 0x8000
75 /* The Netwave IO registers, offsets to iobase */
76 #define NETWAVE_REG_COR 0x0
77 #define NETWAVE_REG_CCSR 0x2
78 #define NETWAVE_REG_ASR 0x4
79 #define NETWAVE_REG_IMR 0xa
80 #define NETWAVE_REG_PMR 0xc
81 #define NETWAVE_REG_IOLOW 0x6
82 #define NETWAVE_REG_IOHI 0x7
83 #define NETWAVE_REG_IOCONTROL 0x8
84 #define NETWAVE_REG_DATA 0xf
85 /* The Netwave Extended IO registers, offsets to RamBase */
86 #define NETWAVE_EREG_ASCC 0x114
87 #define NETWAVE_EREG_RSER 0x120
88 #define NETWAVE_EREG_RSERW 0x124
89 #define NETWAVE_EREG_TSER 0x130
90 #define NETWAVE_EREG_TSERW 0x134
91 #define NETWAVE_EREG_CB 0x100
92 #define NETWAVE_EREG_SPCQ 0x154
93 #define NETWAVE_EREG_SPU 0x155
94 #define NETWAVE_EREG_LIF 0x14e
95 #define NETWAVE_EREG_ISPLQ 0x156
96 #define NETWAVE_EREG_HHC 0x158
97 #define NETWAVE_EREG_NI 0x16e
98 #define NETWAVE_EREG_MHS 0x16b
99 #define NETWAVE_EREG_TDP 0x140
100 #define NETWAVE_EREG_RDP 0x150
101 #define NETWAVE_EREG_PA 0x160
102 #define NETWAVE_EREG_EC 0x180
103 #define NETWAVE_EREG_CRBP 0x17a
104 #define NETWAVE_EREG_ARW 0x166
107 * Commands used in the extended command buffer
108 * NETWAVE_EREG_CB (0x100-0x10F)
110 #define NETWAVE_CMD_NOP 0x00
111 #define NETWAVE_CMD_SRC 0x01
112 #define NETWAVE_CMD_STC 0x02
113 #define NETWAVE_CMD_AMA 0x03
114 #define NETWAVE_CMD_DMA 0x04
115 #define NETWAVE_CMD_SAMA 0x05
116 #define NETWAVE_CMD_ER 0x06
117 #define NETWAVE_CMD_DR 0x07
118 #define NETWAVE_CMD_TL 0x08
119 #define NETWAVE_CMD_SRP 0x09
120 #define NETWAVE_CMD_SSK 0x0a
121 #define NETWAVE_CMD_SMD 0x0b
122 #define NETWAVE_CMD_SAPD 0x0c
123 #define NETWAVE_CMD_SSS 0x11
124 /* End of Command marker */
125 #define NETWAVE_CMD_EOC 0x00
127 /* ASR register bits */
128 #define NETWAVE_ASR_RXRDY 0x80
129 #define NETWAVE_ASR_TXBA 0x01
131 #define TX_TIMEOUT ((32*HZ)/100)
133 static const unsigned int imrConfRFU1
= 0x10; /* RFU interrupt mask, keep high */
134 static const unsigned int imrConfIENA
= 0x02; /* Interrupt enable */
136 static const unsigned int corConfIENA
= 0x01; /* Interrupt enable */
137 static const unsigned int corConfLVLREQ
= 0x40; /* Keep high */
139 static const unsigned int rxConfRxEna
= 0x80; /* Receive Enable */
140 static const unsigned int rxConfMAC
= 0x20; /* MAC host receive mode*/
141 static const unsigned int rxConfPro
= 0x10; /* Promiscuous */
142 static const unsigned int rxConfAMP
= 0x08; /* Accept Multicast Packets */
143 static const unsigned int rxConfBcast
= 0x04; /* Accept Broadcast Packets */
145 static const unsigned int txConfTxEna
= 0x80; /* Transmit Enable */
146 static const unsigned int txConfMAC
= 0x20; /* Host sends MAC mode */
147 static const unsigned int txConfEUD
= 0x10; /* Enable Uni-Data packets */
148 static const unsigned int txConfKey
= 0x02; /* Scramble data packets */
149 static const unsigned int txConfLoop
= 0x01; /* Loopback mode */
152 All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If
153 you do not define PCMCIA_DEBUG at all, all the debug code will be
154 left out. If you compile with PCMCIA_DEBUG=0, the debug code will
155 be present but disabled -- but it can then be enabled for specific
156 modules at load time with a 'pc_debug=#' option to insmod.
160 static int pc_debug
= PCMCIA_DEBUG
;
161 module_param(pc_debug
, int, 0);
162 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
163 static char *version
=
164 "netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n";
166 #define DEBUG(n, args...)
169 /*====================================================================*/
171 /* Parameters that can be set with 'insmod' */
173 /* Choose the domain, default is 0x100 */
174 static u_int domain
= 0x100;
176 /* Scramble key, range from 0x0 to 0xffff.
177 * 0x0 is no scrambling.
179 static u_int scramble_key
= 0x0;
181 /* Shared memory speed, in ns. The documentation states that
182 * the card should not be read faster than every 400ns.
183 * This timing should be provided by the HBA. If it becomes a
184 * problem, try setting mem_speed to 400.
186 static int mem_speed
;
188 module_param(domain
, int, 0);
189 module_param(scramble_key
, int, 0);
190 module_param(mem_speed
, int, 0);
192 /*====================================================================*/
194 /* PCMCIA (Card Services) related functions */
195 static void netwave_release(dev_link_t
*link
); /* Card removal */
196 static void netwave_pcmcia_config(dev_link_t
*arg
); /* Runs after card
198 static void netwave_detach(struct pcmcia_device
*p_dev
); /* Destroy instance */
200 /* Hardware configuration */
201 static void netwave_doreset(kio_addr_t iobase
, u_char __iomem
*ramBase
);
202 static void netwave_reset(struct net_device
*dev
);
204 /* Misc device stuff */
205 static int netwave_open(struct net_device
*dev
); /* Open the device */
206 static int netwave_close(struct net_device
*dev
); /* Close the device */
208 /* Packet transmission and Packet reception */
209 static int netwave_start_xmit( struct sk_buff
*skb
, struct net_device
*dev
);
210 static int netwave_rx( struct net_device
*dev
);
212 /* Interrupt routines */
213 static irqreturn_t
netwave_interrupt(int irq
, void *dev_id
, struct pt_regs
*regs
);
214 static void netwave_watchdog(struct net_device
*);
217 static void update_stats(struct net_device
*dev
);
218 static struct net_device_stats
*netwave_get_stats(struct net_device
*dev
);
220 /* Wireless extensions */
221 static struct iw_statistics
* netwave_get_wireless_stats(struct net_device
*dev
);
223 static void set_multicast_list(struct net_device
*dev
);
226 A dev_link_t structure has fields for most things that are needed
227 to keep track of a socket, but there will usually be some device
228 specific information that also needs to be kept track of. The
229 'priv' pointer in a dev_link_t structure can be used to point to
230 a device-specific private data structure, like this.
232 A driver needs to provide a dev_node_t structure for each device
233 on a card. In some cases, there is only one device per card (for
234 example, ethernet cards, modems). In other cases, there may be
235 many actual or logical devices (SCSI adapters, memory cards with
236 multiple partitions). The dev_node_t structures need to be kept
237 in a linked list starting at the 'dev' field of a dev_link_t
238 structure. We allocate them in the card's private data structure,
239 because they generally can't be allocated dynamically.
242 static const struct iw_handler_def netwave_handler_def
;
244 #define SIOCGIPSNAP SIOCIWFIRSTPRIV + 1 /* Site Survey Snapshot */
248 typedef struct net_addr
{
254 u_char struct_revision
;
255 u_char roaming_state
;
257 u_char sp_existsFlag
;
258 u_char sp_link_quality
;
259 u_char sp_max_link_quality
;
260 u_char linkQualityGoodFairBoundary
;
261 u_char linkQualityFairPoorBoundary
;
262 u_char sp_utilization
;
264 u_char sp_hotheadcount
;
265 u_char roaming_condition
;
269 net_addr nearByAccessPoints
[MAX_ESA
];
272 typedef struct netwave_private
{
274 spinlock_t spinlock
; /* Serialize access to the hardware (SMP) */
276 u_char __iomem
*ramBase
;
279 struct timer_list watchdog
; /* To avoid blocking state */
280 struct site_survey nss
;
281 struct net_device_stats stats
;
282 struct iw_statistics iw_stats
; /* Wireless stats */
286 static struct net_device_stats
*netwave_get_stats(struct net_device
*dev
);
290 * The Netwave card is little-endian, so won't work for big endian
293 static inline unsigned short get_uint16(u_char __iomem
*staddr
)
295 return readw(staddr
); /* Return only 16 bits */
298 static inline short get_int16(u_char __iomem
* staddr
)
300 return readw(staddr
);
304 * Wait until the WOC (Write Operation Complete) bit in the
305 * ASR (Adapter Status Register) is asserted.
306 * This should have aborted if it takes too long time.
308 static inline void wait_WOC(unsigned int iobase
)
311 while ((inb(iobase
+ NETWAVE_REG_ASR
) & 0x8) != 0x8) ;
314 static void netwave_snapshot(netwave_private
*priv
, u_char __iomem
*ramBase
,
316 u_short resultBuffer
;
318 /* if time since last snapshot is > 1 sec. (100 jiffies?) then take
319 * new snapshot, else return cached data. This is the recommended rate.
321 if ( jiffies
- priv
->lastExec
> 100) {
322 /* Take site survey snapshot */
323 /*printk( KERN_DEBUG "Taking new snapshot. %ld\n", jiffies -
326 writeb(NETWAVE_CMD_SSS
, ramBase
+ NETWAVE_EREG_CB
+ 0);
327 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 1);
330 /* Get result and copy to cach */
331 resultBuffer
= readw(ramBase
+ NETWAVE_EREG_CRBP
);
332 copy_from_pc( &priv
->nss
, ramBase
+resultBuffer
,
333 sizeof(struct site_survey
));
338 * Function netwave_get_wireless_stats (dev)
340 * Wireless extensions statistics
343 static struct iw_statistics
*netwave_get_wireless_stats(struct net_device
*dev
)
346 kio_addr_t iobase
= dev
->base_addr
;
347 netwave_private
*priv
= netdev_priv(dev
);
348 u_char __iomem
*ramBase
= priv
->ramBase
;
349 struct iw_statistics
* wstats
;
351 wstats
= &priv
->iw_stats
;
353 spin_lock_irqsave(&priv
->spinlock
, flags
);
355 netwave_snapshot( priv
, ramBase
, iobase
);
357 wstats
->status
= priv
->nss
.roaming_state
;
358 wstats
->qual
.qual
= readb( ramBase
+ NETWAVE_EREG_SPCQ
);
359 wstats
->qual
.level
= readb( ramBase
+ NETWAVE_EREG_ISPLQ
);
360 wstats
->qual
.noise
= readb( ramBase
+ NETWAVE_EREG_SPU
) & 0x3f;
361 wstats
->discard
.nwid
= 0L;
362 wstats
->discard
.code
= 0L;
363 wstats
->discard
.misc
= 0L;
365 spin_unlock_irqrestore(&priv
->spinlock
, flags
);
367 return &priv
->iw_stats
;
371 * Function netwave_attach (void)
373 * Creates an "instance" of the driver, allocating local data
374 * structures for one device. The device is registered with Card
377 * The dev_link structure is initialized, but we don't actually
378 * configure the card at this point -- we wait until we receive a
379 * card insertion event.
381 static int netwave_attach(struct pcmcia_device
*p_dev
)
384 struct net_device
*dev
;
385 netwave_private
*priv
;
387 DEBUG(0, "netwave_attach()\n");
389 /* Initialize the dev_link_t structure */
390 dev
= alloc_etherdev(sizeof(netwave_private
));
393 priv
= netdev_priv(dev
);
397 /* The io structure describes IO port mapping */
398 link
->io
.NumPorts1
= 16;
399 link
->io
.Attributes1
= IO_DATA_PATH_WIDTH_16
;
400 /* link->io.NumPorts2 = 16;
401 link->io.Attributes2 = IO_DATA_PATH_WIDTH_16; */
402 link
->io
.IOAddrLines
= 5;
404 /* Interrupt setup */
405 link
->irq
.Attributes
= IRQ_TYPE_EXCLUSIVE
| IRQ_HANDLE_PRESENT
;
406 link
->irq
.IRQInfo1
= IRQ_LEVEL_ID
;
407 link
->irq
.Handler
= &netwave_interrupt
;
409 /* General socket configuration */
410 link
->conf
.Attributes
= CONF_ENABLE_IRQ
;
412 link
->conf
.IntType
= INT_MEMORY_AND_IO
;
413 link
->conf
.ConfigIndex
= 1;
414 link
->conf
.Present
= PRESENT_OPTION
;
416 /* Netwave private struct init. link/dev/node already taken care of,
417 * other stuff zero'd - Jean II */
418 spin_lock_init(&priv
->spinlock
);
420 /* Netwave specific entries in the device structure */
421 SET_MODULE_OWNER(dev
);
422 dev
->hard_start_xmit
= &netwave_start_xmit
;
423 dev
->get_stats
= &netwave_get_stats
;
424 dev
->set_multicast_list
= &set_multicast_list
;
425 /* wireless extensions */
426 dev
->wireless_handlers
= (struct iw_handler_def
*)&netwave_handler_def
;
428 dev
->tx_timeout
= &netwave_watchdog
;
429 dev
->watchdog_timeo
= TX_TIMEOUT
;
431 dev
->open
= &netwave_open
;
432 dev
->stop
= &netwave_close
;
433 link
->irq
.Instance
= dev
;
435 link
->handle
= p_dev
;
436 p_dev
->instance
= link
;
438 link
->state
|= DEV_PRESENT
| DEV_CONFIG_PENDING
;
439 netwave_pcmcia_config( link
);
442 } /* netwave_attach */
445 * Function netwave_detach (link)
447 * This deletes a driver "instance". The device is de-registered
448 * with Card Services. If it has been released, all local data
449 * structures are freed. Otherwise, the structures will be freed
450 * when the device is released.
452 static void netwave_detach(struct pcmcia_device
*p_dev
)
454 dev_link_t
*link
= dev_to_instance(p_dev
);
455 struct net_device
*dev
= link
->priv
;
457 DEBUG(0, "netwave_detach(0x%p)\n", link
);
459 if (link
->state
& DEV_CONFIG
)
460 netwave_release(link
);
463 unregister_netdev(dev
);
466 } /* netwave_detach */
469 * Wireless Handler : get protocol name
471 static int netwave_get_name(struct net_device
*dev
,
472 struct iw_request_info
*info
,
473 union iwreq_data
*wrqu
,
476 strcpy(wrqu
->name
, "Netwave");
481 * Wireless Handler : set Network ID
483 static int netwave_set_nwid(struct net_device
*dev
,
484 struct iw_request_info
*info
,
485 union iwreq_data
*wrqu
,
489 kio_addr_t iobase
= dev
->base_addr
;
490 netwave_private
*priv
= netdev_priv(dev
);
491 u_char __iomem
*ramBase
= priv
->ramBase
;
493 /* Disable interrupts & save flags */
494 spin_lock_irqsave(&priv
->spinlock
, flags
);
496 if(!wrqu
->nwid
.disabled
) {
497 domain
= wrqu
->nwid
.value
;
498 printk( KERN_DEBUG
"Setting domain to 0x%x%02x\n",
499 (domain
>> 8) & 0x01, domain
& 0xff);
501 writeb(NETWAVE_CMD_SMD
, ramBase
+ NETWAVE_EREG_CB
+ 0);
502 writeb( domain
& 0xff, ramBase
+ NETWAVE_EREG_CB
+ 1);
503 writeb((domain
>>8 ) & 0x01,ramBase
+ NETWAVE_EREG_CB
+2);
504 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 3);
507 /* ReEnable interrupts & restore flags */
508 spin_unlock_irqrestore(&priv
->spinlock
, flags
);
514 * Wireless Handler : get Network ID
516 static int netwave_get_nwid(struct net_device
*dev
,
517 struct iw_request_info
*info
,
518 union iwreq_data
*wrqu
,
521 wrqu
->nwid
.value
= domain
;
522 wrqu
->nwid
.disabled
= 0;
523 wrqu
->nwid
.fixed
= 1;
528 * Wireless Handler : set scramble key
530 static int netwave_set_scramble(struct net_device
*dev
,
531 struct iw_request_info
*info
,
532 union iwreq_data
*wrqu
,
536 kio_addr_t iobase
= dev
->base_addr
;
537 netwave_private
*priv
= netdev_priv(dev
);
538 u_char __iomem
*ramBase
= priv
->ramBase
;
540 /* Disable interrupts & save flags */
541 spin_lock_irqsave(&priv
->spinlock
, flags
);
543 scramble_key
= (key
[0] << 8) | key
[1];
545 writeb(NETWAVE_CMD_SSK
, ramBase
+ NETWAVE_EREG_CB
+ 0);
546 writeb(scramble_key
& 0xff, ramBase
+ NETWAVE_EREG_CB
+ 1);
547 writeb((scramble_key
>>8) & 0xff, ramBase
+ NETWAVE_EREG_CB
+ 2);
548 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 3);
550 /* ReEnable interrupts & restore flags */
551 spin_unlock_irqrestore(&priv
->spinlock
, flags
);
557 * Wireless Handler : get scramble key
559 static int netwave_get_scramble(struct net_device
*dev
,
560 struct iw_request_info
*info
,
561 union iwreq_data
*wrqu
,
564 key
[1] = scramble_key
& 0xff;
565 key
[0] = (scramble_key
>>8) & 0xff;
566 wrqu
->encoding
.flags
= IW_ENCODE_ENABLED
;
567 wrqu
->encoding
.length
= 2;
572 * Wireless Handler : get mode
574 static int netwave_get_mode(struct net_device
*dev
,
575 struct iw_request_info
*info
,
576 union iwreq_data
*wrqu
,
580 wrqu
->mode
= IW_MODE_INFRA
;
582 wrqu
->mode
= IW_MODE_ADHOC
;
588 * Wireless Handler : get range info
590 static int netwave_get_range(struct net_device
*dev
,
591 struct iw_request_info
*info
,
592 union iwreq_data
*wrqu
,
595 struct iw_range
*range
= (struct iw_range
*) extra
;
598 /* Set the length (very important for backward compatibility) */
599 wrqu
->data
.length
= sizeof(struct iw_range
);
601 /* Set all the info we don't care or don't know about to zero */
602 memset(range
, 0, sizeof(struct iw_range
));
604 /* Set the Wireless Extension versions */
605 range
->we_version_compiled
= WIRELESS_EXT
;
606 range
->we_version_source
= 9; /* Nothing for us in v10 and v11 */
608 /* Set information in the range struct */
609 range
->throughput
= 450 * 1000; /* don't argue on this ! */
610 range
->min_nwid
= 0x0000;
611 range
->max_nwid
= 0x01FF;
613 range
->num_channels
= range
->num_frequency
= 0;
615 range
->sensitivity
= 0x3F;
616 range
->max_qual
.qual
= 255;
617 range
->max_qual
.level
= 255;
618 range
->max_qual
.noise
= 0;
620 range
->num_bitrates
= 1;
621 range
->bitrate
[0] = 1000000; /* 1 Mb/s */
623 range
->encoding_size
[0] = 2; /* 16 bits scrambling */
624 range
->num_encoding_sizes
= 1;
625 range
->max_encoding_tokens
= 1; /* Only one key possible */
631 * Wireless Private Handler : get snapshot
633 static int netwave_get_snap(struct net_device
*dev
,
634 struct iw_request_info
*info
,
635 union iwreq_data
*wrqu
,
639 kio_addr_t iobase
= dev
->base_addr
;
640 netwave_private
*priv
= netdev_priv(dev
);
641 u_char __iomem
*ramBase
= priv
->ramBase
;
643 /* Disable interrupts & save flags */
644 spin_lock_irqsave(&priv
->spinlock
, flags
);
646 /* Take snapshot of environment */
647 netwave_snapshot( priv
, ramBase
, iobase
);
648 wrqu
->data
.length
= priv
->nss
.length
;
649 memcpy(extra
, (u_char
*) &priv
->nss
, sizeof( struct site_survey
));
651 priv
->lastExec
= jiffies
;
653 /* ReEnable interrupts & restore flags */
654 spin_unlock_irqrestore(&priv
->spinlock
, flags
);
660 * Structures to export the Wireless Handlers
661 * This is the stuff that are treated the wireless extensions (iwconfig)
664 static const struct iw_priv_args netwave_private_args
[] = {
665 /*{ cmd, set_args, get_args, name } */
667 IW_PRIV_TYPE_BYTE
| IW_PRIV_SIZE_FIXED
| sizeof(struct site_survey
),
671 static const iw_handler netwave_handler
[] =
673 NULL
, /* SIOCSIWNAME */
674 netwave_get_name
, /* SIOCGIWNAME */
675 netwave_set_nwid
, /* SIOCSIWNWID */
676 netwave_get_nwid
, /* SIOCGIWNWID */
677 NULL
, /* SIOCSIWFREQ */
678 NULL
, /* SIOCGIWFREQ */
679 NULL
, /* SIOCSIWMODE */
680 netwave_get_mode
, /* SIOCGIWMODE */
681 NULL
, /* SIOCSIWSENS */
682 NULL
, /* SIOCGIWSENS */
683 NULL
, /* SIOCSIWRANGE */
684 netwave_get_range
, /* SIOCGIWRANGE */
685 NULL
, /* SIOCSIWPRIV */
686 NULL
, /* SIOCGIWPRIV */
687 NULL
, /* SIOCSIWSTATS */
688 NULL
, /* SIOCGIWSTATS */
689 NULL
, /* SIOCSIWSPY */
690 NULL
, /* SIOCGIWSPY */
691 NULL
, /* -- hole -- */
692 NULL
, /* -- hole -- */
693 NULL
, /* SIOCSIWAP */
694 NULL
, /* SIOCGIWAP */
695 NULL
, /* -- hole -- */
696 NULL
, /* SIOCGIWAPLIST */
697 NULL
, /* -- hole -- */
698 NULL
, /* -- hole -- */
699 NULL
, /* SIOCSIWESSID */
700 NULL
, /* SIOCGIWESSID */
701 NULL
, /* SIOCSIWNICKN */
702 NULL
, /* SIOCGIWNICKN */
703 NULL
, /* -- hole -- */
704 NULL
, /* -- hole -- */
705 NULL
, /* SIOCSIWRATE */
706 NULL
, /* SIOCGIWRATE */
707 NULL
, /* SIOCSIWRTS */
708 NULL
, /* SIOCGIWRTS */
709 NULL
, /* SIOCSIWFRAG */
710 NULL
, /* SIOCGIWFRAG */
711 NULL
, /* SIOCSIWTXPOW */
712 NULL
, /* SIOCGIWTXPOW */
713 NULL
, /* SIOCSIWRETRY */
714 NULL
, /* SIOCGIWRETRY */
715 netwave_set_scramble
, /* SIOCSIWENCODE */
716 netwave_get_scramble
, /* SIOCGIWENCODE */
719 static const iw_handler netwave_private_handler
[] =
721 NULL
, /* SIOCIWFIRSTPRIV */
722 netwave_get_snap
, /* SIOCIWFIRSTPRIV + 1 */
725 static const struct iw_handler_def netwave_handler_def
=
727 .num_standard
= sizeof(netwave_handler
)/sizeof(iw_handler
),
728 .num_private
= sizeof(netwave_private_handler
)/sizeof(iw_handler
),
729 .num_private_args
= sizeof(netwave_private_args
)/sizeof(struct iw_priv_args
),
730 .standard
= (iw_handler
*) netwave_handler
,
731 .private = (iw_handler
*) netwave_private_handler
,
732 .private_args
= (struct iw_priv_args
*) netwave_private_args
,
733 .get_wireless_stats
= netwave_get_wireless_stats
,
737 * Function netwave_pcmcia_config (link)
739 * netwave_pcmcia_config() is scheduled to run after a CARD_INSERTION
740 * event is received, to configure the PCMCIA socket, and to make the
741 * device available to the system.
745 #define CS_CHECK(fn, ret) \
746 do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
748 static void netwave_pcmcia_config(dev_link_t
*link
) {
749 client_handle_t handle
= link
->handle
;
750 struct net_device
*dev
= link
->priv
;
751 netwave_private
*priv
= netdev_priv(dev
);
754 int i
, j
, last_ret
, last_fn
;
758 u_char __iomem
*ramBase
= NULL
;
760 DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link
);
763 This reads the card's CONFIG tuple to find its configuration
766 tuple
.Attributes
= 0;
767 tuple
.TupleData
= (cisdata_t
*) buf
;
768 tuple
.TupleDataMax
= 64;
769 tuple
.TupleOffset
= 0;
770 tuple
.DesiredTuple
= CISTPL_CONFIG
;
771 CS_CHECK(GetFirstTuple
, pcmcia_get_first_tuple(handle
, &tuple
));
772 CS_CHECK(GetTupleData
, pcmcia_get_tuple_data(handle
, &tuple
));
773 CS_CHECK(ParseTuple
, pcmcia_parse_tuple(handle
, &tuple
, &parse
));
774 link
->conf
.ConfigBase
= parse
.config
.base
;
775 link
->conf
.Present
= parse
.config
.rmask
[0];
778 link
->state
|= DEV_CONFIG
;
781 * Try allocating IO ports. This tries a few fixed addresses.
782 * If you want, you can also read the card's config table to
783 * pick addresses -- see the serial driver for an example.
785 for (i
= j
= 0x0; j
< 0x400; j
+= 0x20) {
786 link
->io
.BasePort1
= j
^ 0x300;
787 i
= pcmcia_request_io(link
->handle
, &link
->io
);
788 if (i
== CS_SUCCESS
) break;
790 if (i
!= CS_SUCCESS
) {
791 cs_error(link
->handle
, RequestIO
, i
);
796 * Now allocate an interrupt line. Note that this does not
797 * actually assign a handler to the interrupt.
799 CS_CHECK(RequestIRQ
, pcmcia_request_irq(handle
, &link
->irq
));
802 * This actually configures the PCMCIA socket -- setting up
803 * the I/O windows and the interrupt mapping.
805 CS_CHECK(RequestConfiguration
, pcmcia_request_configuration(handle
, &link
->conf
));
808 * Allocate a 32K memory window. Note that the dev_link_t
809 * structure provides space for one window handle -- if your
810 * device needs several windows, you'll need to keep track of
811 * the handles in your private data structure, dev->priv.
813 DEBUG(1, "Setting mem speed of %d\n", mem_speed
);
815 req
.Attributes
= WIN_DATA_WIDTH_8
|WIN_MEMORY_TYPE_CM
|WIN_ENABLE
;
816 req
.Base
= 0; req
.Size
= 0x8000;
817 req
.AccessSpeed
= mem_speed
;
818 CS_CHECK(RequestWindow
, pcmcia_request_window(&link
->handle
, &req
, &link
->win
));
819 mem
.CardOffset
= 0x20000; mem
.Page
= 0;
820 CS_CHECK(MapMemPage
, pcmcia_map_mem_page(link
->win
, &mem
));
822 /* Store base address of the common window frame */
823 ramBase
= ioremap(req
.Base
, 0x8000);
824 priv
->ramBase
= ramBase
;
826 dev
->irq
= link
->irq
.AssignedIRQ
;
827 dev
->base_addr
= link
->io
.BasePort1
;
828 SET_NETDEV_DEV(dev
, &handle_to_dev(handle
));
830 if (register_netdev(dev
) != 0) {
831 printk(KERN_DEBUG
"netwave_cs: register_netdev() failed\n");
835 strcpy(priv
->node
.dev_name
, dev
->name
);
836 link
->dev
= &priv
->node
;
837 link
->state
&= ~DEV_CONFIG_PENDING
;
839 /* Reset card before reading physical address */
840 netwave_doreset(dev
->base_addr
, ramBase
);
842 /* Read the ethernet address and fill in the Netwave registers. */
843 for (i
= 0; i
< 6; i
++)
844 dev
->dev_addr
[i
] = readb(ramBase
+ NETWAVE_EREG_PA
+ i
);
846 printk(KERN_INFO
"%s: Netwave: port %#3lx, irq %d, mem %lx id "
847 "%c%c, hw_addr ", dev
->name
, dev
->base_addr
, dev
->irq
,
848 (u_long
) ramBase
, (int) readb(ramBase
+NETWAVE_EREG_NI
),
849 (int) readb(ramBase
+NETWAVE_EREG_NI
+1));
850 for (i
= 0; i
< 6; i
++)
851 printk("%02X%s", dev
->dev_addr
[i
], ((i
<5) ? ":" : "\n"));
853 /* get revision words */
854 printk(KERN_DEBUG
"Netwave_reset: revision %04x %04x\n",
855 get_uint16(ramBase
+ NETWAVE_EREG_ARW
),
856 get_uint16(ramBase
+ NETWAVE_EREG_ARW
+2));
860 cs_error(link
->handle
, last_fn
, last_ret
);
862 netwave_release(link
);
863 } /* netwave_pcmcia_config */
866 * Function netwave_release (arg)
868 * After a card is removed, netwave_release() will unregister the net
869 * device, and release the PCMCIA configuration. If the device is
870 * still open, this will be postponed until it is closed.
872 static void netwave_release(dev_link_t
*link
)
874 struct net_device
*dev
= link
->priv
;
875 netwave_private
*priv
= netdev_priv(dev
);
877 DEBUG(0, "netwave_release(0x%p)\n", link
);
879 /* Don't bother checking to see if these succeed or not */
881 iounmap(priv
->ramBase
);
882 pcmcia_release_window(link
->win
);
884 pcmcia_release_configuration(link
->handle
);
885 pcmcia_release_io(link
->handle
, &link
->io
);
886 pcmcia_release_irq(link
->handle
, &link
->irq
);
888 link
->state
&= ~DEV_CONFIG
;
891 static int netwave_suspend(struct pcmcia_device
*p_dev
)
893 dev_link_t
*link
= dev_to_instance(p_dev
);
894 struct net_device
*dev
= link
->priv
;
896 link
->state
|= DEV_SUSPEND
;
897 if (link
->state
& DEV_CONFIG
) {
899 netif_device_detach(dev
);
900 pcmcia_release_configuration(link
->handle
);
906 static int netwave_resume(struct pcmcia_device
*p_dev
)
908 dev_link_t
*link
= dev_to_instance(p_dev
);
909 struct net_device
*dev
= link
->priv
;
911 link
->state
&= ~DEV_SUSPEND
;
912 if (link
->state
& DEV_CONFIG
) {
913 pcmcia_request_configuration(link
->handle
, &link
->conf
);
916 netif_device_attach(dev
);
925 * Function netwave_doreset (ioBase, ramBase)
927 * Proper hardware reset of the card.
929 static void netwave_doreset(kio_addr_t ioBase
, u_char __iomem
*ramBase
)
933 outb(0x80, ioBase
+ NETWAVE_REG_PMR
);
934 writeb(0x08, ramBase
+ NETWAVE_EREG_ASCC
); /* Bit 3 is WOC */
935 outb(0x0, ioBase
+ NETWAVE_REG_PMR
); /* release reset */
939 * Function netwave_reset (dev)
941 * Reset and restore all of the netwave registers
943 static void netwave_reset(struct net_device
*dev
) {
945 netwave_private
*priv
= netdev_priv(dev
);
946 u_char __iomem
*ramBase
= priv
->ramBase
;
947 kio_addr_t iobase
= dev
->base_addr
;
949 DEBUG(0, "netwave_reset: Done with hardware reset\n");
951 priv
->timeoutCounter
= 0;
954 netwave_doreset(iobase
, ramBase
);
955 printk(KERN_DEBUG
"netwave_reset: Done with hardware reset\n");
957 /* Write a NOP to check the card */
959 writeb(NETWAVE_CMD_NOP
, ramBase
+ NETWAVE_EREG_CB
+ 0);
960 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 1);
962 /* Set receive conf */
964 writeb(NETWAVE_CMD_SRC
, ramBase
+ NETWAVE_EREG_CB
+ 0);
965 writeb(rxConfRxEna
+ rxConfBcast
, ramBase
+ NETWAVE_EREG_CB
+ 1);
966 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 2);
968 /* Set transmit conf */
970 writeb(NETWAVE_CMD_STC
, ramBase
+ NETWAVE_EREG_CB
+ 0);
971 writeb(txConfTxEna
, ramBase
+ NETWAVE_EREG_CB
+ 1);
972 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 2);
974 /* Now set the MU Domain */
975 printk(KERN_DEBUG
"Setting domain to 0x%x%02x\n", (domain
>> 8) & 0x01, domain
& 0xff);
977 writeb(NETWAVE_CMD_SMD
, ramBase
+ NETWAVE_EREG_CB
+ 0);
978 writeb(domain
& 0xff, ramBase
+ NETWAVE_EREG_CB
+ 1);
979 writeb((domain
>>8) & 0x01, ramBase
+ NETWAVE_EREG_CB
+ 2);
980 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 3);
982 /* Set scramble key */
983 printk(KERN_DEBUG
"Setting scramble key to 0x%x\n", scramble_key
);
985 writeb(NETWAVE_CMD_SSK
, ramBase
+ NETWAVE_EREG_CB
+ 0);
986 writeb(scramble_key
& 0xff, ramBase
+ NETWAVE_EREG_CB
+ 1);
987 writeb((scramble_key
>>8) & 0xff, ramBase
+ NETWAVE_EREG_CB
+ 2);
988 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 3);
990 /* Enable interrupts, bit 4 high to keep unused
991 * source from interrupting us, bit 2 high to
992 * set interrupt enable, 567 to enable TxDN,
996 outb(imrConfIENA
+imrConfRFU1
, iobase
+ NETWAVE_REG_IMR
);
998 /* Hent 4 bytes fra 0x170. Skal vaere 0a,29,88,36
1000 * skriv 80 til d000:3688
1001 * sjekk om det ble 80
1004 /* Enable Receiver */
1006 writeb(NETWAVE_CMD_ER
, ramBase
+ NETWAVE_EREG_CB
+ 0);
1007 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 1);
1009 /* Set the IENA bit in COR */
1011 outb(corConfIENA
+ corConfLVLREQ
, iobase
+ NETWAVE_REG_COR
);
1015 * Function netwave_hw_xmit (data, len, dev)
1017 static int netwave_hw_xmit(unsigned char* data
, int len
,
1018 struct net_device
* dev
) {
1019 unsigned long flags
;
1020 unsigned int TxFreeList
,
1026 netwave_private
*priv
= netdev_priv(dev
);
1027 u_char __iomem
* ramBase
= priv
->ramBase
;
1028 kio_addr_t iobase
= dev
->base_addr
;
1030 /* Disable interrupts & save flags */
1031 spin_lock_irqsave(&priv
->spinlock
, flags
);
1033 /* Check if there are transmit buffers available */
1035 if ((inb(iobase
+NETWAVE_REG_ASR
) & NETWAVE_ASR_TXBA
) == 0) {
1036 /* No buffers available */
1037 printk(KERN_DEBUG
"netwave_hw_xmit: %s - no xmit buffers available.\n",
1039 spin_unlock_irqrestore(&priv
->spinlock
, flags
);
1043 priv
->stats
.tx_bytes
+= len
;
1045 DEBUG(3, "Transmitting with SPCQ %x SPU %x LIF %x ISPLQ %x\n",
1046 readb(ramBase
+ NETWAVE_EREG_SPCQ
),
1047 readb(ramBase
+ NETWAVE_EREG_SPU
),
1048 readb(ramBase
+ NETWAVE_EREG_LIF
),
1049 readb(ramBase
+ NETWAVE_EREG_ISPLQ
));
1051 /* Now try to insert it into the adapters free memory */
1053 TxFreeList
= get_uint16(ramBase
+ NETWAVE_EREG_TDP
);
1054 MaxData
= get_uint16(ramBase
+ NETWAVE_EREG_TDP
+2);
1055 DataOffset
= get_uint16(ramBase
+ NETWAVE_EREG_TDP
+4);
1057 DEBUG(3, "TxFreeList %x, MaxData %x, DataOffset %x\n",
1058 TxFreeList
, MaxData
, DataOffset
);
1060 /* Copy packet to the adapter fragment buffers */
1061 curBuff
= TxFreeList
;
1063 while (tmpcount
< len
) {
1064 int tmplen
= len
- tmpcount
;
1065 copy_to_pc(ramBase
+ curBuff
+ DataOffset
, data
+ tmpcount
,
1066 (tmplen
< MaxData
) ? tmplen
: MaxData
);
1067 tmpcount
+= MaxData
;
1069 /* Advance to next buffer */
1070 curBuff
= get_uint16(ramBase
+ curBuff
);
1073 /* Now issue transmit list */
1075 writeb(NETWAVE_CMD_TL
, ramBase
+ NETWAVE_EREG_CB
+ 0);
1076 writeb(len
& 0xff, ramBase
+ NETWAVE_EREG_CB
+ 1);
1077 writeb((len
>>8) & 0xff, ramBase
+ NETWAVE_EREG_CB
+ 2);
1078 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 3);
1080 spin_unlock_irqrestore(&priv
->spinlock
, flags
);
1084 static int netwave_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
) {
1085 /* This flag indicate that the hardware can't perform a transmission.
1086 * Theoritically, NET3 check it before sending a packet to the driver,
1087 * but in fact it never do that and pool continuously.
1088 * As the watchdog will abort too long transmissions, we are quite safe...
1091 netif_stop_queue(dev
);
1094 short length
= ETH_ZLEN
< skb
->len
? skb
->len
: ETH_ZLEN
;
1095 unsigned char* buf
= skb
->data
;
1097 if (netwave_hw_xmit( buf
, length
, dev
) == 1) {
1098 /* Some error, let's make them call us another time? */
1099 netif_start_queue(dev
);
1101 dev
->trans_start
= jiffies
;
1106 } /* netwave_start_xmit */
1109 * Function netwave_interrupt (irq, dev_id, regs)
1111 * This function is the interrupt handler for the Netwave card. This
1112 * routine will be called whenever:
1113 * 1. A packet is received.
1114 * 2. A packet has successfully been transferred and the unit is
1115 * ready to transmit another packet.
1116 * 3. A command has completed execution.
1118 static irqreturn_t
netwave_interrupt(int irq
, void* dev_id
, struct pt_regs
*regs
)
1121 u_char __iomem
*ramBase
;
1122 struct net_device
*dev
= (struct net_device
*)dev_id
;
1123 struct netwave_private
*priv
= netdev_priv(dev
);
1124 dev_link_t
*link
= &priv
->link
;
1127 if (!netif_device_present(dev
))
1130 iobase
= dev
->base_addr
;
1131 ramBase
= priv
->ramBase
;
1133 /* Now find what caused the interrupt, check while interrupts ready */
1134 for (i
= 0; i
< 10; i
++) {
1138 if (!(inb(iobase
+NETWAVE_REG_CCSR
) & 0x02))
1139 break; /* None of the interrupt sources asserted (normal exit) */
1141 status
= inb(iobase
+ NETWAVE_REG_ASR
);
1143 if (!DEV_OK(link
)) {
1144 DEBUG(1, "netwave_interrupt: Interrupt with status 0x%x "
1145 "from removed or suspended card!\n", status
);
1150 if (status
& 0x80) {
1152 /* wait_WOC(iobase); */
1153 /* RxRdy cannot be reset directly by the host */
1156 if (status
& 0x40) {
1159 rser
= readb(ramBase
+ NETWAVE_EREG_RSER
);
1162 ++priv
->stats
.rx_dropped
;
1163 ++priv
->stats
.rx_crc_errors
;
1166 ++priv
->stats
.rx_frame_errors
;
1168 /* Clear the RxErr bit in RSER. RSER+4 is the
1169 * write part. Also clear the RxCRC (0x04) and
1170 * RxBig (0x02) bits if present */
1172 writeb(0x40 | (rser
& 0x06), ramBase
+ NETWAVE_EREG_RSER
+ 4);
1174 /* Write bit 6 high to ASCC to clear RxErr in ASR,
1175 * WOC must be set first!
1178 writeb(0x40, ramBase
+ NETWAVE_EREG_ASCC
);
1180 /* Remember to count up priv->stats on error packets */
1181 ++priv
->stats
.rx_errors
;
1184 if (status
& 0x20) {
1187 txStatus
= readb(ramBase
+ NETWAVE_EREG_TSER
);
1188 DEBUG(3, "Transmit done. TSER = %x id %x\n",
1189 txStatus
, readb(ramBase
+ NETWAVE_EREG_TSER
+ 1));
1191 if (txStatus
& 0x20) {
1192 /* Transmitting was okay, clear bits */
1194 writeb(0x2f, ramBase
+ NETWAVE_EREG_TSER
+ 4);
1195 ++priv
->stats
.tx_packets
;
1198 if (txStatus
& 0xd0) {
1199 if (txStatus
& 0x80) {
1200 ++priv
->stats
.collisions
; /* Because of /proc/net/dev*/
1201 /* ++priv->stats.tx_aborted_errors; */
1202 /* printk("Collision. %ld\n", jiffies - dev->trans_start); */
1204 if (txStatus
& 0x40)
1205 ++priv
->stats
.tx_carrier_errors
;
1206 /* 0x80 TxGU Transmit giveup - nine times and no luck
1207 * 0x40 TxNOAP No access point. Discarded packet.
1208 * 0x10 TxErr Transmit error. Always set when
1209 * TxGU and TxNOAP is set. (Those are the only ones
1212 DEBUG(3, "netwave_interrupt: TxDN with error status %x\n",
1215 /* Clear out TxGU, TxNOAP, TxErr and TxTrys */
1217 writeb(0xdf & txStatus
, ramBase
+NETWAVE_EREG_TSER
+4);
1218 ++priv
->stats
.tx_errors
;
1220 DEBUG(3, "New status is TSER %x ASR %x\n",
1221 readb(ramBase
+ NETWAVE_EREG_TSER
),
1222 inb(iobase
+ NETWAVE_REG_ASR
));
1224 netif_wake_queue(dev
);
1226 /* TxBA, this would trigger on all error packets received */
1227 /* if (status & 0x01) {
1228 DEBUG(4, "Transmit buffers available, %x\n", status);
1232 /* Handled if we looped at least one time - Jean II */
1233 return IRQ_RETVAL(i
);
1234 } /* netwave_interrupt */
1237 * Function netwave_watchdog (a)
1239 * Watchdog : when we start a transmission, we set a timer in the
1240 * kernel. If the transmission complete, this timer is disabled. If
1241 * it expire, we reset the card.
1244 static void netwave_watchdog(struct net_device
*dev
) {
1246 DEBUG(1, "%s: netwave_watchdog: watchdog timer expired\n", dev
->name
);
1248 dev
->trans_start
= jiffies
;
1249 netif_wake_queue(dev
);
1250 } /* netwave_watchdog */
1252 static struct net_device_stats
*netwave_get_stats(struct net_device
*dev
) {
1253 netwave_private
*priv
= netdev_priv(dev
);
1257 DEBUG(2, "netwave: SPCQ %x SPU %x LIF %x ISPLQ %x MHS %x rxtx %x"
1258 " %x tx %x %x %x %x\n",
1259 readb(priv
->ramBase
+ NETWAVE_EREG_SPCQ
),
1260 readb(priv
->ramBase
+ NETWAVE_EREG_SPU
),
1261 readb(priv
->ramBase
+ NETWAVE_EREG_LIF
),
1262 readb(priv
->ramBase
+ NETWAVE_EREG_ISPLQ
),
1263 readb(priv
->ramBase
+ NETWAVE_EREG_MHS
),
1264 readb(priv
->ramBase
+ NETWAVE_EREG_EC
+ 0xe),
1265 readb(priv
->ramBase
+ NETWAVE_EREG_EC
+ 0xf),
1266 readb(priv
->ramBase
+ NETWAVE_EREG_EC
+ 0x18),
1267 readb(priv
->ramBase
+ NETWAVE_EREG_EC
+ 0x19),
1268 readb(priv
->ramBase
+ NETWAVE_EREG_EC
+ 0x1a),
1269 readb(priv
->ramBase
+ NETWAVE_EREG_EC
+ 0x1b));
1271 return &priv
->stats
;
1274 static void update_stats(struct net_device
*dev
) {
1275 //unsigned long flags;
1276 /* netwave_private *priv = netdev_priv(dev); */
1278 //spin_lock_irqsave(&priv->spinlock, flags);
1280 /* priv->stats.rx_packets = readb(priv->ramBase + 0x18e);
1281 priv->stats.tx_packets = readb(priv->ramBase + 0x18f); */
1283 //spin_unlock_irqrestore(&priv->spinlock, flags);
1286 static int netwave_rx(struct net_device
*dev
)
1288 netwave_private
*priv
= netdev_priv(dev
);
1289 u_char __iomem
*ramBase
= priv
->ramBase
;
1290 kio_addr_t iobase
= dev
->base_addr
;
1292 struct sk_buff
*skb
= NULL
;
1293 unsigned int curBuffer
,
1297 int dataCount
, dataOffset
;
1301 DEBUG(3, "xinw_rx: Receiving ... \n");
1303 /* Receive max 10 packets for now. */
1304 for (i
= 0; i
< 10; i
++) {
1307 rxStatus
= readb(ramBase
+ NETWAVE_EREG_RSER
);
1308 if ( !( rxStatus
& 0x80)) /* No more packets */
1311 /* Check if multicast/broadcast or other */
1312 /* multicast = (rxStatus & 0x20); */
1314 /* The receive list pointer and length of the packet */
1316 rcvLen
= get_int16( ramBase
+ NETWAVE_EREG_RDP
);
1317 rcvList
= get_uint16( ramBase
+ NETWAVE_EREG_RDP
+ 2);
1320 printk(KERN_DEBUG
"netwave_rx: Receive packet with len %d\n",
1325 skb
= dev_alloc_skb(rcvLen
+5);
1327 DEBUG(1, "netwave_rx: Could not allocate an sk_buff of "
1328 "length %d\n", rcvLen
);
1329 ++priv
->stats
.rx_dropped
;
1330 /* Tell the adapter to skip the packet */
1332 writeb(NETWAVE_CMD_SRP
, ramBase
+ NETWAVE_EREG_CB
+ 0);
1333 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 1);
1337 skb_reserve( skb
, 2); /* Align IP on 16 byte */
1338 skb_put( skb
, rcvLen
);
1341 /* Copy packet fragments to the skb data area */
1342 ptr
= (u_char
*) skb
->data
;
1343 curBuffer
= rcvList
;
1345 while ( tmpcount
< rcvLen
) {
1346 /* Get length and offset of current buffer */
1347 dataCount
= get_uint16( ramBase
+curBuffer
+2);
1348 dataOffset
= get_uint16( ramBase
+curBuffer
+4);
1350 copy_from_pc( ptr
+ tmpcount
,
1351 ramBase
+curBuffer
+dataOffset
, dataCount
);
1353 tmpcount
+= dataCount
;
1355 /* Point to next buffer */
1356 curBuffer
= get_uint16(ramBase
+ curBuffer
);
1359 skb
->protocol
= eth_type_trans(skb
,dev
);
1360 /* Queue packet for network layer */
1363 dev
->last_rx
= jiffies
;
1364 priv
->stats
.rx_packets
++;
1365 priv
->stats
.rx_bytes
+= rcvLen
;
1367 /* Got the packet, tell the adapter to skip it */
1369 writeb(NETWAVE_CMD_SRP
, ramBase
+ NETWAVE_EREG_CB
+ 0);
1370 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 1);
1371 DEBUG(3, "Packet reception ok\n");
1376 static int netwave_open(struct net_device
*dev
) {
1377 netwave_private
*priv
= netdev_priv(dev
);
1378 dev_link_t
*link
= &priv
->link
;
1380 DEBUG(1, "netwave_open: starting.\n");
1387 netif_start_queue(dev
);
1393 static int netwave_close(struct net_device
*dev
) {
1394 netwave_private
*priv
= netdev_priv(dev
);
1395 dev_link_t
*link
= &priv
->link
;
1397 DEBUG(1, "netwave_close: finishing.\n");
1400 netif_stop_queue(dev
);
1405 static struct pcmcia_device_id netwave_ids
[] = {
1406 PCMCIA_DEVICE_PROD_ID12("Xircom", "CreditCard Netwave", 0x2e3ee845, 0x54e28a28),
1409 MODULE_DEVICE_TABLE(pcmcia
, netwave_ids
);
1411 static struct pcmcia_driver netwave_driver
= {
1412 .owner
= THIS_MODULE
,
1414 .name
= "netwave_cs",
1416 .probe
= netwave_attach
,
1417 .remove
= netwave_detach
,
1418 .id_table
= netwave_ids
,
1419 .suspend
= netwave_suspend
,
1420 .resume
= netwave_resume
,
1423 static int __init
init_netwave_cs(void)
1425 return pcmcia_register_driver(&netwave_driver
);
1428 static void __exit
exit_netwave_cs(void)
1430 pcmcia_unregister_driver(&netwave_driver
);
1433 module_init(init_netwave_cs
);
1434 module_exit(exit_netwave_cs
);
1436 /* Set or clear the multicast filter for this adaptor.
1437 num_addrs == -1 Promiscuous mode, receive all packets
1438 num_addrs == 0 Normal mode, clear multicast list
1439 num_addrs > 0 Multicast mode, receive normal and MC packets, and do
1440 best-effort filtering.
1442 static void set_multicast_list(struct net_device
*dev
)
1444 kio_addr_t iobase
= dev
->base_addr
;
1445 netwave_private
*priv
= netdev_priv(dev
);
1446 u_char __iomem
* ramBase
= priv
->ramBase
;
1452 if (old
!= dev
->mc_count
) {
1453 old
= dev
->mc_count
;
1454 DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
1455 dev
->name
, dev
->mc_count
);
1460 if (dev
->mc_count
|| (dev
->flags
& IFF_ALLMULTI
)) {
1461 /* Multicast Mode */
1462 rcvMode
= rxConfRxEna
+ rxConfAMP
+ rxConfBcast
;
1463 } else if (dev
->flags
& IFF_PROMISC
) {
1464 /* Promiscous mode */
1465 rcvMode
= rxConfRxEna
+ rxConfPro
+ rxConfAMP
+ rxConfBcast
;
1468 rcvMode
= rxConfRxEna
+ rxConfBcast
;
1471 /* printk("netwave set_multicast_list: rcvMode to %x\n", rcvMode);*/
1472 /* Now set receive mode */
1474 writeb(NETWAVE_CMD_SRC
, ramBase
+ NETWAVE_EREG_CB
+ 0);
1475 writeb(rcvMode
, ramBase
+ NETWAVE_EREG_CB
+ 1);
1476 writeb(NETWAVE_CMD_EOC
, ramBase
+ NETWAVE_EREG_CB
+ 2);
1478 MODULE_LICENSE("GPL");