// // ADDBA initiate. This can only be called by TX side. // void TsInitAddBA( struct ieee80211_device *ieee, PTX_TS_RECORD pTS, u8 Policy, u8 bOverwritePending ) { PBA_RECORD pBA = &pTS->TxPendingBARecord; if (pBA->bValid && !bOverwritePending) return; // Set parameters to "Pending" variable set DeActivateBAEntry(ieee, pBA); pBA->DialogToken++; // DialogToken: Only keep the latest dialog token pBA->BaParamSet.field.AMSDU_Support = 0; // Do not support A-MSDU with A-MPDU now!! pBA->BaParamSet.field.BAPolicy = Policy; // Policy: Delayed or Immediate pBA->BaParamSet.field.TID = pTS->TsCommonInfo.TSpec.f.TSInfo.field.ucTSID; // TID // BufferSize: This need to be set according to A-MPDU vector pBA->BaParamSet.field.BufferSize = 32; // BufferSize: This need to be set according to A-MPDU vector pBA->BaTimeoutValue = 0; // Timeout value: Set 0 to disable Timer pBA->BaStartSeqCtrl.field.SeqNum = (pTS->TxCurSeq + 3) % 4096; // Block Ack will start after 3 packets later. ActivateBAEntry(ieee, pBA, BA_SETUP_TIMEOUT); ieee80211_send_ADDBAReq(ieee, pTS->TsCommonInfo.Addr, pBA); }
void TsInitAddBA( struct ieee80211_device* ieee, PTX_TS_RECORD pTS, u8 Policy, u8 bOverwritePending ) { PBA_RECORD pBA = &pTS->TxPendingBARecord; if(pBA->bValid==true && bOverwritePending==false) return; // DeActivateBAEntry(ieee, pBA); pBA->DialogToken++; // pBA->BaParamSet.field.AMSDU_Support = 0; // pBA->BaParamSet.field.BAPolicy = Policy; // pBA->BaParamSet.field.TID = pTS->TsCommonInfo.TSpec.f.TSInfo.field.ucTSID; // // pBA->BaParamSet.field.BufferSize = 32; // pBA->BaTimeoutValue = 0; // pBA->BaStartSeqCtrl.field.SeqNum = (pTS->TxCurSeq + 3) % 4096; // ActivateBAEntry(ieee, pBA, BA_SETUP_TIMEOUT); ieee80211_send_ADDBAReq(ieee, pTS->TsCommonInfo.Addr, pBA); }