Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'atmel'

+94 -178
+1 -1
drivers/net/wireless/Kconfig
··· 330 330 331 331 config ATMEL 332 332 tristate "Atmel at76c50x chipset 802.11b support" 333 - depends on NET_RADIO && EXPERIMENTAL 333 + depends on NET_RADIO 334 334 select FW_LOADER 335 335 select CRC32 336 336 ---help---
+43 -45
drivers/net/wireless/atmel.c
··· 72 72 #include "atmel.h" 73 73 74 74 #define DRIVER_MAJOR 0 75 - #define DRIVER_MINOR 96 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 - struct net_device *init_atmel_card( unsigned short irq, int port, const AtmelFWType fw_type, 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 - if (priv->bus_type == BUS_TYPE_PCI && 1609 - !request_region( dev->base_addr, 64, dev->name )) { 1608 + if (!request_region(dev->base_addr, 32, 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 - printk(KERN_INFO "%s: Atmel at76c50x wireless. Version %d.%d simon@thekelleys.org.uk\n", 1626 - dev->name, DRIVER_MAJOR, DRIVER_MINOR); 1625 + printk(KERN_INFO "%s: Atmel at76c50x. Version %d.%d. MAC %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", 1626 + dev->name, DRIVER_MAJOR, DRIVER_MINOR, 1627 + dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], 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 - if (priv->bus_type == BUS_TYPE_PCI) 1633 - release_region( dev->base_addr, 64 ); 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 - void stop_atmel_card(struct net_device *dev, int freeres) 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 - if (freeres) { 1659 - /* PCMCIA frees this stuff, so only for PCI */ 1660 - release_region(dev->base_addr, 64); 1661 - } 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 - if(dwrq->flags & IW_ENCODE_OPEN) 1813 + if(dwrq->flags & IW_ENCODE_OPEN) 1812 1814 priv->exclude_unencrypted = 0; 1813 - 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 - else if (priv->exclude_unencrypted) 1829 - dwrq->flags = IW_ENCODE_RESTRICTED; 1830 - else 1831 - dwrq->flags = IW_ENCODE_OPEN; 1832 - 1830 + else { 1831 + if (priv->exclude_unencrypted) 1832 + dwrq->flags = IW_ENCODE_RESTRICTED; 1833 + else 1834 + dwrq->flags = IW_ENCODE_OPEN; 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 - 2648 - static void send_authentication_request(struct atmel_private *priv, u8 *challenge, int challenge_len) 2648 + 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 - if (priv->wep_is_on) { 2661 - auth.alg = cpu_to_le16(C80211_MGMT_AAN_SHAREDKEY); 2661 + if (priv->wep_is_on && priv->CurrentAuthentTransactionSeqNum != 1) 2662 2662 /* no WEP for authentication frames with TrSeqNo 1 */ 2663 - if (priv->CurrentAuthentTransactionSeqNum != 1) 2664 - header.frame_ctl |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); 2665 - } else { 2666 - auth.alg = cpu_to_le16(C80211_MGMT_AAN_OPENSYSTEM); 2667 - } 2663 + header.frame_ctl |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); 2664 + 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 + 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 - send_authentication_request(priv, auth->chall_text, auth->chall_text_len); 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 - if (status == C80211_MGMT_SC_AuthAlgNotSupported && priv->connect_to_any_BSS) { 2873 - int bss_index; 2874 - 2875 - priv->BSSinfo[(int)(priv->current_BSS)].channel |= 0x80; 2876 - 2877 - if ((bss_index = retrieve_bss(priv)) != -1) { 2878 - atmel_join_bss(priv, bss_index); 2879 - return; 2875 + if (status == C80211_MGMT_SC_AuthAlgNotSupported) { 2876 + /* Do opensystem first, then try sharedkey */ 2877 + if (system == C80211_MGMT_AAN_OPENSYSTEM) { 2878 + priv->CurrentAuthentTransactionSeqNum = 0x001; 2879 + send_authentication_request(priv, C80211_MGMT_AAN_SHAREDKEY, NULL, 0); 2880 + } else if (priv->connect_to_any_BSS) { 2881 + int bss_index; 2882 + 2883 + priv->BSSinfo[(int)(priv->current_BSS)].channel |= 0x80; 2884 + 2885 + if ((bss_index = retrieve_bss(priv)) != -1) { 2886 + atmel_join_bss(priv, bss_index); 2887 + return; 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 - send_authentication_request(priv, NULL, 0); 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 - send_authentication_request(priv, NULL, 0); 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 - printk(KERN_INFO "%s: MAC address %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", 3489 - dev->name, 3490 - dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], 3491 - dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5] ); 3492 - 3493 3485 } 3494 3486 3495 3487 return rc;
+2 -2
drivers/net/wireless/atmel.h
··· 35 35 ATMEL_FW_TYPE_506 36 36 } AtmelFWType; 37 37 38 - struct net_device *init_atmel_card(unsigned short, int, const AtmelFWType, struct device *, 38 + struct net_device *init_atmel_card(unsigned short, unsigned long, const AtmelFWType, struct device *, 39 39 int (*present_func)(void *), void * ); 40 - void stop_atmel_card( struct net_device *, int ); 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
··· 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 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 - /* list of cards we know about and their firmware requirements. 290 - Go either by Manfid or version strings. 291 - Cards not in this list will need a firmware parameter to the module 292 - in all probability. Note that the SMC 2632 V2 and V3 have the same 293 - manfids, so we ignore those and use the version1 strings. */ 294 - 295 - static struct { 296 - int manf, card; 297 - char *ver1; 298 - AtmelFWType firmware; 299 - char *name; 300 - } card_table[] = { 301 - { 0, 0, "WLAN/802.11b PC CARD", ATMEL_FW_TYPE_502D, "Actiontec 802CAT1" }, 302 - { 0, 0, "ATMEL/AT76C502AR", ATMEL_FW_TYPE_502, "NoName-RFMD" }, 303 - { 0, 0, "ATMEL/AT76C502AR_D", ATMEL_FW_TYPE_502D, "NoName-revD" }, 304 - { 0, 0, "ATMEL/AT76C502AR_E", ATMEL_FW_TYPE_502E, "NoName-revE" }, 305 - { 0, 0, "ATMEL/AT76C504", ATMEL_FW_TYPE_504, "NoName-504" }, 306 - { 0, 0, "ATMEL/AT76C504A", ATMEL_FW_TYPE_504A_2958, "NoName-504a-2958" }, 307 - { 0, 0, "ATMEL/AT76C504_R", ATMEL_FW_TYPE_504_2958, "NoName-504-2958" }, 308 - { MANFID_3COM, 0x0620, NULL, ATMEL_FW_TYPE_502_3COM, "3com 3CRWE62092B" }, 309 - { MANFID_3COM, 0x0696, NULL, ATMEL_FW_TYPE_502_3COM, "3com 3CRSHPW196" }, 310 - { 0, 0, "SMC/2632W-V2", ATMEL_FW_TYPE_502, "SMC 2632W-V2" }, 311 - { 0, 0, "SMC/2632W", ATMEL_FW_TYPE_502D, "SMC 2632W-V3" }, 312 - { 0xd601, 0x0007, NULL, ATMEL_FW_TYPE_502, "Sitecom WLAN-011" }, 313 - { 0x01bf, 0x3302, NULL, ATMEL_FW_TYPE_502E, "Belkin F5D6020-V2" }, 314 - { 0, 0, "BT/Voyager 1020 Laptop Adapter", ATMEL_FW_TYPE_502, "BT Voyager 1020" }, 315 - { 0, 0, "IEEE 802.11b/Wireless LAN PC Card", ATMEL_FW_TYPE_502, "Siemens Gigaset PC Card II" }, 316 - { 0, 0, "IEEE 802.11b/Wireless LAN Card S", ATMEL_FW_TYPE_504_2958, "Siemens Gigaset PC Card II" }, 317 - { 0, 0, "CNet/CNWLC 11Mbps Wireless PC Card V-5", ATMEL_FW_TYPE_502E, "CNet CNWLC-811ARL" }, 318 - { 0, 0, "Wireless/PC_CARD", ATMEL_FW_TYPE_502D, "Planet WL-3552" }, 319 - { 0, 0, "OEM/11Mbps Wireless LAN PC Card V-3", ATMEL_FW_TYPE_502, "OEM 11Mbps WLAN PCMCIA Card" }, 320 - { 0, 0, "11WAVE/11WP611AL-E", ATMEL_FW_TYPE_502E, "11WAVE WaveBuddy" }, 321 - { 0, 0, "LG/LW2100N", ATMEL_FW_TYPE_502E, "LG LW2100N 11Mbps WLAN PCMCIA Card" }, 322 - }; 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 - int card_index = -1, done = 0; 298 - 331 + struct pcmcia_device_id *did; 332 + 299 333 handle = link->handle; 300 334 dev = link->priv; 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 - tuple.DesiredTuple = CISTPL_MANFID; 311 - if (pcmcia_get_first_tuple(handle, &tuple) == 0) { 312 - int i; 313 - cistpl_manfid_t *manfid; 314 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple)); 315 - CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse)); 316 - manfid = &(parse.manfid); 317 - for (i = 0; i < sizeof(card_table)/sizeof(card_table[0]); i++) { 318 - if (!card_table[i].ver1 && 319 - manfid->manf == card_table[i].manf && 320 - manfid->card == card_table[i].card) { 321 - card_index = i; 322 - done = 1; 323 - } 324 - } 325 - } 326 - 327 - tuple.DesiredTuple = CISTPL_VERS_1; 328 - if (!done && (pcmcia_get_first_tuple(handle, &tuple) == 0)) { 329 - int i, j, k; 330 - cistpl_vers_1_t *ver1; 331 - CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple)); 332 - CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse)); 333 - ver1 = &(parse.version_1); 334 - 335 - for (i = 0; i < sizeof(card_table)/sizeof(card_table[0]); i++) { 336 - for (j = 0; j < ver1->ns; j++) { 337 - char *p = card_table[i].ver1; 338 - char *q = &ver1->str[ver1->ofs[j]]; 339 - if (!p) 340 - goto mismatch; 341 - for (k = 0; k < j; k++) { 342 - while ((*p != '\0') && (*p != '/')) p++; 343 - if (*p == '\0') { 344 - if (*q != '\0') 345 - goto mismatch; 346 - } else { 347 - p++; 348 - } 349 - } 350 - while((*q != '\0') && (*p != '\0') && 351 - (*p != '/') && (*p == *q)) p++, q++; 352 - if (((*p != '\0') && *p != '/') || *q != '\0') 353 - goto mismatch; 354 - } 355 - card_index = i; 356 - break; /* done */ 357 - 358 - mismatch: 359 - j = 0; /* dummy stmt to shut up compiler */ 360 - } 361 - } 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 - card_index == -1 ? ATMEL_FW_TYPE_NONE : card_table[card_index].firmware, 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 - goto cs_failed; 517 + goto cs_failed; 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 - 442 - /* Finally, report what we've done */ 443 - printk(KERN_INFO "%s: %s%sindex 0x%02x: Vcc %d.%d", 444 - dev->node.dev_name, 445 - card_index == -1 ? "" : card_table[card_index].name, 446 - card_index == -1 ? "" : " ", 447 - link->conf.ConfigIndex, 448 - link->conf.Vcc/10, link->conf.Vcc%10); 449 - if (link->conf.Vpp1) 450 - printk(", Vpp %d.%d", link->conf.Vpp1/10, link->conf.Vpp1%10); 451 - if (link->conf.Attributes & CONF_ENABLE_IRQ) 452 - printk(", irq %d", link->irq.AssignedIRQ); 453 - if (link->io.NumPorts1) 454 - printk(", io 0x%04x-0x%04x", link->io.BasePort1, 455 - link->io.BasePort1+link->io.NumPorts1-1); 456 - if (link->io.NumPorts2) 457 - printk(" & 0x%04x-0x%04x", link->io.BasePort2, 458 - link->io.BasePort2+link->io.NumPorts2-1); 459 - printk("\n"); 460 - 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 - stop_atmel_card(dev, 0); 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 + /* We use the driver_info field to store the correct firmware type for a card. */ 641 + 642 + #define PCMCIA_DEVICE_MANF_CARD_INFO(manf, card, info) { \ 643 + .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \ 644 + PCMCIA_DEV_ID_MATCH_CARD_ID, \ 645 + .manf_id = (manf), \ 646 + .card_id = (card), \ 647 + .driver_info = (kernel_ulong_t)(info), } 648 + 649 + #define PCMCIA_DEVICE_PROD_ID12_INFO(v1, v2, vh1, vh2, info) { \ 650 + .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID1| \ 651 + PCMCIA_DEV_ID_MATCH_PROD_ID2, \ 652 + .prod_id = { (v1), (v2), NULL, NULL }, \ 653 + .prod_id_hash = { (vh1), (vh2), 0, 0 }, \ 654 + .driver_info = (kernel_ulong_t)(info), } 655 + 536 656 static struct pcmcia_device_id atmel_ids[] = { 537 - PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0620), 538 - PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0696), 539 - PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x3302), 540 - PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0007), 541 - PCMCIA_DEVICE_PROD_ID12("11WAVE", "11WP611AL-E", 0x9eb2da1f, 0xc9a0d3f9), 542 - PCMCIA_DEVICE_PROD_ID12("ATMEL", "AT76C502AR", 0xabda4164, 0x41b37e1f), 543 - PCMCIA_DEVICE_PROD_ID12("ATMEL", "AT76C504", 0xabda4164, 0x5040670a), 544 - PCMCIA_DEVICE_PROD_ID12("ATMEL", "AT76C504A", 0xabda4164, 0xe15ed87f), 545 - PCMCIA_DEVICE_PROD_ID12("BT", "Voyager 1020 Laptop Adapter", 0xae49b86a, 0x1e957cd5), 546 - PCMCIA_DEVICE_PROD_ID12("CNet", "CNWLC 11Mbps Wireless PC Card V-5", 0xbc477dde, 0x502fae6b), 547 - PCMCIA_DEVICE_PROD_ID12("IEEE 802.11b", "Wireless LAN PC Card", 0x5b878724, 0x122f1df6), 548 - PCMCIA_DEVICE_PROD_ID12("OEM", "11Mbps Wireless LAN PC Card V-3", 0xfea54c90, 0x1c5b0f68), 549 - PCMCIA_DEVICE_PROD_ID12("SMC", "2632W", 0xc4f8b18b, 0x30f38774), 550 - PCMCIA_DEVICE_PROD_ID12("SMC", "2632W-V2", 0xc4f8b18b, 0x172d1377), 551 - PCMCIA_DEVICE_PROD_ID12("Wireless", "PC", 0xa407ecdd, 0x556e4d7e), 552 - PCMCIA_DEVICE_PROD_ID12("WLAN", "802.11b PC CARD", 0x575c516c, 0xb1f6dbc4), 657 + PCMCIA_DEVICE_MANF_CARD_INFO(0x0101, 0x0620, ATMEL_FW_TYPE_502_3COM), 658 + PCMCIA_DEVICE_MANF_CARD_INFO(0x0101, 0x0696, ATMEL_FW_TYPE_502_3COM), 659 + PCMCIA_DEVICE_MANF_CARD_INFO(0x01bf, 0x3302, ATMEL_FW_TYPE_502E), 660 + PCMCIA_DEVICE_MANF_CARD_INFO(0xd601, 0x0007, ATMEL_FW_TYPE_502), 661 + PCMCIA_DEVICE_PROD_ID12_INFO("11WAVE", "11WP611AL-E", 0x9eb2da1f, 0xc9a0d3f9, ATMEL_FW_TYPE_502E), 662 + PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C502AR", 0xabda4164, 0x41b37e1f, ATMEL_FW_TYPE_502), 663 + PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C502AR_D", 0xabda4164, 0x3675d704, ATMEL_FW_TYPE_502D), 664 + PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C502AR_E", 0xabda4164, 0x4172e792, ATMEL_FW_TYPE_502E), 665 + PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C504_R", 0xabda4164, 0x917f3d72, ATMEL_FW_TYPE_504_2958), 666 + PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C504", 0xabda4164, 0x5040670a, ATMEL_FW_TYPE_504), 667 + PCMCIA_DEVICE_PROD_ID12_INFO("ATMEL", "AT76C504A", 0xabda4164, 0xe15ed87f, ATMEL_FW_TYPE_504A_2958), 668 + PCMCIA_DEVICE_PROD_ID12_INFO("BT", "Voyager 1020 Laptop Adapter", 0xae49b86a, 0x1e957cd5, ATMEL_FW_TYPE_502), 669 + PCMCIA_DEVICE_PROD_ID12_INFO("CNet", "CNWLC 11Mbps Wireless PC Card V-5", 0xbc477dde, 0x502fae6b, ATMEL_FW_TYPE_502E), 670 + PCMCIA_DEVICE_PROD_ID12_INFO("IEEE 802.11b", "Wireless LAN PC Card", 0x5b878724, 0x122f1df6, ATMEL_FW_TYPE_502), 671 + PCMCIA_DEVICE_PROD_ID12_INFO("IEEE 802.11b", "Wireless LAN Card S", 0x5b878724, 0x5fba533a, ATMEL_FW_TYPE_504_2958), 672 + PCMCIA_DEVICE_PROD_ID12_INFO("OEM", "11Mbps Wireless LAN PC Card V-3", 0xfea54c90, 0x1c5b0f68, ATMEL_FW_TYPE_502), 673 + PCMCIA_DEVICE_PROD_ID12_INFO("SMC", "2632W", 0xc4f8b18b, 0x30f38774, ATMEL_FW_TYPE_502D), 674 + PCMCIA_DEVICE_PROD_ID12_INFO("SMC", "2632W-V2", 0xc4f8b18b, 0x172d1377, ATMEL_FW_TYPE_502), 675 + PCMCIA_DEVICE_PROD_ID12_INFO("Wireless", "PC_CARD", 0xa407ecdd, 0x119f6314, ATMEL_FW_TYPE_502D), 676 + PCMCIA_DEVICE_PROD_ID12_INFO("WLAN", "802.11b PC CARD", 0x575c516c, 0xb1f6dbc4, ATMEL_FW_TYPE_502D), 677 + PCMCIA_DEVICE_PROD_ID12_INFO("LG", "LW2100N", 0xb474d43a, 0x6b1fec94, ATMEL_FW_TYPE_502E), 553 678 PCMCIA_DEVICE_NULL 554 679 }; 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
··· 72 72 73 73 static void __devexit atmel_pci_remove(struct pci_dev *pdev) 74 74 { 75 - stop_atmel_card(pci_get_drvdata(pdev), 1); 75 + stop_atmel_card(pci_get_drvdata(pdev)); 76 76 } 77 77 78 78 static int __init atmel_init_module(void)