tangled
alpha
login
or
join now
tjh.dev
/
kernel
1
fork
atom
Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1
fork
atom
overview
issues
pulls
pipelines
Merge branch 'atmel'
Jeff Garzik
20 years ago
2ecc26b8
6af37fa9
+94
-178
5 changed files
expand all
collapse all
unified
split
drivers
net
wireless
Kconfig
atmel.c
atmel.h
atmel_cs.c
atmel_pci.c
+1
-1
drivers/net/wireless/Kconfig
reviewed
···
330
330
331
331
config ATMEL
332
332
tristate "Atmel at76c50x chipset 802.11b support"
333
333
-
depends on NET_RADIO && EXPERIMENTAL
333
333
+
depends on NET_RADIO
334
334
select FW_LOADER
335
335
select CRC32
336
336
---help---
+43
-45
drivers/net/wireless/atmel.c
reviewed
···
72
72
#include "atmel.h"
73
73
74
74
#define DRIVER_MAJOR 0
75
75
-
#define DRIVER_MINOR 96
75
75
+
#define DRIVER_MINOR 98
76
76
77
77
MODULE_AUTHOR("Simon Kelley");
78
78
MODULE_DESCRIPTION("Support for Atmel at76c50x 802.11 wireless ethernet cards.");
···
1504
1504
return len;
1505
1505
}
1506
1506
1507
1507
-
struct net_device *init_atmel_card( unsigned short irq, int port, const AtmelFWType fw_type,
1507
1507
+
struct net_device *init_atmel_card( unsigned short irq, unsigned long port, const AtmelFWType fw_type,
1508
1508
struct device *sys_dev, int (*card_present)(void *), void *card)
1509
1509
{
1510
1510
struct net_device *dev;
···
1605
1605
goto err_out_free;
1606
1606
}
1607
1607
1608
1608
-
if (priv->bus_type == BUS_TYPE_PCI &&
1609
1609
-
!request_region( dev->base_addr, 64, dev->name )) {
1608
1608
+
if (!request_region(dev->base_addr, 32,
1609
1609
+
priv->bus_type == BUS_TYPE_PCCARD ? "atmel_cs" : "atmel_pci")) {
1610
1610
goto err_out_irq;
1611
1611
}
1612
1612
···
1622
1622
1623
1623
create_proc_read_entry ("driver/atmel", 0, NULL, atmel_read_proc, priv);
1624
1624
1625
1625
-
printk(KERN_INFO "%s: Atmel at76c50x wireless. Version %d.%d simon@thekelleys.org.uk\n",
1626
1626
-
dev->name, DRIVER_MAJOR, DRIVER_MINOR);
1625
1625
+
printk(KERN_INFO "%s: Atmel at76c50x. Version %d.%d. MAC %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
1626
1626
+
dev->name, DRIVER_MAJOR, DRIVER_MINOR,
1627
1627
+
dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
1628
1628
+
dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5] );
1627
1629
1628
1630
SET_MODULE_OWNER(dev);
1629
1631
return dev;
1630
1632
1631
1633
err_out_res:
1632
1632
-
if (priv->bus_type == BUS_TYPE_PCI)
1633
1633
-
release_region( dev->base_addr, 64 );
1634
1634
+
release_region( dev->base_addr, 32);
1634
1635
err_out_irq:
1635
1636
free_irq(dev->irq, dev);
1636
1637
err_out_free:
···
1641
1640
1642
1641
EXPORT_SYMBOL(init_atmel_card);
1643
1642
1644
1644
-
void stop_atmel_card(struct net_device *dev, int freeres)
1643
1643
+
void stop_atmel_card(struct net_device *dev)
1645
1644
{
1646
1645
struct atmel_private *priv = netdev_priv(dev);
1647
1646
···
1655
1654
remove_proc_entry("driver/atmel", NULL);
1656
1655
free_irq(dev->irq, dev);
1657
1656
kfree(priv->firmware);
1658
1658
-
if (freeres) {
1659
1659
-
/* PCMCIA frees this stuff, so only for PCI */
1660
1660
-
release_region(dev->base_addr, 64);
1661
1661
-
}
1657
1657
+
release_region(dev->base_addr, 32);
1662
1658
free_netdev(dev);
1663
1659
}
1664
1660
···
1808
1810
}
1809
1811
if(dwrq->flags & IW_ENCODE_RESTRICTED)
1810
1812
priv->exclude_unencrypted = 1;
1811
1811
-
if(dwrq->flags & IW_ENCODE_OPEN)
1813
1813
+
if(dwrq->flags & IW_ENCODE_OPEN)
1812
1814
priv->exclude_unencrypted = 0;
1813
1813
-
1815
1815
+
1814
1816
return -EINPROGRESS; /* Call commit handler */
1815
1817
}
1816
1818
···
1825
1827
1826
1828
if (!priv->wep_is_on)
1827
1829
dwrq->flags = IW_ENCODE_DISABLED;
1828
1828
-
else if (priv->exclude_unencrypted)
1829
1829
-
dwrq->flags = IW_ENCODE_RESTRICTED;
1830
1830
-
else
1831
1831
-
dwrq->flags = IW_ENCODE_OPEN;
1832
1832
-
1830
1830
+
else {
1831
1831
+
if (priv->exclude_unencrypted)
1832
1832
+
dwrq->flags = IW_ENCODE_RESTRICTED;
1833
1833
+
else
1834
1834
+
dwrq->flags = IW_ENCODE_OPEN;
1835
1835
+
}
1833
1836
/* Which key do we want ? -1 -> tx index */
1834
1837
if (index < 0 || index >= 4)
1835
1838
index = priv->default_key;
···
2644
2645
}
2645
2646
}
2646
2647
2647
2647
-
2648
2648
-
static void send_authentication_request(struct atmel_private *priv, u8 *challenge, int challenge_len)
2648
2648
+
2649
2649
+
static void send_authentication_request(struct atmel_private *priv, u16 system, u8 *challenge, int challenge_len)
2649
2650
{
2650
2651
struct ieee80211_hdr_4addr header;
2651
2652
struct auth_body auth;
···
2657
2658
memcpy(header.addr2, priv->dev->dev_addr, 6);
2658
2659
memcpy(header.addr3, priv->CurrentBSSID, 6);
2659
2660
2660
2660
-
if (priv->wep_is_on) {
2661
2661
-
auth.alg = cpu_to_le16(C80211_MGMT_AAN_SHAREDKEY);
2661
2661
+
if (priv->wep_is_on && priv->CurrentAuthentTransactionSeqNum != 1)
2662
2662
/* no WEP for authentication frames with TrSeqNo 1 */
2663
2663
-
if (priv->CurrentAuthentTransactionSeqNum != 1)
2664
2664
-
header.frame_ctl |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
2665
2665
-
} else {
2666
2666
-
auth.alg = cpu_to_le16(C80211_MGMT_AAN_OPENSYSTEM);
2667
2667
-
}
2663
2663
+
header.frame_ctl |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
2664
2664
+
2665
2665
+
auth.alg = cpu_to_le16(system);
2668
2666
2669
2667
auth.status = 0;
2670
2668
auth.trans_seq = cpu_to_le16(priv->CurrentAuthentTransactionSeqNum);
···
2830
2834
struct auth_body *auth = (struct auth_body *)priv->rx_buf;
2831
2835
u16 status = le16_to_cpu(auth->status);
2832
2836
u16 trans_seq_no = le16_to_cpu(auth->trans_seq);
2837
2837
+
u16 system = le16_to_cpu(auth->alg);
2833
2838
2834
2839
if (status == C80211_MGMT_SC_Success && !priv->wep_is_on) {
2835
2840
/* no WEP */
···
2852
2855
2853
2856
if (trans_seq_no == 0x0002 &&
2854
2857
auth->el_id == C80211_MGMT_ElementID_ChallengeText) {
2855
2855
-
send_authentication_request(priv, auth->chall_text, auth->chall_text_len);
2858
2858
+
send_authentication_request(priv, system, auth->chall_text, auth->chall_text_len);
2856
2859
return;
2857
2860
}
2858
2861
···
2869
2872
}
2870
2873
}
2871
2874
2872
2872
-
if (status == C80211_MGMT_SC_AuthAlgNotSupported && priv->connect_to_any_BSS) {
2873
2873
-
int bss_index;
2874
2874
-
2875
2875
-
priv->BSSinfo[(int)(priv->current_BSS)].channel |= 0x80;
2876
2876
-
2877
2877
-
if ((bss_index = retrieve_bss(priv)) != -1) {
2878
2878
-
atmel_join_bss(priv, bss_index);
2879
2879
-
return;
2875
2875
+
if (status == C80211_MGMT_SC_AuthAlgNotSupported) {
2876
2876
+
/* Do opensystem first, then try sharedkey */
2877
2877
+
if (system == C80211_MGMT_AAN_OPENSYSTEM) {
2878
2878
+
priv->CurrentAuthentTransactionSeqNum = 0x001;
2879
2879
+
send_authentication_request(priv, C80211_MGMT_AAN_SHAREDKEY, NULL, 0);
2880
2880
+
} else if (priv->connect_to_any_BSS) {
2881
2881
+
int bss_index;
2882
2882
+
2883
2883
+
priv->BSSinfo[(int)(priv->current_BSS)].channel |= 0x80;
2884
2884
+
2885
2885
+
if ((bss_index = retrieve_bss(priv)) != -1) {
2886
2886
+
atmel_join_bss(priv, bss_index);
2887
2887
+
return;
2888
2888
+
}
2880
2889
}
2881
2890
}
2882
2891
···
3208
3205
priv->AuthenticationRequestRetryCnt++;
3209
3206
priv->CurrentAuthentTransactionSeqNum = 0x0001;
3210
3207
mod_timer(&priv->management_timer, jiffies + MGMT_JIFFIES);
3211
3211
-
send_authentication_request(priv, NULL, 0);
3208
3208
+
send_authentication_request(priv, C80211_MGMT_AAN_OPENSYSTEM, NULL, 0);
3212
3209
}
3213
3210
3214
3211
break;
···
3315
3312
3316
3313
mod_timer(&priv->management_timer, jiffies + MGMT_JIFFIES);
3317
3314
priv->CurrentAuthentTransactionSeqNum = 0x0001;
3318
3318
-
send_authentication_request(priv, NULL, 0);
3315
3315
+
send_authentication_request(priv, C80211_MGMT_AAN_SHAREDKEY, NULL, 0);
3319
3316
}
3320
3317
return;
3321
3318
}
···
3485
3482
printk(KERN_ALERT "%s: *** Invalid MAC address. UPGRADE Firmware ****\n", dev->name);
3486
3483
memcpy(dev->dev_addr, default_mac, 6);
3487
3484
}
3488
3488
-
printk(KERN_INFO "%s: MAC address %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
3489
3489
-
dev->name,
3490
3490
-
dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
3491
3491
-
dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5] );
3492
3492
-
3493
3485
}
3494
3486
3495
3487
return rc;
+2
-2
drivers/net/wireless/atmel.h
reviewed
···
35
35
ATMEL_FW_TYPE_506
36
36
} AtmelFWType;
37
37
38
38
-
struct net_device *init_atmel_card(unsigned short, int, const AtmelFWType, struct device *,
38
38
+
struct net_device *init_atmel_card(unsigned short, unsigned long, const AtmelFWType, struct device *,
39
39
int (*present_func)(void *), void * );
40
40
-
void stop_atmel_card( struct net_device *, int );
40
40
+
void stop_atmel_card( struct net_device *);
41
41
int atmel_open( struct net_device * );
42
42
43
43
#endif
+47
-129
drivers/net/wireless/atmel_cs.c
reviewed
···
63
63
be present but disabled -- but it can then be enabled for specific
64
64
modules at load time with a 'pc_debug=#' option to insmod.
65
65
*/
66
66
+
66
67
#ifdef PCMCIA_DEBUG
67
68
static int pc_debug = PCMCIA_DEBUG;
68
69
module_param(pc_debug, int, 0);
···
286
285
return 0;
287
286
}
288
287
289
289
-
/* list of cards we know about and their firmware requirements.
290
290
-
Go either by Manfid or version strings.
291
291
-
Cards not in this list will need a firmware parameter to the module
292
292
-
in all probability. Note that the SMC 2632 V2 and V3 have the same
293
293
-
manfids, so we ignore those and use the version1 strings. */
294
294
-
295
295
-
static struct {
296
296
-
int manf, card;
297
297
-
char *ver1;
298
298
-
AtmelFWType firmware;
299
299
-
char *name;
300
300
-
} card_table[] = {
301
301
-
{ 0, 0, "WLAN/802.11b PC CARD", ATMEL_FW_TYPE_502D, "Actiontec 802CAT1" },
302
302
-
{ 0, 0, "ATMEL/AT76C502AR", ATMEL_FW_TYPE_502, "NoName-RFMD" },
303
303
-
{ 0, 0, "ATMEL/AT76C502AR_D", ATMEL_FW_TYPE_502D, "NoName-revD" },
304
304
-
{ 0, 0, "ATMEL/AT76C502AR_E", ATMEL_FW_TYPE_502E, "NoName-revE" },
305
305
-
{ 0, 0, "ATMEL/AT76C504", ATMEL_FW_TYPE_504, "NoName-504" },
306
306
-
{ 0, 0, "ATMEL/AT76C504A", ATMEL_FW_TYPE_504A_2958, "NoName-504a-2958" },
307
307
-
{ 0, 0, "ATMEL/AT76C504_R", ATMEL_FW_TYPE_504_2958, "NoName-504-2958" },
308
308
-
{ MANFID_3COM, 0x0620, NULL, ATMEL_FW_TYPE_502_3COM, "3com 3CRWE62092B" },
309
309
-
{ MANFID_3COM, 0x0696, NULL, ATMEL_FW_TYPE_502_3COM, "3com 3CRSHPW196" },
310
310
-
{ 0, 0, "SMC/2632W-V2", ATMEL_FW_TYPE_502, "SMC 2632W-V2" },
311
311
-
{ 0, 0, "SMC/2632W", ATMEL_FW_TYPE_502D, "SMC 2632W-V3" },
312
312
-
{ 0xd601, 0x0007, NULL, ATMEL_FW_TYPE_502, "Sitecom WLAN-011" },
313
313
-
{ 0x01bf, 0x3302, NULL, ATMEL_FW_TYPE_502E, "Belkin F5D6020-V2" },
314
314
-
{ 0, 0, "BT/Voyager 1020 Laptop Adapter", ATMEL_FW_TYPE_502, "BT Voyager 1020" },
315
315
-
{ 0, 0, "IEEE 802.11b/Wireless LAN PC Card", ATMEL_FW_TYPE_502, "Siemens Gigaset PC Card II" },
316
316
-
{ 0, 0, "IEEE 802.11b/Wireless LAN Card S", ATMEL_FW_TYPE_504_2958, "Siemens Gigaset PC Card II" },
317
317
-
{ 0, 0, "CNet/CNWLC 11Mbps Wireless PC Card V-5", ATMEL_FW_TYPE_502E, "CNet CNWLC-811ARL" },
318
318
-
{ 0, 0, "Wireless/PC_CARD", ATMEL_FW_TYPE_502D, "Planet WL-3552" },
319
319
-
{ 0, 0, "OEM/11Mbps Wireless LAN PC Card V-3", ATMEL_FW_TYPE_502, "OEM 11Mbps WLAN PCMCIA Card" },
320
320
-
{ 0, 0, "11WAVE/11WP611AL-E", ATMEL_FW_TYPE_502E, "11WAVE WaveBuddy" },
321
321
-
{ 0, 0, "LG/LW2100N", ATMEL_FW_TYPE_502E, "LG LW2100N 11Mbps WLAN PCMCIA Card" },
322
322
-
};
323
323
-
324
288
static void atmel_config(dev_link_t *link)
325
289
{
326
290
client_handle_t handle;
···
294
328
local_info_t *dev;
295
329
int last_fn, last_ret;
296
330
u_char buf[64];
297
297
-
int card_index = -1, done = 0;
298
298
-
331
331
+
struct pcmcia_device_id *did;
332
332
+
299
333
handle = link->handle;
300
334
dev = link->priv;
335
335
+
did = handle_to_dev(handle).driver_data;
301
336
302
337
DEBUG(0, "atmel_config(0x%p)\n", link);
303
338
···
307
340
tuple.TupleDataMax = sizeof(buf);
308
341
tuple.TupleOffset = 0;
309
342
310
310
-
tuple.DesiredTuple = CISTPL_MANFID;
311
311
-
if (pcmcia_get_first_tuple(handle, &tuple) == 0) {
312
312
-
int i;
313
313
-
cistpl_manfid_t *manfid;
314
314
-
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
315
315
-
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
316
316
-
manfid = &(parse.manfid);
317
317
-
for (i = 0; i < sizeof(card_table)/sizeof(card_table[0]); i++) {
318
318
-
if (!card_table[i].ver1 &&
319
319
-
manfid->manf == card_table[i].manf &&
320
320
-
manfid->card == card_table[i].card) {
321
321
-
card_index = i;
322
322
-
done = 1;
323
323
-
}
324
324
-
}
325
325
-
}
326
326
-
327
327
-
tuple.DesiredTuple = CISTPL_VERS_1;
328
328
-
if (!done && (pcmcia_get_first_tuple(handle, &tuple) == 0)) {
329
329
-
int i, j, k;
330
330
-
cistpl_vers_1_t *ver1;
331
331
-
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
332
332
-
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
333
333
-
ver1 = &(parse.version_1);
334
334
-
335
335
-
for (i = 0; i < sizeof(card_table)/sizeof(card_table[0]); i++) {
336
336
-
for (j = 0; j < ver1->ns; j++) {
337
337
-
char *p = card_table[i].ver1;
338
338
-
char *q = &ver1->str[ver1->ofs[j]];
339
339
-
if (!p)
340
340
-
goto mismatch;
341
341
-
for (k = 0; k < j; k++) {
342
342
-
while ((*p != '\0') && (*p != '/')) p++;
343
343
-
if (*p == '\0') {
344
344
-
if (*q != '\0')
345
345
-
goto mismatch;
346
346
-
} else {
347
347
-
p++;
348
348
-
}
349
349
-
}
350
350
-
while((*q != '\0') && (*p != '\0') &&
351
351
-
(*p != '/') && (*p == *q)) p++, q++;
352
352
-
if (((*p != '\0') && *p != '/') || *q != '\0')
353
353
-
goto mismatch;
354
354
-
}
355
355
-
card_index = i;
356
356
-
break; /* done */
357
357
-
358
358
-
mismatch:
359
359
-
j = 0; /* dummy stmt to shut up compiler */
360
360
-
}
361
361
-
}
362
362
-
363
343
/*
364
344
This reads the card's CONFIG tuple to find its configuration
365
345
registers.
···
423
509
((local_info_t*)link->priv)->eth_dev =
424
510
init_atmel_card(link->irq.AssignedIRQ,
425
511
link->io.BasePort1,
426
426
-
card_index == -1 ? ATMEL_FW_TYPE_NONE : card_table[card_index].firmware,
512
512
+
did ? did->driver_info : ATMEL_FW_TYPE_NONE,
427
513
&handle_to_dev(handle),
428
514
card_present,
429
515
link);
430
516
if (!((local_info_t*)link->priv)->eth_dev)
431
431
-
goto cs_failed;
517
517
+
goto cs_failed;
518
518
+
432
519
433
520
/*
434
521
At this point, the dev_node_t structure(s) need to be
···
438
523
strcpy(dev->node.dev_name, ((local_info_t*)link->priv)->eth_dev->name );
439
524
dev->node.major = dev->node.minor = 0;
440
525
link->dev = &dev->node;
441
441
-
442
442
-
/* Finally, report what we've done */
443
443
-
printk(KERN_INFO "%s: %s%sindex 0x%02x: Vcc %d.%d",
444
444
-
dev->node.dev_name,
445
445
-
card_index == -1 ? "" : card_table[card_index].name,
446
446
-
card_index == -1 ? "" : " ",
447
447
-
link->conf.ConfigIndex,
448
448
-
link->conf.Vcc/10, link->conf.Vcc%10);
449
449
-
if (link->conf.Vpp1)
450
450
-
printk(", Vpp %d.%d", link->conf.Vpp1/10, link->conf.Vpp1%10);
451
451
-
if (link->conf.Attributes & CONF_ENABLE_IRQ)
452
452
-
printk(", irq %d", link->irq.AssignedIRQ);
453
453
-
if (link->io.NumPorts1)
454
454
-
printk(", io 0x%04x-0x%04x", link->io.BasePort1,
455
455
-
link->io.BasePort1+link->io.NumPorts1-1);
456
456
-
if (link->io.NumPorts2)
457
457
-
printk(" & 0x%04x-0x%04x", link->io.BasePort2,
458
458
-
link->io.BasePort2+link->io.NumPorts2-1);
459
459
-
printk("\n");
460
460
-
526
526
+
461
527
link->state &= ~DEV_CONFIG_PENDING;
462
528
return;
463
529
···
465
569
link->dev = NULL;
466
570
467
571
if (dev)
468
468
-
stop_atmel_card(dev, 0);
572
572
+
stop_atmel_card(dev);
469
573
((local_info_t*)link->priv)->eth_dev = NULL;
470
574
471
575
/* Don't bother checking to see if these succeed or not */
···
533
637
} /* atmel_event */
534
638
535
639
/*====================================================================*/
640
640
+
/* We use the driver_info field to store the correct firmware type for a card. */
641
641
+
642
642
+
#define PCMCIA_DEVICE_MANF_CARD_INFO(manf, card, info) { \
643
643
+
.match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \
644
644
+
PCMCIA_DEV_ID_MATCH_CARD_ID, \
645
645
+
.manf_id = (manf), \
646
646
+
.card_id = (card), \
647
647
+
.driver_info = (kernel_ulong_t)(info), }
648
648
+
649
649
+
#define PCMCIA_DEVICE_PROD_ID12_INFO(v1, v2, vh1, vh2, info) { \
650
650
+
.match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \
651
651
+
PCMCIA_DEV_ID_MATCH_PROD_ID2, \
652
652
+
.prod_id = { (v1), (v2), NULL, NULL }, \
653
653
+
.prod_id_hash = { (vh1), (vh2), 0, 0 }, \
654
654
+
.driver_info = (kernel_ulong_t)(info), }
655
655
+
536
656
static struct pcmcia_device_id atmel_ids[] = {
537
537
-
PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0620),
538
538
-
PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0696),
539
539
-
PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x3302),
540
540
-
PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0007),
541
541
-
PCMCIA_DEVICE_PROD_ID12("11WAVE", "11WP611AL-E", 0x9eb2da1f, 0xc9a0d3f9),
542
542
-
PCMCIA_DEVICE_PROD_ID12("ATMEL", "AT76C502AR", 0xabda4164, 0x41b37e1f),
543
543
-
PCMCIA_DEVICE_PROD_ID12("ATMEL", "AT76C504", 0xabda4164, 0x5040670a),
544
544
-
PCMCIA_DEVICE_PROD_ID12("ATMEL", "AT76C504A", 0xabda4164, 0xe15ed87f),
545
545
-
PCMCIA_DEVICE_PROD_ID12("BT", "Voyager 1020 Laptop Adapter", 0xae49b86a, 0x1e957cd5),
546
546
-
PCMCIA_DEVICE_PROD_ID12("CNet", "CNWLC 11Mbps Wireless PC Card V-5", 0xbc477dde, 0x502fae6b),
547
547
-
PCMCIA_DEVICE_PROD_ID12("IEEE 802.11b", "Wireless LAN PC Card", 0x5b878724, 0x122f1df6),
548
548
-
PCMCIA_DEVICE_PROD_ID12("OEM", "11Mbps Wireless LAN PC Card V-3", 0xfea54c90, 0x1c5b0f68),
549
549
-
PCMCIA_DEVICE_PROD_ID12("SMC", "2632W", 0xc4f8b18b, 0x30f38774),
550
550
-
PCMCIA_DEVICE_PROD_ID12("SMC", "2632W-V2", 0xc4f8b18b, 0x172d1377),
551
551
-
PCMCIA_DEVICE_PROD_ID12("Wireless", "PC", 0xa407ecdd, 0x556e4d7e),
552
552
-
PCMCIA_DEVICE_PROD_ID12("WLAN", "802.11b PC CARD", 0x575c516c, 0xb1f6dbc4),
657
657
+
PCMCIA_DEVICE_MANF_CARD_INFO(0x0101, 0x0620, ATMEL_FW_TYPE_502_3COM),
658
658
+
PCMCIA_DEVICE_MANF_CARD_INFO(0x0101, 0x0696, ATMEL_FW_TYPE_502_3COM),
659
659
+
PCMCIA_DEVICE_MANF_CARD_INFO(0x01bf, 0x3302, ATMEL_FW_TYPE_502E),
660
660
+
PCMCIA_DEVICE_MANF_CARD_INFO(0xd601, 0x0007, ATMEL_FW_TYPE_502),
661
661
+
PCMCIA_DEVICE_PROD_ID12_INFO("11WAVE", "11WP611AL-E", 0x9eb2da1f, 0xc9a0d3f9, ATMEL_FW_TYPE_502E),
662
662
+
PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C502AR", 0xabda4164, 0x41b37e1f, ATMEL_FW_TYPE_502),
663
663
+
PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C502AR_D", 0xabda4164, 0x3675d704, ATMEL_FW_TYPE_502D),
664
664
+
PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C502AR_E", 0xabda4164, 0x4172e792, ATMEL_FW_TYPE_502E),
665
665
+
PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C504_R", 0xabda4164, 0x917f3d72, ATMEL_FW_TYPE_504_2958),
666
666
+
PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C504", 0xabda4164, 0x5040670a, ATMEL_FW_TYPE_504),
667
667
+
PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C504A", 0xabda4164, 0xe15ed87f, ATMEL_FW_TYPE_504A_2958),
668
668
+
PCMCIA_DEVICE_PROD_ID12_INFO("BT", "Voyager 1020 Laptop Adapter", 0xae49b86a, 0x1e957cd5, ATMEL_FW_TYPE_502),
669
669
+
PCMCIA_DEVICE_PROD_ID12_INFO("CNet", "CNWLC 11Mbps Wireless PC Card V-5", 0xbc477dde, 0x502fae6b, ATMEL_FW_TYPE_502E),
670
670
+
PCMCIA_DEVICE_PROD_ID12_INFO("IEEE 802.11b", "Wireless LAN PC Card", 0x5b878724, 0x122f1df6, ATMEL_FW_TYPE_502),
671
671
+
PCMCIA_DEVICE_PROD_ID12_INFO("IEEE 802.11b", "Wireless LAN Card S", 0x5b878724, 0x5fba533a, ATMEL_FW_TYPE_504_2958),
672
672
+
PCMCIA_DEVICE_PROD_ID12_INFO("OEM", "11Mbps Wireless LAN PC Card V-3", 0xfea54c90, 0x1c5b0f68, ATMEL_FW_TYPE_502),
673
673
+
PCMCIA_DEVICE_PROD_ID12_INFO("SMC", "2632W", 0xc4f8b18b, 0x30f38774, ATMEL_FW_TYPE_502D),
674
674
+
PCMCIA_DEVICE_PROD_ID12_INFO("SMC", "2632W-V2", 0xc4f8b18b, 0x172d1377, ATMEL_FW_TYPE_502),
675
675
+
PCMCIA_DEVICE_PROD_ID12_INFO("Wireless", "PC_CARD", 0xa407ecdd, 0x119f6314, ATMEL_FW_TYPE_502D),
676
676
+
PCMCIA_DEVICE_PROD_ID12_INFO("WLAN", "802.11b PC CARD", 0x575c516c, 0xb1f6dbc4, ATMEL_FW_TYPE_502D),
677
677
+
PCMCIA_DEVICE_PROD_ID12_INFO("LG", "LW2100N", 0xb474d43a, 0x6b1fec94, ATMEL_FW_TYPE_502E),
553
678
PCMCIA_DEVICE_NULL
554
679
};
680
680
+
555
681
MODULE_DEVICE_TABLE(pcmcia, atmel_ids);
556
682
557
683
static struct pcmcia_driver atmel_driver = {
+1
-1
drivers/net/wireless/atmel_pci.c
reviewed
···
72
72
73
73
static void __devexit atmel_pci_remove(struct pci_dev *pdev)
74
74
{
75
75
-
stop_atmel_card(pci_get_drvdata(pdev), 1);
75
75
+
stop_atmel_card(pci_get_drvdata(pdev));
76
76
}
77
77
78
78
static int __init atmel_init_module(void)