staging: vt6655: rxtx remove dead functions
authorMalcolm Priestley <tvboxspy@gmail.com>
Wed, 29 Oct 2014 17:55:30 +0000 (17:55 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 29 Oct 2014 20:33:35 +0000 (13:33 -0700)
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vt6655/IEEE11h.c
drivers/staging/vt6655/rxtx.c
drivers/staging/vt6655/rxtx.h
drivers/staging/vt6655/wroute.c

index 180a27cc74d77ed25ffe2770730c94250dfce707..65eb4823a7f5ab1a6018836b9a3b92d47d847a96 100644 (file)
@@ -135,7 +135,5 @@ bool IEEE11hbMSRRepTx(void *pMgmtHandle)
 
        pTxPacket->cbMPDULen = uLength;
        pTxPacket->cbPayloadLen = uLength - WLAN_HDR_ADDR3_LEN;
-       if (csMgmt_xmit(pMgmt->pAdapter, pTxPacket) != CMD_STATUS_PENDING)
-               return false;
        return true;
 }
index aa7e454cd9d3ac443ca27b649a884052fc025194..5c460ad7665ac56fdce238e65357fa801864bfaf 100644 (file)
@@ -104,19 +104,6 @@ static const unsigned short wFB_Opt1[2][5] = {
 #define DATADUR_A_F1    13
 
 /*---------------------  Static Functions  --------------------------*/
-
-static
-void
-s_vFillTxKey(
-       struct vnt_private *pDevice,
-       unsigned char *pbyBuf,
-       unsigned char *pbyIVHead,
-       PSKeyItem  pTransmitKey,
-       unsigned char *pbyHdrBuf,
-       unsigned short wPayloadLen,
-       unsigned char *pMICHDR
-);
-
 static
 void
 s_vFillRTSHead(
@@ -174,160 +161,6 @@ s_uFillDataHead(
 
 /*---------------------  Export Variables  --------------------------*/
 
-static
-void
-s_vFillTxKey(
-       struct vnt_private *pDevice,
-       unsigned char *pbyBuf,
-       unsigned char *pbyIVHead,
-       PSKeyItem  pTransmitKey,
-       unsigned char *pbyHdrBuf,
-       unsigned short wPayloadLen,
-       unsigned char *pMICHDR
-)
-{
-       struct vnt_mic_hdr *mic_hdr = (struct vnt_mic_hdr *)pMICHDR;
-       unsigned long *pdwIV = (unsigned long *)pbyIVHead;
-       unsigned long *pdwExtIV = (unsigned long *)((unsigned char *)pbyIVHead+4);
-       PS802_11Header  pMACHeader = (PS802_11Header)pbyHdrBuf;
-       unsigned long dwRevIVCounter;
-       unsigned char byKeyIndex = 0;
-
-       //Fill TXKEY
-       if (pTransmitKey == NULL)
-               return;
-
-       dwRevIVCounter = cpu_to_le32(pDevice->dwIVCounter);
-       *pdwIV = pDevice->dwIVCounter;
-       byKeyIndex = pTransmitKey->dwKeyIndex & 0xf;
-
-       if (pTransmitKey->byCipherSuite == KEY_CTL_WEP) {
-               if (pTransmitKey->uKeyLength == WLAN_WEP232_KEYLEN) {
-                       memcpy(pDevice->abyPRNG, (unsigned char *)&(dwRevIVCounter), 3);
-                       memcpy(pDevice->abyPRNG+3, pTransmitKey->abyKey, pTransmitKey->uKeyLength);
-               } else {
-                       memcpy(pbyBuf, (unsigned char *)&(dwRevIVCounter), 3);
-                       memcpy(pbyBuf+3, pTransmitKey->abyKey, pTransmitKey->uKeyLength);
-                       if (pTransmitKey->uKeyLength == WLAN_WEP40_KEYLEN) {
-                               memcpy(pbyBuf+8, (unsigned char *)&(dwRevIVCounter), 3);
-                               memcpy(pbyBuf+11, pTransmitKey->abyKey, pTransmitKey->uKeyLength);
-                       }
-                       memcpy(pDevice->abyPRNG, pbyBuf, 16);
-               }
-               // Append IV after Mac Header
-               *pdwIV &= WEP_IV_MASK;//00000000 11111111 11111111 11111111
-               *pdwIV |= (unsigned long)byKeyIndex << 30;
-               *pdwIV = cpu_to_le32(*pdwIV);
-               pDevice->dwIVCounter++;
-               if (pDevice->dwIVCounter > WEP_IV_MASK)
-                       pDevice->dwIVCounter = 0;
-
-       } else if (pTransmitKey->byCipherSuite == KEY_CTL_TKIP) {
-               pTransmitKey->wTSC15_0++;
-               if (pTransmitKey->wTSC15_0 == 0)
-                       pTransmitKey->dwTSC47_16++;
-
-               TKIPvMixKey(pTransmitKey->abyKey, pDevice->abyCurrentNetAddr,
-                           pTransmitKey->wTSC15_0, pTransmitKey->dwTSC47_16, pDevice->abyPRNG);
-               memcpy(pbyBuf, pDevice->abyPRNG, 16);
-               // Make IV
-               memcpy(pdwIV, pDevice->abyPRNG, 3);
-
-               *(pbyIVHead+3) = (unsigned char)(((byKeyIndex << 6) & 0xc0) | 0x20); // 0x20 is ExtIV
-               // Append IV&ExtIV after Mac Header
-               *pdwExtIV = cpu_to_le32(pTransmitKey->dwTSC47_16);
-               pr_debug("vFillTxKey()---- pdwExtIV: %lx\n", *pdwExtIV);
-
-       } else if (pTransmitKey->byCipherSuite == KEY_CTL_CCMP) {
-               pTransmitKey->wTSC15_0++;
-               if (pTransmitKey->wTSC15_0 == 0)
-                       pTransmitKey->dwTSC47_16++;
-
-               memcpy(pbyBuf, pTransmitKey->abyKey, 16);
-
-               // Make IV
-               *pdwIV = 0;
-               *(pbyIVHead+3) = (unsigned char)(((byKeyIndex << 6) & 0xc0) | 0x20); // 0x20 is ExtIV
-               *pdwIV |= cpu_to_le16((unsigned short)(pTransmitKey->wTSC15_0));
-               //Append IV&ExtIV after Mac Header
-               *pdwExtIV = cpu_to_le32(pTransmitKey->dwTSC47_16);
-
-               /* MICHDR0 */
-               mic_hdr->id = 0x59;
-               mic_hdr->tx_priority = 0;
-               ether_addr_copy(mic_hdr->mic_addr2, pMACHeader->abyAddr2);
-
-               /* ccmp pn big endian order */
-               mic_hdr->ccmp_pn[0] = (u8)(pTransmitKey->dwTSC47_16 >> 24);
-               mic_hdr->ccmp_pn[1] = (u8)(pTransmitKey->dwTSC47_16 >> 16);
-               mic_hdr->ccmp_pn[2] = (u8)(pTransmitKey->dwTSC47_16 >> 8);
-               mic_hdr->ccmp_pn[3] = (u8)pTransmitKey->dwTSC47_16;
-               mic_hdr->ccmp_pn[4] = (u8)(pTransmitKey->wTSC15_0 >> 8);
-               mic_hdr->ccmp_pn[5] = (u8)pTransmitKey->wTSC15_0;
-
-               /* MICHDR1 */
-               mic_hdr->payload_len = cpu_to_be16(wPayloadLen);
-
-               if (pDevice->bLongHeader)
-                       mic_hdr->hlen = cpu_to_be16(28);
-               else
-                       mic_hdr->hlen = cpu_to_be16(22);
-
-               ether_addr_copy(mic_hdr->addr1, pMACHeader->abyAddr1);
-               ether_addr_copy(mic_hdr->addr2, pMACHeader->abyAddr2);
-
-               /* MICHDR2 */
-               ether_addr_copy(mic_hdr->addr3, pMACHeader->abyAddr3);
-               mic_hdr->frame_control =
-                               cpu_to_le16(pMACHeader->wFrameCtl & 0xc78f);
-               mic_hdr->seq_ctrl = cpu_to_le16(pMACHeader->wSeqCtl & 0xf);
-
-               if (pDevice->bLongHeader)
-                       ether_addr_copy(mic_hdr->addr4, pMACHeader->abyAddr4);
-       }
-}
-
-static
-void
-s_vSWencryption(
-       struct vnt_private *pDevice,
-       PSKeyItem           pTransmitKey,
-       unsigned char *pbyPayloadHead,
-       unsigned short wPayloadSize
-)
-{
-       unsigned int cbICVlen = 4;
-       unsigned long dwICV = 0xFFFFFFFFL;
-       unsigned long *pdwICV;
-
-       if (pTransmitKey == NULL)
-               return;
-
-       if (pTransmitKey->byCipherSuite == KEY_CTL_WEP) {
-               //=======================================================================
-               // Append ICV after payload
-               dwICV = CRCdwGetCrc32Ex(pbyPayloadHead, wPayloadSize, dwICV);//ICV(Payload)
-               pdwICV = (unsigned long *)(pbyPayloadHead + wPayloadSize);
-               // finally, we must invert dwCRC to get the correct answer
-               *pdwICV = cpu_to_le32(~dwICV);
-               // RC4 encryption
-               rc4_init(&pDevice->SBox, pDevice->abyPRNG, pTransmitKey->uKeyLength + 3);
-               rc4_encrypt(&pDevice->SBox, pbyPayloadHead, pbyPayloadHead, wPayloadSize+cbICVlen);
-               //=======================================================================
-       } else if (pTransmitKey->byCipherSuite == KEY_CTL_TKIP) {
-               //=======================================================================
-               //Append ICV after payload
-               dwICV = CRCdwGetCrc32Ex(pbyPayloadHead, wPayloadSize, dwICV);//ICV(Payload)
-               pdwICV = (unsigned long *)(pbyPayloadHead + wPayloadSize);
-               // finally, we must invert dwCRC to get the correct answer
-               *pdwICV = cpu_to_le32(~dwICV);
-               // RC4 encryption
-               rc4_init(&pDevice->SBox, pDevice->abyPRNG, TKIP_KEY_LEN);
-               rc4_encrypt(&pDevice->SBox, pbyPayloadHead, pbyPayloadHead, wPayloadSize+cbICVlen);
-               //=======================================================================
-       }
-}
-
 static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate)
 {
        return cpu_to_le16(wTimeStampOff[priv->byPreambleType % 2]
@@ -1395,1024 +1228,6 @@ s_cbFillTxBufHead(struct vnt_private *pDevice, unsigned char byPktType,
        return cbHeaderLength;
 }
 
-void
-vGenerateFIFOHeader(struct vnt_private *pDevice, unsigned char byPktType,
-                   unsigned char *pbyTxBufferAddr, bool bNeedEncrypt,
-                   unsigned int cbPayloadSize, unsigned int uDMAIdx,
-                   PSTxDesc pHeadTD, PSEthernetHeader psEthHeader, unsigned char *pPacket,
-                   PSKeyItem pTransmitKey, unsigned int uNodeIndex, unsigned int *puMACfragNum,
-                   unsigned int *pcbHeaderSize)
-{
-       unsigned int wTxBufSize;       // FFinfo size
-       bool bNeedACK;
-       bool bIsAdhoc;
-       unsigned short cbMacHdLen;
-       PSTxBufHead     pTxBufHead = (PSTxBufHead) pbyTxBufferAddr;
-
-       wTxBufSize = sizeof(STxBufHead);
-
-       memset(pTxBufHead, 0, wTxBufSize);
-       //Set FIFOCTL_NEEDACK
-
-       if ((pDevice->op_mode == NL80211_IFTYPE_ADHOC) ||
-           (pDevice->op_mode == NL80211_IFTYPE_AP)) {
-               if (is_multicast_ether_addr(&(psEthHeader->abyDstAddr[0]))) {
-                       bNeedACK = false;
-                       pTxBufHead->wFIFOCtl = pTxBufHead->wFIFOCtl & (~FIFOCTL_NEEDACK);
-               } else {
-                       bNeedACK = true;
-                       pTxBufHead->wFIFOCtl |= FIFOCTL_NEEDACK;
-               }
-               bIsAdhoc = true;
-       } else {
-               // MSDUs in Infra mode always need ACK
-               bNeedACK = true;
-               pTxBufHead->wFIFOCtl |= FIFOCTL_NEEDACK;
-               bIsAdhoc = false;
-       }
-
-       pTxBufHead->wFIFOCtl |= FIFOCTL_TMOEN;
-       pTxBufHead->wTimeStamp = cpu_to_le16(DEFAULT_MSDU_LIFETIME_RES_64us);
-
-       //Set FIFOCTL_LHEAD
-       if (pDevice->bLongHeader)
-               pTxBufHead->wFIFOCtl |= FIFOCTL_LHEAD;
-
-       //Set FIFOCTL_GENINT
-
-       pTxBufHead->wFIFOCtl |= FIFOCTL_GENINT;
-
-       //Set FIFOCTL_ISDMA0
-       if (TYPE_TXDMA0 == uDMAIdx)
-               pTxBufHead->wFIFOCtl |= FIFOCTL_ISDMA0;
-
-       //Set FRAGCTL_MACHDCNT
-       if (pDevice->bLongHeader)
-               cbMacHdLen = WLAN_HDR_ADDR3_LEN + 6;
-       else
-               cbMacHdLen = WLAN_HDR_ADDR3_LEN;
-
-       pTxBufHead->wFragCtl |= cpu_to_le16((unsigned short)(cbMacHdLen << 10));
-
-       //Set packet type
-       if (byPktType == PK_TYPE_11A) //0000 0000 0000 0000
-               ;
-       else if (byPktType == PK_TYPE_11B) //0000 0001 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11B;
-       else if (byPktType == PK_TYPE_11GB) //0000 0010 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11GB;
-       else if (byPktType == PK_TYPE_11GA) //0000 0011 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11GA;
-
-       //Set FIFOCTL_GrpAckPolicy
-       if (pDevice->bGrpAckPolicy == true) //0000 0100 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_GRPACK;
-
-       //Set Auto Fallback Ctl
-       if (pDevice->wCurrentRate >= RATE_18M) {
-               if (pDevice->byAutoFBCtrl == AUTO_FB_0)
-                       pTxBufHead->wFIFOCtl |= FIFOCTL_AUTO_FB_0;
-               else if (pDevice->byAutoFBCtrl == AUTO_FB_1)
-                       pTxBufHead->wFIFOCtl |= FIFOCTL_AUTO_FB_1;
-       }
-
-       //Set FRAGCTL_WEPTYP
-       pDevice->bAES = false;
-
-       //Set FRAGCTL_WEPTYP
-       if (pDevice->byLocalID > REV_ID_VT3253_A1) {
-               if ((bNeedEncrypt) && (pTransmitKey != NULL))  { //WEP enabled
-                       if (pTransmitKey->byCipherSuite == KEY_CTL_TKIP) {
-                               pTxBufHead->wFragCtl |= FRAGCTL_TKIP;
-                       } else if (pTransmitKey->byCipherSuite == KEY_CTL_WEP) { //WEP40 or WEP104
-                               if (pTransmitKey->uKeyLength != WLAN_WEP232_KEYLEN)
-                                       pTxBufHead->wFragCtl |= FRAGCTL_LEGACY;
-                       } else if (pTransmitKey->byCipherSuite == KEY_CTL_CCMP) { //CCMP
-                               pTxBufHead->wFragCtl |= FRAGCTL_AES;
-                       }
-               }
-       }
-
-       RFbSetPower(pDevice, pDevice->wCurrentRate, pDevice->byCurrentCh);
-
-       pTxBufHead->byTxPower = pDevice->byCurPwr;
-
-       *pcbHeaderSize = s_cbFillTxBufHead(pDevice, byPktType, pbyTxBufferAddr, cbPayloadSize,
-                                          uDMAIdx, pHeadTD, psEthHeader, pPacket, bNeedEncrypt,
-                                          pTransmitKey, uNodeIndex, puMACfragNum);
-}
-
-/*+
- *
- * Description:
- *      Translate 802.3 to 802.11 header
- *
- * Parameters:
- *  In:
- *      pDevice         - Pointer to adapter
- *      dwTxBufferAddr  - Transmit Buffer
- *      pPacket         - Packet from upper layer
- *      cbPacketSize    - Transmit Data Length
- *  Out:
- *      pcbHeadSize         - Header size of MAC&Baseband control and 802.11 Header
- *      pcbAppendPayload    - size of append payload for 802.1H translation
- *
- * Return Value: none
- *
- -*/
-
-void
-vGenerateMACHeader(
-       struct vnt_private *pDevice,
-       unsigned char *pbyBufferAddr,
-       __le16 wDuration,
-       PSEthernetHeader psEthHeader,
-       bool bNeedEncrypt,
-       unsigned short wFragType,
-       unsigned int uDMAIdx,
-       unsigned int uFragIdx
-)
-{
-       PS802_11Header  pMACHeader = (PS802_11Header)pbyBufferAddr;
-
-       memset(pMACHeader, 0, (sizeof(S802_11Header)));
-
-       if (uDMAIdx == TYPE_ATIMDMA)
-               pMACHeader->wFrameCtl = TYPE_802_11_ATIM;
-       else
-               pMACHeader->wFrameCtl = TYPE_802_11_DATA;
-
-       if (pDevice->op_mode == NL80211_IFTYPE_AP) {
-               ether_addr_copy(&(pMACHeader->abyAddr1[0]),
-                               &(psEthHeader->abyDstAddr[0]));
-               ether_addr_copy(&(pMACHeader->abyAddr2[0]),
-                               &(pDevice->abyBSSID[0]));
-               ether_addr_copy(&(pMACHeader->abyAddr3[0]),
-                               &(psEthHeader->abySrcAddr[0]));
-               pMACHeader->wFrameCtl |= FC_FROMDS;
-       } else {
-               if (pDevice->op_mode == NL80211_IFTYPE_ADHOC) {
-                       ether_addr_copy(&(pMACHeader->abyAddr1[0]),
-                                       &(psEthHeader->abyDstAddr[0]));
-                       ether_addr_copy(&(pMACHeader->abyAddr2[0]),
-                                       &(psEthHeader->abySrcAddr[0]));
-                       ether_addr_copy(&(pMACHeader->abyAddr3[0]),
-                                       &(pDevice->abyBSSID[0]));
-               } else {
-                       ether_addr_copy(&(pMACHeader->abyAddr3[0]),
-                                       &(psEthHeader->abyDstAddr[0]));
-                       ether_addr_copy(&(pMACHeader->abyAddr2[0]),
-                                       &(psEthHeader->abySrcAddr[0]));
-                       ether_addr_copy(&(pMACHeader->abyAddr1[0]),
-                                       &(pDevice->abyBSSID[0]));
-                       pMACHeader->wFrameCtl |= FC_TODS;
-               }
-       }
-
-       if (bNeedEncrypt)
-               pMACHeader->wFrameCtl |= cpu_to_le16((unsigned short)WLAN_SET_FC_ISWEP(1));
-
-       pMACHeader->wDurationID = le16_to_cpu(wDuration);
-
-       if (pDevice->bLongHeader) {
-               PWLAN_80211HDR_A4 pMACA4Header  = (PWLAN_80211HDR_A4) pbyBufferAddr;
-
-               pMACHeader->wFrameCtl |= (FC_TODS | FC_FROMDS);
-               memcpy(pMACA4Header->abyAddr4, pDevice->abyBSSID, WLAN_ADDR_LEN);
-       }
-       pMACHeader->wSeqCtl = cpu_to_le16(pDevice->wSeqCounter << 4);
-
-       //Set FragNumber in Sequence Control
-       pMACHeader->wSeqCtl |= cpu_to_le16((unsigned short)uFragIdx);
-
-       if ((wFragType == FRAGCTL_ENDFRAG) || (wFragType == FRAGCTL_NONFRAG)) {
-               pDevice->wSeqCounter++;
-               if (pDevice->wSeqCounter > 0x0fff)
-                       pDevice->wSeqCounter = 0;
-       }
-
-       if ((wFragType == FRAGCTL_STAFRAG) || (wFragType == FRAGCTL_MIDFRAG)) //StartFrag or MidFrag
-               pMACHeader->wFrameCtl |= FC_MOREFRAG;
-}
-
-CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, PSTxMgmtPacket pPacket)
-{
-       PSTxDesc        pFrstTD;
-       unsigned char byPktType;
-       unsigned char *pbyTxBufferAddr;
-       void *pvRTS;
-       struct vnt_cts *pCTS;
-       void *pvTxDataHd;
-       unsigned int uDuration;
-       unsigned int cbReqCount;
-       PS802_11Header  pMACHeader;
-       unsigned int cbHeaderSize;
-       unsigned int cbFrameBodySize;
-       bool bNeedACK;
-       bool bIsPSPOLL = false;
-       PSTxBufHead     pTxBufHead;
-       unsigned int cbFrameSize;
-       unsigned int cbIVlen = 0;
-       unsigned int cbICVlen = 0;
-       unsigned int cbMIClen = 0;
-       unsigned int cbFCSlen = 4;
-       unsigned int uPadding = 0;
-       unsigned short wTxBufSize;
-       unsigned int cbMacHdLen;
-       SEthernetHeader sEthHeader;
-       void *pvRrvTime;
-       void *pMICHDR;
-       PSMgmtObject    pMgmt = pDevice->pMgmt;
-       unsigned short wCurrentRate = RATE_1M;
-
-       if (AVAIL_TD(pDevice, TYPE_TXDMA0) <= 0)
-               return CMD_STATUS_RESOURCES;
-
-       pFrstTD = pDevice->apCurrTD[TYPE_TXDMA0];
-       pbyTxBufferAddr = (unsigned char *)pFrstTD->pTDInfo->buf;
-       cbFrameBodySize = pPacket->cbPayloadLen;
-       pTxBufHead = (PSTxBufHead) pbyTxBufferAddr;
-       wTxBufSize = sizeof(STxBufHead);
-       memset(pTxBufHead, 0, wTxBufSize);
-
-       if (pDevice->eCurrentPHYType == PHY_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 (pDevice->pMgmt->eScanState != WMAC_NO_SCANNING)
-               RFbSetPower(pDevice, wCurrentRate, pDevice->byCurrentCh);
-       else
-               RFbSetPower(pDevice, wCurrentRate, pMgmt->uCurrChannel);
-
-       pTxBufHead->byTxPower = pDevice->byCurPwr;
-       //+++++++++++++++++++++ Patch VT3253 A1 performance +++++++++++++++++++++++++++
-       if (pDevice->byFOETuning) {
-               if ((pPacket->p80211Header->sA3.wFrameCtl & TYPE_DATE_NULL) == TYPE_DATE_NULL) {
-                       wCurrentRate = RATE_24M;
-                       byPktType = PK_TYPE_11GA;
-               }
-       }
-
-       //Set packet type
-       if (byPktType == PK_TYPE_11A) {//0000 0000 0000 0000
-               pTxBufHead->wFIFOCtl = 0;
-       } else if (byPktType == PK_TYPE_11B) {//0000 0001 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11B;
-       } else if (byPktType == PK_TYPE_11GB) {//0000 0010 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11GB;
-       } else if (byPktType == PK_TYPE_11GA) {//0000 0011 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11GA;
-       }
-
-       pTxBufHead->wFIFOCtl |= FIFOCTL_TMOEN;
-       pTxBufHead->wTimeStamp = cpu_to_le16(DEFAULT_MGN_LIFETIME_RES_64us);
-
-       if (is_multicast_ether_addr(&(pPacket->p80211Header->sA3.abyAddr1[0])))
-               bNeedACK = false;
-       else {
-               bNeedACK = true;
-               pTxBufHead->wFIFOCtl |= FIFOCTL_NEEDACK;
-       }
-
-       if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) ||
-           (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA)) {
-               pTxBufHead->wFIFOCtl |= FIFOCTL_LRETRY;
-       }
-
-       pTxBufHead->wFIFOCtl |= (FIFOCTL_GENINT | FIFOCTL_ISDMA0);
-
-       if ((pPacket->p80211Header->sA4.wFrameCtl & TYPE_SUBTYPE_MASK) == TYPE_CTL_PSPOLL) {
-               bIsPSPOLL = true;
-               cbMacHdLen = WLAN_HDR_ADDR2_LEN;
-       } else {
-               cbMacHdLen = WLAN_HDR_ADDR3_LEN;
-       }
-
-       //Set FRAGCTL_MACHDCNT
-       pTxBufHead->wFragCtl |= cpu_to_le16((unsigned short)(cbMacHdLen << 10));
-
-       // Notes:
-       // Although spec says MMPDU can be fragmented; In most cases,
-       // no one will send a MMPDU under fragmentation. With RTS may occur.
-       pDevice->bAES = false;  //Set FRAGCTL_WEPTYP
-
-       if (WLAN_GET_FC_ISWEP(pPacket->p80211Header->sA4.wFrameCtl) != 0) {
-               if (pDevice->eEncryptionStatus == Ndis802_11Encryption1Enabled) {
-                       cbIVlen = 4;
-                       cbICVlen = 4;
-                       pTxBufHead->wFragCtl |= FRAGCTL_LEGACY;
-               } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) {
-                       cbIVlen = 8;//IV+ExtIV
-                       cbMIClen = 8;
-                       cbICVlen = 4;
-                       pTxBufHead->wFragCtl |= FRAGCTL_TKIP;
-                       //We need to get seed here for filling TxKey entry.
-               } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) {
-                       cbIVlen = 8;//RSN Header
-                       cbICVlen = 8;//MIC
-                       pTxBufHead->wFragCtl |= FRAGCTL_AES;
-                       pDevice->bAES = true;
-               }
-               //MAC Header should be padding 0 to DW alignment.
-               uPadding = 4 - (cbMacHdLen%4);
-               uPadding %= 4;
-       }
-
-       cbFrameSize = cbMacHdLen + cbFrameBodySize + cbIVlen + cbMIClen + cbICVlen + cbFCSlen;
-
-       //Set FIFOCTL_GrpAckPolicy
-       if (pDevice->bGrpAckPolicy == true) //0000 0100 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_GRPACK;
-
-       //the rest of pTxBufHead->wFragCtl:FragTyp will be set later in s_vFillFragParameter()
-
-       //Set RrvTime/RTS/CTS Buffer
-       if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet
-               pvRrvTime = (void *) (pbyTxBufferAddr + wTxBufSize);
-               pMICHDR = NULL;
-               pvRTS = NULL;
-               pCTS = (struct vnt_cts *)(pbyTxBufferAddr + wTxBufSize +
-                                       sizeof(struct vnt_rrv_time_cts));
-               pvTxDataHd = (void *)(pbyTxBufferAddr + wTxBufSize +
-                               sizeof(struct vnt_rrv_time_cts) + sizeof(struct vnt_cts));
-               cbHeaderSize = wTxBufSize + sizeof(struct vnt_rrv_time_cts) +
-                               sizeof(struct vnt_cts) + sizeof(struct vnt_tx_datahead_g);
-       } else { // 802.11a/b packet
-               pvRrvTime = (void *)(pbyTxBufferAddr + wTxBufSize);
-               pMICHDR = NULL;
-               pvRTS = NULL;
-               pCTS = NULL;
-               pvTxDataHd = (void *)(pbyTxBufferAddr + wTxBufSize +
-                       sizeof(struct vnt_rrv_time_ab));
-               cbHeaderSize = wTxBufSize + sizeof(struct vnt_rrv_time_ab) +
-                       sizeof(struct vnt_tx_datahead_ab);
-       }
-
-       memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize));
-
-       ether_addr_copy(&(sEthHeader.abyDstAddr[0]),
-                       &(pPacket->p80211Header->sA3.abyAddr1[0]));
-       ether_addr_copy(&(sEthHeader.abySrcAddr[0]),
-                       &(pPacket->p80211Header->sA3.abyAddr2[0]));
-       //=========================
-       //    No Fragmentation
-       //=========================
-       pTxBufHead->wFragCtl |= (unsigned short)FRAGCTL_NONFRAG;
-
-       //Fill FIFO,RrvTime,RTS,and CTS
-       s_vGenerateTxParameter(pDevice, byPktType, pbyTxBufferAddr, pvRrvTime, pvRTS, pCTS,
-                              cbFrameSize, bNeedACK, TYPE_TXDMA0, &sEthHeader, wCurrentRate);
-
-       //Fill DataHead
-       uDuration = s_uFillDataHead(pDevice, byPktType, pvTxDataHd, cbFrameSize, TYPE_TXDMA0, bNeedACK,
-                                   0, 0, 1, AUTO_FB_NONE, wCurrentRate, false);
-
-       pMACHeader = (PS802_11Header) (pbyTxBufferAddr + cbHeaderSize);
-
-       cbReqCount = cbHeaderSize + cbMacHdLen + uPadding + cbIVlen + cbFrameBodySize;
-
-       if (WLAN_GET_FC_ISWEP(pPacket->p80211Header->sA4.wFrameCtl) != 0) {
-               unsigned char *pbyIVHead;
-               unsigned char *pbyPayloadHead;
-               unsigned char *pbyBSSID;
-               PSKeyItem       pTransmitKey = NULL;
-
-               pbyIVHead = (unsigned char *)(pbyTxBufferAddr + cbHeaderSize + cbMacHdLen + uPadding);
-               pbyPayloadHead = (unsigned char *)(pbyTxBufferAddr + cbHeaderSize + cbMacHdLen + uPadding + cbIVlen);
-
-               //Fill TXKEY
-               //Kyle: Need fix: TKIP and AES did't encrypt Mnt Packet.
-               //s_vFillTxKey(pDevice, (unsigned char *)pTxBufHead->adwTxKey, NULL);
-
-               //Fill IV(ExtIV,RSNHDR)
-               //s_vFillPrePayload(pDevice, pbyIVHead, NULL);
-               //---------------------------
-               // S/W or H/W Encryption
-               //---------------------------
-               do {
-                       if ((pDevice->op_mode == NL80211_IFTYPE_STATION) &&
-                           (pDevice->bLinkPass == true)) {
-                               pbyBSSID = pDevice->abyBSSID;
-                               // get pairwise key
-                               if (KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, PAIRWISE_KEY, &pTransmitKey) == false) {
-                                       // get group key
-                                       if (KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, GROUP_KEY, &pTransmitKey) == true) {
-                                               pr_debug("Get GTK\n");
-                                               break;
-                                       }
-                               } else {
-                                       pr_debug("Get PTK\n");
-                                       break;
-                               }
-                       }
-                       // get group key
-                       pbyBSSID = pDevice->abyBroadcastAddr;
-                       if (KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, GROUP_KEY, &pTransmitKey) == false) {
-                               pTransmitKey = NULL;
-                               pr_debug("KEY is NULL. OP Mode[%d]\n",
-                                        pDevice->op_mode);
-                       } else {
-                               pr_debug("Get GTK\n");
-                       }
-               } while (false);
-               //Fill TXKEY
-               s_vFillTxKey(pDevice, (unsigned char *)(pTxBufHead->adwTxKey), pbyIVHead, pTransmitKey,
-                            (unsigned char *)pMACHeader, (unsigned short)cbFrameBodySize, NULL);
-
-               memcpy(pMACHeader, pPacket->p80211Header, cbMacHdLen);
-               memcpy(pbyPayloadHead, ((unsigned char *)(pPacket->p80211Header) + cbMacHdLen),
-                      cbFrameBodySize);
-       } else {
-               // Copy the Packet into a tx Buffer
-               memcpy(pMACHeader, pPacket->p80211Header, pPacket->cbMPDULen);
-       }
-
-       pMACHeader->wSeqCtl = cpu_to_le16(pDevice->wSeqCounter << 4);
-       pDevice->wSeqCounter++;
-       if (pDevice->wSeqCounter > 0x0fff)
-               pDevice->wSeqCounter = 0;
-
-       if (bIsPSPOLL) {
-               // The MAC will automatically replace the Duration-field of MAC header by Duration-field
-               // of  FIFO control header.
-               // This will cause AID-field of PS-POLL packet to be incorrect (Because PS-POLL's AID field is
-               // in the same place of other packet's Duration-field).
-               // And it will cause Cisco-AP to issue Disassociation-packet
-               if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
-                       ((struct vnt_tx_datahead_g *)pvTxDataHd)->duration_a = cpu_to_le16(pPacket->p80211Header->sA2.wDurationID);
-                       ((struct vnt_tx_datahead_g *)pvTxDataHd)->duration_b = cpu_to_le16(pPacket->p80211Header->sA2.wDurationID);
-               } else {
-                       ((struct vnt_tx_datahead_ab *)pvTxDataHd)->duration = cpu_to_le16(pPacket->p80211Header->sA2.wDurationID);
-               }
-       }
-
-       // first TD is the only TD
-       //Set TSR1 & ReqCount in TxDescHead
-       pFrstTD->m_td1TD1.byTCR = (TCR_STP | TCR_EDP | EDMSDU);
-       pFrstTD->pTDInfo->skb_dma = pFrstTD->pTDInfo->buf_dma;
-       pFrstTD->m_td1TD1.wReqCount = cpu_to_le16((unsigned short)(cbReqCount));
-       pFrstTD->buff_addr = cpu_to_le32(pFrstTD->pTDInfo->skb_dma);
-       pFrstTD->pTDInfo->byFlags = 0;
-
-       if (MACbIsRegBitsOn(pDevice->PortOffset, MAC_REG_PSCTL, PSCTL_PS)) {
-               // Disable PS
-               MACbPSWakeup(pDevice->PortOffset);
-       }
-       pDevice->bPWBitOn = false;
-
-       wmb();
-       pFrstTD->m_td0TD0.f1Owner = OWNED_BY_NIC;
-       wmb();
-
-       pDevice->iTDUsed[TYPE_TXDMA0]++;
-
-       if (AVAIL_TD(pDevice, TYPE_TXDMA0) <= 1)
-               pr_debug(" available td0 <= 1\n");
-
-       pDevice->apCurrTD[TYPE_TXDMA0] = pFrstTD->next;
-
-       pDevice->nTxDataTimeCout = 0; //2008-8-21 chester <add> for send null packet
-
-       // Poll Transmit the adapter
-       MACvTransmit0(pDevice->PortOffset);
-
-       return CMD_STATUS_PENDING;
-}
-
-CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice, PSTxMgmtPacket pPacket)
-{
-       unsigned char byPktType;
-       unsigned char *pbyBuffer = (unsigned char *)pDevice->tx_beacon_bufs;
-       unsigned int cbFrameSize = pPacket->cbMPDULen + WLAN_FCS_LEN;
-       unsigned int cbHeaderSize = 0;
-       struct vnt_tx_short_buf_head *short_head =
-                               (struct vnt_tx_short_buf_head *)pbyBuffer;
-       PS802_11Header   pMACHeader;
-       unsigned short wCurrentRate;
-
-       memset(short_head, 0, sizeof(*short_head));
-
-       if (pDevice->eCurrentPHYType == PHY_TYPE_11A) {
-               wCurrentRate = RATE_6M;
-               byPktType = PK_TYPE_11A;
-       } else {
-               wCurrentRate = RATE_2M;
-               byPktType = PK_TYPE_11B;
-       }
-
-       //Set Preamble type always long
-       pDevice->byPreambleType = PREAMBLE_LONG;
-
-       /* Set FIFOCTL_GENINT */
-       short_head->fifo_ctl |= cpu_to_le16(FIFOCTL_GENINT);
-
-       /* Set packet type & Get Duration */
-       if (byPktType == PK_TYPE_11A) {//0000 0000 0000 0000
-               short_head->duration =
-                       cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A,
-                                   cbFrameSize, byPktType, wCurrentRate, false,
-                                   0, 0, 1, AUTO_FB_NONE));
-       } else if (byPktType == PK_TYPE_11B) {//0000 0001 0000 0000
-               short_head->fifo_ctl |= cpu_to_le16(FIFOCTL_11B);
-
-               short_head->duration =
-                       cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_B,
-                                   cbFrameSize, byPktType, wCurrentRate, false,
-                                   0, 0, 1, AUTO_FB_NONE));
-       }
-
-       vnt_get_phy_field(pDevice, cbFrameSize,
-                         wCurrentRate, byPktType, &short_head->ab);
-
-       /* Get TimeStampOff */
-       short_head->time_stamp_off = vnt_time_stamp_off(pDevice, wCurrentRate);
-       cbHeaderSize = sizeof(struct vnt_tx_short_buf_head);
-
-       //Generate Beacon Header
-       pMACHeader = (PS802_11Header)(pbyBuffer + cbHeaderSize);
-       memcpy(pMACHeader, pPacket->p80211Header, pPacket->cbMPDULen);
-
-       pMACHeader->wDurationID = 0;
-       pMACHeader->wSeqCtl = cpu_to_le16(pDevice->wSeqCounter << 4);
-       pDevice->wSeqCounter++;
-       if (pDevice->wSeqCounter > 0x0fff)
-               pDevice->wSeqCounter = 0;
-
-       // Set Beacon buffer length
-       pDevice->wBCNBufLen = pPacket->cbMPDULen + cbHeaderSize;
-
-       MACvSetCurrBCNTxDescAddr(pDevice->PortOffset, (pDevice->tx_beacon_dma));
-
-       MACvSetCurrBCNLength(pDevice->PortOffset, pDevice->wBCNBufLen);
-       // Set auto Transmit on
-       MACvRegBitsOn(pDevice->PortOffset, MAC_REG_TCR, TCR_AUTOBCNTX);
-       // Poll Transmit the adapter
-       MACvTransmitBCN(pDevice->PortOffset);
-
-       return CMD_STATUS_PENDING;
-}
-
-unsigned int
-cbGetFragCount(
-       struct vnt_private *pDevice,
-       PSKeyItem        pTransmitKey,
-       unsigned int cbFrameBodySize,
-       PSEthernetHeader psEthHeader
-)
-{
-       unsigned int cbMACHdLen;
-       unsigned int cbFrameSize;
-       unsigned int cbFragmentSize; //Hdr+(IV)+payoad+(MIC)+(ICV)+FCS
-       unsigned int cbFragPayloadSize;
-       unsigned int cbLastFragPayloadSize;
-       unsigned int cbIVlen = 0;
-       unsigned int cbICVlen = 0;
-       unsigned int cbMIClen = 0;
-       unsigned int cbFCSlen = 4;
-       unsigned int uMACfragNum = 1;
-       bool bNeedACK;
-
-       if ((pDevice->op_mode == NL80211_IFTYPE_ADHOC) ||
-           (pDevice->op_mode == NL80211_IFTYPE_AP)) {
-               if (is_multicast_ether_addr(&(psEthHeader->abyDstAddr[0])))
-                       bNeedACK = false;
-               else
-                       bNeedACK = true;
-       } else {
-               // MSDUs in Infra mode always need ACK
-               bNeedACK = true;
-       }
-
-       if (pDevice->bLongHeader)
-               cbMACHdLen = WLAN_HDR_ADDR3_LEN + 6;
-       else
-               cbMACHdLen = WLAN_HDR_ADDR3_LEN;
-
-       if (pDevice->bEncryptionEnable == true) {
-               if (pTransmitKey == NULL) {
-                       if ((pDevice->eEncryptionStatus == Ndis802_11Encryption1Enabled) ||
-                           (pDevice->pMgmt->eAuthenMode < WMAC_AUTH_WPA)) {
-                               cbIVlen = 4;
-                               cbICVlen = 4;
-                       } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) {
-                               cbIVlen = 8;//IV+ExtIV
-                               cbMIClen = 8;
-                               cbICVlen = 4;
-                       } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) {
-                               cbIVlen = 8;//RSN Header
-                               cbICVlen = 8;//MIC
-                       }
-               } else if (pTransmitKey->byCipherSuite == KEY_CTL_WEP) {
-                       cbIVlen = 4;
-                       cbICVlen = 4;
-               } else if (pTransmitKey->byCipherSuite == KEY_CTL_TKIP) {
-                       cbIVlen = 8;//IV+ExtIV
-                       cbMIClen = 8;
-                       cbICVlen = 4;
-               } else if (pTransmitKey->byCipherSuite == KEY_CTL_CCMP) {
-                       cbIVlen = 8;//RSN Header
-                       cbICVlen = 8;//MIC
-               }
-       }
-
-       cbFrameSize = cbMACHdLen + cbIVlen + (cbFrameBodySize + cbMIClen) + cbICVlen + cbFCSlen;
-
-       if ((cbFrameSize > pDevice->wFragmentationThreshold) && (bNeedACK == true)) {
-               // Fragmentation
-               cbFragmentSize = pDevice->wFragmentationThreshold;
-               cbFragPayloadSize = cbFragmentSize - cbMACHdLen - cbIVlen - cbICVlen - cbFCSlen;
-               uMACfragNum = (unsigned short) ((cbFrameBodySize + cbMIClen) / cbFragPayloadSize);
-               cbLastFragPayloadSize = (cbFrameBodySize + cbMIClen) % cbFragPayloadSize;
-               if (cbLastFragPayloadSize == 0)
-                       cbLastFragPayloadSize = cbFragPayloadSize;
-               else
-                       uMACfragNum++;
-       }
-       return uMACfragNum;
-}
-
-void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb,
-                   unsigned char *pbMPDU, unsigned int cbMPDULen)
-{
-       PSTxDesc        pFrstTD;
-       unsigned char byPktType;
-       unsigned char *pbyTxBufferAddr;
-       void *pvRTS;
-       void *pvCTS;
-       void *pvTxDataHd;
-       unsigned int uDuration;
-       unsigned int cbReqCount;
-       PS802_11Header  pMACHeader;
-       unsigned int cbHeaderSize;
-       unsigned int cbFrameBodySize;
-       bool bNeedACK;
-       bool bIsPSPOLL = false;
-       PSTxBufHead     pTxBufHead;
-       unsigned int cbFrameSize;
-       unsigned int cbIVlen = 0;
-       unsigned int cbICVlen = 0;
-       unsigned int cbMIClen = 0;
-       unsigned int cbFCSlen = 4;
-       unsigned int uPadding = 0;
-       unsigned int cbMICHDR = 0;
-       unsigned int uLength = 0;
-       u32 dwMICKey0, dwMICKey1;
-       u32 dwMIC_Priority;
-       u32 *pdwMIC_L;
-       u32 *pdwMIC_R;
-       unsigned short wTxBufSize;
-       unsigned int cbMacHdLen;
-       SEthernetHeader sEthHeader;
-       void *pvRrvTime;
-       void *pMICHDR;
-       PSMgmtObject    pMgmt = pDevice->pMgmt;
-       unsigned short wCurrentRate = RATE_1M;
-       PUWLAN_80211HDR  p80211Header;
-       unsigned int uNodeIndex = 0;
-       bool bNodeExist = false;
-       SKeyItem        STempKey;
-       PSKeyItem       pTransmitKey = NULL;
-       unsigned char *pbyIVHead;
-       unsigned char *pbyPayloadHead;
-       unsigned char *pbyMacHdr;
-
-       unsigned int cbExtSuppRate = 0;
-
-       pvRrvTime = pMICHDR = pvRTS = pvCTS = pvTxDataHd = NULL;
-
-       if (cbMPDULen <= WLAN_HDR_ADDR3_LEN)
-               cbFrameBodySize = 0;
-       else
-               cbFrameBodySize = cbMPDULen - WLAN_HDR_ADDR3_LEN;
-
-       p80211Header = (PUWLAN_80211HDR)pbMPDU;
-
-       pFrstTD = pDevice->apCurrTD[TYPE_TXDMA0];
-       pbyTxBufferAddr = (unsigned char *)pFrstTD->pTDInfo->buf;
-       pTxBufHead = (PSTxBufHead) pbyTxBufferAddr;
-       wTxBufSize = sizeof(STxBufHead);
-       memset(pTxBufHead, 0, wTxBufSize);
-
-       if (pDevice->eCurrentPHYType == PHY_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 to finish before scanning so it's OK
-       //                    to set power here.
-       if (pDevice->pMgmt->eScanState != WMAC_NO_SCANNING)
-               RFbSetPower(pDevice, wCurrentRate, pDevice->byCurrentCh);
-       else
-               RFbSetPower(pDevice, wCurrentRate, pMgmt->uCurrChannel);
-
-       pTxBufHead->byTxPower = pDevice->byCurPwr;
-
-       //+++++++++++++++++++++ Patch VT3253 A1 performance +++++++++++++++++++++++++++
-       if (pDevice->byFOETuning) {
-               if ((p80211Header->sA3.wFrameCtl & TYPE_DATE_NULL) == TYPE_DATE_NULL) {
-                       wCurrentRate = RATE_24M;
-                       byPktType = PK_TYPE_11GA;
-               }
-       }
-
-       pr_debug("vDMA0_tx_80211: p80211Header->sA3.wFrameCtl = %x\n",
-                p80211Header->sA3.wFrameCtl);
-
-       //Set packet type
-       if (byPktType == PK_TYPE_11A) {//0000 0000 0000 0000
-               pTxBufHead->wFIFOCtl = 0;
-       } else if (byPktType == PK_TYPE_11B) {//0000 0001 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11B;
-       } else if (byPktType == PK_TYPE_11GB) {//0000 0010 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11GB;
-       } else if (byPktType == PK_TYPE_11GA) {//0000 0011 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_11GA;
-       }
-
-       pTxBufHead->wFIFOCtl |= FIFOCTL_TMOEN;
-       pTxBufHead->wTimeStamp = cpu_to_le16(DEFAULT_MGN_LIFETIME_RES_64us);
-
-       if (is_multicast_ether_addr(&(p80211Header->sA3.abyAddr1[0]))) {
-               bNeedACK = false;
-               if (pDevice->bEnableHostWEP) {
-                       uNodeIndex = 0;
-                       bNodeExist = true;
-               }
-       } else {
-               if (pDevice->bEnableHostWEP) {
-                       if (BSSDBbIsSTAInNodeDB(pDevice->pMgmt, (unsigned char *)(p80211Header->sA3.abyAddr1), &uNodeIndex))
-                               bNodeExist = true;
-               }
-               bNeedACK = true;
-               pTxBufHead->wFIFOCtl |= FIFOCTL_NEEDACK;
-       }
-
-       if ((pMgmt->eCurrMode == WMAC_MODE_ESS_AP) ||
-           (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA)) {
-               pTxBufHead->wFIFOCtl |= FIFOCTL_LRETRY;
-       }
-
-       pTxBufHead->wFIFOCtl |= (FIFOCTL_GENINT | FIFOCTL_ISDMA0);
-
-       if ((p80211Header->sA4.wFrameCtl & TYPE_SUBTYPE_MASK) == TYPE_CTL_PSPOLL) {
-               bIsPSPOLL = true;
-               cbMacHdLen = WLAN_HDR_ADDR2_LEN;
-       } else {
-               cbMacHdLen = WLAN_HDR_ADDR3_LEN;
-       }
-
-       // hostapd deamon ext support rate patch
-       if (WLAN_GET_FC_FSTYPE(p80211Header->sA4.wFrameCtl) == WLAN_FSTYPE_ASSOCRESP) {
-               if (((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates)->len != 0)
-                       cbExtSuppRate += ((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates)->len + WLAN_IEHDR_LEN;
-
-               if (((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates)->len != 0)
-                       cbExtSuppRate += ((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates)->len + WLAN_IEHDR_LEN;
-
-               if (cbExtSuppRate > 0)
-                       cbFrameBodySize = WLAN_ASSOCRESP_OFF_SUPP_RATES;
-       }
-
-       //Set FRAGCTL_MACHDCNT
-       pTxBufHead->wFragCtl |= cpu_to_le16((unsigned short)cbMacHdLen << 10);
-
-       // Notes:
-       // Although spec says MMPDU can be fragmented; In most cases,
-       // no one will send a MMPDU under fragmentation. With RTS may occur.
-       pDevice->bAES = false;  //Set FRAGCTL_WEPTYP
-
-       if (WLAN_GET_FC_ISWEP(p80211Header->sA4.wFrameCtl) != 0) {
-               if (pDevice->eEncryptionStatus == Ndis802_11Encryption1Enabled) {
-                       cbIVlen = 4;
-                       cbICVlen = 4;
-                       pTxBufHead->wFragCtl |= FRAGCTL_LEGACY;
-               } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption2Enabled) {
-                       cbIVlen = 8;//IV+ExtIV
-                       cbMIClen = 8;
-                       cbICVlen = 4;
-                       pTxBufHead->wFragCtl |= FRAGCTL_TKIP;
-                       //We need to get seed here for filling TxKey entry.
-               } else if (pDevice->eEncryptionStatus == Ndis802_11Encryption3Enabled) {
-                       cbIVlen = 8;//RSN Header
-                       cbICVlen = 8;//MIC
-                       cbMICHDR = sizeof(struct vnt_mic_hdr);
-                       pTxBufHead->wFragCtl |= FRAGCTL_AES;
-                       pDevice->bAES = true;
-               }
-               //MAC Header should be padding 0 to DW alignment.
-               uPadding = 4 - (cbMacHdLen%4);
-               uPadding %= 4;
-       }
-
-       cbFrameSize = cbMacHdLen + cbFrameBodySize + cbIVlen + cbMIClen + cbICVlen + cbFCSlen + cbExtSuppRate;
-
-       //Set FIFOCTL_GrpAckPolicy
-       if (pDevice->bGrpAckPolicy == true) //0000 0100 0000 0000
-               pTxBufHead->wFIFOCtl |= FIFOCTL_GRPACK;
-
-       //the rest of pTxBufHead->wFragCtl:FragTyp will be set later in s_vFillFragParameter()
-
-       if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet
-
-               pvRrvTime = (void *)(pbyTxBufferAddr + wTxBufSize);
-               pMICHDR = (struct vnt_mic_hdr *)(pbyTxBufferAddr + wTxBufSize +
-                                       sizeof(struct vnt_rrv_time_cts));
-               pvRTS = NULL;
-               pvCTS = (struct vnt_cts *)(pbyTxBufferAddr + wTxBufSize +
-                               sizeof(struct vnt_rrv_time_cts) + cbMICHDR);
-               pvTxDataHd = (void *)(pbyTxBufferAddr + wTxBufSize +
-                       sizeof(struct vnt_rrv_time_cts) + cbMICHDR + sizeof(struct vnt_cts));
-               cbHeaderSize = wTxBufSize + sizeof(struct vnt_rrv_time_cts) +
-                               cbMICHDR + sizeof(struct vnt_cts) + sizeof(struct vnt_tx_datahead_g);
-
-       } else {//802.11a/b packet
-
-               pvRrvTime = (void *)(pbyTxBufferAddr + wTxBufSize);
-               pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr +
-                               wTxBufSize + sizeof(struct vnt_rrv_time_ab));
-               pvRTS = NULL;
-               pvCTS = NULL;
-               pvTxDataHd = (void *)(pbyTxBufferAddr +
-                       wTxBufSize + sizeof(struct vnt_rrv_time_ab) + cbMICHDR);
-               cbHeaderSize = wTxBufSize + sizeof(struct vnt_rrv_time_ab) +
-                               cbMICHDR + sizeof(struct vnt_tx_datahead_ab);
-
-       }
-
-       memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize));
-       ether_addr_copy(&(sEthHeader.abyDstAddr[0]),
-                       &(p80211Header->sA3.abyAddr1[0]));
-       ether_addr_copy(&(sEthHeader.abySrcAddr[0]),
-                       &(p80211Header->sA3.abyAddr2[0]));
-       //=========================
-       //    No Fragmentation
-       //=========================
-       pTxBufHead->wFragCtl |= (unsigned short)FRAGCTL_NONFRAG;
-
-       //Fill FIFO,RrvTime,RTS,and CTS
-       s_vGenerateTxParameter(pDevice, byPktType, pbyTxBufferAddr, pvRrvTime, pvRTS, pvCTS,
-                              cbFrameSize, bNeedACK, TYPE_TXDMA0, &sEthHeader, wCurrentRate);
-
-       //Fill DataHead
-       uDuration = s_uFillDataHead(pDevice, byPktType, pvTxDataHd, cbFrameSize, TYPE_TXDMA0, bNeedACK,
-                                   0, 0, 1, AUTO_FB_NONE, wCurrentRate, false);
-
-       pMACHeader = (PS802_11Header) (pbyTxBufferAddr + cbHeaderSize);
-
-       cbReqCount = cbHeaderSize + cbMacHdLen + uPadding + cbIVlen + (cbFrameBodySize + cbMIClen) + cbExtSuppRate;
-
-       pbyMacHdr = (unsigned char *)(pbyTxBufferAddr + cbHeaderSize);
-       pbyPayloadHead = (unsigned char *)(pbyMacHdr + cbMacHdLen + uPadding + cbIVlen);
-       pbyIVHead = (unsigned char *)(pbyMacHdr + cbMacHdLen + uPadding);
-
-       // Copy the Packet into a tx Buffer
-       memcpy(pbyMacHdr, pbMPDU, cbMacHdLen);
-
-       // version set to 0, patch for hostapd deamon
-       pMACHeader->wFrameCtl &= cpu_to_le16(0xfffc);
-       memcpy(pbyPayloadHead, (pbMPDU + cbMacHdLen), cbFrameBodySize);
-
-       // replace support rate, patch for hostapd deamon(only support 11M)
-       if (WLAN_GET_FC_FSTYPE(p80211Header->sA4.wFrameCtl) == WLAN_FSTYPE_ASSOCRESP) {
-               if (cbExtSuppRate != 0) {
-                       if (((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates)->len != 0)
-                               memcpy((pbyPayloadHead + cbFrameBodySize),
-                                      pMgmt->abyCurrSuppRates,
-                                      ((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates)->len + WLAN_IEHDR_LEN
-);
-                       if (((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates)->len != 0)
-                               memcpy((pbyPayloadHead + cbFrameBodySize) + ((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates)->len + WLAN_IEHDR_LEN,
-                                      pMgmt->abyCurrExtSuppRates,
-                                      ((PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates)->len + WLAN_IEHDR_LEN
-);
-               }
-       }
-
-       // Set wep
-       if (WLAN_GET_FC_ISWEP(p80211Header->sA4.wFrameCtl) != 0) {
-               if (pDevice->bEnableHostWEP) {
-                       pTransmitKey = &STempKey;
-                       pTransmitKey->byCipherSuite = pMgmt->sNodeDBTable[uNodeIndex].byCipherSuite;
-                       pTransmitKey->dwKeyIndex = pMgmt->sNodeDBTable[uNodeIndex].dwKeyIndex;
-                       pTransmitKey->uKeyLength = pMgmt->sNodeDBTable[uNodeIndex].uWepKeyLength;
-                       pTransmitKey->dwTSC47_16 = pMgmt->sNodeDBTable[uNodeIndex].dwTSC47_16;
-                       pTransmitKey->wTSC15_0 = pMgmt->sNodeDBTable[uNodeIndex].wTSC15_0;
-                       memcpy(pTransmitKey->abyKey,
-                              &pMgmt->sNodeDBTable[uNodeIndex].abyWepKey[0],
-                              pTransmitKey->uKeyLength
-);
-               }
-
-               if ((pTransmitKey != NULL) && (pTransmitKey->byCipherSuite == KEY_CTL_TKIP)) {
-                       dwMICKey0 = *(u32 *)(&pTransmitKey->abyKey[16]);
-                       dwMICKey1 = *(u32 *)(&pTransmitKey->abyKey[20]);
-
-                       // DO Software Michael
-                       MIC_vInit(dwMICKey0, dwMICKey1);
-                       MIC_vAppend((unsigned char *)&(sEthHeader.abyDstAddr[0]), 12);
-                       dwMIC_Priority = 0;
-                       MIC_vAppend((unsigned char *)&dwMIC_Priority, 4);
-                       pr_debug("DMA0_tx_8021:MIC KEY: %X, %X\n",
-                                dwMICKey0, dwMICKey1);
-
-                       uLength = cbHeaderSize + cbMacHdLen + uPadding + cbIVlen;
-
-                       MIC_vAppend((pbyTxBufferAddr + uLength), cbFrameBodySize);
-
-                       pdwMIC_L = (u32 *)(pbyTxBufferAddr + uLength + cbFrameBodySize);
-                       pdwMIC_R = (u32 *)(pbyTxBufferAddr + uLength + cbFrameBodySize + 4);
-
-                       MIC_vGetMIC(pdwMIC_L, pdwMIC_R);
-                       MIC_vUnInit();
-
-                       if (pDevice->bTxMICFail == true) {
-                               *pdwMIC_L = 0;
-                               *pdwMIC_R = 0;
-                               pDevice->bTxMICFail = false;
-                       }
-
-                       pr_debug("uLength: %d, %d\n", uLength, cbFrameBodySize);
-                       pr_debug("cbReqCount:%d, %d, %d, %d\n",
-                                cbReqCount, cbHeaderSize, uPadding, cbIVlen);
-                       pr_debug("MIC:%x, %x\n", *pdwMIC_L, *pdwMIC_R);
-
-               }
-
-               s_vFillTxKey(pDevice, (unsigned char *)(pTxBufHead->adwTxKey), pbyIVHead, pTransmitKey,
-                            pbyMacHdr, (unsigned short)cbFrameBodySize, (unsigned char *)pMICHDR);
-
-               if (pDevice->bEnableHostWEP) {
-                       pMgmt->sNodeDBTable[uNodeIndex].dwTSC47_16 = pTransmitKey->dwTSC47_16;
-                       pMgmt->sNodeDBTable[uNodeIndex].wTSC15_0 = pTransmitKey->wTSC15_0;
-               }
-
-               if ((pDevice->byLocalID <= REV_ID_VT3253_A1))
-                       s_vSWencryption(pDevice, pTransmitKey, pbyPayloadHead, (unsigned short)(cbFrameBodySize + cbMIClen));
-       }
-
-       pMACHeader->wSeqCtl = cpu_to_le16(pDevice->wSeqCounter << 4);
-       pDevice->wSeqCounter++;
-       if (pDevice->wSeqCounter > 0x0fff)
-               pDevice->wSeqCounter = 0;
-
-       if (bIsPSPOLL) {
-               // The MAC will automatically replace the Duration-field of MAC header by Duration-field
-               // of  FIFO control header.
-               // This will cause AID-field of PS-POLL packet be incorrect (Because PS-POLL's AID field is
-               // in the same place of other packet's Duration-field).
-               // And it will cause Cisco-AP to issue Disassociation-packet
-               if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
-                       ((struct vnt_tx_datahead_g *)pvTxDataHd)->duration_a = cpu_to_le16(p80211Header->sA2.wDurationID);
-                       ((struct vnt_tx_datahead_g *)pvTxDataHd)->duration_b = cpu_to_le16(p80211Header->sA2.wDurationID);
-               } else {
-                       ((struct vnt_tx_datahead_ab *)pvTxDataHd)->duration = cpu_to_le16(p80211Header->sA2.wDurationID);
-               }
-       }
-
-       // first TD is the only TD
-       //Set TSR1 & ReqCount in TxDescHead
-       pFrstTD->pTDInfo->skb = skb;
-       pFrstTD->m_td1TD1.byTCR = (TCR_STP | TCR_EDP | EDMSDU);
-       pFrstTD->pTDInfo->skb_dma = pFrstTD->pTDInfo->buf_dma;
-       pFrstTD->m_td1TD1.wReqCount = cpu_to_le16(cbReqCount);
-       pFrstTD->buff_addr = cpu_to_le32(pFrstTD->pTDInfo->skb_dma);
-       pFrstTD->pTDInfo->byFlags = 0;
-       pFrstTD->pTDInfo->byFlags |= TD_FLAGS_PRIV_SKB;
-
-       if (MACbIsRegBitsOn(pDevice->PortOffset, MAC_REG_PSCTL, PSCTL_PS)) {
-               // Disable PS
-               MACbPSWakeup(pDevice->PortOffset);
-       }
-       pDevice->bPWBitOn = false;
-
-       wmb();
-       pFrstTD->m_td0TD0.f1Owner = OWNED_BY_NIC;
-       wmb();
-
-       pDevice->iTDUsed[TYPE_TXDMA0]++;
-
-       if (AVAIL_TD(pDevice, TYPE_TXDMA0) <= 1)
-               pr_debug(" available td0 <= 1\n");
-
-       pDevice->apCurrTD[TYPE_TXDMA0] = pFrstTD->next;
-
-       // Poll Transmit the adapter
-       MACvTransmit0(pDevice->PortOffset);
-}
-
 static void vnt_fill_txkey(struct ieee80211_hdr *hdr, u8 *key_buffer,
                           struct ieee80211_key_conf *tx_key,
                           struct sk_buff *skb, u16 payload_len,
index 145713dc41108482a3b1ea28696e357eea9b6640..7b0566ce42a78d8515417c6468ec754fbbda8a2b 100644 (file)
@@ -189,40 +189,6 @@ struct vnt_tx_short_buf_head {
        __le16 time_stamp_off;
 } __packed;
 
-void
-vGenerateMACHeader(
-       struct vnt_private *,
-       unsigned char *pbyBufferAddr,
-       unsigned short wDuration,
-       PSEthernetHeader psEthHeader,
-       bool bNeedEncrypt,
-       unsigned short wFragType,
-       unsigned int uDMAIdx,
-       unsigned int uFragIdx
-);
-
-unsigned int
-cbGetFragCount(
-       struct vnt_private *,
-       PSKeyItem        pTransmitKey,
-       unsigned int    cbFrameBodySize,
-       PSEthernetHeader psEthHeader
-);
-
-void
-vGenerateFIFOHeader(struct vnt_private *, unsigned char byPktTyp,
-                   unsigned char *pbyTxBufferAddr, bool bNeedEncrypt,
-                   unsigned int cbPayloadSize, unsigned int uDMAIdx,
-                   PSTxDesc pHeadTD, PSEthernetHeader psEthHeader,
-                   unsigned char *pPacket, PSKeyItem pTransmitKey,
-                   unsigned int uNodeIndex, unsigned int *puMACfragNum,
-                   unsigned int *pcbHeaderSize);
-
-void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb,
-                   unsigned char *pbMPDU, unsigned int cbMPDULen);
-CMD_STATUS csMgmt_xmit(struct vnt_private *, PSTxMgmtPacket pPacket);
-CMD_STATUS csBeacon_xmit(struct vnt_private *, PSTxMgmtPacket pPacket);
-
 int vnt_generate_fifo_header(struct vnt_private *, u32,
                             PSTxDesc head_td, struct sk_buff *);
 int vnt_beacon_make(struct vnt_private *, struct ieee80211_vif *);
index 6606a1c239ee9ee0af4bd3c7b8de061af1cfb96a..430e9441bc9e669cf40661341312f25f8f0b49ee 100644 (file)
@@ -66,12 +66,11 @@ bool ROUTEbRelay(struct vnt_private *pDevice, unsigned char *pbySkbData,
        PSMgmtObject    pMgmt = pDevice->pMgmt;
        PSTxDesc        pHeadTD, pLastTD;
        unsigned int cbFrameBodySize;
-       unsigned int uMACfragNum;
+       unsigned int uMACfragNum = 0;
        unsigned char byPktType;
        bool bNeedEncryption = false;
        SKeyItem        STempKey;
        PSKeyItem       pTransmitKey = NULL;
-       unsigned int cbHeaderSize;
        unsigned int ii;
        unsigned char *pbyBSSID;
 
@@ -120,9 +119,6 @@ bool ROUTEbRelay(struct vnt_private *pDevice, unsigned char *pbySkbData,
                }
        }
 
-       uMACfragNum = cbGetFragCount(pDevice, pTransmitKey,
-                                    cbFrameBodySize, &pDevice->sTxEthHeader);
-
        if (uMACfragNum > AVAIL_TD(pDevice, TYPE_AC0DMA))
                return false;
 
@@ -152,12 +148,6 @@ bool ROUTEbRelay(struct vnt_private *pDevice, unsigned char *pbySkbData,
        if (pDevice->wCurrentRate <= RATE_11M)
                byPktType = PK_TYPE_11B;
 
-       vGenerateFIFOHeader(pDevice, byPktType, pDevice->pbyTmpBuff,
-                           bNeedEncryption, cbFrameBodySize, TYPE_AC0DMA,
-                           pHeadTD, &pDevice->sTxEthHeader, pbySkbData,
-                           pTransmitKey, uNodeIndex, &uMACfragNum,
-                           &cbHeaderSize);
-
        if (MACbIsRegBitsOn(pDevice->PortOffset, MAC_REG_PSCTL, PSCTL_PS)) {
                /* Disable PS */
                MACbPSWakeup(pDevice->PortOffset);