• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/staging/rt2860/sta/

Lines Matching refs:pTxBlk

1370 void STAFindCipherAlgorithm(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk)
1378 pSrcBufVA = GET_OS_PKT_DATAPTR(pTxBlk->pPacket);
1387 if (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)) {
1392 if (!(TX_BLK_TEST_FLAG(pTxBlk, fTX_bClearEAPFrame))
1428 pTxBlk->CipherAlg = CipherAlg;
1429 pTxBlk->pKey = pKey;
1432 void STABuildCommon802_11Header(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk)
1441 pTxBlk->MpduHeaderLen = sizeof(struct rt_header_802_11);
1444 (struct rt_header_802_11 *) & pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE];
1451 ((TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) ? SUBTYPE_QDATA :
1454 if (pTxBlk->pMacEntry) {
1455 if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bForceNonQoS)) {
1457 pTxBlk->pMacEntry->NonQosDataSeq;
1458 pTxBlk->pMacEntry->NonQosDataSeq =
1459 (pTxBlk->pMacEntry->NonQosDataSeq + 1) & MAXSEQ;
1463 pTxBlk->pMacEntry->TxSeq[pTxBlk->
1465 pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority] =
1466 (pTxBlk->pMacEntry->
1467 TxSeq[pTxBlk->UserPriority] + 1) & MAXSEQ;
1477 pHeader_802_11->FC.MoreData = TX_BLK_TEST_FLAG(pTxBlk, fTX_bMoreData);
1487 pTxBlk->pSrcBufHeader);
1492 pTxBlk->pSrcBufHeader);
1501 if (pTxBlk->CipherAlg != CIPHER_NONE)
1514 struct rt_tx_blk *pTxBlk, u8 * pHeader)
1520 pMacEntry = pTxBlk->pMacEntry;
1527 pTxBlk->MpduHeaderLen = sizeof(struct rt_header_802_11);
1530 pHeader80211->FC.MoreData = TX_BLK_TEST_FLAG(pTxBlk, fTX_bMoreData);
1533 pHeader80211->Sequence = pMacEntry->TxSeq[pTxBlk->UserPriority];
1534 pMacEntry->TxSeq[pTxBlk->UserPriority] =
1535 (pMacEntry->TxSeq[pTxBlk->UserPriority] + 1) & MAXSEQ;
1547 pTxBlk->pSrcBufHeader);
1560 struct rt_tx_blk *pTxBlk)
1568 STAFindCipherAlgorithm(pAd, pTxBlk);
1569 STABuildCommon802_11Header(pAd, pTxBlk);
1571 pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE];
1578 pHeaderBufPtr += pTxBlk->MpduHeaderLen;
1580 if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) {
1584 *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F);
1588 pTxBlk->MpduHeaderLen += 2;
1591 pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr;
1593 pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen);
1597 pQEntry = pTxBlk->TxPacketList.Head;
1607 pTxBlk->MpduHeaderLen += 2;
1614 struct rt_tx_blk *pTxBlk)
1619 STAFindCipherAlgorithm(pAd, pTxBlk);
1620 STABuildCommon802_11Header(pAd, pTxBlk);
1622 pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE];
1626 pHeaderBufPtr += pTxBlk->MpduHeaderLen;
1631 *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F);
1640 pTxBlk->MpduHeaderLen += 2;
1650 pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr;
1652 pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen);
1658 void STA_AMPDU_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk)
1667 ASSERT(pTxBlk);
1669 while (pTxBlk->TxPacketList.Head) {
1670 pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList);
1671 pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry);
1672 if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) {
1673 RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket,
1679 (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE);
1681 pMacEntry = pTxBlk->pMacEntry;
1683 /* NOTE: Please make sure the size of pMacEntry->CachedBuf[] is smaller than pTxBlk->HeaderBuf[]! */
1684 NdisMoveMemory((u8 *)& pTxBlk->
1689 (u8 *)(&pTxBlk->
1691 STABuildCache802_11Header(pAd, pTxBlk, pHeaderBufPtr);
1693 STAFindCipherAlgorithm(pAd, pTxBlk);
1694 STABuildCommon802_11Header(pAd, pTxBlk);
1697 &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE];
1703 pHeaderBufPtr += pTxBlk->MpduHeaderLen;
1708 *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F);
1711 pTxBlk->MpduHeaderLen += 2;
1718 && CLIENT_STATUS_TEST_FLAG(pTxBlk->pMacEntry,
1728 pTxBlk->MpduHeaderLen += 4;
1730 /*pTxBlk->MpduHeaderLen = pHeaderBufPtr - pTxBlk->HeaderBuf - TXWI_SIZE - TXINFO_SIZE; */
1731 ASSERT(pTxBlk->MpduHeaderLen >= 24);
1734 pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3;
1735 pTxBlk->SrcBufLen -= LENGTH_802_3;
1739 pTxBlk->pSrcBufData += LENGTH_802_1Q;
1740 pTxBlk->SrcBufLen -= LENGTH_802_1Q;
1748 pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr;
1750 pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen);
1757 EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->
1759 pTxBlk->
1761 if (pTxBlk->pExtraLlcSnapEncap) {
1763 pTxBlk->pExtraLlcSnapEncap, 6);
1767 pTxBlk->pSrcBufData - 2, 2);
1769 pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
1776 (struct rt_txwi *) (&pTxBlk->
1779 pTxBlk);
1782 (struct rt_txwi *) (&pTxBlk->
1785 pTxBlk);
1790 (u8 *)(&pTxBlk->
1793 (u8 *)(&pTxBlk->
1803 QuadPart += pTxBlk->SrcBufLen;
1808 HAL_WriteTxResource(pAd, pTxBlk, TRUE, &FreeNumber);
1814 HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
1822 void STA_AMSDU_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk)
1835 ASSERT(pTxBlk);
1837 ASSERT((pTxBlk->TxPacketList.Number > 1));
1839 while (pTxBlk->TxPacketList.Head) {
1840 pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList);
1841 pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry);
1842 if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) {
1843 RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket,
1849 (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE);
1852 pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3;
1853 pTxBlk->SrcBufLen -= LENGTH_802_3;
1857 pTxBlk->pSrcBufData += LENGTH_802_1Q;
1858 pTxBlk->SrcBufLen -= LENGTH_802_1Q;
1863 STA_Build_AMSDU_Frame_Header(pAd, pTxBlk);
1867 (struct rt_txwi *) (&pTxBlk->
1870 pTxBlk);
1872 pHeaderBufPtr = &pTxBlk->HeaderBuf[0];
1881 pTxBlk->MpduHeaderLen = padding;
1889 subFramePayloadLen = pTxBlk->SrcBufLen;
1891 NdisMoveMemory(subFrameHeader, pTxBlk->pSrcBufHeader, 12);
1894 pTxBlk->MpduHeaderLen += LENGTH_AMSDU_SUBFRAMEHEAD;
1899 EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData - 2,
1900 pTxBlk->pExtraLlcSnapEncap);
1902 subFramePayloadLen = pTxBlk->SrcBufLen;
1904 if (pTxBlk->pExtraLlcSnapEncap) {
1906 pTxBlk->pExtraLlcSnapEncap, 6);
1909 NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData - 2,
1912 pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
1919 totalMPDUSize += pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen;
1923 HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum,
1927 HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum,
1944 HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, FirstTx);
1945 HAL_LastTxIdx(pAd, pTxBlk->QueIdx, LastTxIdx);
1951 HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
1954 void STA_Legacy_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk)
1962 ASSERT(pTxBlk);
1964 pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList);
1965 pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry);
1966 if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) {
1967 RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE);
1971 if (pTxBlk->TxFrameType == TX_MCAST_FRAME) {
1975 if (RTMP_GET_PACKET_RTS(pTxBlk->pPacket))
1976 TX_BLK_SET_FLAG(pTxBlk, fTX_bRtsRequired);
1978 TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bRtsRequired);
1980 bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE);
1982 if (pTxBlk->TxRate < pAd->CommonCfg.MinTxRate)
1983 pTxBlk->TxRate = pAd->CommonCfg.MinTxRate;
1985 STAFindCipherAlgorithm(pAd, pTxBlk);
1986 STABuildCommon802_11Header(pAd, pTxBlk);
1989 pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3;
1990 pTxBlk->SrcBufLen -= LENGTH_802_3;
1994 pTxBlk->pSrcBufData += LENGTH_802_1Q;
1995 pTxBlk->SrcBufLen -= LENGTH_802_1Q;
1998 pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE];
2002 pHeaderBufPtr += pTxBlk->MpduHeaderLen;
2004 if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) {
2009 ((pTxBlk->UserPriority & 0x0F) | (pAd->CommonCfg.
2010 AckPolicy[pTxBlk->
2014 pTxBlk->MpduHeaderLen += 2;
2017 pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr;
2019 pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen);
2030 EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader,
2031 pTxBlk->pExtraLlcSnapEncap);
2032 if (pTxBlk->pExtraLlcSnapEncap) {
2036 pTxBlk->pExtraLlcSnapEncap, 6);
2042 pTxBlk->pSrcBufHeader + 12 + vlan_size,
2045 pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
2055 RTMPWriteTxWI_Data(pAd, (struct rt_txwi *) (&pTxBlk->HeaderBuf[TXINFO_SIZE]),
2056 pTxBlk);
2060 HAL_WriteTxResource(pAd, pTxBlk, TRUE, &FreeNumber);
2069 HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
2072 void STA_ARalink_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk)
2082 ASSERT(pTxBlk);
2084 ASSERT((pTxBlk->TxPacketList.Number == 2));
2087 while (pTxBlk->TxPacketList.Head) {
2088 pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList);
2089 pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry);
2091 if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) {
2092 RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket,
2098 (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE);
2101 pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3;
2102 pTxBlk->SrcBufLen -= LENGTH_802_3;
2106 pTxBlk->pSrcBufData += LENGTH_802_1Q;
2107 pTxBlk->SrcBufLen -= LENGTH_802_1Q;
2113 STA_Build_ARalink_Frame_Header(pAd, pTxBlk);
2118 (struct rt_txwi *) (&pTxBlk->
2121 pTxBlk);
2126 EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->
2128 pTxBlk->
2131 if (pTxBlk->pExtraLlcSnapEncap) {
2133 pTxBlk->pExtraLlcSnapEncap, 6);
2137 pTxBlk->pSrcBufData - 2, 2);
2139 pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
2143 pHeaderBufPtr = &pTxBlk->HeaderBuf[0];
2144 pTxBlk->MpduHeaderLen = 0;
2148 NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader,
2152 NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData - 2,
2155 pTxBlk->MpduHeaderLen = LENGTH_ARALINK_SUBFRAMEHEAD;
2158 totalMPDUSize += pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen;
2163 HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum,
2167 HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum,
2178 HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, FirstTx);
2179 HAL_LastTxIdx(pAd, pTxBlk->QueIdx, LastTxIdx);
2185 HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
2189 void STA_Fragment_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk)
2204 ASSERT(pTxBlk);
2206 pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList);
2207 pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry);
2208 if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) {
2209 RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE);
2213 ASSERT(TX_BLK_TEST_FLAG(pTxBlk, fTX_bAllowFrag));
2214 bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE);
2216 STAFindCipherAlgorithm(pAd, pTxBlk);
2217 STABuildCommon802_11Header(pAd, pTxBlk);
2219 if (pTxBlk->CipherAlg == CIPHER_TKIP) {
2220 pTxBlk->pPacket =
2221 duplicate_pkt_with_TKIP_MIC(pAd, pTxBlk->pPacket);
2222 if (pTxBlk->pPacket == NULL)
2224 RTMP_QueryPacketInfo(pTxBlk->pPacket, &PacketInfo,
2225 &pTxBlk->pSrcBufHeader,
2226 &pTxBlk->SrcBufLen);
2229 pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3;
2230 pTxBlk->SrcBufLen -= LENGTH_802_3;
2234 pTxBlk->pSrcBufData += LENGTH_802_1Q;
2235 pTxBlk->SrcBufLen -= LENGTH_802_1Q;
2238 pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE];
2242 pHeaderBufPtr += pTxBlk->MpduHeaderLen;
2244 if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) {
2248 *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F);
2252 pTxBlk->MpduHeaderLen += 2;
2258 pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr;
2260 pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen);
2269 EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader,
2270 pTxBlk->pExtraLlcSnapEncap);
2271 if (pTxBlk->pExtraLlcSnapEncap) {
2274 NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6);
2280 pTxBlk->pSrcBufHeader + 12 + vlan_size, 2);
2282 pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
2288 if (pTxBlk->CipherAlg == CIPHER_TKIP) {
2289 RTMPCalculateMICValue(pAd, pTxBlk->pPacket,
2290 pTxBlk->pExtraLlcSnapEncap, pTxBlk->pKey,
2294 /* to correct lenght, refer to pTxBlk->SrcBufLen for the packet length in following progress. */
2295 NdisMoveMemory(pTxBlk->pSrcBufData + pTxBlk->SrcBufLen,
2297 /*skb_put((RTPKT_TO_OSPKT(pTxBlk->pPacket))->tail, 8); */
2298 pTxBlk->SrcBufLen += 8;
2299 pTxBlk->TotalFrameLen += 8;
2300 pTxBlk->CipherAlg = CIPHER_TKIP_NO_MIC;
2306 if ((pTxBlk->CipherAlg == CIPHER_WEP64)
2307 || (pTxBlk->CipherAlg == CIPHER_WEP128))
2309 else if (pTxBlk->CipherAlg == CIPHER_TKIP_NO_MIC)
2311 else if (pTxBlk->CipherAlg == CIPHER_TKIP)
2313 else if (pTxBlk->CipherAlg == CIPHER_AES)
2318 pTransmit = pTxBlk->pTransmit;
2321 pTxBlk->TxRate = pTransmit->field.MCS;
2323 pTxBlk->TxRate = pTransmit->field.MCS + RATE_FIRST_OFDM_RATE;
2325 pTxBlk->TxRate = RATE_6_5;
2328 if (pTxBlk->TxRate <= RATE_LAST_OFDM_RATE)
2331 pAd->CommonCfg.ExpectedACKRate[pTxBlk->
2338 SrcRemainingBytes = pTxBlk->SrcBufLen;
2340 pTxBlk->TotalFragNum = 0xff;
2346 FreeMpduSize -= pTxBlk->MpduHeaderLen;
2350 pTxBlk->SrcBufLen = SrcRemainingBytes;
2357 pTxBlk->TotalFragNum = fragNum;
2360 pTxBlk->SrcBufLen = FreeMpduSize;
2363 min(((u32)SrcRemainingBytes - pTxBlk->SrcBufLen),
2368 RTMPCalcDuration(pAd, pTxBlk->TxRate,
2373 pTxBlk->FrameGap = IFS_HTTXOP;
2375 pTxBlk->FrameGap = IFS_SIFS;
2378 (struct rt_txwi *) (&pTxBlk->
2380 pTxBlk);
2382 HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, &FreeNumber);
2390 if (fragNum == 0 && pTxBlk->pExtraLlcSnapEncap)
2391 pTxBlk->MpduHeaderLen -= LENGTH_802_1_H;
2394 SrcRemainingBytes -= pTxBlk->SrcBufLen;
2395 pTxBlk->pSrcBufData += pTxBlk->SrcBufLen;
2405 HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
2438 struct rt_tx_blk *pTxBlk, u8 QueIdx)
2447 ASSERT(pTxBlk->TxPacketList.Number);
2448 if (pTxBlk->TxPacketList.Head == NULL) {
2450 ("pTxBlk->TotalFrameNum == %ld!\n",
2451 pTxBlk->TxPacketList.Number));
2455 pPacket = QUEUE_ENTRY_TO_PACKET(pTxBlk->TxPacketList.Head);
2478 || (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket))
2479 || (RTMP_GET_PACKET_WAI(pTxBlk->pPacket))) {
2486 switch (pTxBlk->TxFrameType) {
2488 STA_AMPDU_Frame_Tx(pAd, pTxBlk);
2491 STA_AMSDU_Frame_Tx(pAd, pTxBlk);
2494 STA_Legacy_Frame_Tx(pAd, pTxBlk);
2497 STA_Legacy_Frame_Tx(pAd, pTxBlk);
2500 STA_ARalink_Frame_Tx(pAd, pTxBlk);
2503 STA_Fragment_Frame_Tx(pAd, pTxBlk);
2510 while (pTxBlk->TxPacketList.Number) {
2512 RemoveHeadQueue(&pTxBlk->TxPacketList);