diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/wireless/ath9k/hw.c | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/ath9k/main.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/ath9k/recv.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 14 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-fh.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-tx.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/libertas/if_cs.c | 13 | ||||
| -rw-r--r-- | drivers/net/wireless/orinoco.c | 10 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00reg.h | 5 |
11 files changed, 41 insertions, 35 deletions
diff --git a/drivers/net/wireless/ath9k/hw.c b/drivers/net/wireless/ath9k/hw.c index a17eb130f574..6dbfed0b4149 100644 --- a/drivers/net/wireless/ath9k/hw.c +++ b/drivers/net/wireless/ath9k/hw.c | |||
| @@ -7285,15 +7285,15 @@ ath9k_hw_set_keycache_entry(struct ath_hal *ah, u16 entry, | |||
| 7285 | } | 7285 | } |
| 7286 | break; | 7286 | break; |
| 7287 | case ATH9K_CIPHER_WEP: | 7287 | case ATH9K_CIPHER_WEP: |
| 7288 | if (k->kv_len < 40 / NBBY) { | 7288 | if (k->kv_len < LEN_WEP40) { |
| 7289 | DPRINTF(ah->ah_sc, ATH_DBG_KEYCACHE, | 7289 | DPRINTF(ah->ah_sc, ATH_DBG_KEYCACHE, |
| 7290 | "%s: WEP key length %u too small\n", | 7290 | "%s: WEP key length %u too small\n", |
| 7291 | __func__, k->kv_len); | 7291 | __func__, k->kv_len); |
| 7292 | return false; | 7292 | return false; |
| 7293 | } | 7293 | } |
| 7294 | if (k->kv_len <= 40 / NBBY) | 7294 | if (k->kv_len <= LEN_WEP40) |
| 7295 | keyType = AR_KEYTABLE_TYPE_40; | 7295 | keyType = AR_KEYTABLE_TYPE_40; |
| 7296 | else if (k->kv_len <= 104 / NBBY) | 7296 | else if (k->kv_len <= LEN_WEP104) |
| 7297 | keyType = AR_KEYTABLE_TYPE_104; | 7297 | keyType = AR_KEYTABLE_TYPE_104; |
| 7298 | else | 7298 | else |
| 7299 | keyType = AR_KEYTABLE_TYPE_128; | 7299 | keyType = AR_KEYTABLE_TYPE_128; |
| @@ -7313,7 +7313,7 @@ ath9k_hw_set_keycache_entry(struct ath_hal *ah, u16 entry, | |||
| 7313 | key2 = get_unaligned_le32(k->kv_val + 6) ^ xorMask; | 7313 | key2 = get_unaligned_le32(k->kv_val + 6) ^ xorMask; |
| 7314 | key3 = (get_unaligned_le16(k->kv_val + 10) ^ xorMask) & 0xffff; | 7314 | key3 = (get_unaligned_le16(k->kv_val + 10) ^ xorMask) & 0xffff; |
| 7315 | key4 = get_unaligned_le32(k->kv_val + 12) ^ xorMask; | 7315 | key4 = get_unaligned_le32(k->kv_val + 12) ^ xorMask; |
| 7316 | if (k->kv_len <= 104 / NBBY) | 7316 | if (k->kv_len <= LEN_WEP104) |
| 7317 | key4 &= 0xff; | 7317 | key4 &= 0xff; |
| 7318 | 7318 | ||
| 7319 | if (keyType == AR_KEYTABLE_TYPE_TKIP && ATH9K_IS_MIC_ENABLED(ah)) { | 7319 | if (keyType == AR_KEYTABLE_TYPE_TKIP && ATH9K_IS_MIC_ENABLED(ah)) { |
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index 2888778040e4..95b337149484 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
| @@ -206,7 +206,8 @@ static int ath_key_config(struct ath_softc *sc, | |||
| 206 | if (!ret) | 206 | if (!ret) |
| 207 | return -EIO; | 207 | return -EIO; |
| 208 | 208 | ||
| 209 | sc->sc_keytype = hk.kv_type; | 209 | if (mac) |
| 210 | sc->sc_keytype = hk.kv_type; | ||
| 210 | return 0; | 211 | return 0; |
| 211 | } | 212 | } |
| 212 | 213 | ||
| @@ -756,7 +757,8 @@ static int ath9k_set_key(struct ieee80211_hw *hw, | |||
| 756 | key->hw_key_idx = key->keyidx; | 757 | key->hw_key_idx = key->keyidx; |
| 757 | /* push IV and Michael MIC generation to stack */ | 758 | /* push IV and Michael MIC generation to stack */ |
| 758 | key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; | 759 | key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; |
| 759 | key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; | 760 | if (key->alg == ALG_TKIP) |
| 761 | key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; | ||
| 760 | } | 762 | } |
| 761 | break; | 763 | break; |
| 762 | case DISABLE_KEY: | 764 | case DISABLE_KEY: |
diff --git a/drivers/net/wireless/ath9k/recv.c b/drivers/net/wireless/ath9k/recv.c index 2fe806175c01..20ddb7acdb94 100644 --- a/drivers/net/wireless/ath9k/recv.c +++ b/drivers/net/wireless/ath9k/recv.c | |||
| @@ -360,8 +360,9 @@ static void ath_rx_flush_tid(struct ath_softc *sc, | |||
| 360 | struct ath_arx_tid *rxtid, int drop) | 360 | struct ath_arx_tid *rxtid, int drop) |
| 361 | { | 361 | { |
| 362 | struct ath_rxbuf *rxbuf; | 362 | struct ath_rxbuf *rxbuf; |
| 363 | unsigned long flag; | ||
| 363 | 364 | ||
| 364 | spin_lock_bh(&rxtid->tidlock); | 365 | spin_lock_irqsave(&rxtid->tidlock, flag); |
| 365 | while (rxtid->baw_head != rxtid->baw_tail) { | 366 | while (rxtid->baw_head != rxtid->baw_tail) { |
| 366 | rxbuf = rxtid->rxbuf + rxtid->baw_head; | 367 | rxbuf = rxtid->rxbuf + rxtid->baw_head; |
| 367 | if (!rxbuf->rx_wbuf) { | 368 | if (!rxbuf->rx_wbuf) { |
| @@ -382,7 +383,7 @@ static void ath_rx_flush_tid(struct ath_softc *sc, | |||
| 382 | INCR(rxtid->baw_head, ATH_TID_MAX_BUFS); | 383 | INCR(rxtid->baw_head, ATH_TID_MAX_BUFS); |
| 383 | INCR(rxtid->seq_next, IEEE80211_SEQ_MAX); | 384 | INCR(rxtid->seq_next, IEEE80211_SEQ_MAX); |
| 384 | } | 385 | } |
| 385 | spin_unlock_bh(&rxtid->tidlock); | 386 | spin_unlock_irqrestore(&rxtid->tidlock, flag); |
| 386 | } | 387 | } |
| 387 | 388 | ||
| 388 | static struct sk_buff *ath_rxbuf_alloc(struct ath_softc *sc, | 389 | static struct sk_buff *ath_rxbuf_alloc(struct ath_softc *sc, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index e2581229d8b2..23fed3298962 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
| @@ -474,8 +474,8 @@ static void iwl4965_apm_stop(struct iwl_priv *priv) | |||
| 474 | iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET); | 474 | iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET); |
| 475 | 475 | ||
| 476 | udelay(10); | 476 | udelay(10); |
| 477 | 477 | /* clear "init complete" move adapter D0A* --> D0U state */ | |
| 478 | iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); | 478 | iwl_clear_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); |
| 479 | spin_unlock_irqrestore(&priv->lock, flags); | 479 | spin_unlock_irqrestore(&priv->lock, flags); |
| 480 | } | 480 | } |
| 481 | 481 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index cbc01a00eaf4..b08036a9d894 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
| @@ -145,7 +145,8 @@ static void iwl5000_apm_stop(struct iwl_priv *priv) | |||
| 145 | 145 | ||
| 146 | udelay(10); | 146 | udelay(10); |
| 147 | 147 | ||
| 148 | iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); | 148 | /* clear "init complete" move adapter D0A* --> D0U state */ |
| 149 | iwl_clear_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); | ||
| 149 | 150 | ||
| 150 | spin_unlock_irqrestore(&priv->lock, flags); | 151 | spin_unlock_irqrestore(&priv->lock, flags); |
| 151 | } | 152 | } |
| @@ -577,14 +578,11 @@ static int iwl5000_load_section(struct iwl_priv *priv, | |||
| 577 | FH_TFDIB_CTRL0_REG(FH_SRVC_CHNL), | 578 | FH_TFDIB_CTRL0_REG(FH_SRVC_CHNL), |
| 578 | phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK); | 579 | phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK); |
| 579 | 580 | ||
| 580 | /* FIME: write the MSB of the phy_addr in CTRL1 | ||
| 581 | * iwl_write_direct32(priv, | ||
| 582 | IWL_FH_TFDIB_CTRL1_REG(IWL_FH_SRVC_CHNL), | ||
| 583 | ((phy_addr & MSB_MSK) | ||
| 584 | << FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_count); | ||
| 585 | */ | ||
| 586 | iwl_write_direct32(priv, | 581 | iwl_write_direct32(priv, |
| 587 | FH_TFDIB_CTRL1_REG(FH_SRVC_CHNL), byte_cnt); | 582 | FH_TFDIB_CTRL1_REG(FH_SRVC_CHNL), |
| 583 | (iwl_get_dma_hi_address(phy_addr) | ||
| 584 | << FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_cnt); | ||
| 585 | |||
| 588 | iwl_write_direct32(priv, | 586 | iwl_write_direct32(priv, |
| 589 | FH_TCSR_CHNL_TX_BUF_STS_REG(FH_SRVC_CHNL), | 587 | FH_TCSR_CHNL_TX_BUF_STS_REG(FH_SRVC_CHNL), |
| 590 | 1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM | | 588 | 1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM | |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 061ffba9c884..c0b73c4d6f44 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
| @@ -2602,6 +2602,7 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw) | |||
| 2602 | { | 2602 | { |
| 2603 | struct iwl_priv *priv = hw->priv; | 2603 | struct iwl_priv *priv = hw->priv; |
| 2604 | int ret; | 2604 | int ret; |
| 2605 | u16 pci_cmd; | ||
| 2605 | 2606 | ||
| 2606 | IWL_DEBUG_MAC80211("enter\n"); | 2607 | IWL_DEBUG_MAC80211("enter\n"); |
| 2607 | 2608 | ||
| @@ -2612,6 +2613,13 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw) | |||
| 2612 | pci_restore_state(priv->pci_dev); | 2613 | pci_restore_state(priv->pci_dev); |
| 2613 | pci_enable_msi(priv->pci_dev); | 2614 | pci_enable_msi(priv->pci_dev); |
| 2614 | 2615 | ||
| 2616 | /* enable interrupts if needed: hw bug w/a */ | ||
| 2617 | pci_read_config_word(priv->pci_dev, PCI_COMMAND, &pci_cmd); | ||
| 2618 | if (pci_cmd & PCI_COMMAND_INTX_DISABLE) { | ||
| 2619 | pci_cmd &= ~PCI_COMMAND_INTX_DISABLE; | ||
| 2620 | pci_write_config_word(priv->pci_dev, PCI_COMMAND, pci_cmd); | ||
| 2621 | } | ||
| 2622 | |||
| 2615 | ret = request_irq(priv->pci_dev->irq, iwl4965_isr, IRQF_SHARED, | 2623 | ret = request_irq(priv->pci_dev->irq, iwl4965_isr, IRQF_SHARED, |
| 2616 | DRV_NAME, priv); | 2624 | DRV_NAME, priv); |
| 2617 | if (ret) { | 2625 | if (ret) { |
diff --git a/drivers/net/wireless/iwlwifi/iwl-fh.h b/drivers/net/wireless/iwlwifi/iwl-fh.h index 944642450d3d..cd11c0ca2991 100644 --- a/drivers/net/wireless/iwlwifi/iwl-fh.h +++ b/drivers/net/wireless/iwlwifi/iwl-fh.h | |||
| @@ -287,6 +287,7 @@ | |||
| 287 | 287 | ||
| 288 | #define FH_RSSR_CHNL0_RX_STATUS_CHNL_IDLE (0x01000000) | 288 | #define FH_RSSR_CHNL0_RX_STATUS_CHNL_IDLE (0x01000000) |
| 289 | 289 | ||
| 290 | #define FH_MEM_TFDIB_REG1_ADDR_BITSHIFT 28 | ||
| 290 | 291 | ||
| 291 | /** | 292 | /** |
| 292 | * Transmit DMA Channel Control/Status Registers (TCSR) | 293 | * Transmit DMA Channel Control/Status Registers (TCSR) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index d82823b5c8ab..ff879d46624a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c | |||
| @@ -426,7 +426,7 @@ static int iwl_tx_queue_init(struct iwl_priv *priv, | |||
| 426 | continue; | 426 | continue; |
| 427 | } | 427 | } |
| 428 | 428 | ||
| 429 | txq->cmd[i] = kmalloc(len, GFP_KERNEL | GFP_DMA); | 429 | txq->cmd[i] = kmalloc(len, GFP_KERNEL); |
| 430 | if (!txq->cmd[i]) | 430 | if (!txq->cmd[i]) |
| 431 | return -ENOMEM; | 431 | return -ENOMEM; |
| 432 | } | 432 | } |
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c index 04d7a251e3f0..8941919001bb 100644 --- a/drivers/net/wireless/libertas/if_cs.c +++ b/drivers/net/wireless/libertas/if_cs.c | |||
| @@ -595,7 +595,7 @@ static int if_cs_prog_helper(struct if_cs_card *card) | |||
| 595 | if (ret < 0) { | 595 | if (ret < 0) { |
| 596 | lbs_pr_err("can't download helper at 0x%x, ret %d\n", | 596 | lbs_pr_err("can't download helper at 0x%x, ret %d\n", |
| 597 | sent, ret); | 597 | sent, ret); |
| 598 | goto done; | 598 | goto err_release; |
| 599 | } | 599 | } |
| 600 | 600 | ||
| 601 | if (count == 0) | 601 | if (count == 0) |
| @@ -604,9 +604,8 @@ static int if_cs_prog_helper(struct if_cs_card *card) | |||
| 604 | sent += count; | 604 | sent += count; |
| 605 | } | 605 | } |
| 606 | 606 | ||
| 607 | err_release: | ||
| 607 | release_firmware(fw); | 608 | release_firmware(fw); |
| 608 | ret = 0; | ||
| 609 | |||
| 610 | done: | 609 | done: |
| 611 | lbs_deb_leave_args(LBS_DEB_CS, "ret %d", ret); | 610 | lbs_deb_leave_args(LBS_DEB_CS, "ret %d", ret); |
| 612 | return ret; | 611 | return ret; |
| @@ -676,14 +675,8 @@ static int if_cs_prog_real(struct if_cs_card *card) | |||
| 676 | } | 675 | } |
| 677 | 676 | ||
| 678 | ret = if_cs_poll_while_fw_download(card, IF_CS_SCRATCH, 0x5a); | 677 | ret = if_cs_poll_while_fw_download(card, IF_CS_SCRATCH, 0x5a); |
| 679 | if (ret < 0) { | 678 | if (ret < 0) |
| 680 | lbs_pr_err("firmware download failed\n"); | 679 | lbs_pr_err("firmware download failed\n"); |
| 681 | goto err_release; | ||
| 682 | } | ||
| 683 | |||
| 684 | ret = 0; | ||
| 685 | goto done; | ||
| 686 | |||
| 687 | 680 | ||
| 688 | err_release: | 681 | err_release: |
| 689 | release_firmware(fw); | 682 | release_firmware(fw); |
diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c index 1ebcafe7ca5f..36c004e15602 100644 --- a/drivers/net/wireless/orinoco.c +++ b/drivers/net/wireless/orinoco.c | |||
| @@ -1970,6 +1970,9 @@ __orinoco_set_multicast_list(struct net_device *dev) | |||
| 1970 | priv->promiscuous = promisc; | 1970 | priv->promiscuous = promisc; |
| 1971 | } | 1971 | } |
| 1972 | 1972 | ||
| 1973 | /* If we're not in promiscuous mode, then we need to set the | ||
| 1974 | * group address if either we want to multicast, or if we were | ||
| 1975 | * multicasting and want to stop */ | ||
| 1973 | if (! promisc && (mc_count || priv->mc_count) ) { | 1976 | if (! promisc && (mc_count || priv->mc_count) ) { |
| 1974 | struct dev_mc_list *p = dev->mc_list; | 1977 | struct dev_mc_list *p = dev->mc_list; |
| 1975 | struct hermes_multicast mclist; | 1978 | struct hermes_multicast mclist; |
| @@ -1989,9 +1992,10 @@ __orinoco_set_multicast_list(struct net_device *dev) | |||
| 1989 | printk(KERN_WARNING "%s: Multicast list is " | 1992 | printk(KERN_WARNING "%s: Multicast list is " |
| 1990 | "longer than mc_count\n", dev->name); | 1993 | "longer than mc_count\n", dev->name); |
| 1991 | 1994 | ||
| 1992 | err = hermes_write_ltv(hw, USER_BAP, HERMES_RID_CNFGROUPADDRESSES, | 1995 | err = hermes_write_ltv(hw, USER_BAP, |
| 1993 | HERMES_BYTES_TO_RECLEN(priv->mc_count * ETH_ALEN), | 1996 | HERMES_RID_CNFGROUPADDRESSES, |
| 1994 | &mclist); | 1997 | HERMES_BYTES_TO_RECLEN(mc_count * ETH_ALEN), |
| 1998 | &mclist); | ||
| 1995 | if (err) | 1999 | if (err) |
| 1996 | printk(KERN_ERR "%s: Error %d setting multicast list.\n", | 2000 | printk(KERN_ERR "%s: Error %d setting multicast list.\n", |
| 1997 | dev->name, err); | 2001 | dev->name, err); |
diff --git a/drivers/net/wireless/rt2x00/rt2x00reg.h b/drivers/net/wireless/rt2x00/rt2x00reg.h index 7e88ce5651b9..2ea7866abd5d 100644 --- a/drivers/net/wireless/rt2x00/rt2x00reg.h +++ b/drivers/net/wireless/rt2x00/rt2x00reg.h | |||
| @@ -136,7 +136,7 @@ struct rt2x00_field32 { | |||
| 136 | */ | 136 | */ |
| 137 | #define is_power_of_two(x) ( !((x) & ((x)-1)) ) | 137 | #define is_power_of_two(x) ( !((x) & ((x)-1)) ) |
| 138 | #define low_bit_mask(x) ( ((x)-1) & ~(x) ) | 138 | #define low_bit_mask(x) ( ((x)-1) & ~(x) ) |
| 139 | #define is_valid_mask(x) is_power_of_two(1 + (x) + low_bit_mask(x)) | 139 | #define is_valid_mask(x) is_power_of_two(1LU + (x) + low_bit_mask(x)) |
| 140 | 140 | ||
| 141 | /* | 141 | /* |
| 142 | * Macro's to find first set bit in a variable. | 142 | * Macro's to find first set bit in a variable. |
| @@ -173,8 +173,7 @@ struct rt2x00_field32 { | |||
| 173 | * does not exceed the given typelimit. | 173 | * does not exceed the given typelimit. |
| 174 | */ | 174 | */ |
| 175 | #define FIELD_CHECK(__mask, __type) \ | 175 | #define FIELD_CHECK(__mask, __type) \ |
| 176 | BUILD_BUG_ON(!__builtin_constant_p(__mask) || \ | 176 | BUILD_BUG_ON(!(__mask) || \ |
| 177 | !(__mask) || \ | ||
| 178 | !is_valid_mask(__mask) || \ | 177 | !is_valid_mask(__mask) || \ |
| 179 | (__mask) != (__type)(__mask)) \ | 178 | (__mask) != (__type)(__mask)) \ |
| 180 | 179 | ||
