unsigned long bfs_paprd_timestamp;
        u32 bfs_keyix;
        enum ath9k_key_type bfs_keytype;
+       enum ath9k_internal_frame_type bfs_ftype;
 };
 
 struct ath_buf {
 void ath9k_set_bssid_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
 int ath9k_wiphy_add(struct ath_softc *sc);
 int ath9k_wiphy_del(struct ath_wiphy *aphy);
-void ath9k_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb);
+void ath9k_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb, int ftype);
 int ath9k_wiphy_pause(struct ath_wiphy *aphy);
 int ath9k_wiphy_unpause(struct ath_wiphy *aphy);
 int ath9k_wiphy_select(struct ath_wiphy *aphy);
 
  * ath9k version of ieee80211_tx_status() for TX frames that are generated
  * internally in the driver.
  */
-void ath9k_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
+void ath9k_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb, int ftype)
 {
        struct ath_wiphy *aphy = hw->priv;
        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
 
-       if ((tx_info->pad[0] & ATH_TX_INFO_FRAME_TYPE_PAUSE) &&
-           aphy->state == ATH_WIPHY_PAUSING) {
+       if (ftype == ATH9K_IFT_PAUSE && aphy->state == ATH_WIPHY_PAUSING) {
                if (!(tx_info->flags & IEEE80211_TX_STAT_ACK)) {
                        printk(KERN_DEBUG "ath9k: %s: no ACK for pause "
                               "frame\n", wiphy_name(hw->wiphy));
 
        int padpos, padsize;
        bool use_ldpc = false;
 
-       tx_info->pad[0] = 0;
-       switch (txctl->frame_type) {
-       case ATH9K_IFT_NOT_INTERNAL:
-               break;
-       case ATH9K_IFT_PAUSE:
-               tx_info->pad[0] |= ATH_TX_INFO_FRAME_TYPE_PAUSE;
-               /* fall through */
-       case ATH9K_IFT_UNPAUSE:
-               tx_info->pad[0] |= ATH_TX_INFO_FRAME_TYPE_INTERNAL;
-               break;
-       }
        hdrlen = ieee80211_get_hdrlen_from_skb(skb);
        fc = hdr->frame_control;
 
                                              tid, &bf_head);
                }
        } else {
+               bf->bf_state.bfs_ftype = txctl->frame_type;
                ath_tx_send_normal(sc, txctl->txq, &bf_head);
        }
 
 /*****************/
 
 static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb,
-                           struct ath_wiphy *aphy, int tx_flags,
+                           struct ath_wiphy *aphy, int tx_flags, int ftype,
                            struct ath_txq *txq)
 {
        struct ieee80211_hw *hw = sc->hw;
                                        PS_WAIT_FOR_TX_ACK));
        }
 
-       if (unlikely(tx_info->pad[0] & ATH_TX_INFO_FRAME_TYPE_INTERNAL))
-               ath9k_tx_status(hw, skb);
+       if (unlikely(ftype))
+               ath9k_tx_status(hw, skb, ftype);
        else {
                q = skb_get_queue_mapping(skb);
                if (txq == sc->tx.txq_map[q]) {
                        complete(&sc->paprd_complete);
        } else {
                ath_debug_stat_tx(sc, bf, ts);
-               ath_tx_complete(sc, skb, bf->aphy, tx_flags, txq);
+               ath_tx_complete(sc, skb, bf->aphy, tx_flags,
+                               bf->bf_state.bfs_ftype, txq);
        }
        /* At this point, skb (bf->bf_mpdu) is consumed...make sure we don't
         * accidentally reference it later.