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); } } }
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); } } }
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); } }
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); } }
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); } } }