diff options
Diffstat (limited to 'drivers/net/wireless/hostap')
| -rw-r--r-- | drivers/net/wireless/hostap/Kconfig | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_cs.c | 51 |
2 files changed, 13 insertions, 41 deletions
diff --git a/drivers/net/wireless/hostap/Kconfig b/drivers/net/wireless/hostap/Kconfig index c15db2293515..287d82728bc3 100644 --- a/drivers/net/wireless/hostap/Kconfig +++ b/drivers/net/wireless/hostap/Kconfig | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | config HOSTAP | 1 | config HOSTAP |
| 2 | tristate "IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)" | 2 | tristate "IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)" |
| 3 | depends on WLAN_80211 | ||
| 4 | select WIRELESS_EXT | 3 | select WIRELESS_EXT |
| 4 | select WEXT_SPY | ||
| 5 | select WEXT_PRIV | ||
| 5 | select CRYPTO | 6 | select CRYPTO |
| 6 | select CRYPTO_ARC4 | 7 | select CRYPTO_ARC4 |
| 7 | select CRYPTO_ECB | 8 | select CRYPTO_ECB |
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c index ad8eab4a639b..c9640a3e02c9 100644 --- a/drivers/net/wireless/hostap/hostap_cs.c +++ b/drivers/net/wireless/hostap/hostap_cs.c | |||
| @@ -274,9 +274,6 @@ static int sandisk_enable_wireless(struct net_device *dev) | |||
| 274 | conf_reg_t reg; | 274 | conf_reg_t reg; |
| 275 | struct hostap_interface *iface = netdev_priv(dev); | 275 | struct hostap_interface *iface = netdev_priv(dev); |
| 276 | local_info_t *local = iface->local; | 276 | local_info_t *local = iface->local; |
| 277 | tuple_t tuple; | ||
| 278 | cisparse_t *parse = NULL; | ||
| 279 | u_char buf[64]; | ||
| 280 | struct hostap_cs_priv *hw_priv = local->hw_priv; | 277 | struct hostap_cs_priv *hw_priv = local->hw_priv; |
| 281 | 278 | ||
| 282 | if (hw_priv->link->io.NumPorts1 < 0x42) { | 279 | if (hw_priv->link->io.NumPorts1 < 0x42) { |
| @@ -285,28 +282,13 @@ static int sandisk_enable_wireless(struct net_device *dev) | |||
| 285 | goto done; | 282 | goto done; |
| 286 | } | 283 | } |
| 287 | 284 | ||
| 288 | parse = kmalloc(sizeof(cisparse_t), GFP_KERNEL); | ||
| 289 | if (parse == NULL) { | ||
| 290 | ret = -ENOMEM; | ||
| 291 | goto done; | ||
| 292 | } | ||
| 293 | |||
| 294 | tuple.Attributes = TUPLE_RETURN_COMMON; | ||
| 295 | tuple.TupleData = buf; | ||
| 296 | tuple.TupleDataMax = sizeof(buf); | ||
| 297 | tuple.TupleOffset = 0; | ||
| 298 | |||
| 299 | if (hw_priv->link->manf_id != 0xd601 || hw_priv->link->card_id != 0x0101) { | 285 | if (hw_priv->link->manf_id != 0xd601 || hw_priv->link->card_id != 0x0101) { |
| 300 | /* No SanDisk manfid found */ | 286 | /* No SanDisk manfid found */ |
| 301 | ret = -ENODEV; | 287 | ret = -ENODEV; |
| 302 | goto done; | 288 | goto done; |
| 303 | } | 289 | } |
| 304 | 290 | ||
| 305 | tuple.DesiredTuple = CISTPL_LONGLINK_MFC; | 291 | if (hw_priv->link->socket->functions < 2) { |
| 306 | if (pcmcia_get_first_tuple(hw_priv->link, &tuple) || | ||
| 307 | pcmcia_get_tuple_data(hw_priv->link, &tuple) || | ||
| 308 | pcmcia_parse_tuple(&tuple, parse) || | ||
| 309 | parse->longlink_mfc.nfn < 2) { | ||
| 310 | /* No multi-function links found */ | 292 | /* No multi-function links found */ |
| 311 | ret = -ENODEV; | 293 | ret = -ENODEV; |
| 312 | goto done; | 294 | goto done; |
| @@ -354,7 +336,6 @@ static int sandisk_enable_wireless(struct net_device *dev) | |||
| 354 | udelay(10); | 336 | udelay(10); |
| 355 | 337 | ||
| 356 | done: | 338 | done: |
| 357 | kfree(parse); | ||
| 358 | return ret; | 339 | return ret; |
| 359 | } | 340 | } |
| 360 | 341 | ||
| @@ -529,10 +510,6 @@ static void prism2_detach(struct pcmcia_device *link) | |||
| 529 | } | 510 | } |
| 530 | 511 | ||
| 531 | 512 | ||
| 532 | #define CS_CHECK(fn, ret) \ | ||
| 533 | do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | ||
| 534 | |||
| 535 | |||
| 536 | /* run after a CARD_INSERTION event is received to configure the PCMCIA | 513 | /* run after a CARD_INSERTION event is received to configure the PCMCIA |
| 537 | * socket and make the device available to the system */ | 514 | * socket and make the device available to the system */ |
| 538 | 515 | ||
| @@ -624,7 +601,6 @@ static int prism2_config(struct pcmcia_device *link) | |||
| 624 | struct hostap_interface *iface; | 601 | struct hostap_interface *iface; |
| 625 | local_info_t *local; | 602 | local_info_t *local; |
| 626 | int ret = 1; | 603 | int ret = 1; |
| 627 | int last_fn, last_ret; | ||
| 628 | struct hostap_cs_priv *hw_priv; | 604 | struct hostap_cs_priv *hw_priv; |
| 629 | 605 | ||
| 630 | PDEBUG(DEBUG_FLOW, "prism2_config()\n"); | 606 | PDEBUG(DEBUG_FLOW, "prism2_config()\n"); |
| @@ -636,19 +612,18 @@ static int prism2_config(struct pcmcia_device *link) | |||
| 636 | } | 612 | } |
| 637 | 613 | ||
| 638 | /* Look for an appropriate configuration table entry in the CIS */ | 614 | /* Look for an appropriate configuration table entry in the CIS */ |
| 639 | last_ret = pcmcia_loop_config(link, prism2_config_check, NULL); | 615 | ret = pcmcia_loop_config(link, prism2_config_check, NULL); |
| 640 | if (last_ret) { | 616 | if (ret) { |
| 641 | if (!ignore_cis_vcc) | 617 | if (!ignore_cis_vcc) |
| 642 | printk(KERN_ERR "GetNextTuple(): No matching " | 618 | printk(KERN_ERR "GetNextTuple(): No matching " |
| 643 | "CIS configuration. Maybe you need the " | 619 | "CIS configuration. Maybe you need the " |
| 644 | "ignore_cis_vcc=1 parameter.\n"); | 620 | "ignore_cis_vcc=1 parameter.\n"); |
| 645 | cs_error(link, RequestIO, last_ret); | ||
| 646 | goto failed; | 621 | goto failed; |
| 647 | } | 622 | } |
| 648 | 623 | ||
| 649 | /* Need to allocate net_device before requesting IRQ handler */ | 624 | /* Need to allocate net_device before requesting IRQ handler */ |
| 650 | dev = prism2_init_local_data(&prism2_pccard_funcs, 0, | 625 | dev = prism2_init_local_data(&prism2_pccard_funcs, 0, |
| 651 | &handle_to_dev(link)); | 626 | &link->dev); |
| 652 | if (dev == NULL) | 627 | if (dev == NULL) |
| 653 | goto failed; | 628 | goto failed; |
| 654 | link->priv = dev; | 629 | link->priv = dev; |
| @@ -666,13 +641,11 @@ static int prism2_config(struct pcmcia_device *link) | |||
| 666 | * irq structure is initialized. | 641 | * irq structure is initialized. |
| 667 | */ | 642 | */ |
| 668 | if (link->conf.Attributes & CONF_ENABLE_IRQ) { | 643 | if (link->conf.Attributes & CONF_ENABLE_IRQ) { |
| 669 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | | 644 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; |
| 670 | IRQ_HANDLE_PRESENT; | ||
| 671 | link->irq.IRQInfo1 = IRQ_LEVEL_ID; | ||
| 672 | link->irq.Handler = prism2_interrupt; | 645 | link->irq.Handler = prism2_interrupt; |
| 673 | link->irq.Instance = dev; | 646 | ret = pcmcia_request_irq(link, &link->irq); |
| 674 | CS_CHECK(RequestIRQ, | 647 | if (ret) |
| 675 | pcmcia_request_irq(link, &link->irq)); | 648 | goto failed; |
| 676 | } | 649 | } |
| 677 | 650 | ||
| 678 | /* | 651 | /* |
| @@ -680,8 +653,9 @@ static int prism2_config(struct pcmcia_device *link) | |||
| 680 | * the I/O windows and the interrupt mapping, and putting the | 653 | * the I/O windows and the interrupt mapping, and putting the |
| 681 | * card and host interface into "Memory and IO" mode. | 654 | * card and host interface into "Memory and IO" mode. |
| 682 | */ | 655 | */ |
| 683 | CS_CHECK(RequestConfiguration, | 656 | ret = pcmcia_request_configuration(link, &link->conf); |
| 684 | pcmcia_request_configuration(link, &link->conf)); | 657 | if (ret) |
| 658 | goto failed; | ||
| 685 | 659 | ||
| 686 | dev->irq = link->irq.AssignedIRQ; | 660 | dev->irq = link->irq.AssignedIRQ; |
| 687 | dev->base_addr = link->io.BasePort1; | 661 | dev->base_addr = link->io.BasePort1; |
| @@ -714,9 +688,6 @@ static int prism2_config(struct pcmcia_device *link) | |||
| 714 | } | 688 | } |
| 715 | return ret; | 689 | return ret; |
| 716 | 690 | ||
| 717 | cs_failed: | ||
| 718 | cs_error(link, last_fn, last_ret); | ||
| 719 | |||
| 720 | failed: | 691 | failed: |
| 721 | kfree(hw_priv); | 692 | kfree(hw_priv); |
| 722 | prism2_release((u_long)link); | 693 | prism2_release((u_long)link); |
