Пример #1
0
VOID PeerDelBAAction(
	IN PRTMP_ADAPTER pAd, 
	IN MLME_QUEUE_ELEM *Elem) 

{
	//UCHAR				Idx;
	//PUCHAR				pOutBuffer = NULL;
	PFRAME_DELBA_REQ    pDelFrame = NULL;
	
	DBGPRINT(RT_DEBUG_TRACE,("%s ==>\n", __FUNCTION__));
	//DELBA Request from unknown peer, ignore this.
	if (PeerDelBAActionSanity(pAd, Elem->Wcid, Elem->Msg, Elem->MsgLen))
	{
		pDelFrame = (PFRAME_DELBA_REQ)(&Elem->Msg[0]);
		if (pDelFrame->DelbaParm.Initiator == ORIGINATOR)
		{
			DBGPRINT(RT_DEBUG_TRACE,("BA - PeerDelBAAction----> ORIGINATOR\n"));
			BARecSessionTearDown(pAd, Elem->Wcid, pDelFrame->DelbaParm.TID, TRUE);
		}
		else
		{
			DBGPRINT(RT_DEBUG_TRACE,("BA - PeerDelBAAction----> RECIPIENT, Reason = %d\n",  pDelFrame->ReasonCode));
			//hex_dump("DelBA Frame", pDelFrame, Elem->MsgLen);
			BAOriSessionTearDown(pAd, Elem->Wcid, pDelFrame->DelbaParm.TID, TRUE, FALSE);
		}
	}
}
Пример #2
0
void PeerDelBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem)
{
	/*u8                         Idx; */
	/*u8 *                               pOutBuffer = NULL; */
	struct rt_frame_delba_req * pDelFrame = NULL;

	DBGPRINT(RT_DEBUG_TRACE, ("%s ==>\n", __func__));
	/*DELBA Request from unknown peer, ignore this. */
	if (PeerDelBAActionSanity(pAd, Elem->Wcid, Elem->Msg, Elem->MsgLen)) {
		pDelFrame = (struct rt_frame_delba_req *) (&Elem->Msg[0]);
		if (pDelFrame->DelbaParm.Initiator == ORIGINATOR) {
			DBGPRINT(RT_DEBUG_TRACE,
				 ("BA - PeerDelBAAction----> ORIGINATOR\n"));
			BARecSessionTearDown(pAd, Elem->Wcid,
					     pDelFrame->DelbaParm.TID, TRUE);
		} else {
			DBGPRINT(RT_DEBUG_TRACE,
				 ("BA - PeerDelBAAction----> RECIPIENT, Reason = %d\n",
				  pDelFrame->ReasonCode));
			/*hex_dump("DelBA Frame", pDelFrame, Elem->MsgLen); */
			BAOriSessionTearDown(pAd, Elem->Wcid,
					     pDelFrame->DelbaParm.TID, TRUE,
					     FALSE);
		}
	}
}
Пример #3
0
void BASessionTearDownALL(struct rt_rtmp_adapter *pAd, u8 Wcid)
{
	int i;

	for (i = 0; i < NUM_OF_TID; i++) {
		BAOriSessionTearDown(pAd, Wcid, i, FALSE, FALSE);
		BARecSessionTearDown(pAd, Wcid, i, FALSE);
	}
}
Пример #4
0
VOID BASessionTearDownALL(
						 IN OUT  PRTMP_ADAPTER pAd, 
						 IN      UCHAR Wcid)
{
	int i;

	for (i=0; i<NUM_OF_TID; i++)
	{
		BAOriSessionTearDown(pAd, Wcid, i, FALSE, FALSE);
		BARecSessionTearDown(pAd, Wcid, i, FALSE);
	}
}
Пример #5
0
VOID TDDFDDCoexBACapability( 
 IN PRTMP_ADAPTER pAd,
 UCHAR CoexMode )
{
	//PRTMP_PORT	pPort = RTMPGetActivePort(pAd);
	MAC_TABLE_ENTRY *pEntry;
	pEntry = &pAd->MacTab.Content[BSSID_WCID];

	if (!(IS_MT7650(pAd) || IS_MT7630(pAd) || IS_MT76x2(pAd)))
	{
		return;
	}

	if (!(INFRA_ON(pAd)))
		return;
	
	if (CoexMode == COEX_MODE_TDD)
	{
		if (BT_STATUS_TEST_FLAG(pAd, fBTSTATUS_BT_BWL))
		{
			// Update BAWinLimit
			if (pAd->CommonCfg.BACapability.field.RxBAWinLimit != COEX_BARXSIZE_A2DP)
			{
				pAd->CommonCfg.BACapability.field.RxBAWinLimit = COEX_BARXSIZE_A2DP;
				//pAd->CommonCfg.BACapability.field.TxBAWinLimit = 0x40;
				
				//pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word;	
	
				//BATableTearRECEntry(pAd, pPort, 0, BSSID_WCID,TRUE);
				//BATableTearORIEntry(pAd, pPort, 0, BSSID_WCID, TRUE, TRUE);
				BAOriSessionTearDown(pAd, BSSID_WCID, 0, FALSE, FALSE);
				BARecSessionTearDown(pAd, BSSID_WCID, 0, FALSE);
				//expect to build BA
				DBGPRINT(RT_DEBUG_TRACE, ("COEX: TDD mode: Set RxBASize to %d\n", pAd->CoexMode.RxBAWinLimit));
				BAOriSessionSetUp(pAd, pEntry, 0, 0, 100, TRUE);
			}
		}
		else if (BT_STATUS_TEST_FLAG(pAd, fBTSTATUS_BT_SYNC))
		{
			// Update BAWinLimit
			if (pAd->CommonCfg.BACapability.field.RxBAWinLimit != COEX_BARXSIZE_SCO_ESCO)
			{
				pAd->CommonCfg.BACapability.field.RxBAWinLimit = COEX_BARXSIZE_SCO_ESCO;
				//pAd->CommonCfg.BACapability.field.TxBAWinLimit = 0x40;
				
				//pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word;	

				//BATableTearRECEntry(pAd, pPort, 0, BSSID_WCID,TRUE);
				//BATableTearORIEntry(pAd, pPort, 0, BSSID_WCID, TRUE, TRUE);
				BAOriSessionTearDown(pAd, BSSID_WCID, 0, FALSE, FALSE);
				BARecSessionTearDown(pAd, BSSID_WCID, 0, FALSE);
				//expect to build BA
				DBGPRINT(RT_DEBUG_TRACE, ("COEX: TDD mode: Set RxBASize to %d\n", pAd->CoexMode.RxBAWinLimit));
				BAOriSessionSetUp(pAd, pEntry, 0, 0, 100, TRUE);	
			}
		}
		else 
		{
			// Update BAWinLimit
			if (pAd->CommonCfg.BACapability.field.RxBAWinLimit != COEX_BARXSIZE_OPP)
			{
				pAd->CommonCfg.BACapability.field.RxBAWinLimit = COEX_BARXSIZE_OPP;
				//pAd->CommonCfg.BACapability.field.TxBAWinLimit = 0x40;
				
				//pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word;	

				//BATableTearRECEntry(pAd, pPort, 0, BSSID_WCID,TRUE);
				//BATableTearORIEntry(pAd, pPort, 0, BSSID_WCID, TRUE, TRUE);
				BAOriSessionTearDown(pAd, BSSID_WCID, 0, FALSE, FALSE);
				BARecSessionTearDown(pAd, BSSID_WCID, 0, FALSE);
				//expect to build BA
				DBGPRINT(RT_DEBUG_TRACE, ("COEX: TDD mode: Set RxBASize to %d\n", pAd->CoexMode.RxBAWinLimit));
				BAOriSessionSetUp(pAd, pEntry, 0, 0, 100, TRUE);	
			}
		}
		// Need to consider 5G cases
	}
	else if  (CoexMode == COEX_MODE_FDD || CoexMode == COEX_MODE_RESET)
	{
		// Update BAWinLimit
		if (pAd->CommonCfg.BACapability.field.RxBAWinLimit != pAd->CommonCfg.REGBACapability.field.RxBAWinLimit )
		{		
			pAd->CommonCfg.BACapability.field.RxBAWinLimit = pAd->CommonCfg.REGBACapability.field.RxBAWinLimit;
			pAd->CommonCfg.BACapability.field.TxBAWinLimit = pAd->CommonCfg.REGBACapability.field.TxBAWinLimit;
			
			//pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word;	

			//BATableTearRECEntry(pAd, pPort, 0, BSSID_WCID,TRUE);
			//BATableTearORIEntry(pAd, pPort, 0, BSSID_WCID, TRUE, TRUE);
			BAOriSessionTearDown(pAd, BSSID_WCID, 0, FALSE, FALSE);
			BARecSessionTearDown(pAd, BSSID_WCID, 0, FALSE);
			DBGPRINT(RT_DEBUG_TRACE, ("COEX: FDD (Reset)mode: Set RxBASize to %d\n", pAd->CoexMode.RxBAWinLimit));
			//expect to build BA
			BAOriSessionSetUp(pAd, pEntry, 0, 0, 100, TRUE);
		}
	}
}