Ignore:
Timestamp:
2011-04-08T20:55:18+02:00 (6 years ago)
Author:
nbd
Message:

mac80211: update to trunk as of r26534

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/package/mac80211/patches/300-pending_work.patch

    r26370 r26536  
    11--- a/drivers/net/wireless/ath/ath9k/main.c 
    22+++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -1048,6 +1048,8 @@ static int ath9k_start(struct ieee80211_ 
    4                 "Starting driver with initial channel: %d MHz\n", 
    5                 curchan->center_freq); 
    6   
    7 +       ath9k_ps_wakeup(sc); 
    8 + 
    9         mutex_lock(&sc->mutex); 
    10   
    11         /* setup initial channel */ 
    12 @@ -1143,6 +1145,8 @@ static int ath9k_start(struct ieee80211_ 
    13  mutex_unlock: 
    14         mutex_unlock(&sc->mutex); 
    15   
    16 +       ath9k_ps_restore(sc); 
    17 + 
    18         return r; 
    19  } 
    20   
    21 --- a/net/mac80211/ibss.c 
    22 +++ b/net/mac80211/ibss.c 
    23 @@ -661,7 +661,6 @@ static void ieee80211_sta_find_ibss(stru 
    24  static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata, 
    25                                         struct sk_buff *req) 
     3@@ -324,7 +324,6 @@ static void ath_paprd_activate(struct at 
     4        if (!caldata || !caldata->paprd_done) 
     5                return; 
     6  
     7-       ath9k_ps_wakeup(sc); 
     8        ar9003_paprd_enable(ah, false); 
     9        for (chain = 0; chain < AR9300_MAX_CHAINS; chain++) { 
     10                if (!(common->tx_chainmask & BIT(chain))) 
     11@@ -334,7 +333,6 @@ static void ath_paprd_activate(struct at 
     12        } 
     13  
     14        ar9003_paprd_enable(ah, true); 
     15-       ath9k_ps_restore(sc); 
     16 } 
     17  
     18 static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int chain) 
     19@@ -554,8 +552,11 @@ set_timer: 
     20        if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_PAPRD) && ah->caldata) { 
     21                if (!ah->caldata->paprd_done) 
     22                        ieee80211_queue_work(sc->hw, &sc->paprd_work); 
     23-               else if (!ah->paprd_table_write_done) 
     24+               else if (!ah->paprd_table_write_done) { 
     25+                       ath9k_ps_wakeup(sc); 
     26                        ath_paprd_activate(sc); 
     27+                       ath9k_ps_restore(sc); 
     28+               } 
     29        } 
     30 } 
     31  
     32@@ -1376,7 +1377,6 @@ static void ath9k_calculate_summary_stat 
     33  
     34        ath9k_calculate_iter_data(hw, vif, &iter_data); 
     35  
     36-       ath9k_ps_wakeup(sc); 
     37        /* Set BSSID mask. */ 
     38        memcpy(common->bssidmask, iter_data.mask, ETH_ALEN); 
     39        ath_hw_setbssidmask(common); 
     40@@ -1411,7 +1411,6 @@ static void ath9k_calculate_summary_stat 
     41        } 
     42  
     43        ath9k_hw_set_interrupts(ah, ah->imask); 
     44-       ath9k_ps_restore(sc); 
     45  
     46        /* Set up ANI */ 
     47        if ((iter_data.naps + iter_data.nadhocs) > 0) { 
     48@@ -1457,6 +1456,7 @@ static int ath9k_add_interface(struct ie 
     49        struct ath_vif *avp = (void *)vif->drv_priv; 
     50        int ret = 0; 
     51  
     52+       ath9k_ps_wakeup(sc); 
     53        mutex_lock(&sc->mutex); 
     54  
     55        switch (vif->type) { 
     56@@ -1503,6 +1503,7 @@ static int ath9k_add_interface(struct ie 
     57        ath9k_do_vif_add_setup(hw, vif); 
     58 out: 
     59        mutex_unlock(&sc->mutex); 
     60+       ath9k_ps_restore(sc); 
     61        return ret; 
     62 } 
     63  
     64@@ -1517,6 +1518,7 @@ static int ath9k_change_interface(struct 
     65  
     66        ath_dbg(common, ATH_DBG_CONFIG, "Change Interface\n"); 
     67        mutex_lock(&sc->mutex); 
     68+       ath9k_ps_wakeup(sc); 
     69  
     70        /* See if new interface type is valid. */ 
     71        if ((new_type == NL80211_IFTYPE_ADHOC) && 
     72@@ -1546,6 +1548,7 @@ static int ath9k_change_interface(struct 
     73  
     74        ath9k_do_vif_add_setup(hw, vif); 
     75 out: 
     76+       ath9k_ps_restore(sc); 
     77        mutex_unlock(&sc->mutex); 
     78        return ret; 
     79 } 
     80@@ -1558,6 +1561,7 @@ static void ath9k_remove_interface(struc 
     81  
     82        ath_dbg(common, ATH_DBG_CONFIG, "Detach Interface\n"); 
     83  
     84+       ath9k_ps_wakeup(sc); 
     85        mutex_lock(&sc->mutex); 
     86  
     87        sc->nvifs--; 
     88@@ -1569,6 +1573,7 @@ static void ath9k_remove_interface(struc 
     89        ath9k_calculate_summary_state(hw, NULL); 
     90  
     91        mutex_unlock(&sc->mutex); 
     92+       ath9k_ps_restore(sc); 
     93 } 
     94  
     95 static void ath9k_enable_ps(struct ath_softc *sc) 
     96@@ -1809,6 +1814,7 @@ static int ath9k_conf_tx(struct ieee8021 
     97  
     98        txq = sc->tx.txq_map[queue]; 
     99  
     100+       ath9k_ps_wakeup(sc); 
     101        mutex_lock(&sc->mutex); 
     102  
     103        memset(&qi, 0, sizeof(struct ath9k_tx_queue_info)); 
     104@@ -1832,6 +1838,7 @@ static int ath9k_conf_tx(struct ieee8021 
     105                        ath_beaconq_config(sc); 
     106  
     107        mutex_unlock(&sc->mutex); 
     108+       ath9k_ps_restore(sc); 
     109  
     110        return ret; 
     111 } 
     112@@ -1908,6 +1915,7 @@ static void ath9k_bss_info_changed(struc 
     113        int slottime; 
     114        int error; 
     115  
     116+       ath9k_ps_wakeup(sc); 
     117        mutex_lock(&sc->mutex); 
     118  
     119        if (changed & BSS_CHANGED_BSSID) { 
     120@@ -2008,6 +2016,7 @@ static void ath9k_bss_info_changed(struc 
     121        } 
     122  
     123        mutex_unlock(&sc->mutex); 
     124+       ath9k_ps_restore(sc); 
     125 } 
     126  
     127 static u64 ath9k_get_tsf(struct ieee80211_hw *hw) 
     128--- a/drivers/net/wireless/ath/ath9k/beacon.c 
     129+++ b/drivers/net/wireless/ath/ath9k/beacon.c 
     130@@ -392,14 +392,6 @@ void ath_beacon_tasklet(unsigned long da 
     131        tsf += TU_TO_USEC(ah->config.sw_beacon_response_time); 
     132        tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF); 
     133        slot = (tsftu % (intval * ATH_BCBUF)) / intval; 
     134-       /* 
     135-        * Reverse the slot order to get slot 0 on the TBTT offset that does 
     136-        * not require TSF adjustment and other slots adding 
     137-        * slot/ATH_BCBUF * beacon_int to timestamp. For example, with 
     138-        * ATH_BCBUF = 4, we process beacon slots as follows: 3 2 1 0 3 2 1 .. 
     139-        * and slot 0 is at correct offset to TBTT. 
     140-        */ 
     141-       slot = ATH_BCBUF - slot - 1; 
     142        vif = sc->beacon.bslot[slot]; 
     143  
     144        ath_dbg(common, ATH_DBG_BEACON, 
     145@@ -708,7 +700,7 @@ void ath_beacon_config(struct ath_softc  
     146        if (cur_conf->dtim_period == 0) 
     147                cur_conf->dtim_period = 1; 
     148  
     149-       switch (iftype) { 
     150+       switch (sc->sc_ah->opmode) { 
     151        case NL80211_IFTYPE_AP: 
     152                ath_beacon_config_ap(sc, cur_conf); 
     153                break; 
     154--- a/net/mac80211/rx.c 
     155+++ b/net/mac80211/rx.c 
     156@@ -1585,7 +1585,7 @@ ieee80211_drop_unencrypted_mgmt(struct i 
     157 } 
     158  
     159 static int 
     160-__ieee80211_data_to_8023(struct ieee80211_rx_data *rx) 
     161+__ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control) 
    26162 { 
    27 -       struct ieee80211_rx_status *rx_status = IEEE80211_SKB_RXCB(req); 
    28         struct ieee80211_mgmt *mgmt = (void *)req->data; 
    29         struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; 
    30         struct ieee80211_local *local = sdata->local; 
    31 @@ -685,7 +684,7 @@ static void ieee80211_rx_mgmt_probe_req( 
    32                mgmt->bssid, tx_last_beacon); 
    33  #endif /* CONFIG_MAC80211_IBSS_DEBUG */ 
    34   
    35 -       if (!tx_last_beacon && !(rx_status->rx_flags & IEEE80211_RX_RA_MATCH)) 
    36 +       if (!tx_last_beacon && is_multicast_ether_addr(mgmt->da)) 
    37                 return; 
    38   
    39         if (memcmp(mgmt->bssid, ifibss->bssid, ETH_ALEN) != 0 && 
    40 --- a/net/mac80211/rc80211_minstrel_ht.c 
    41 +++ b/net/mac80211/rc80211_minstrel_ht.c 
    42 @@ -659,18 +659,14 @@ minstrel_ht_update_caps(void *priv, stru 
    43         struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs; 
    44         struct ieee80211_local *local = hw_to_local(mp->hw); 
    45         u16 sta_cap = sta->ht_cap.cap; 
    46 +       int n_supported = 0; 
    47         int ack_dur; 
    48         int stbc; 
     163        struct ieee80211_sub_if_data *sdata = rx->sdata; 
     164        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; 
     165@@ -1593,6 +1593,7 @@ __ieee80211_data_to_8023(struct ieee8021 
     166        struct ethhdr *ehdr; 
     167        int ret; 
     168  
     169+       *port_control = false; 
     170        if (ieee80211_has_a4(hdr->frame_control) && 
     171            sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta) 
     172                return -1; 
     173@@ -1611,12 +1612,16 @@ __ieee80211_data_to_8023(struct ieee8021 
     174                return -1; 
     175  
     176        ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type); 
     177-       if (ret < 0 || !check_port_control) 
     178+       if (ret < 0) 
     179                return ret; 
     180  
     181        ehdr = (struct ethhdr *) rx->skb->data; 
     182-       if (ehdr->h_proto != rx->sdata->control_port_protocol) 
     183-               return -1; 
     184+       if (ehdr->h_proto == rx->sdata->control_port_protocol) { 
     185+               *port_control = true; 
     186+ 
     187+               if (check_port_control) 
     188+                       return -1; 
     189+       } 
     190  
     191        return 0; 
     192 } 
     193@@ -1916,6 +1921,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_ 
     194        struct net_device *dev = sdata->dev; 
     195        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; 
     196        __le16 fc = hdr->frame_control; 
     197+       bool port_control; 
     198        int err; 
     199  
     200        if (unlikely(!ieee80211_is_data(hdr->frame_control))) 
     201@@ -1932,13 +1938,21 @@ ieee80211_rx_h_data(struct ieee80211_rx_ 
     202            sdata->vif.type == NL80211_IFTYPE_AP) 
     203                return RX_DROP_MONITOR; 
     204  
     205-       err = __ieee80211_data_to_8023(rx); 
     206+       err = __ieee80211_data_to_8023(rx, &port_control); 
     207        if (unlikely(err)) 
     208                return RX_DROP_UNUSABLE; 
     209  
     210        if (!ieee80211_frame_allowed(rx, fc)) 
     211                return RX_DROP_MONITOR; 
     212  
     213+       if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && 
     214+           unlikely(port_control) && sdata->bss) { 
     215+               sdata = container_of(sdata->bss, struct ieee80211_sub_if_data, 
     216+                                    u.ap); 
     217+               dev = sdata->dev; 
     218+               rx->sdata = sdata; 
     219+       } 
     220+ 
     221        rx->skb->dev = dev; 
     222  
     223        dev->stats.rx_packets++; 
     224--- a/drivers/net/wireless/ath/ath9k/recv.c 
     225+++ b/drivers/net/wireless/ath/ath9k/recv.c 
     226@@ -75,7 +75,6 @@ static void ath_rx_buf_link(struct ath_s 
     227                *sc->rx.rxlink = bf->bf_daddr; 
     228  
     229        sc->rx.rxlink = &ds->ds_link; 
     230-       ath9k_hw_rxena(ah); 
     231 } 
     232  
     233 static void ath_setdefantenna(struct ath_softc *sc, u32 antenna) 
     234@@ -426,9 +425,7 @@ u32 ath_calcrxfilter(struct ath_softc *s 
     235        else 
     236                rfilt |= ATH9K_RX_FILTER_BEACON; 
     237  
     238-       if ((AR_SREV_9280_20_OR_LATER(sc->sc_ah) || 
     239-           AR_SREV_9285_12_OR_LATER(sc->sc_ah)) && 
     240-           (sc->sc_ah->opmode == NL80211_IFTYPE_AP) && 
     241+       if ((sc->sc_ah->opmode == NL80211_IFTYPE_AP) || 
     242            (sc->rx.rxfilter & FIF_PSPOLL)) 
     243                rfilt |= ATH9K_RX_FILTER_PSPOLL; 
     244  
     245@@ -486,12 +483,12 @@ start_recv: 
     246 bool ath_stoprecv(struct ath_softc *sc) 
     247 { 
     248        struct ath_hw *ah = sc->sc_ah; 
     249-       bool stopped; 
     250+       bool stopped, reset = false; 
     251  
     252        spin_lock_bh(&sc->rx.rxbuflock); 
     253        ath9k_hw_abortpcurecv(ah); 
     254        ath9k_hw_setrxfilter(ah, 0); 
     255-       stopped = ath9k_hw_stopdmarecv(ah); 
     256+       stopped = ath9k_hw_stopdmarecv(ah, &reset); 
     257  
     258        if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) 
     259                ath_edma_stop_recv(sc); 
     260@@ -506,7 +503,7 @@ bool ath_stoprecv(struct ath_softc *sc) 
     261                        "confusing the DMA engine when we start RX up\n"); 
     262                ATH_DBG_WARN_ON_ONCE(!stopped); 
     263        } 
     264-       return stopped; 
     265+       return stopped || reset; 
     266 } 
     267  
     268 void ath_flushrecv(struct ath_softc *sc) 
     269@@ -1767,6 +1764,7 @@ requeue: 
     270                } else { 
     271                        list_move_tail(&bf->list, &sc->rx.rxbuf); 
     272                        ath_rx_buf_link(sc, bf); 
     273+                       ath9k_hw_rxena(ah); 
     274                } 
     275        } while (1); 
     276  
     277--- a/drivers/net/wireless/ath/ath9k/hw.c 
     278+++ b/drivers/net/wireless/ath/ath9k/hw.c 
     279@@ -1249,15 +1249,6 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     280        ah->txchainmask = common->tx_chainmask; 
     281        ah->rxchainmask = common->rx_chainmask; 
     282  
     283-       if ((common->bus_ops->ath_bus_type != ATH_USB) && !ah->chip_fullsleep) { 
     284-               ath9k_hw_abortpcurecv(ah); 
     285-               if (!ath9k_hw_stopdmarecv(ah)) { 
     286-                       ath_dbg(common, ATH_DBG_XMIT, 
     287-                               "Failed to stop receive dma\n"); 
     288-                       bChannelChange = false; 
     289-               } 
     290-       } 
     291- 
     292        if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) 
     293                return -EIO; 
     294  
     295--- a/drivers/net/wireless/ath/ath9k/mac.c 
     296+++ b/drivers/net/wireless/ath/ath9k/mac.c 
     297@@ -710,27 +710,46 @@ void ath9k_hw_abortpcurecv(struct ath_hw 
     298 } 
     299 EXPORT_SYMBOL(ath9k_hw_abortpcurecv); 
     300  
     301-bool ath9k_hw_stopdmarecv(struct ath_hw *ah) 
     302+bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset) 
     303 { 
     304 #define AH_RX_STOP_DMA_TIMEOUT 10000   /* usec */ 
     305        struct ath_common *common = ath9k_hw_common(ah); 
     306+       u32 mac_status, last_mac_status = 0; 
    49307        int i; 
    50308  
    51         /* fall back to the old minstrel for legacy stations */ 
    52 -       if (!sta->ht_cap.ht_supported) { 
    53 -               msp->is_ht = false; 
    54 -               memset(&msp->legacy, 0, sizeof(msp->legacy)); 
    55 -               msp->legacy.r = msp->ratelist; 
    56 -               msp->legacy.sample_table = msp->sample_table; 
    57 -               return mac80211_minstrel.rate_init(priv, sband, sta, &msp->legacy); 
    58 -       } 
    59 +       if (!sta->ht_cap.ht_supported) 
    60 +               goto use_legacy; 
    61   
    62         BUILD_BUG_ON(ARRAY_SIZE(minstrel_mcs_groups) != 
    63                 MINSTREL_MAX_STREAMS * MINSTREL_STREAM_GROUPS); 
    64 @@ -725,7 +721,22 @@ minstrel_ht_update_caps(void *priv, stru 
    65   
    66                 mi->groups[i].supported = 
    67                         mcs->rx_mask[minstrel_mcs_groups[i].streams - 1]; 
    68 + 
    69 +               if (mi->groups[i].supported) 
    70 +                       n_supported++; 
    71         } 
    72 + 
    73 +       if (!n_supported) 
    74 +               goto use_legacy; 
    75 + 
    76 +       return; 
    77 + 
    78 +use_legacy: 
    79 +       msp->is_ht = false; 
    80 +       memset(&msp->legacy, 0, sizeof(msp->legacy)); 
    81 +       msp->legacy.r = msp->ratelist; 
    82 +       msp->legacy.sample_table = msp->sample_table; 
    83 +       return mac80211_minstrel.rate_init(priv, sband, sta, &msp->legacy); 
    84  } 
    85   
    86  static void 
    87 --- a/net/mac80211/ieee80211_i.h 
    88 +++ b/net/mac80211/ieee80211_i.h 
    89 @@ -814,8 +814,8 @@ struct ieee80211_local { 
    90   
    91         struct rate_control_ref *rate_ctrl; 
    92   
    93 -       struct crypto_blkcipher *wep_tx_tfm; 
    94 -       struct crypto_blkcipher *wep_rx_tfm; 
    95 +       struct crypto_cipher *wep_tx_tfm; 
    96 +       struct crypto_cipher *wep_rx_tfm; 
    97         u32 wep_iv; 
    98   
    99         /* see iface.c */ 
    100 --- a/net/mac80211/tkip.c 
    101 +++ b/net/mac80211/tkip.c 
    102 @@ -202,7 +202,7 @@ EXPORT_SYMBOL(ieee80211_get_tkip_key); 
    103   * @payload_len is the length of payload (_not_ including IV/ICV length). 
    104   * @ta is the transmitter addresses. 
    105   */ 
    106 -int ieee80211_tkip_encrypt_data(struct crypto_blkcipher *tfm, 
    107 +int ieee80211_tkip_encrypt_data(struct crypto_cipher *tfm, 
    108                                 struct ieee80211_key *key, 
    109                                 u8 *pos, size_t payload_len, u8 *ta) 
    110  { 
    111 @@ -223,7 +223,7 @@ int ieee80211_tkip_encrypt_data(struct c 
    112   * beginning of the buffer containing IEEE 802.11 header payload, i.e., 
    113   * including IV, Ext. IV, real data, Michael MIC, ICV. @payload_len is the 
    114   * length of payload, including IV, Ext. IV, MIC, ICV.  */ 
    115 -int ieee80211_tkip_decrypt_data(struct crypto_blkcipher *tfm, 
    116 +int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm, 
    117                                 struct ieee80211_key *key, 
    118                                 u8 *payload, size_t payload_len, u8 *ta, 
    119                                 u8 *ra, int only_iv, int queue, 
    120 --- a/net/mac80211/tkip.h 
    121 +++ b/net/mac80211/tkip.h 
    122 @@ -15,7 +15,7 @@ 
    123   
    124  u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, u16 iv16); 
    125   
    126 -int ieee80211_tkip_encrypt_data(struct crypto_blkcipher *tfm, 
    127 +int ieee80211_tkip_encrypt_data(struct crypto_cipher *tfm, 
    128                                  struct ieee80211_key *key, 
    129                                  u8 *pos, size_t payload_len, u8 *ta); 
    130  enum { 
    131 @@ -24,7 +24,7 @@ enum { 
    132         TKIP_DECRYPT_INVALID_KEYIDX = -2, 
    133         TKIP_DECRYPT_REPLAY = -3, 
    134  }; 
    135 -int ieee80211_tkip_decrypt_data(struct crypto_blkcipher *tfm, 
    136 +int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm, 
    137                                 struct ieee80211_key *key, 
    138                                 u8 *payload, size_t payload_len, u8 *ta, 
    139                                 u8 *ra, int only_iv, int queue, 
    140 --- a/net/mac80211/wep.c 
    141 +++ b/net/mac80211/wep.c 
    142 @@ -30,17 +30,15 @@ int ieee80211_wep_init(struct ieee80211_ 
    143         /* start WEP IV from a random value */ 
    144         get_random_bytes(&local->wep_iv, WEP_IV_LEN); 
    145   
    146 -       local->wep_tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, 
    147 -                                               CRYPTO_ALG_ASYNC); 
    148 +       local->wep_tx_tfm = crypto_alloc_cipher("arc4", 0, CRYPTO_ALG_ASYNC); 
    149         if (IS_ERR(local->wep_tx_tfm)) { 
    150                 local->wep_rx_tfm = ERR_PTR(-EINVAL); 
    151                 return PTR_ERR(local->wep_tx_tfm); 
    152         } 
    153   
    154 -       local->wep_rx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, 
    155 -                                               CRYPTO_ALG_ASYNC); 
    156 +       local->wep_rx_tfm = crypto_alloc_cipher("arc4", 0, CRYPTO_ALG_ASYNC); 
    157         if (IS_ERR(local->wep_rx_tfm)) { 
    158 -               crypto_free_blkcipher(local->wep_tx_tfm); 
    159 +               crypto_free_cipher(local->wep_tx_tfm); 
    160                 local->wep_tx_tfm = ERR_PTR(-EINVAL); 
    161                 return PTR_ERR(local->wep_rx_tfm); 
    162         } 
    163 @@ -51,9 +49,9 @@ int ieee80211_wep_init(struct ieee80211_ 
    164  void ieee80211_wep_free(struct ieee80211_local *local) 
    165  { 
    166         if (!IS_ERR(local->wep_tx_tfm)) 
    167 -               crypto_free_blkcipher(local->wep_tx_tfm); 
    168 +               crypto_free_cipher(local->wep_tx_tfm); 
    169         if (!IS_ERR(local->wep_rx_tfm)) 
    170 -               crypto_free_blkcipher(local->wep_rx_tfm); 
    171 +               crypto_free_cipher(local->wep_rx_tfm); 
    172  } 
    173   
    174  static inline bool ieee80211_wep_weak_iv(u32 iv, int keylen) 
    175 @@ -127,12 +125,11 @@ static void ieee80211_wep_remove_iv(stru 
    176  /* Perform WEP encryption using given key. data buffer must have tailroom 
    177   * for 4-byte ICV. data_len must not include this ICV. Note: this function 
    178   * does _not_ add IV. data = RC4(data | CRC32(data)) */ 
    179 -int ieee80211_wep_encrypt_data(struct crypto_blkcipher *tfm, u8 *rc4key, 
    180 +int ieee80211_wep_encrypt_data(struct crypto_cipher *tfm, u8 *rc4key, 
    181                                size_t klen, u8 *data, size_t data_len) 
    182  { 
    183 -       struct blkcipher_desc desc = { .tfm = tfm }; 
    184 -       struct scatterlist sg; 
    185         __le32 icv; 
    186 +       int i; 
    187   
    188         if (IS_ERR(tfm)) 
    189                 return -1; 
    190 @@ -140,9 +137,9 @@ int ieee80211_wep_encrypt_data(struct cr 
    191         icv = cpu_to_le32(~crc32_le(~0, data, data_len)); 
    192         put_unaligned(icv, (__le32 *)(data + data_len)); 
    193   
    194 -       crypto_blkcipher_setkey(tfm, rc4key, klen); 
    195 -       sg_init_one(&sg, data, data_len + WEP_ICV_LEN); 
    196 -       crypto_blkcipher_encrypt(&desc, &sg, &sg, sg.length); 
    197 +       crypto_cipher_setkey(tfm, rc4key, klen); 
    198 +       for (i = 0; i < data_len + WEP_ICV_LEN; i++) 
    199 +               crypto_cipher_encrypt_one(tfm, data + i, data + i); 
    200   
    201         return 0; 
    202  } 
    203 @@ -186,19 +183,18 @@ int ieee80211_wep_encrypt(struct ieee802 
    204  /* Perform WEP decryption using given key. data buffer includes encrypted 
    205   * payload, including 4-byte ICV, but _not_ IV. data_len must not include ICV. 
    206   * Return 0 on success and -1 on ICV mismatch. */ 
    207 -int ieee80211_wep_decrypt_data(struct crypto_blkcipher *tfm, u8 *rc4key, 
    208 +int ieee80211_wep_decrypt_data(struct crypto_cipher *tfm, u8 *rc4key, 
    209                                size_t klen, u8 *data, size_t data_len) 
    210  { 
    211 -       struct blkcipher_desc desc = { .tfm = tfm }; 
    212 -       struct scatterlist sg; 
    213         __le32 crc; 
    214 +       int i; 
    215   
    216         if (IS_ERR(tfm)) 
    217                 return -1; 
    218   
    219 -       crypto_blkcipher_setkey(tfm, rc4key, klen); 
    220 -       sg_init_one(&sg, data, data_len + WEP_ICV_LEN); 
    221 -       crypto_blkcipher_decrypt(&desc, &sg, &sg, sg.length); 
    222 +       crypto_cipher_setkey(tfm, rc4key, klen); 
    223 +       for (i = 0; i < data_len + WEP_ICV_LEN; i++) 
    224 +               crypto_cipher_decrypt_one(tfm, data + i, data + i); 
    225   
    226         crc = cpu_to_le32(~crc32_le(~0, data, data_len)); 
    227         if (memcmp(&crc, data + data_len, WEP_ICV_LEN) != 0) 
    228 --- a/net/mac80211/wep.h 
    229 +++ b/net/mac80211/wep.h 
    230 @@ -18,12 +18,12 @@ 
    231   
    232  int ieee80211_wep_init(struct ieee80211_local *local); 
    233  void ieee80211_wep_free(struct ieee80211_local *local); 
    234 -int ieee80211_wep_encrypt_data(struct crypto_blkcipher *tfm, u8 *rc4key, 
    235 +int ieee80211_wep_encrypt_data(struct crypto_cipher *tfm, u8 *rc4key, 
    236                                 size_t klen, u8 *data, size_t data_len); 
    237  int ieee80211_wep_encrypt(struct ieee80211_local *local, 
    238                           struct sk_buff *skb, 
    239                           const u8 *key, int keylen, int keyidx); 
    240 -int ieee80211_wep_decrypt_data(struct crypto_blkcipher *tfm, u8 *rc4key, 
    241 +int ieee80211_wep_decrypt_data(struct crypto_cipher *tfm, u8 *rc4key, 
    242                                size_t klen, u8 *data, size_t data_len); 
    243  bool ieee80211_wep_is_weak_iv(struct sk_buff *skb, struct ieee80211_key *key); 
    244   
     309+       /* Enable access to the DMA observation bus */ 
     310+       REG_WRITE(ah, AR_MACMISC, 
     311+                 ((AR_MACMISC_DMA_OBS_LINE_8 << AR_MACMISC_DMA_OBS_S) | 
     312+                  (AR_MACMISC_MISC_OBS_BUS_1 << 
     313+                   AR_MACMISC_MISC_OBS_BUS_MSB_S))); 
     314+ 
     315        REG_WRITE(ah, AR_CR, AR_CR_RXD); 
     316  
     317        /* Wait for rx enable bit to go low */ 
     318        for (i = AH_RX_STOP_DMA_TIMEOUT / AH_TIME_QUANTUM; i != 0; i--) { 
     319                if ((REG_READ(ah, AR_CR) & AR_CR_RXE) == 0) 
     320                        break; 
     321+ 
     322+               if (!AR_SREV_9300_20_OR_LATER(ah)) { 
     323+                       mac_status = REG_READ(ah, AR_DMADBG_7) & 0x7f0; 
     324+                       if (mac_status == 0x1c0 && mac_status == last_mac_status) { 
     325+                               *reset = true; 
     326+                               break; 
     327+                       } 
     328+ 
     329+                       last_mac_status = mac_status; 
     330+               } 
     331+ 
     332                udelay(AH_TIME_QUANTUM); 
     333        } 
     334  
     335        if (i == 0) { 
     336                ath_err(common, 
     337-                       "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x\n", 
     338+                       "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x DMADBG_7=0x%08x\n", 
     339                        AH_RX_STOP_DMA_TIMEOUT / 1000, 
     340                        REG_READ(ah, AR_CR), 
     341-                       REG_READ(ah, AR_DIAG_SW)); 
     342+                       REG_READ(ah, AR_DIAG_SW), 
     343+                       REG_READ(ah, AR_DMADBG_7)); 
     344                return false; 
     345        } else { 
     346                return true; 
     347--- a/drivers/net/wireless/ath/ath9k/mac.h 
     348+++ b/drivers/net/wireless/ath/ath9k/mac.h 
     349@@ -695,7 +695,7 @@ bool ath9k_hw_setrxabort(struct ath_hw * 
     350 void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp); 
     351 void ath9k_hw_startpcureceive(struct ath_hw *ah, bool is_scanning); 
     352 void ath9k_hw_abortpcurecv(struct ath_hw *ah); 
     353-bool ath9k_hw_stopdmarecv(struct ath_hw *ah); 
     354+bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset); 
     355 int ath9k_hw_beaconq_setup(struct ath_hw *ah); 
     356  
     357 /* Interrupt Handling */ 
Note: See TracChangeset for help on using the changeset viewer.