|
@@ -1,3 +1,21 @@
|
|
|
+/******************************************************************************
|
|
|
+ * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
|
|
|
+ *
|
|
|
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
|
+ * more details.
|
|
|
+ *
|
|
|
+ * You should have received a copy of the GNU General Public License along with
|
|
|
+ * this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
|
|
+ *
|
|
|
+ * The full GNU General Public License is included in this distribution in the
|
|
|
+ * file called LICENSE.
|
|
|
+ *
|
|
|
+ * Contact Information:
|
|
|
+ * wlanfae <wlanfae@realtek.com>
|
|
|
+******************************************************************************/
|
|
|
#include "ieee80211.h"
|
|
|
#include <linux/etherdevice.h>
|
|
|
#include <linux/slab.h>
|
|
@@ -29,7 +47,6 @@ void RxPktPendingTimeout(unsigned long data)
|
|
|
|
|
|
PRX_REORDER_ENTRY pReorderEntry = NULL;
|
|
|
|
|
|
- //u32 flags = 0;
|
|
|
unsigned long flags = 0;
|
|
|
struct ieee80211_rxb *stats_IndicateArray[REORDER_WIN_SIZE];
|
|
|
u8 index = 0;
|
|
@@ -37,7 +54,6 @@ void RxPktPendingTimeout(unsigned long data)
|
|
|
|
|
|
|
|
|
spin_lock_irqsave(&(ieee->reorder_spinlock), flags);
|
|
|
- //PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK);
|
|
|
IEEE80211_DEBUG(IEEE80211_DL_REORDER,"==================>%s()\n",__FUNCTION__);
|
|
|
if(pRxTs->RxTimeoutIndicateSeq != 0xffff)
|
|
|
{
|
|
@@ -72,7 +88,6 @@ void RxPktPendingTimeout(unsigned long data)
|
|
|
|
|
|
if(index>0)
|
|
|
{
|
|
|
- // Set RxTimeoutIndicateSeq to 0xffff to indicate no pending packets in buffer now.
|
|
|
pRxTs->RxTimeoutIndicateSeq = 0xffff;
|
|
|
|
|
|
// Indicate packets
|
|
@@ -82,6 +97,7 @@ void RxPktPendingTimeout(unsigned long data)
|
|
|
return;
|
|
|
}
|
|
|
ieee80211_indicate_packets(ieee, stats_IndicateArray, index);
|
|
|
+ bPktInBuf = false;
|
|
|
}
|
|
|
|
|
|
if(bPktInBuf && (pRxTs->RxTimeoutIndicateSeq==0xffff))
|
|
@@ -126,6 +142,7 @@ void ResetTxTsEntry(PTX_TS_RECORD pTS)
|
|
|
pTS->bAddBaReqInProgress = false;
|
|
|
pTS->bAddBaReqDelayed = false;
|
|
|
pTS->bUsingBa = false;
|
|
|
+ pTS->bDisable_AddBa = false;
|
|
|
ResetBaEntry(&pTS->TxAdmittedBARecord); //For BA Originator
|
|
|
ResetBaEntry(&pTS->TxPendingBARecord);
|
|
|
}
|
|
@@ -212,7 +229,6 @@ void TSInitialize(struct ieee80211_device *ieee)
|
|
|
}
|
|
|
// Initialize unused Rx Reorder List.
|
|
|
INIT_LIST_HEAD(&ieee->RxReorder_Unused_List);
|
|
|
-//#ifdef TO_DO_LIST
|
|
|
for(count = 0; count < REORDER_ENTRY_NUM; count++)
|
|
|
{
|
|
|
list_add_tail( &pRxReorderEntry->List,&ieee->RxReorder_Unused_List);
|
|
@@ -220,7 +236,6 @@ void TSInitialize(struct ieee80211_device *ieee)
|
|
|
break;
|
|
|
pRxReorderEntry = &ieee->RxReorderEntry[count+1];
|
|
|
}
|
|
|
-//#endif
|
|
|
|
|
|
}
|
|
|
|
|
@@ -236,7 +251,6 @@ void AdmitTS(struct ieee80211_device *ieee, PTS_COMMON_INFO pTsCommonInfo, u32 I
|
|
|
|
|
|
PTS_COMMON_INFO SearchAdmitTRStream(struct ieee80211_device *ieee, u8* Addr, u8 TID, TR_SELECT TxRxSelect)
|
|
|
{
|
|
|
- //DIRECTION_VALUE dir;
|
|
|
u8 dir;
|
|
|
bool search_dir[4] = {0, 0, 0, 0};
|
|
|
struct list_head* psearch_list; //FIXME
|
|
@@ -282,18 +296,15 @@ PTS_COMMON_INFO SearchAdmitTRStream(struct ieee80211_device *ieee, u8* Addr, u8
|
|
|
else
|
|
|
psearch_list = &ieee->Rx_TS_Admit_List;
|
|
|
|
|
|
- //for(dir = DIR_UP; dir <= DIR_BI_DIR; dir++)
|
|
|
for(dir = 0; dir <= DIR_BI_DIR; dir++)
|
|
|
{
|
|
|
if(search_dir[dir] ==false )
|
|
|
continue;
|
|
|
list_for_each_entry(pRet, psearch_list, List){
|
|
|
- // IEEE80211_DEBUG(IEEE80211_DL_TS, "ADD:%pM, TID:%d, dir:%d\n", pRet->Addr, pRet->TSpec.f.TSInfo.field.ucTSID, pRet->TSpec.f.TSInfo.field.ucDirection);
|
|
|
if (memcmp(pRet->Addr, Addr, 6) == 0)
|
|
|
if (pRet->TSpec.f.TSInfo.field.ucTSID == TID)
|
|
|
if(pRet->TSpec.f.TSInfo.field.ucDirection == dir)
|
|
|
{
|
|
|
- // printk("Bingo! got it\n");
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -352,10 +363,9 @@ bool GetTs(
|
|
|
//
|
|
|
if(is_broadcast_ether_addr(Addr) || is_multicast_ether_addr(Addr))
|
|
|
{
|
|
|
- IEEE80211_DEBUG(IEEE80211_DL_ERR, "get TS for Broadcast or Multicast\n");
|
|
|
+ IEEE80211_DEBUG(IEEE80211_DL_ERR, "ERR! get TS for Broadcast or Multicast\n");
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
if (ieee->current_network.qos_data.supported == 0)
|
|
|
UP = 0;
|
|
|
else
|
|
@@ -363,7 +373,7 @@ bool GetTs(
|
|
|
// In WMM case: we use 4 TID only
|
|
|
if (!IsACValid(TID))
|
|
|
{
|
|
|
- IEEE80211_DEBUG(IEEE80211_DL_ERR, " in %s(), TID(%d) is not valid\n", __FUNCTION__, TID);
|
|
|
+ IEEE80211_DEBUG(IEEE80211_DL_ERR, "ERR! in %s(), TID(%d) is not valid\n", __FUNCTION__, TID);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -478,7 +488,6 @@ void RemoveTsEntry(
|
|
|
TR_SELECT TxRxSelect
|
|
|
)
|
|
|
{
|
|
|
- //u32 flags = 0;
|
|
|
unsigned long flags = 0;
|
|
|
del_timer_sync(&pTs->SetupTimer);
|
|
|
del_timer_sync(&pTs->InactTimer);
|
|
@@ -486,7 +495,6 @@ void RemoveTsEntry(
|
|
|
|
|
|
if(TxRxSelect == RX_DIR)
|
|
|
{
|
|
|
-//#ifdef TO_DO_LIST
|
|
|
PRX_REORDER_ENTRY pRxReorderEntry;
|
|
|
PRX_TS_RECORD pRxTS = (PRX_TS_RECORD)pTs;
|
|
|
if(timer_pending(&pRxTS->RxPktPendingTimer))
|
|
@@ -494,9 +502,7 @@ void RemoveTsEntry(
|
|
|
|
|
|
while(!list_empty(&pRxTS->RxPendingPktList))
|
|
|
{
|
|
|
- // PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK);
|
|
|
spin_lock_irqsave(&(ieee->reorder_spinlock), flags);
|
|
|
- //pRxReorderEntry = list_entry(&pRxTS->RxPendingPktList.prev,RX_REORDER_ENTRY,List);
|
|
|
pRxReorderEntry = (PRX_REORDER_ENTRY)list_entry(pRxTS->RxPendingPktList.prev,RX_REORDER_ENTRY,List);
|
|
|
list_del_init(&pRxReorderEntry->List);
|
|
|
{
|
|
@@ -514,11 +520,8 @@ void RemoveTsEntry(
|
|
|
prxb = NULL;
|
|
|
}
|
|
|
list_add_tail(&pRxReorderEntry->List,&ieee->RxReorder_Unused_List);
|
|
|
- //PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK);
|
|
|
spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags);
|
|
|
}
|
|
|
-
|
|
|
-//#endif
|
|
|
}
|
|
|
else
|
|
|
{
|