#define DELAYED_CONFIG_ERP             0x00000002
 #define DELAYED_LED_ASSOC              0x00000004
 
+       /*
+        * Software sequence counter, this is only required
+        * for hardware which doesn't support hardware
+        * sequence counting.
+        */
+       spinlock_t seqlock;
        u16 seqno;
 };
 
 
        unsigned int data_length;
        unsigned int duration;
        unsigned int residual;
+       unsigned long irqflags;
 
        memset(txdesc, 0, sizeof(*txdesc));
 
         * sequence counter given by mac80211.
         */
        if (tx_info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) {
-               spin_lock(&intf->lock);
+               spin_lock_irqsave(&intf->seqlock, irqflags);
 
                if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags))
                        intf->seqno += 0x10;
                hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
                hdr->seq_ctrl |= cpu_to_le16(intf->seqno);
 
-               spin_unlock(&intf->lock);
+               spin_unlock_irqrestore(&intf->seqlock, irqflags);
 
                __set_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);
        }