u16 wTxBufSize;
        u32 cbMacHdLen;
        u16 wCurrentRate = RATE_1M;
+       unsigned long flags;
 
-       pContext = s_vGetFreeContext(pDevice);
+       if (pDevice->byBBType == BB_TYPE_11A) {
+               wCurrentRate = RATE_6M;
+               byPktType = PK_TYPE_11A;
+       } else {
+               wCurrentRate = RATE_1M;
+               byPktType = PK_TYPE_11B;
+       }
 
-    if (NULL == pContext) {
-        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ManagementSend TX...NO CONTEXT!\n");
-        return CMD_STATUS_RESOURCES;
-    }
+       if (pMgmt->eScanState != WMAC_NO_SCANNING)
+               RFbSetPower(pDevice, wCurrentRate, pDevice->byCurrentCh);
+       else
+               RFbSetPower(pDevice, wCurrentRate, pMgmt->uCurrChannel);
+
+       pDevice->wCurrentRate = wCurrentRate;
+
+       spin_lock_irqsave(&pDevice->lock, flags);
+
+       pContext = s_vGetFreeContext(pDevice);
+       if (!pContext) {
+               DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
+                       "ManagementSend TX...NO CONTEXT!\n");
+               spin_unlock_irqrestore(&pDevice->lock, flags);
+               return CMD_STATUS_RESOURCES;
+       }
 
        pTX_Buffer = (struct vnt_tx_buffer *)&pContext->data[0];
     cbFrameBodySize = pPacket->cbPayloadLen;
        pbyTxBufferAddr = (u8 *)&pTxBufHead->adwTxKey[0];
        wTxBufSize = sizeof(struct vnt_tx_fifo_head);
 
-    if (pDevice->byBBType == BB_TYPE_11A) {
-        wCurrentRate = RATE_6M;
-        byPktType = PK_TYPE_11A;
-    } else {
-        wCurrentRate = RATE_1M;
-        byPktType = PK_TYPE_11B;
-    }
-
-    // SetPower will cause error power TX state for OFDM Date packet in TX buffer.
-    // 2004.11.11 Kyle -- Using OFDM power to tx MngPkt will decrease the connection capability.
-    //                    And cmd timer will wait data pkt TX finish before scanning so it's OK
-    //                    to set power here.
-    if (pMgmt->eScanState != WMAC_NO_SCANNING) {
-        RFbSetPower(pDevice, wCurrentRate, pDevice->byCurrentCh);
-    } else {
-        RFbSetPower(pDevice, wCurrentRate, pMgmt->uCurrChannel);
-    }
-    pDevice->wCurrentRate = wCurrentRate;
 
     //Set packet type
     if (byPktType == PK_TYPE_11A) {//0000 0000 0000 0000
     }
 
     PIPEnsSendBulkOut(pDevice,pContext);
+
+       spin_unlock_irqrestore(&pDevice->lock, flags);
+
     return CMD_STATUS_PENDING;
 }