}
  EXPORT_SYMBOL(ath9k_hw_abortpcurecv);
  
- bool ath9k_hw_stopdmarecv(struct ath_hw *ah)
+ bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset)
  {
  #define AH_RX_STOP_DMA_TIMEOUT 10000   /* usec */
 -#define AH_RX_TIME_QUANTUM     100     /* usec */
        struct ath_common *common = ath9k_hw_common(ah);
+       u32 mac_status, last_mac_status = 0;
        int i;
  
+       /* Enable access to the DMA observation bus */
+       REG_WRITE(ah, AR_MACMISC,
+                 ((AR_MACMISC_DMA_OBS_LINE_8 << AR_MACMISC_DMA_OBS_S) |
+                  (AR_MACMISC_MISC_OBS_BUS_1 <<
+                   AR_MACMISC_MISC_OBS_BUS_MSB_S)));
+ 
        REG_WRITE(ah, AR_CR, AR_CR_RXD);
  
        /* Wait for rx enable bit to go low */
 
        struct ath_softc *sc = hw->priv;
        struct ath_hw *ah = sc->sc_ah;
        struct ath_common *common = ath9k_hw_common(ah);
 -      struct ath_vif *avp = (void *)vif->drv_priv;
        int ret = 0;
  
+       ath9k_ps_wakeup(sc);
        mutex_lock(&sc->mutex);
  
        switch (vif->type) {
                        sc->sc_flags &= ~SC_OP_PROTECT_ENABLE;
        }
  
 -      if (changed & BSS_CHANGED_ASSOC) {
 -              ath_dbg(common, ATH_DBG_CONFIG, "BSS Changed ASSOC %d\n",
 -                      bss_conf->assoc);
 -              ath9k_bss_assoc_info(sc, hw, vif, bss_conf);
 -      }
 -
        mutex_unlock(&sc->mutex);
+       ath9k_ps_restore(sc);
  }
  
  static u64 ath9k_get_tsf(struct ieee80211_hw *hw)
 
        tx_skb = skb_clone(skb, GFP_ATOMIC);
        bt_cb(skb)->retries++;
        control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
+       control &= L2CAP_CTRL_SAR;
  
 -      if (pi->conn_state & L2CAP_CONN_SEND_FBIT) {
 +      if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
                control |= L2CAP_CTRL_FINAL;
 -              pi->conn_state &= ~L2CAP_CONN_SEND_FBIT;
 +              chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
        }
  
 -      control |= (pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
 +      control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
                        | (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
  
        put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);