summaryrefslogtreecommitdiff
path: root/drivers/staging/rt3090/ap_uapsd.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rt3090/ap_uapsd.h')
-rw-r--r--drivers/staging/rt3090/ap_uapsd.h636
1 files changed, 0 insertions, 636 deletions
diff --git a/drivers/staging/rt3090/ap_uapsd.h b/drivers/staging/rt3090/ap_uapsd.h
deleted file mode 100644
index d49a9e7500b4..000000000000
--- a/drivers/staging/rt3090/ap_uapsd.h
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * 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., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
-
- Module Name:
- ap_uapsd.h
-
- Abstract:
- Miniport generic portion header file
-
- Revision History:
- Who When What
- -------- ---------- ----------------------------------------------
-*/
-
-/* only for UAPSD_TIMING_RECORD */
-
-//#define UAPSD_TIMING_RECORD_FUNC
-
-#define UAPSD_TIMING_RECORD_MAX 1000
-#define UAPSD_TIMING_RECORD_DISPLAY_TIMES 10
-
-#define UAPSD_TIMING_RECORD_ISR 1
-#define UAPSD_TIMING_RECORD_TASKLET 2
-#define UAPSD_TIMING_RECORD_TRG_RCV 3
-#define UAPSD_TIMING_RECORD_MOVE2TX 4
-#define UAPSD_TIMING_RECORD_TX2AIR 5
-
-#define UAPSD_TIMING_CTRL_STOP 0
-#define UAPSD_TIMING_CTRL_START 1
-#define UAPSD_TIMING_CTRL_SUSPEND 2
-
-#define UAPSD_TIMESTAMP_GET(__pAd, __TimeStamp) \
- { \
- UINT32 __CSR=0; UINT64 __Value64; \
- RTMP_IO_READ32((__pAd), TSF_TIMER_DW0, &__CSR); \
- __TimeStamp = (UINT64)__CSR; \
- RTMP_IO_READ32((__pAd), TSF_TIMER_DW1, &__CSR); \
- __Value64 = (UINT64)__CSR; \
- __TimeStamp |= (__Value64 << 32); \
- }
-
-#ifdef LINUX
-#define UAPSD_TIME_GET(__pAd, __Time) \
- __Time = jiffies
-#endif // LINUX //
-
-
-#ifdef UAPSD_TIMING_RECORD_FUNC
-#define UAPSD_TIMING_RECORD_START() \
- UAPSD_TimingRecordCtrl(UAPSD_TIMING_CTRL_START);
-#define UAPSD_TIMING_RECORD_STOP() \
- UAPSD_TimingRecordCtrl(UAPSD_TIMING_CTRL_STOP);
-#define UAPSD_TIMING_RECORD(__pAd, __Type) \
- UAPSD_TimingRecord(__pAd, __Type);
-#define UAPSD_TIMING_RECORD_INDEX(__LoopIndex) \
- UAPSD_TimeingRecordLoopIndex(__LoopIndex);
-#else
-
-#define UAPSD_TIMING_RECORD_START()
-#define UAPSD_TIMING_RECORD_STOP()
-#define UAPSD_TIMING_RECORD(__pAd, __type)
-#define UAPSD_TIMING_RECORD_INDEX(__LoopIndex)
-#endif // UAPSD_TIMING_RECORD_FUNC //
-
-
-#ifndef MODULE_WMM_UAPSD
-
-#define UAPSD_EXTERN extern
-
-/* Public Marco list */
-
-/*
- Init some parameters in packet structure for QoS Null frame;
- purpose: is for management frame tx done use
-*/
-#define UAPSD_MR_QOS_NULL_HANDLE(__pAd, __pData, __pPacket) \
- { \
- PHEADER_802_11 __pHeader = (PHEADER_802_11)(__pData); \
- MAC_TABLE_ENTRY *__pEntry; \
- if (__pHeader->FC.SubType == SUBTYPE_QOS_NULL) \
- { \
- RTMP_SET_PACKET_QOS_NULL((__pPacket)); \
- __pEntry = MacTableLookup((__pAd), __pHeader->Addr1); \
- if (__pEntry != NULL) \
- { \
- RTMP_SET_PACKET_WCID((__pPacket), __pEntry->Aid); \
- } \
- } \
- else \
- { \
- RTMP_SET_PACKET_NON_QOS_NULL((__pPacket)); \
- } \
- }
-
-/*
- Init MAC entry UAPSD parameters;
- purpose: initialize UAPSD PS queue and control parameters
-*/
-#define UAPSD_MR_ENTRY_INIT(__pEntry) \
- { \
- UINT16 __IdAc; \
- for(__IdAc=0; __IdAc<WMM_NUM_OF_AC; __IdAc++) \
- InitializeQueueHeader(&(__pEntry)->UAPSDQueue[__IdAc]); \
- (__pEntry)->UAPSDTxNum = 0; \
- (__pEntry)->pUAPSDEOSPFrame = NULL; \
- (__pEntry)->bAPSDFlagSPStart = 0; \
- (__pEntry)->bAPSDFlagEOSPOK = 0; \
- (__pEntry)->MaxSPLength = 0; \
- }
-
-/*
- Reset MAC entry UAPSD parameters;
- purpose: clean all UAPSD PS queue; release the EOSP frame if exists;
- reset control parameters
-*/
-#define UAPSD_MR_ENTRY_RESET(__pAd, __pEntry) \
- { \
- MAC_TABLE_ENTRY *__pSta; \
- UINT32 __IdAc; \
- __pSta = (__pEntry); \
- /* clear all U-APSD queues */ \
- for(__IdAc=0; __IdAc<WMM_NUM_OF_AC; __IdAc++) \
- APCleanupPsQueue((__pAd), &__pSta->UAPSDQueue[__IdAc]); \
- /* clear EOSP frame */ \
- __pSta->UAPSDTxNum = 0; \
- if (__pSta->pUAPSDEOSPFrame != NULL) { \
- RELEASE_NDIS_PACKET((__pAd), \
- QUEUE_ENTRY_TO_PACKET(__pSta->pUAPSDEOSPFrame), \
- NDIS_STATUS_FAILURE); \
- __pSta->pUAPSDEOSPFrame = NULL; } \
- __pSta->bAPSDFlagSPStart = 0; \
- __pSta->bAPSDFlagEOSPOK = 0; }
-
-/*
- Enable or disable UAPSD flag in WMM element in beacon frame;
- purpose: set UAPSD enable/disable bit
-*/
-#define UAPSD_MR_IE_FILL(__QosCtrlField, __pAd) \
- (__QosCtrlField) |= ((__pAd)->CommonCfg.bAPSDCapable) ? 0x80 : 0x00;
-
-/*
- Check if we do NOT need to control TIM bit for the station;
- note: we control TIM bit only when all AC are UAPSD AC
-*/
-#define UAPSD_MR_IS_NOT_TIM_BIT_NEEDED_HANDLED(__pMacEntry, __QueIdx) \
- (CLIENT_STATUS_TEST_FLAG((__pMacEntry), fCLIENT_STATUS_APSD_CAPABLE) && \
- (!(__pMacEntry)->bAPSDDeliverEnabledPerAC[QID_AC_VO] || \
- !(__pMacEntry)->bAPSDDeliverEnabledPerAC[QID_AC_VI] || \
- !(__pMacEntry)->bAPSDDeliverEnabledPerAC[QID_AC_BE] || \
- !(__pMacEntry)->bAPSDDeliverEnabledPerAC[QID_AC_BK]) && \
- (__pMacEntry)->bAPSDDeliverEnabledPerAC[__QueIdx])
-
-/* check if the AC is UAPSD delivery-enabled AC */
-#define UAPSD_MR_IS_UAPSD_AC(__pMacEntry, __AcId) \
- (CLIENT_STATUS_TEST_FLAG((__pMacEntry), fCLIENT_STATUS_APSD_CAPABLE) && \
- ((0 <= (__AcId)) && ((__AcId) < WMM_NUM_OF_AC)) && /* 0 ~ 3 */ \
- (__pMacEntry)->bAPSDDeliverEnabledPerAC[(__AcId)])
-
-/* check if all AC are UAPSD delivery-enabled AC */
-#define UAPSD_MR_IS_ALL_AC_UAPSD(__FlgIsActive, __pMacEntry) \
- (((__FlgIsActive) == FALSE) && ((__pMacEntry)->bAPSDAllAC == 1))
-
-/* suspend SP */
-#define UAPSD_MR_SP_SUSPEND(__pAd) \
- (__pAd)->bAPSDFlagSPSuspend = 1;
-
-/* resume SP */
-#define UAPSD_MR_SP_RESUME(__pAd) \
- (__pAd)->bAPSDFlagSPSuspend = 0;
-
-/* mark PS poll frame sent in mix mode */
-#ifdef RTMP_MAC_PCI
-/*
- Note:
- (1) When SP is not started, try to mark a flag to record if the legacy ps
- packet is handled in statistics handler;
- (2) When SP is started, increase the UAPSD count number for the legacy PS.
-*/
-#define UAPSD_MR_MIX_PS_POLL_RCV(__pAd, __pMacEntry) \
- if ((__pMacEntry)->bAPSDFlagSpRoughUse == 0) \
- { \
- if ((__pMacEntry)->bAPSDFlagSPStart == 0) \
- { \
- if ((__pMacEntry)->bAPSDFlagLegacySent == 1) \
- NICUpdateFifoStaCounters((__pAd)); \
- (__pMacEntry)->bAPSDFlagLegacySent = 1; \
- } \
- else \
- { \
- (__pMacEntry)->UAPSDTxNum ++; \
- } \
- }
-#endif // RTMP_MAC_PCI //
-
-
-#else
-
-#define UAPSD_EXTERN
-#define UAPSD_QOS_NULL_QUE_ID 0x7f
-
-#ifdef RTMP_MAC_PCI
-/*
- In RT2870, FIFO counter is for all stations, not for per-entry,
- so we can not use accurate method in RT2870
-*/
-
-/*
- Note for SP ACCURATE Mechanism:
- 1. When traffic is busy for the PS station
- Statistics FIFO counter maybe overflow before we read it, so UAPSD
- counting mechanism will not accurately.
-
- Solution:
- We need to avoid the worse case so we suggest a maximum interval for
- a SP that the interval between last frame from QAP and data frame from
- QSTA is larger than UAPSD_EPT_SP_INT.
-
- 2. When traffic use CCK/1Mbps from QAP
- Statistics FIFO will not count the packet. There are 2 cases:
- (1) We force to downgrage ARP response & DHCP packet to 1Mbps;
- (2) After rate switch mechanism, tx rate is fixed to 1Mbps.
-
- Solution:
- Use old DMA UAPSD mechanism.
-
- 3. When part of AC uses legacy PS mode
- Statistics count will inclue packet statistics for legacy PS packets
- so we can not know which one is UAPSD, which one is legacy.
-
- Solution:
- Cound the legacy PS packet.
-
- 4. Check FIFO statistics count in Rx Done function
- We can not to check TX FIFO statistics count in Rx Done function or
- the real packet tx/rx sequence will be disarranged.
-
- Solution:
- Suspend SP handle before rx done and resume SP handle after rx done.
-*/
-#define UAPSD_SP_ACCURATE /* use more accurate method to send EOSP */
-#endif // RTMP_MAC_PCI //
-
-#define UAPSD_EPT_SP_INT (100000/(1000000/OS_HZ)) /* 100ms */
-
-#endif // MODULE_WMM_UAPSD //
-
-
-/* max UAPSD buffer queue size */
-#define MAX_PACKETS_IN_UAPSD_QUEUE 16 /* for each AC = 16*4 = 64 */
-
-
-/* Public function list */
-/*
-========================================================================
-Routine Description:
- UAPSD Module Init.
-
-Arguments:
- pAd Pointer to our adapter
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_Init(
- IN PRTMP_ADAPTER pAd);
-
-
-/*
-========================================================================
-Routine Description:
- UAPSD Module Release.
-
-Arguments:
- pAd Pointer to our adapter
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_Release(
- IN PRTMP_ADAPTER pAd);
-
-
-/*
-========================================================================
-Routine Description:
- Free all EOSP frames and close all SP.
-
-Arguments:
- pAd Pointer to our adapter
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_FreeAll(
- IN PRTMP_ADAPTER pAd);
-
-
-/*
-========================================================================
-Routine Description:
- Close current Service Period.
-
-Arguments:
- pAd Pointer to our adapter
- pEntry Close the SP of the entry
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_SP_Close(
- IN PRTMP_ADAPTER pAd,
- IN MAC_TABLE_ENTRY *pEntry);
-
-
-/*
-========================================================================
-Routine Description:
- Deliver all queued packets.
-
-Arguments:
- pAd Pointer to our adapter
- *pEntry STATION
-
-Return Value:
- None
-
-Note:
- SMP protection by caller for packet enqueue.
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_AllPacketDeliver(
- IN PRTMP_ADAPTER pAd,
- IN MAC_TABLE_ENTRY *pEntry);
-
-
-/*
-========================================================================
-Routine Description:
- Parse the UAPSD field in WMM element in (re)association request frame.
-
-Arguments:
- pAd Pointer to our adapter
- *pEntry STATION
- *pElm QoS information field
-
-Return Value:
- None
-
-Note:
- No protection is needed.
-
- 1. Association -> TSPEC:
- use static UAPSD settings in Association
- update UAPSD settings in TSPEC
-
- 2. Association -> TSPEC(11r) -> Reassociation:
- update UAPSD settings in TSPEC
- backup static UAPSD settings in Reassociation
-
- 3. Association -> Reassociation:
- update UAPSD settings in TSPEC
- backup static UAPSD settings in Reassociation
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_AssocParse(
- IN PRTMP_ADAPTER pAd,
- IN MAC_TABLE_ENTRY *pEntry,
- IN UCHAR *pElm);
-
-
-/*
-========================================================================
-Routine Description:
- Enqueue a UAPSD packet.
-
-Arguments:
- pAd Pointer to our adapter
- *pEntry STATION
- pPacket UAPSD dnlink packet
- IdAc UAPSD AC ID (0 ~ 3)
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_PacketEnqueue(
- IN PRTMP_ADAPTER pAd,
- IN MAC_TABLE_ENTRY *pEntry,
- IN PNDIS_PACKET pPacket,
- IN UINT32 IdAc);
-
-
-/*
-========================================================================
-Routine Description:
- Handle QoS Null Frame Tx Done or Management Tx Done interrupt.
-
-Arguments:
- pAd Pointer to our adapter
- pPacket Completed TX packet
- pDstMac Destinated MAC address
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_QoSNullTxMgmtTxDoneHandle(
- IN PRTMP_ADAPTER pAd,
- IN PNDIS_PACKET pPacket,
- IN UCHAR *pDstMac);
-
-
-/*
-========================================================================
-Routine Description:
- Maintenance our UAPSD PS queue. Release all queued packet if timeout.
-
-Arguments:
- pAd Pointer to our adapter
- *pEntry STATION
-
-Return Value:
- None
-
-Note:
- If in RT2870, pEntry can not be removed during UAPSD_QueueMaintenance()
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_QueueMaintenance(
- IN PRTMP_ADAPTER pAd,
- IN MAC_TABLE_ENTRY *pEntry);
-
-
-/*
-========================================================================
-Routine Description:
- Close SP in Tx Done, not Tx DMA Done.
-
-Arguments:
- pAd Pointer to our adapter
- pEntry destination entry
- FlgSuccess 0:tx success, 1:tx fail
-
-Return Value:
- None
-
-Note:
- For RT28xx series, for packetID=0 or multicast frame, no statistics
- count can be got, ex: ARP response or DHCP packets, we will use
- low rate to set (CCK, MCS=0=packetID).
- So SP will not be close until UAPSD_EPT_SP_INT timeout.
-
- So if the tx rate is 1Mbps for a entry, we will use DMA done, not
- use UAPSD_SP_AUE_Handle().
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_SP_AUE_Handle(
- IN RTMP_ADAPTER *pAd,
- IN MAC_TABLE_ENTRY *pEntry,
- IN UCHAR FlgSuccess);
-
-
-/*
-========================================================================
-Routine Description:
- Close current Service Period.
-
-Arguments:
- pAd Pointer to our adapter
-
-Return Value:
- None
-
-Note:
- When we receive EOSP frame tx done interrupt and a uplink packet
- from the station simultaneously, we will regard it as a new trigger
- frame because the packet is received when EOSP frame tx done interrupt.
-
- We can not sure the uplink packet is sent after old SP or in the old SP.
- So we must close the old SP in receive done ISR to avoid the problem.
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_SP_CloseInRVDone(
- IN PRTMP_ADAPTER pAd);
-
-
-/*
-========================================================================
-Routine Description:
- Check if we need to close current SP.
-
-Arguments:
- pAd Pointer to our adapter
- pPacket Completed TX packet
- pDstMac Destinated MAC address
-
-Return Value:
- None
-
-Note:
- 1. We need to call the function in TxDone ISR.
- 2. SMP protection by caller for packet enqueue.
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_SP_PacketCheck(
- IN PRTMP_ADAPTER pAd,
- IN PNDIS_PACKET pPacket,
- IN UCHAR *pDstMac);
-
-
-#ifdef UAPSD_TIMING_RECORD_FUNC
-/*
-========================================================================
-Routine Description:
- Enable/Disable Timing Record Function.
-
-Arguments:
- pAd Pointer to our adapter
- Flag 1 (Enable) or 0 (Disable)
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_TimingRecordCtrl(
- IN UINT32 Flag);
-
-/*
-========================================================================
-Routine Description:
- Record some timings.
-
-Arguments:
- pAd Pointer to our adapter
- Type The timing is for what type
-
-Return Value:
- None
-
-Note:
- UAPSD_TIMING_RECORD_ISR
- UAPSD_TIMING_RECORD_TASKLET
- UAPSD_TIMING_RECORD_TRG_RCV
- UAPSD_TIMING_RECORD_MOVE2TX
- UAPSD_TIMING_RECORD_TX2AIR
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_TimingRecord(
- IN PRTMP_ADAPTER pAd,
- IN UINT32 Type);
-
-/*
-========================================================================
-Routine Description:
- Record the loop index for received packet handle.
-
-Arguments:
- pAd Pointer to our adapter
- LoopIndex The RxProcessed in APRxDoneInterruptHandle()
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_TimeingRecordLoopIndex(
- IN UINT32 LoopIndex);
-#endif // UAPSD_TIMING_RECORD_FUNC //
-
-
-/*
-========================================================================
-Routine Description:
- Handle UAPSD Trigger Frame.
-
-Arguments:
- pAd Pointer to our adapter
- *pEntry the source STATION
- UpOfFrame the UP of the trigger frame
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-UAPSD_EXTERN VOID UAPSD_TriggerFrameHandle(
- IN PRTMP_ADAPTER pAd,
- IN MAC_TABLE_ENTRY *pEntry,
- IN UCHAR UpOfFrame);
-
-
-
-/* End of ap_uapsd.h */