···105105 PNDIS_PACKET pPacket;106106 NDIS_STATUS Status = NDIS_STATUS_SUCCESS;107107 ULONG FreeNum;108108+#ifdef RT2860108109 unsigned long IrqFlags = 0;110110+#endif109111 UCHAR IrqState;110112 UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN];111113···119117120118 IrqState = pAd->irq_disabled;121119120120+#ifdef RT2860122121 if ((pAd->MACVersion == 0x28600100) && (!IrqState))123122 RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags);124124-123123+#endif125124 do126125 {127126 // Reset is in progress, stop immediately···175172176173 } while (FALSE);177174175175+#ifdef RT2860178176 // 2860C use Tx Ring179177 if ((pAd->MACVersion == 0x28600100) && (!IrqState))180178 RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags);181181-179179+#endif182180 return Status;183181}184182185185-183183+#ifdef RT2860186184NDIS_STATUS MiniportMMRequestUnlock(187185 IN PRTMP_ADAPTER pAd,188186 IN UCHAR QueIdx,···251247252248 return Status;253249}250250+#endif251251+#ifdef RT30xx252252+NDIS_STATUS MlmeDataHardTransmit(253253+ IN PRTMP_ADAPTER pAd,254254+ IN UCHAR QueIdx,255255+ IN PNDIS_PACKET pPacket);254256257257+#define MAX_DATAMM_RETRY 3258258+/*259259+ ========================================================================260260+261261+ Routine Description:262262+ API for MLME to transmit management frame to AP (BSS Mode)263263+ or station (IBSS Mode)264264+265265+ Arguments:266266+ pAd Pointer to our adapter267267+ pData Pointer to the outgoing 802.11 frame268268+ Length Size of outgoing management frame269269+270270+ Return Value:271271+ NDIS_STATUS_FAILURE272272+ NDIS_STATUS_PENDING273273+ NDIS_STATUS_SUCCESS274274+275275+ IRQL = PASSIVE_LEVEL276276+ IRQL = DISPATCH_LEVEL277277+278278+ Note:279279+280280+ ========================================================================281281+*/282282+NDIS_STATUS MiniportDataMMRequest(283283+ IN PRTMP_ADAPTER pAd,284284+ IN UCHAR QueIdx,285285+ IN PUCHAR pData,286286+ IN UINT Length)287287+{288288+ PNDIS_PACKET pPacket;289289+ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;290290+ ULONG FreeNum;291291+ int retry = 0;292292+ UCHAR IrqState;293293+ UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN];294294+295295+ ASSERT(Length <= MGMT_DMA_BUFFER_SIZE);296296+297297+ // 2860C use Tx Ring298298+ IrqState = pAd->irq_disabled;299299+300300+ do301301+ {302302+ // Reset is in progress, stop immediately303303+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) ||304304+ RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)||305305+ !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP))306306+ {307307+ Status = NDIS_STATUS_FAILURE;308308+ break;309309+ }310310+311311+ // Check Free priority queue312312+ // Since we use PBF Queue2 for management frame. Its corresponding DMA ring should be using TxRing.313313+314314+ // 2860C use Tx Ring315315+316316+ // free Tx(QueIdx) resources317317+ FreeNum = GET_TXRING_FREENO(pAd, QueIdx);318318+319319+ if ((FreeNum > 0))320320+ {321321+ // We need to reserve space for rtmp hardware header. i.e., TxWI for RT2860 and TxInfo+TxWI for RT2870322322+ NdisZeroMemory(&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE));323323+ Status = RTMPAllocateNdisPacket(pAd, &pPacket, (PUCHAR)&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE), pData, Length);324324+ if (Status != NDIS_STATUS_SUCCESS)325325+ {326326+ DBGPRINT(RT_DEBUG_WARN, ("MiniportMMRequest (error:: can't allocate NDIS PACKET)\n"));327327+ break;328328+ }329329+330330+ //pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK;331331+ //pAd->CommonCfg.MlmeRate = RATE_2;332332+333333+334334+ Status = MlmeDataHardTransmit(pAd, QueIdx, pPacket);335335+ if (Status != NDIS_STATUS_SUCCESS)336336+ RTMPFreeNdisPacket(pAd, pPacket);337337+ retry = MAX_DATAMM_RETRY;338338+ }339339+ else340340+ {341341+ retry ++;342342+343343+ printk("retry %d\n", retry);344344+ pAd->RalinkCounters.MgmtRingFullCount++;345345+346346+ if (retry >= MAX_DATAMM_RETRY)347347+ {348348+ DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in DataRing, MgmtRingFullCount=%ld!\n",349349+ QueIdx, pAd->RalinkCounters.MgmtRingFullCount));350350+ }351351+ }352352+353353+ } while (retry < MAX_DATAMM_RETRY);354354+355355+356356+ return Status;357357+}358358+#endif /* RT30xx */255359256360/*257361 ========================================================================···395283 return NDIS_STATUS_FAILURE;396284 }397285286286+#ifdef RT2860398287 if ( pAd->MACVersion == 0x28600100 )399288 return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket);400289 else290290+#endif401291 return MlmeHardTransmitMgmtRing(pAd,QueIdx,pPacket);402292403293}404294405405-295295+#ifdef RT2860406296NDIS_STATUS MlmeHardTransmitTxRing(407297 IN PRTMP_ADAPTER pAd,408298 IN UCHAR QueIdx,···586472587473 return NDIS_STATUS_SUCCESS;588474}475475+#endif /* RT2860 */589476477477+#ifdef RT30xx478478+NDIS_STATUS MlmeDataHardTransmit(479479+ IN PRTMP_ADAPTER pAd,480480+ IN UCHAR QueIdx,481481+ IN PNDIS_PACKET pPacket)482482+{483483+ if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)484484+ )485485+ {486486+ return NDIS_STATUS_FAILURE;487487+ }488488+489489+#ifdef RT2870490490+ return MlmeHardTransmitMgmtRing(pAd,QueIdx,pPacket);491491+#endif // RT2870 //492492+}493493+#endif /* RT30xx */590494591495NDIS_STATUS MlmeHardTransmitMgmtRing(592496 IN PRTMP_ADAPTER pAd,···632500633501 // outgoing frame always wakeup PHY to prevent frame lost634502 if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))503503+#ifdef RT2860635504 AsicForceWakeup(pAd, FROM_TX);505505+#endif506506+#ifdef RT2870507507+ AsicForceWakeup(pAd, TRUE);508508+#endif636509637510 pFirstTxWI = (PTXWI_STRUC)(pSrcBufVA + TXINFO_SIZE);638511 pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); //TXWI_SIZE);···960823961824 {962825 // If support WMM, enable it.826826+#ifdef RT2860963827 if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))828828+#endif829829+#ifdef RT2870830830+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) &&831831+ CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE))832832+#endif964833 TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM);965834 }966835···1013870 }10148711015872 return TRUE;873873+874874+#ifdef RT30xx875875+FillTxBlkErr:876876+ return FALSE;877877+#endif1016878}10178791018880···1105957 if (QIdx == NUM_OF_TX_RING)1106958 {1107959 sQIdx = 0;960960+//PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA)1108961 eQIdx = 3; // 4 ACs, start from 0.1109962 }1110963 else···1148999 DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags);11491000 break;11501001 }11511151-10021002+#ifdef RT286011521003 FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx);1153100411541005#ifdef DBG_DIAGNOSE···11731024 RTMPFreeTXDUponTxDmaDone(pAd, QueIdx);11741025 FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx);11751026 }11761176-10271027+#endif /* RT2860 */11771028 // probe the Queue Head11781029 pQueue = &pAd->TxSwQueue[QueIdx];11791030 if ((pEntry = pQueue->Head) == NULL)···12421093 pTxBlk->TxFrameType = TX_LEGACY_FRAME;12431094 }1244109510961096+#ifdef RT287010971097+ DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags);10981098+#endif // RT2870 //1245109912461100 Count += pTxBlk->TxPacketList.Number;1247110112481102 // Do HardTransmit now.12491103 Status = STAHardTransmit(pAd, pTxBlk, QueIdx);1250110411051105+#ifdef RT286012511106 DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags);12521107 // static rate also need NICUpdateFifoStaCounters() function.12531108 //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED))12541109 NICUpdateFifoStaCounters(pAd);11101110+#endif12551111 }1256111212571113 RT28XX_STOP_DEQUEUE(pAd, QueIdx, IrqFlags);11141114+11151115+#ifdef RT287011161116+ if (!hasTxDesc)11171117+ RTUSBKickBulkOut(pAd);11181118+#endif // RT2870 //12581119 }1259112012601121}···17921633 return (NULL);17931634}1794163517951795-16361636+#ifdef RT286017961637BOOLEAN RTMPFreeTXDUponTxDmaDone(17971638 IN PRTMP_ADAPTER pAd,17981639 IN UCHAR QueIdx)···21752016 DBGPRINT_RAW(RT_DEBUG_TRACE,(" RxSwReadIdx [%d]=", AC0freeIdx));21762017 DBGPRINT_RAW(RT_DEBUG_TRACE,(" pending-NDIS=%ld\n", pAd->RalinkCounters.PendingNdisPacketCount));21772018}20192019+#endif /* RT2860 */2178202021792021/*21802022 ========================================================================···22352075{22362076 DBGPRINT(RT_DEBUG_TRACE,("SCAN done, resume MSDU transmission ...\n"));2237207722382238-20782078+#ifdef RT30xx20792079+ // After finish BSS_SCAN_IN_PROGRESS, we need to restore Current R66 value20802080+ // R66 should not be 020812081+ if (pAd->BbpTuning.R66CurrentValue == 0)20822082+ {20832083+ pAd->BbpTuning.R66CurrentValue = 0x38;20842084+ DBGPRINT_ERR(("RTMPResumeMsduTransmission, R66CurrentValue=0...\n"));20852085+ }20862086+#endif22392087 RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, pAd->BbpTuning.R66CurrentValue);2240208822412089 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);···24662298 pEntry->AuthMode = pAd->StaCfg.AuthMode;24672299 pEntry->WepStatus = pAd->StaCfg.WepStatus;24682300 pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll;23012301+#ifdef RT286024692302 AsicRemovePairwiseKeyEntry(pAd, pEntry->apidx, (UCHAR)i);23032303+#endif24702304 }24712305 }24722306···24762306 pEntry->PairwiseKey.KeyLen = 0;24772307 pEntry->PairwiseKey.CipherAlg = CIPHER_NONE;2478230823092309+#ifdef RT286024792310 if ((pAd->OpMode == OPMODE_STA) &&24802311 (pAd->StaCfg.BssType == BSS_ADHOC))24812312 pEntry->PortSecured = WPA_802_1X_PORT_SECURED;24822313 else23142314+#endif24832315 pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED;2484231624852317 pEntry->PMKID_CacheIdx = ENTRY_NOT_FOUND;···26172445 if (pAd->MacTab.Size == 0)26182446 {26192447 pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode = 0;24482448+#ifndef RT30xx26202449 AsicUpdateProtect(pAd, 0 /*pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode*/, (ALLN_SETPROTECT), TRUE, 0 /*pAd->MacTab.fAnyStationNonGF*/);24502450+#endif24512451+#ifdef RT30xx24522452+ RT28XX_UPDATE_PROTECT(pAd); // edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet24532453+#endif26212454 }2622245526232456 return TRUE;···2646246926472470 for (i=1; i<MAX_LEN_OF_MAC_TABLE; i++)26482471 {24722472+#ifdef RT286026492473 RT28XX_STA_ENTRY_MAC_RESET(pAd, i);24742474+#endif26502475 if (pAd->MacTab.Content[i].ValidAsCLI == TRUE)26512476 {26522477 // free resources of BA···26582479265924802660248124822482+#ifdef RT287024832483+ NdisZeroMemory(pAd->MacTab.Content[i].Addr, 6);24842484+ RT28XX_STA_ENTRY_MAC_RESET(pAd, i);24852485+#endif // RT2870 //2661248626622487 //AsicDelWcidTab(pAd, i);26632488 }···2974279129752792 STATS_INC_RX_PACKETS(pAd, FromWhichBSSID);2976279327942794+#ifdef RT287027952795+ if (pAd->CommonCfg.bDisableReordering == 0)27962796+ {27972797+ PBA_REC_ENTRY pBAEntry;27982798+ ULONG Now32;27992799+ UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID;28002800+ UCHAR TID = pRxBlk->pRxWI->TID;28012801+ USHORT Idx;28022802+28032803+#define REORDERING_PACKET_TIMEOUT ((100 * HZ)/1000) // system ticks -- 100 ms28042804+28052805+ if (Wcid < MAX_LEN_OF_MAC_TABLE)28062806+ {28072807+ Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID];28082808+ if (Idx != 0)28092809+ {28102810+ pBAEntry = &pAd->BATable.BARecEntry[Idx];28112811+ // update last rx time28122812+ NdisGetSystemUpTime(&Now32);28132813+ if ((pBAEntry->list.qlen > 0) &&28142814+ RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(REORDERING_PACKET_TIMEOUT)))28152815+ )28162816+ {28172817+ printk("Indicate_Legacy_Packet():flush reordering_timeout_mpdus! RxWI->Flags=%d, pRxWI.TID=%d, RxD->AMPDU=%d!\n", pRxBlk->Flags, pRxBlk->pRxWI->TID, pRxBlk->RxD.AMPDU);28182818+ hex_dump("Dump the legacy Packet:", GET_OS_PKT_DATAPTR(pRxBlk->pRxPacket), 64);28192819+ ba_flush_reordering_timeout_mpdus(pAd, pBAEntry, Now32);28202820+ }28212821+ }28222822+ }28232823+ }28242824+#endif // RT2870 //2977282529782826 wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID);29792827
+44-1
drivers/staging/rt2860/common/cmm_info.c
···762762 IN PRTMP_ADAPTER pAd,763763 IN PUCHAR arg)764764{765765+#ifdef RT2860765766 INT i, QueIdx=0;766767 PRT28XX_RXD_STRUC pRxD;767768 PTXD_STRUC pTxD;···793792 hex_dump("Rx Descriptor", (char *)pRxD, 16);794793 printk("pRxD->DDONE = %x\n", pRxD->DDONE);795794 }796796-795795+#endif /* RT2860 */797796 return TRUE;798797}799798···14191418 pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0;14201419 }1421142014211421+#ifndef RT30xx14221422+#ifdef RT287014231423+ /* Frank recommend ,If not, Tx maybe block in high power. Rx has no problem*/14241424+ if(IS_RT3070(pAd) && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020)))14251425+ {14261426+ pAd->CommonCfg.HtCapability.HtCapInfo.TxSTBC = 0;14271427+ pAd->CommonCfg.DesiredHtPhy.TxSTBC = 0;14281428+ }14291429+#endif // RT2870 //14301430+#endif1422143114231432 if(pHTPhyMode->SHORTGI == GI_400)14241433 {···17071696 }1708169717091698 // For key index and ext IV bit, so only need to update the position(offset+3).16991699+#ifdef RT286017101700 RTMP_IO_WRITE8(pAd, offset+3, IVEIV);17011701+#endif17021702+#ifdef RT287017031703+ RTUSBMultiWrite_OneByte(pAd, offset+3, &IVEIV);17041704+#endif // RT2870 //1711170517121706 DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg]));17131707 DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = 0x%x \n", WCIDAttri));···2489247324902474 Value = simple_strtol(arg, 0, 10);24912475 if (Value == 0)24762476+ {24922477 pAd->CommonCfg.BACapability.field.AutoBA = FALSE;24782478+#ifdef RT30xx24792479+ pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE;24802480+#endif24812481+ }24932482 else if (Value == 1)24832483+ {24942484 pAd->CommonCfg.BACapability.field.AutoBA = TRUE;24852485+#ifdef RT30xx24862486+ pAd->CommonCfg.BACapability.field.Policy = IMMED_BA;24872487+#endif24882488+ }24952489 else24962490 return FALSE; //Invalid argument2497249124982492 pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA;24932493+#ifdef RT30xx24942494+ pAd->CommonCfg.REGBACapability.field.Policy = pAd->CommonCfg.BACapability.field.Policy;24952495+#endif24992496 SetCommonHT(pAd);2500249725012498 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAutoBa_Proc::(HtAutoBa=%d)\n",pAd->CommonCfg.BACapability.field.AutoBA));···27252696 {27262697 case Ndis802_11AuthModeOpen:27272698 return "OPEN";26992699+#if defined(RT2860) || defined(RT30xx)27282700 default:27012701+#endif27292702 case Ndis802_11AuthModeWPAPSK:27302703 return "WPAPSK";27312704 case Ndis802_11AuthModeShared:···27422711 return "WPAPSKWPA2PSK";27432712 case Ndis802_11AuthModeWPA1WPA2:27442713 return "WPA1WPA2";27142714+#ifndef RT30xx27452715 case Ndis802_11AuthModeWPANone:27462716 return "WPANONE";27172717+#ifdef RT287027182718+ default:27192719+ return "UNKNOW";27202720+#endif27212721+#endif27472722 }27482723}27492724···27582721{27592722 switch(encryMode)27602723 {27242724+#if defined(RT2860) || defined(RT30xx)27612725 default:27262726+#endif27622727 case Ndis802_11WEPDisabled:27632728 return "NONE";27642729 case Ndis802_11WEPEnabled:···27712732 return "AES";27722733 case Ndis802_11Encryption4Enabled:27732734 return "TKIPAES";27352735+#if !defined(RT2860) && !defined(RT30xx)27362736+ default:27372737+ return "UNKNOW";27382738+#endif27742739 }27752740}27762741
+12-1
drivers/staging/rt2860/common/cmm_sync.c
···440440441441 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);442442 }443443+#ifdef RT2870444444+ else if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->OpMode == OPMODE_STA))445445+ {446446+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;447447+ MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_FAIL_NO_RESOURCE);448448+ }449449+#endif // RT2870 //443450 else444451 {445452 {446453 // BBP and RF are not accessible in PS mode, we has to wake them up first447454 if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))455455+#ifdef RT2860448456 AsicForceWakeup(pAd, FROM_TX);449449-457457+#endif458458+#ifdef RT2870459459+ AsicForceWakeup(pAd, TRUE);460460+#endif450461 // leave PSM during scanning. otherwise we may lost ProbeRsp & BEACON451462 if (pAd->StaCfg.Psm == PWR_SAVE)452463 MlmeSetPsmBit(pAd, PWR_ACTIVE);