Staging: rtxxx0: unify different RT30xx{Read,Write}RFRegister() flavors
[pandora-kernel.git] / drivers / staging / rt2860 / rtmp.h
index 002960a..99f9ebc 100644 (file)
 #include "link_list.h"
 #include "spectrum_def.h"
 
-
-#ifdef CONFIG_STA_SUPPORT
 #include "aironet.h"
-#endif // CONFIG_STA_SUPPORT //
 
 //#define DBG_DIAGNOSE         1
 
-#if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
-#define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)       if(_pAd->OpMode == OPMODE_AP)
-#define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)      if(_pAd->OpMode == OPMODE_STA)
-#else
-#define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
-#define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
-#endif
-
 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
 
+#ifdef RT2870
+////////////////////////////////////////////////////////////////////////////
+// The TX_BUFFER structure forms the transmitted USB packet to the device
+////////////////////////////////////////////////////////////////////////////
+typedef struct __TX_BUFFER{
+       union   {
+               UCHAR                   WirelessPacket[TX_BUFFER_NORMSIZE];
+               HEADER_802_11   NullFrame;
+               PSPOLL_FRAME    PsPollPacket;
+               RTS_FRAME               RTSFrame;
+       }field;
+       UCHAR                   Aggregation[4];  //Buffer for save Aggregation size.
+} TX_BUFFER, *PTX_BUFFER;
+
+typedef struct __HTTX_BUFFER{
+       union   {
+               UCHAR                   WirelessPacket[MAX_TXBULK_SIZE];
+               HEADER_802_11   NullFrame;
+               PSPOLL_FRAME    PsPollPacket;
+               RTS_FRAME               RTSFrame;
+       }field;
+       UCHAR                   Aggregation[4];  //Buffer for save Aggregation size.
+} HTTX_BUFFER, *PHTTX_BUFFER;
+
+
+// used to track driver-generated write irps
+typedef struct _TX_CONTEXT
+{
+       PVOID                   pAd;            //Initialized in MiniportInitialize
+       PURB                    pUrb;                   //Initialized in MiniportInitialize
+       PIRP                    pIrp;                   //used to cancel pending bulk out.
+                                                                       //Initialized in MiniportInitialize
+       PTX_BUFFER              TransferBuffer; //Initialized in MiniportInitialize
+       ULONG                   BulkOutSize;
+       UCHAR                   BulkOutPipeId;
+       UCHAR                   SelfIdx;
+       BOOLEAN                 InUse;
+       BOOLEAN                 bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
+       BOOLEAN                 bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
+       BOOLEAN                 IRPPending;
+       BOOLEAN                 LastOne;
+       BOOLEAN                 bAggregatible;
+       UCHAR                   Header_802_3[LENGTH_802_3];
+       UCHAR                   Rsv[2];
+       ULONG                   DataOffset;
+       UINT                    TxRate;
+       dma_addr_t              data_dma;               // urb dma on linux
+
+}      TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
+
+
+// used to track driver-generated write irps
+typedef struct _HT_TX_CONTEXT
+{
+       PVOID                   pAd;            //Initialized in MiniportInitialize
+       PURB                    pUrb;                   //Initialized in MiniportInitialize
+       PIRP                    pIrp;                   //used to cancel pending bulk out.
+                                                                       //Initialized in MiniportInitialize
+       PHTTX_BUFFER    TransferBuffer; //Initialized in MiniportInitialize
+       ULONG                   BulkOutSize;    // Indicate the total bulk-out size in bytes in one bulk-transmission
+       UCHAR                   BulkOutPipeId;
+       BOOLEAN                 IRPPending;
+       BOOLEAN                 LastOne;
+       BOOLEAN                 bCurWriting;
+       BOOLEAN                 bRingEmpty;
+       BOOLEAN                 bCopySavePad;
+       UCHAR                   SavedPad[8];
+       UCHAR                   Header_802_3[LENGTH_802_3];
+       ULONG                   CurWritePosition;               // Indicate the buffer offset which packet will be inserted start from.
+       ULONG                   CurWriteRealPos;                // Indicate the buffer offset which packet now are writing to.
+       ULONG                   NextBulkOutPosition;    // Indicate the buffer start offset of a bulk-transmission
+       ULONG                   ENextBulkOutPosition;   // Indicate the buffer end offset of a bulk-transmission
+       UINT                    TxRate;
+       dma_addr_t              data_dma;               // urb dma on linux
+}      HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
+
+
+//
+// Structure to keep track of receive packets and buffers to indicate
+// receive data to the protocol.
+//
+typedef struct _RX_CONTEXT
+{
+       PUCHAR                          TransferBuffer;
+       PVOID                           pAd;
+       PIRP                            pIrp;//used to cancel pending bulk in.
+       PURB                            pUrb;
+       //These 2 Boolean shouldn't both be 1 at the same time.
+       ULONG                           BulkInOffset;   // number of packets waiting for reordering .
+       BOOLEAN                         bRxHandling;    // Notify this packet is being process now.
+       BOOLEAN                         InUse;                  // USB Hardware Occupied. Wait for USB HW to put packet.
+       BOOLEAN                         Readable;               // Receive Complete back. OK for driver to indicate receiving packet.
+       BOOLEAN                         IRPPending;             // TODO: To be removed
+       atomic_t                        IrpLock;
+       NDIS_SPIN_LOCK          RxContextLock;
+       dma_addr_t                      data_dma;               // urb dma on linux
+}      RX_CONTEXT, *PRX_CONTEXT;
+#endif // RT2870 //
 
 
 //
@@ -136,11 +223,9 @@ extern UCHAR  SsidIe;
 extern UCHAR  SupRateIe;
 extern UCHAR  ExtRateIe;
 
-#ifdef DOT11_N_SUPPORT
 extern UCHAR  HtCapIe;
 extern UCHAR  AddHtInfoIe;
 extern UCHAR  NewExtChanIe;
-#endif // DOT11_N_SUPPORT //
 
 extern UCHAR  ErpIe;
 extern UCHAR  DsIe;
@@ -149,9 +234,15 @@ extern UCHAR  WpaIe;
 extern UCHAR  Wpa2Ie;
 extern UCHAR  IbssIe;
 extern UCHAR  Ccx2Ie;
+#ifdef RT30xx
+extern UCHAR  WapiIe;
+#endif
 
 extern UCHAR  WPA_OUI[];
 extern UCHAR  RSN_OUI[];
+#ifdef RT30xx
+extern UCHAR  WAPI_OUI[];
+#endif
 extern UCHAR  WME_INFO_ELEM[];
 extern UCHAR  WME_PARM_ELEM[];
 extern UCHAR  Ccx2QosInfo[];
@@ -165,7 +256,6 @@ extern UCHAR  RateSwitchTable11B[];
 extern UCHAR  RateSwitchTable11G[];
 extern UCHAR  RateSwitchTable11BG[];
 
-#ifdef DOT11_N_SUPPORT
 extern UCHAR  RateSwitchTable11BGN1S[];
 extern UCHAR  RateSwitchTable11BGN2S[];
 extern UCHAR  RateSwitchTable11BGN2SForABand[];
@@ -173,14 +263,10 @@ extern UCHAR  RateSwitchTable11N1S[];
 extern UCHAR  RateSwitchTable11N2S[];
 extern UCHAR  RateSwitchTable11N2SForABand[];
 
-#ifdef CONFIG_STA_SUPPORT
 extern UCHAR  PRE_N_HT_OUI[];
-#endif // CONFIG_STA_SUPPORT //
-#endif // DOT11_N_SUPPORT //
 
 #define        MAXSEQ          (0xFFF)
 
-#ifdef DOT11_N_SUPPORT
 struct reordering_mpdu
 {
        struct reordering_mpdu  *next;
@@ -201,7 +287,6 @@ struct reordering_mpdu_pool
        NDIS_SPIN_LOCK                  lock;
        struct reordering_list  freelist;
 };
-#endif // DOT11_N_SUPPORT //
 
 typedef struct         _RSSI_SAMPLE {
        CHAR                    LastRssi0;             // last received RSSI
@@ -278,12 +363,14 @@ typedef struct  _QUEUE_HEADER   {
 #define RTMP_TEST_FLAG(_M, _F)      (((_M)->Flags & (_F)) != 0)
 #define RTMP_TEST_FLAGS(_M, _F)     (((_M)->Flags & (_F)) == (_F))
 
+#ifdef RT2860
 // Macro for power save flag.
 #define RTMP_SET_PSFLAG(_M, _F)       ((_M)->PSFlags |= (_F))
 #define RTMP_CLEAR_PSFLAG(_M, _F)     ((_M)->PSFlags &= ~(_F))
 #define RTMP_CLEAR_PSFLAGS(_M)        ((_M)->PSFlags = 0)
 #define RTMP_TEST_PSFLAG(_M, _F)      (((_M)->PSFlags & (_F)) != 0)
 #define RTMP_TEST_PSFLAGS(_M, _F)     (((_M)->PSFlags & (_F)) == (_F))
+#endif
 
 #define OPSTATUS_SET_FLAG(_pAd, _F)     ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
 #define OPSTATUS_CLEAR_FLAG(_pAd, _F)   ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
@@ -297,14 +384,12 @@ typedef struct  _QUEUE_HEADER   {
 #define RX_FILTER_CLEAR_FLAG(_pAd, _F)  ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
 #define RX_FILTER_TEST_FLAG(_pAd, _F)   (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
 
-#ifdef CONFIG_STA_SUPPORT
 #define STA_NO_SECURITY_ON(_p)          (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
 #define STA_WEP_ON(_p)                  (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
 #define STA_TKIP_ON(_p)                 (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
 #define STA_AES_ON(_p)                  (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
 
 #define STA_TGN_WIFI_ON(_p)             (_p->StaCfg.bTGnWifiTest == TRUE)
-#endif // CONFIG_STA_SUPPORT //
 
 #define CKIP_KP_ON(_p)                         ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
 #define CKIP_CMIC_ON(_p)                       ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
@@ -315,7 +400,15 @@ typedef struct  _QUEUE_HEADER   {
     (_idx) = (_idx+1) % (_RingSize);       \
 }
 
+#ifdef RT30xx
+// We will have a cost down version which mac version is 0x3090xxxx
+#define IS_RT3090(_pAd)                                ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
+#endif
 #define IS_RT3070(_pAd)                                (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
+#ifdef RT30xx
+#define IS_RT3071(_pAd)                                (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
+#define IS_RT30xx(_pAd)                                (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
+#endif
 
 #define RING_PACKET_INIT(_TxRing, _idx)    \
 {                                          \
@@ -351,7 +444,6 @@ typedef struct  _QUEUE_HEADER   {
     }                                                   \
 }
 
-#ifdef DOT11_N_SUPPORT
 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon.  Don't need to update here.
 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd)                                 \
 {                                                                                       \
@@ -375,7 +467,6 @@ typedef struct  _QUEUE_HEADER   {
        _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs);   \
        _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor);  \
 }
-#endif // DOT11_N_SUPPORT //
 
 //
 // MACRO for 32-bit PCI register read / write
@@ -397,6 +488,7 @@ typedef struct  _QUEUE_HEADER   {
 //
 #define MAX_BUSY_COUNT  100         // Number of retry before failing access BBP & RF indirect register
 //
+#ifdef RT2860
 #define RTMP_RF_IO_WRITE32(_A, _V)                  \
 {                                                   \
     PHY_CSR4_STRUC  Value;                          \
@@ -560,7 +652,15 @@ typedef struct  _QUEUE_HEADER   {
     }                                                   \
     }                                                   \
 }
+#endif /* RT2860 */
+#ifdef RT2870
+#define RTMP_RF_IO_WRITE32(_A, _V)                 RTUSBWriteRFRegister(_A, _V)
+#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV)   RTUSBReadBBPRegister(_A, _I, _pV)
+#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V)   RTUSBWriteBBPRegister(_A, _I, _V)
 
+#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V)                    RTUSBWriteBBPRegister(_A, _I, _V)
+#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV)            RTUSBReadBBPRegister(_A, _I, _pV)
+#endif // RT2870 //
 
 #define     MAP_CHANNEL_ID_TO_KHZ(ch, khz)  {               \
                 switch (ch)                                 \
@@ -811,6 +911,7 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
 // Enqueue this frame to MLME engine
 // We need to enqueue the whole frame because MLME need to pass data type
 // information from 802.11 header
+#ifdef RT2860
 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal)        \
 {                                                                                       \
     UINT32 High32TSF, Low32TSF;                                                          \
@@ -818,6 +919,49 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
     RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF);                                        \
     MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal);   \
 }
+#endif
+#ifdef RT2870
+#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal)        \
+{                                                                                       \
+    UINT32 High32TSF=0, Low32TSF=0;                                                          \
+    MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal);   \
+}
+#endif // RT2870 //
+
+#ifdef RT30xx
+//Need to collect each ant's rssi concurrently
+//rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
+#define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2)                                  \
+{                                                                                                                                                              \
+       SHORT   AvgRssi;                                                                                                                        \
+       UCHAR   UsedAnt;                                                                                                                        \
+       if (_pAd->RxAnt.EvaluatePeriod == 0)                                                                    \
+       {                                                                                                                                               \
+               UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt;                                                        \
+               AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt];                                            \
+               if (AvgRssi < 0)                                                                                                        \
+                       AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1;                                    \
+               else                                                                                                                            \
+                       AvgRssi = _rssi1 << 3;                                                                                  \
+               _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi;                                            \
+       }                                                                                                                                               \
+       else                                                                                                                                    \
+       {                                                                                                                                               \
+               UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt;                                                      \
+               AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt];                                            \
+               if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate))         \
+                       AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1;                                    \
+               else                                                                                                                            \
+               {                                                                                                                                       \
+                       _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE;                                 \
+                       AvgRssi = _rssi1 << 3;                                                                                  \
+               }                                                                                                                                       \
+               _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi;                                            \
+               _pAd->RxAnt.RcvPktNumWhenEvaluate++;                                                            \
+       }                                                                                                                                               \
+}
+#endif // RT30xx //
+
 
 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen)                    \
     NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
@@ -830,7 +974,7 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
 //
 #define JapanChannelCheck(channel)  ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
 
-#ifdef CONFIG_STA_SUPPORT
+#ifdef RT2860
 #define STA_PORT_SECURED(_pAd) \
 { \
        _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
@@ -839,8 +983,16 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
        _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
        NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
 }
-#endif // CONFIG_STA_SUPPORT //
-
+#endif
+#ifdef RT2870
+#define STA_PORT_SECURED(_pAd) \
+{ \
+       _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
+       NdisAcquireSpinLock(&_pAd->MacTabLock); \
+       _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
+       NdisReleaseSpinLock(&_pAd->MacTabLock); \
+}
+#endif
 
 //
 // Register set pair for initialzation register set definition
@@ -909,7 +1061,12 @@ typedef struct  _RTMP_REORDERBUF
        UCHAR           DataOffset;
        USHORT          Datasize;
        ULONG                   AllocSize;
+#ifdef RT2860
        NDIS_PHYSICAL_ADDRESS   AllocPa;            // TxBuf physical address
+#endif
+#ifdef RT2870
+       PUCHAR                                  AllocPa;
+#endif // RT2870 //
 }   RTMP_REORDERBUF, *PRTMP_REORDERBUF;
 
 //
@@ -1008,7 +1165,9 @@ typedef struct _COUNTER_802_11 {
 
 typedef struct _COUNTER_RALINK {
        ULONG           TransmittedByteCount;   // both successful and failure, used to calculate TX throughput
+#ifdef RT2860
        ULONG           LastReceivedByteCount;
+#endif
        ULONG           ReceivedByteCount;      // both CRC okay and CRC error, used to calculate RX throughput
        ULONG           BeenDisassociatedCount;
        ULONG           BadCQIAutoRecoveryCount;
@@ -1031,6 +1190,9 @@ typedef struct _COUNTER_RALINK {
 
        UINT32                  OneSecFrameDuplicateCount;
 
+#ifdef RT2870
+       ULONG           OneSecTransmittedByteCount;   // both successful and failure, used to calculate TX throughput
+#endif // RT2870 //
 
        UINT32          OneSecTxNoRetryOkCount;
        UINT32          OneSecTxRetryOkCount;
@@ -1127,9 +1289,7 @@ typedef struct _CIPHER_KEY {
        UCHAR   RxTsc[6];           // 48bit TSC value
        UCHAR   CipherAlg;          // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
        UCHAR   KeyLen;
-#ifdef CONFIG_STA_SUPPORT
        UCHAR   BssId[6];
-#endif // CONFIG_STA_SUPPORT //
             // Key length for each key, 0: entry is invalid
        UCHAR   Type;               // Indicate Pairwise/Group when reporting MIC error
 } CIPHER_KEY, *PCIPHER_KEY;
@@ -1145,6 +1305,9 @@ typedef struct _BBP_TUNING_STRUCT {
 
 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
        UCHAR     EvaluatePeriod;                // 0:not evalute status, 1: evaluate status, 2: switching status
+#ifdef RT30xx
+       UCHAR     EvaluateStableCnt;
+#endif
        UCHAR     Pair1PrimaryRxAnt;     // 0:Ant-E1, 1:Ant-E2
        UCHAR     Pair1SecondaryRxAnt;   // 0:Ant-E1, 1:Ant-E2
        UCHAR     Pair2PrimaryRxAnt;     // 0:Ant-E3, 1:Ant-E4
@@ -1287,7 +1450,6 @@ typedef enum _ABGBAND_STATE_ {
 } ABGBAND_STATE;
 
 typedef struct _MLME_STRUCT {
-#ifdef CONFIG_STA_SUPPORT
        // STA state machines
        STATE_MACHINE           CntlMachine;
        STATE_MACHINE           AssocMachine;
@@ -1303,7 +1465,6 @@ typedef struct _MLME_STRUCT {
        STATE_MACHINE_FUNC      SyncFunc[SYNC_FUNC_SIZE];
        STATE_MACHINE_FUNC      WpaPskFunc[WPA_PSK_FUNC_SIZE];
        STATE_MACHINE_FUNC      AironetFunc[AIRONET_FUNC_SIZE];
-#endif // CONFIG_STA_SUPPORT //
        STATE_MACHINE_FUNC      ActFunc[ACT_FUNC_SIZE];
        // Action
        STATE_MACHINE           ActMachine;
@@ -1322,9 +1483,11 @@ typedef struct _MLME_STRUCT {
        RALINK_TIMER_STRUCT     APSDPeriodicTimer;
        RALINK_TIMER_STRUCT     LinkDownTimer;
        RALINK_TIMER_STRUCT     LinkUpTimer;
+#ifdef RT2860
     UCHAR                   bPsPollTimerRunning;
     RALINK_TIMER_STRUCT     PsPollTimer;
        RALINK_TIMER_STRUCT     RadioOnOffTimer;
+#endif
        ULONG                   PeriodicRound;
        ULONG                   OneSecPeriodicRound;
 
@@ -1333,7 +1496,10 @@ typedef struct _MLME_STRUCT {
        BOOLEAN                                 bEnableAutoAntennaCheck;
        RALINK_TIMER_STRUCT             RxAntEvalTimer;
 
-
+#ifdef RT2870
+       UCHAR CaliBW40RfR24;
+       UCHAR CaliBW20RfR24;
+#endif // RT2870 //
 } MLME_STRUCT, *PMLME_STRUCT;
 
 // structure for radar detection and channel switch
@@ -1372,7 +1538,6 @@ typedef enum _ORI_BLOCKACK_STATUS
     Originator_Done
 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
 
-#ifdef DOT11_N_SUPPORT
 typedef struct _BA_ORI_ENTRY{
        UCHAR   Wcid;
        UCHAR   TID;
@@ -1451,7 +1616,6 @@ typedef   union   _BACAP_STRUC    {
        }       field;
        UINT32                  word;
 } BACAP_STRUC, *PBACAP_STRUC;
-#endif // DOT11_N_SUPPORT //
 
 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second.  (Details see MLMEPeriodic)
 typedef        struct  _IOT_STRUC      {
@@ -1466,13 +1630,11 @@ typedef struct  _IOT_STRUC      {
        UCHAR                   RTSShortProt;
        UCHAR                   RTSLongProt;
        BOOLEAN                 bRTSLongProtOn;
-#ifdef CONFIG_STA_SUPPORT
        BOOLEAN                 bLastAtheros;
     BOOLEAN                    bCurrentAtheros;
     BOOLEAN         bNowAtherosBurstOn;
        BOOLEAN                 bNextDisableRxBA;
     BOOLEAN                    bToggle;
-#endif // CONFIG_STA_SUPPORT //
 } IOT_STRUC, *PIOT_STRUC;
 
 // This is the registry setting for 802.11n transmit setting.  Used in advanced page.
@@ -1536,6 +1698,19 @@ typedef struct {
                UCHAR bit_offset = wcid & 0x7; \
                ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
 
+#ifdef RT2870
+#define BEACON_BITMAP_MASK             0xff
+typedef struct _BEACON_SYNC_STRUCT_
+{
+       UCHAR                           BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
+       UCHAR                                   BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
+       ULONG                                   TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
+       ULONG                                   CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
+       BOOLEAN                                 EnableBeacon;           // trigger to enable beacon transmission.
+       UCHAR                                   BeaconBitMap;           // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
+       UCHAR                                   DtimBitOn;                      // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
+}BEACON_SYNC_STRUCT;
+#endif // RT2870 //
 
 typedef struct _MULTISSID_STRUCT {
        UCHAR                                                           Bssid[MAC_ADDR_LEN];
@@ -1704,10 +1879,9 @@ typedef struct _COMMON_CONFIG {
        ULONG       TxPowerPercentage;      // 0~100 %
        ULONG       TxPowerDefault;         // keep for TxPowerPercentage
 
-#ifdef DOT11_N_SUPPORT
        BACAP_STRUC        BACapability; //   NO USE = 0XFF  ;  IMMED_BA =1  ;  DELAY_BA=0
        BACAP_STRUC        REGBACapability; //   NO USE = 0XFF  ;  IMMED_BA =1  ;  DELAY_BA=0
-#endif // DOT11_N_SUPPORT //
+
        IOT_STRUC               IOTestParm;     // 802.11n InterOpbility Test Parameter;
        ULONG       TxPreamble;             // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
        BOOLEAN     bUseZeroToDisableFragment;     // Microsoft use 0 as disable
@@ -1719,17 +1893,14 @@ typedef struct _COMMON_CONFIG {
        BOOLEAN     bIEEE80211H;                        // 1: enable IEEE802.11h spec.
        ULONG           DisableOLBCDetect;              // 0: enable OLBC detect; 1 disable OLBC detect
 
-#ifdef DOT11_N_SUPPORT
        BOOLEAN                         bRdg;
-#endif // DOT11_N_SUPPORT //
+
        BOOLEAN             bWmmCapable;        // 0:disable WMM, 1:enable WMM
        QOS_CAPABILITY_PARM APQosCapability;    // QOS capability of the current associated AP
        EDCA_PARM           APEdcaParm;         // EDCA parameters of the current associated AP
        QBSS_LOAD_PARM      APQbssLoad;         // QBSS load of the current associated AP
        UCHAR               AckPolicy[4];       // ACK policy of the specified AC. see ACK_xxx
-#ifdef CONFIG_STA_SUPPORT
        BOOLEAN                         bDLSCapable;            // 0:disable DLS, 1:enable DLS
-#endif // CONFIG_STA_SUPPORT //
        // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
        // BOOLEAN control, either ON or OFF. These flags should always be accessed via
        // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
@@ -1738,11 +1909,13 @@ typedef struct _COMMON_CONFIG {
 
        BOOLEAN                         NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
        ABGBAND_STATE           BandState;              // For setting BBP used on B/G or A mode.
+#ifdef RT30xx
+       BOOLEAN                         bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
+#endif
 
        // IEEE802.11H--DFS.
        RADAR_DETECT_STRUCT     RadarDetect;
 
-#ifdef DOT11_N_SUPPORT
        // HT
        UCHAR                   BASize;         // USer desired BAWindowSize. Should not exceed our max capability
        //RT_HT_CAPABILITY      SupportedHtPhy;
@@ -1763,7 +1936,6 @@ typedef struct _COMMON_CONFIG {
        ULONG                                   LastRcvBSSWidthTriggerEventsTime;
 
        UCHAR                                   TxBASize;
-#endif // DOT11_N_SUPPORT //
 
        // Enable wireless event
        BOOLEAN                         bWirelessEvent;
@@ -1781,6 +1953,20 @@ typedef struct _COMMON_CONFIG {
 
        BOOLEAN                 bHardwareRadio;     // Hardware controlled Radio enabled
 
+#ifdef RT2870
+       BOOLEAN                 bMultipleIRP;       // Multiple Bulk IN flag
+       UCHAR                   NumOfBulkInIRP;     // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
+       RT_HT_CAPABILITY        SupportedHtPhy;
+       ULONG                           MaxPktOneTxBulk;
+       UCHAR                           TxBulkFactor;
+       UCHAR                           RxBulkFactor;
+
+       BEACON_SYNC_STRUCT      *pBeaconSync;
+       RALINK_TIMER_STRUCT     BeaconUpdateTimer;
+       UINT32                          BeaconAdjust;
+       UINT32                          BeaconFactor;
+       UINT32                          BeaconRemain;
+#endif // RT2870 //
 
 
        NDIS_SPIN_LOCK                  MeasureReqTabLock;
@@ -1795,8 +1981,6 @@ typedef struct _COMMON_CONFIG {
 #endif // MCAST_RATE_SPECIFIC //
 } COMMON_CONFIG, *PCOMMON_CONFIG;
 
-
-#ifdef CONFIG_STA_SUPPORT
 /* Modified by Wu Xi-Kun 4/21/2006 */
 // STA configuration and status
 typedef struct _STA_ADMIN_CONFIG {
@@ -1884,11 +2068,11 @@ typedef struct _STA_ADMIN_CONFIG {
        BOOLEAN     bRadio;             // Radio state, And of Sw & Hw radio state
        BOOLEAN     bHardwareRadio;     // Hardware controlled Radio enabled
        BOOLEAN     bShowHiddenSSID;    // Show all known SSID in SSID list get operation
-
+#ifdef RT2860
     BOOLEAN            AdhocBOnlyJoined;       // Indicate Adhoc B Join.
     BOOLEAN            AdhocBGJoined;          // Indicate Adhoc B/G Join.
     BOOLEAN            Adhoc20NJoined;         // Indicate Adhoc 20MHz N Join.
-
+#endif
        // New for WPA, windows want us to to keep association information and
        // Fixed IEs from last association response
        NDIS_802_11_ASSOCIATION_INFORMATION     AssocInfo;
@@ -1980,7 +2164,6 @@ typedef struct _STA_ADMIN_CONFIG {
        BOOLEAN                 bFastRoaming;       // 0:disable fast roaming, 1:enable fast roaming
        CHAR                    dBmToRoam;          // the condition to roam when receiving Rssi less than this value. It's negative value.
 
-#ifdef WPA_SUPPLICANT_SUPPORT
     BOOLEAN             IEEE8021X;
     BOOLEAN             IEEE8021x_required_keys;
     CIPHER_KEY         DesireSharedKey[4];     // Record user desired WEP keys
@@ -1991,7 +2174,6 @@ typedef struct _STA_ADMIN_CONFIG {
     // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
     UCHAR               WpaSupplicantUP;
        UCHAR                           WpaSupplicantScanCount;
-#endif // WPA_SUPPLICANT_SUPPORT //
 
     CHAR                dev_name[16];
     USHORT              OriDevType;
@@ -2004,7 +2186,9 @@ typedef struct _STA_ADMIN_CONFIG {
        RT_HT_PHY_INFO                                  DesiredHtPhyInfo;
        BOOLEAN                                                 bAutoTxRateSwitch;
 
+#ifdef RT2860
     UCHAR       BBPR3;
+#endif
 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
 
 // This data structure keep the current active BSS/IBSS's configuration that this STA
@@ -2030,7 +2214,15 @@ typedef struct _STA_ACTIVE_CONFIG {
        RT_HT_PHY_INFO          SupportedPhyInfo;
        RT_HT_CAPABILITY        SupportedHtPhy;
 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
-#endif // CONFIG_STA_SUPPORT //
+
+#ifdef RT2870
+// for USB interface, avoid in interrupt when write key
+typedef struct   RT_ADD_PAIRWISE_KEY_ENTRY {
+        NDIS_802_11_MAC_ADDRESS         MacAddr;
+        USHORT                          MacTabMatchWCID;        // ASIC
+        CIPHER_KEY                      CipherKey;
+} RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
+#endif // RT2870 //
 
 // ----------- start of AP --------------------------
 // AUTH-RSP State Machine Aux data structure
@@ -2096,14 +2288,11 @@ typedef struct _MAC_TABLE_ENTRY {
 
        UINT32                  StaConnectTime;         // the live time of this station since associated with AP
 
-
-#ifdef DOT11_N_SUPPORT
        BOOLEAN                 bSendBAR;
        USHORT                  NoBADataCountDown;
 
        UINT32                  CachedBuf[16];          // UINT (4 bytes) for alignment
        UINT                    TxBFCount; // 3*3
-#endif // DOT11_N_SUPPORT //
        UINT                    FIFOCount;
        UINT                    DebugFIFOCount;
        UINT                    DebugTxCount;
@@ -2140,10 +2329,8 @@ typedef struct _MAC_TABLE_ENTRY {
        // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
        ULONG           ClientStatusFlags;
 
-       // TODO: Shall we move that to DOT11_N_SUPPORT???
        HTTRANSMIT_SETTING      HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
 
-#ifdef DOT11_N_SUPPORT
        // HT EWC MIMO-N used parameters
        USHORT          RXBAbitmap;     // fill to on-chip  RXWI_BA_BITMASK in 8.1.3RX attribute entry format
        USHORT          TXBAbitmap;     // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
@@ -2160,7 +2347,6 @@ typedef struct _MAC_TABLE_ENTRY {
        UCHAR           MmpsMode;       // MIMO power save more.
 
        HT_CAPABILITY_IE                HTCapability;
-#endif // DOT11_N_SUPPORT //
 
        BOOLEAN         bAutoTxRateSwitch;
 
@@ -2175,6 +2361,9 @@ typedef struct _MAC_TABLE_ENTRY {
        UINT32                  TXMCSSuccessful[16];
        UINT32                  TXMCSFailed[16];
        UINT32                  TXMCSAutoFallBack[16][16];
+#ifdef RT2870
+       ULONG                   LastBeaconRxTime;
+#endif
 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
 
 typedef struct _MAC_TABLE {
@@ -2186,16 +2375,16 @@ typedef struct _MAC_TABLE {
        BOOLEAN         fAnyStationInPsm;
        BOOLEAN         fAnyStationBadAtheros;  // Check if any Station is atheros 802.11n Chip.  We need to use RTS/CTS with Atheros 802,.11n chip.
        BOOLEAN                 fAnyTxOPForceDisable;   // Check if it is necessary to disable BE TxOP
-#ifdef DOT11_N_SUPPORT
+#ifdef RT2870
+       BOOLEAN                 fAllStationAsRalink;    // Check if all stations are ralink-chipset
+#endif
        BOOLEAN         fAnyStationIsLegacy;    // Check if I use legacy rate to transmit to my BSS Station/
        BOOLEAN         fAnyStationNonGF;               // Check if any Station can't support GF.
        BOOLEAN         fAnyStation20Only;              // Check if any Station can't support GF.
        BOOLEAN                 fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
        BOOLEAN         fAnyBASession;   // Check if there is BA session.  Force turn on RTS/CTS
-#endif // DOT11_N_SUPPORT //
 } MAC_TABLE, *PMAC_TABLE;
 
-#ifdef DOT11_N_SUPPORT
 #define IS_HT_STA(_pMacEntry)  \
        (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
 
@@ -2204,7 +2393,6 @@ typedef struct _MAC_TABLE {
 
 #define PEER_IS_HT_RATE(_pMacEntry)    \
        (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
-#endif // DOT11_N_SUPPORT //
 
 typedef struct _WDS_ENTRY {
        BOOLEAN         Valid;
@@ -2337,16 +2525,6 @@ typedef struct _INF_USB_CONFIG
 
 }INF_USB_CONFIG;
 
-#ifdef IKANOS_VX_1X0
-       typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
-
-       struct IKANOS_TX_INFO
-       {
-               struct net_device *netdev;
-               IkanosWlanTxCbFuncP *fp;
-       };
-#endif // IKANOS_VX_1X0 //
-
 #ifdef DBG_DIAGNOSE
 #define DIAGNOSE_TIME  10   // 10 sec
 typedef struct _RtmpDiagStrcut_
@@ -2385,6 +2563,7 @@ typedef struct _RTMP_ADAPTER
        PNET_DEV                                net_dev;
        ULONG                                   VirtualIfCnt;
 
+#ifdef RT2860
     USHORT                         LnkCtrlBitMask;
     USHORT                         RLnkCtrlConfiguration;
     USHORT                  RLnkCtrlOffset;
@@ -2411,11 +2590,51 @@ typedef struct _RTMP_ADAPTER
        RTMP_DMABUF             RxDescRing;                 // Shared memory for RX descriptors
        RTMP_DMABUF             TxDescRing[NUM_OF_TX_RING];     // Shared memory for Tx descriptors
        RTMP_TX_RING            TxRing[NUM_OF_TX_RING];         // AC0~4 + HCCA
-
+#endif
 
        NDIS_SPIN_LOCK          irq_lock;
        UCHAR                   irq_disabled;
 
+#ifdef RT2870
+/*****************************************************************************************/
+/*      USB related parameters                                                           */
+/*****************************************************************************************/
+       struct usb_config_descriptor            *config;
+       UINT                                                            BulkInEpAddr;           // bulk-in endpoint address
+       UINT                                                            BulkOutEpAddr[6];       // bulk-out endpoint address
+
+       UINT                                                            NumberOfPipes;
+       USHORT                                                          BulkOutMaxPacketSize;
+       USHORT                                                          BulkInMaxPacketSize;
+
+       //======Control Flags
+       LONG                            PendingIoCount;
+       ULONG                                           BulkFlags;
+       BOOLEAN                     bUsbTxBulkAggre;    // Flags for bulk out data priority
+
+
+       //======Timer Thread
+       RT2870_TIMER_QUEUE              TimerQ;
+       NDIS_SPIN_LOCK                  TimerQLock;
+
+
+       //======Cmd Thread
+       CmdQ                                    CmdQ;
+       NDIS_SPIN_LOCK                  CmdQLock;                               // CmdQLock spinlock
+
+       BOOLEAN                                 TimerFunc_kill;
+       BOOLEAN                                 mlme_kill;
+
+
+       //======Semaphores (event)
+       struct semaphore                        mlme_semaphore;                 /* to sleep thread on   */
+       struct semaphore                        RTUSBCmd_semaphore;             /* to sleep thread on   */
+       struct semaphore                        RTUSBTimer_semaphore;
+       struct completion                       TimerQComplete;
+       struct completion                       mlmeComplete;
+       struct completion                       CmdQComplete;
+       wait_queue_head_t                       *wait;
+#endif // RT2870 //
 
 
 /*****************************************************************************************/
@@ -2429,6 +2648,22 @@ typedef struct _RTMP_ADAPTER
        BOOLEAN                 DeQueueRunning[NUM_OF_TX_RING];  // for ensuring RTUSBDeQueuePacket get call once
        NDIS_SPIN_LOCK          DeQueueLock[NUM_OF_TX_RING];
 
+#ifdef RT2870
+       // Data related context and AC specified, 4 AC supported
+       NDIS_SPIN_LOCK                  BulkOutLock[6];                 // BulkOut spinlock for 4 ACs
+       NDIS_SPIN_LOCK                  MLMEBulkOutLock;        // MLME BulkOut lock
+
+       HT_TX_CONTEXT                   TxContext[NUM_OF_TX_RING];
+       NDIS_SPIN_LOCK                  TxContextQueueLock[NUM_OF_TX_RING];             // TxContextQueue spinlock
+
+       // 4 sets of Bulk Out index and pending flag
+       UCHAR                                   NextBulkOutIndex[4];    // only used for 4 EDCA bulkout pipe
+
+       BOOLEAN                                 BulkOutPending[6];      // used for total 6 bulkout pipe
+       UCHAR                                   bulkResetPipeid;
+       BOOLEAN                                 MgmtBulkPending;
+       ULONG                                   bulkResetReq[6];
+#endif // RT2870 //
 
        // resource for software backlog queues
        QUEUE_HEADER            TxSwQueue[NUM_OF_TX_RING];  // 4 AC + 1 HCCA
@@ -2442,10 +2677,20 @@ typedef struct _RTMP_ADAPTER
 /*****************************************************************************************/
 /*      Rx related parameters                                                           */
 /*****************************************************************************************/
-
+#ifdef RT2860
        RTMP_RX_RING            RxRing;
        NDIS_SPIN_LOCK          RxRingLock;                 // Rx Ring spinlock
-
+#endif
+#ifdef RT2870
+       RX_CONTEXT                              RxContext[RX_RING_SIZE];  // 1 for redundant multiple IRP bulk in.
+       NDIS_SPIN_LOCK                  BulkInLock;                             // BulkIn spinlock for 4 ACs
+       UCHAR                                   PendingRx;                              // The Maxima pending Rx value should be        RX_RING_SIZE.
+       UCHAR                                   NextRxBulkInIndex;              // Indicate the current RxContext Index which hold by Host controller.
+       UCHAR                                   NextRxBulkInReadIndex;  // Indicate the current RxContext Index which driver can read & process it.
+       ULONG                                   NextRxBulkInPosition;   // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
+       ULONG                                   TransferBufferLength;   // current length of the packet buffer
+       ULONG                                   ReadPosition;                   // current read position in a packet buffer
+#endif // RT2870 //
 
 
 /*****************************************************************************************/
@@ -2459,6 +2704,10 @@ typedef struct _RTMP_ADAPTER
        ULONG                   EepromVersion;          // byte 0: version, byte 1: revision, byte 2~3: unused
        UCHAR                   EEPROMAddressNum;       // 93c46=6  93c66=8
        USHORT                  EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
+#ifdef RT30xx
+       BOOLEAN                 EepromAccess;
+       UCHAR                   EFuseTag;
+#endif
        ULONG                   FirmwareVersion;        // byte 0: Minor version, byte 1: Major version, otherwise unused.
 
        // ---------------------------
@@ -2551,11 +2800,19 @@ typedef struct _RTMP_ADAPTER
        PSPOLL_FRAME                    PsPollFrame;
        HEADER_802_11                   NullFrame;
 
+#ifdef RT2870
+       TX_CONTEXT                              BeaconContext[BEACON_RING_SIZE];
+       TX_CONTEXT                              NullContext;
+       TX_CONTEXT                              PsPollContext;
+       TX_CONTEXT                              RTSContext;
+#endif // RT2870 //
+
+
+
 //=========AP===========
 
 
 //=======STA===========
-#ifdef CONFIG_STA_SUPPORT
 /* Modified by Wu Xi-Kun 4/21/2006 */
        // -----------------------------------------------
        // STA specific configuration & operation status
@@ -2565,7 +2822,6 @@ typedef struct _RTMP_ADAPTER
        STA_ACTIVE_CONFIG       StaActive;         // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
        CHAR                    nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
        NDIS_MEDIA_STATE        PreMediaState;
-#endif // CONFIG_STA_SUPPORT //
 
 //=======Common===========
        // OP mode: either AP or STA
@@ -2573,7 +2829,6 @@ typedef struct _RTMP_ADAPTER
 
        NDIS_MEDIA_STATE        IndicateMediaState;                     // Base on Indication state, default is NdisMediaStateDisConnected
 
-       // MAT related parameters
 
        // configuration: read from Registry & E2PROM
        BOOLEAN                 bLocalAdminMAC;             // Use user changed MAC
@@ -2594,9 +2849,8 @@ typedef struct _RTMP_ADAPTER
        MAC_TABLE                 MacTab;     // ASIC on-chip WCID entry table.  At TX, ASIC always use key according to this on-chip table.
        NDIS_SPIN_LOCK          MacTabLock;
 
-#ifdef DOT11_N_SUPPORT
        BA_TABLE                        BATable;
-#endif // DOT11_N_SUPPORT //
+
        NDIS_SPIN_LOCK          BATabLock;
        RALINK_TIMER_STRUCT RECBATimer;
 
@@ -2615,7 +2869,9 @@ typedef struct _RTMP_ADAPTER
 
        // flags, see fRTMP_ADAPTER_xxx flags
        ULONG                   Flags;                      // Represent current device status
+#ifdef RT2860
        ULONG                   PSFlags;                    // Power Save operation flag.
+#endif
 
        // current TX sequence #
        USHORT                  Sequence;
@@ -2648,6 +2904,14 @@ typedef struct _RTMP_ADAPTER
        /*****************************************************************************************/
        /*      Statistic related parameters                                                     */
        /*****************************************************************************************/
+#ifdef RT2870
+       ULONG                                           BulkOutDataOneSecCount;
+       ULONG                                           BulkInDataOneSecCount;
+       ULONG                                           BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
+       ULONG                                           watchDogRxCnt;
+       ULONG                                           watchDogRxOverFlowCnt;
+       ULONG                                           watchDogTxPendingCnt[NUM_OF_TX_RING];
+#endif // RT2870 //
 
        BOOLEAN                                         bUpdateBcnCntDone;
        ULONG                                           watchDogMacDeadlock;    // prevent MAC/BBP into deadlock condition
@@ -2687,15 +2951,11 @@ typedef struct _RTMP_ADAPTER
 
     struct wificonf                    WIFItestbed;
 
-#ifdef DOT11_N_SUPPORT
        struct reordering_mpdu_pool mpdu_blk_pool;
-#endif // DOT11_N_SUPPORT //
 
        ULONG                                   OneSecondnonBEpackets;          // record non BE packets per second
 
-#if WIRELESS_EXT >= 12
     struct iw_statistics    iw_stats;
-#endif
 
        struct net_device_stats stats;
 
@@ -2712,18 +2972,19 @@ typedef struct _RTMP_ADAPTER
        UCHAR                                   flg_be_adjust;
        ULONG                                   be_adjust_last_time;
 
-#ifdef IKANOS_VX_1X0
-       struct IKANOS_TX_INFO   IkanosTxInfo;
-       struct IKANOS_TX_INFO   IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
-#endif // IKANOS_VX_1X0 //
-
-
 #ifdef DBG_DIAGNOSE
        RtmpDiagStruct  DiagStruct;
 #endif // DBG_DIAGNOSE //
 
 
        UINT8                                   PM_FlgSuspend;
+
+#ifdef RT30xx
+//======efuse
+       BOOLEAN         bUseEfuse;
+       BOOLEAN         bEEPROMFile;
+#endif // RT30xx //
+
 } RTMP_ADAPTER, *PRTMP_ADAPTER;
 
 //
@@ -2876,7 +3137,7 @@ typedef struct _TX_BLK_
 
 //------------------------------------------------------------------------------------------
 
-
+#ifdef RT2860
 //
 // Enable & Disable NIC interrupt via writing interrupt mask register
 // Since it use ADAPTER structure, it have to be put after structure definition.
@@ -2947,6 +3208,7 @@ static inline VOID ConvertMulticastIP2MAC(
 
        return;
 }
+#endif /* RT2860 */
 
 BOOLEAN RTMPCheckForHang(
        IN  NDIS_HANDLE MiniportAdapterContext
@@ -2986,6 +3248,10 @@ NDIS_STATUS NICReadRegParameters(
        IN  NDIS_HANDLE         WrapperConfigurationContext
        );
 
+#ifdef RT2870
+VOID NICInitRT30xxRFRegisters(
+       IN PRTMP_ADAPTER pAd);
+#endif // RT2870 //
 
 VOID NICReadEEPROMParameters(
        IN  PRTMP_ADAPTER       pAd,
@@ -3004,10 +3270,10 @@ NDIS_STATUS NICInitializeAdapter(
 NDIS_STATUS NICInitializeAsic(
        IN  PRTMP_ADAPTER   pAd,
        IN  BOOLEAN             bHardReset);
-
+#ifdef RT2860
 VOID NICRestoreBBPValue(
        IN PRTMP_ADAPTER pAd);
-
+#endif
 VOID NICIssueReset(
        IN  PRTMP_ADAPTER   pAd);
 
@@ -3154,7 +3420,6 @@ VOID MlmeQOSAction(
     IN PRTMP_ADAPTER pAd,
     IN MLME_QUEUE_ELEM *Elem);
 
-#ifdef DOT11_N_SUPPORT
 VOID PeerAddBAReqAction(
        IN PRTMP_ADAPTER pAd,
        IN MLME_QUEUE_ELEM *Elem);
@@ -3170,7 +3435,6 @@ VOID PeerDelBAAction(
 VOID PeerBAAction(
     IN PRTMP_ADAPTER pAd,
     IN MLME_QUEUE_ELEM *Elem);
-#endif // DOT11_N_SUPPORT //
 
 VOID SendPSMPAction(
        IN PRTMP_ADAPTER        pAd,
@@ -3185,28 +3449,22 @@ VOID PeerPublicAction(
        IN PRTMP_ADAPTER pAd,
        IN MLME_QUEUE_ELEM *Elem);
 
-#ifdef CONFIG_STA_SUPPORT
 VOID StaPublicAction(
        IN PRTMP_ADAPTER pAd,
        IN UCHAR Bss2040Coexist);
-#endif // CONFIG_STA_SUPPORT //
-
 
 VOID PeerBSSTranAction(
        IN PRTMP_ADAPTER pAd,
        IN MLME_QUEUE_ELEM *Elem);
 
-#ifdef DOT11_N_SUPPORT
 VOID PeerHTAction(
        IN PRTMP_ADAPTER pAd,
        IN MLME_QUEUE_ELEM *Elem);
-#endif // DOT11_N_SUPPORT //
 
 VOID PeerQOSAction(
     IN PRTMP_ADAPTER pAd,
     IN MLME_QUEUE_ELEM *Elem);
 
-#ifdef DOT11_N_SUPPORT
 VOID RECBATimerTimeout(
     IN PVOID SystemSpecific1,
     IN PVOID FunctionContext,
@@ -3219,7 +3477,6 @@ VOID ORIBATimerTimeout(
 VOID SendRefreshBAR(
        IN      PRTMP_ADAPTER   pAd,
        IN      MAC_TABLE_ENTRY *pEntry);
-#endif // DOT11_N_SUPPORT //
 
 VOID ActHeaderInit(
     IN PRTMP_ADAPTER   pAd,
@@ -3252,7 +3509,6 @@ BOOLEAN QosBADataParse(
        IN USHORT Datasize,
        IN UINT   CurRxIndex);
 
-#ifdef DOT11_N_SUPPORT
 BOOLEAN CntlEnqueueForRecv(
     IN PRTMP_ADAPTER   pAd,
        IN ULONG Wcid,
@@ -3261,7 +3517,6 @@ BOOLEAN CntlEnqueueForRecv(
 
 VOID BaAutoManSwitch(
        IN      PRTMP_ADAPTER   pAd);
-#endif // DOT11_N_SUPPORT //
 
 VOID HTIOTCheck(
        IN      PRTMP_ADAPTER   pAd,
@@ -3417,7 +3672,13 @@ NDIS_STATUS MiniportMMRequest(
        IN      UCHAR                   QueIdx,
        IN      PUCHAR                  pData,
        IN  UINT            Length);
-
+#ifdef RT2870
+NDIS_STATUS MiniportDataMMRequest(
+        IN  PRTMP_ADAPTER   pAd,
+        IN  UCHAR           QueIdx,
+        IN  PUCHAR          pData,
+        IN  UINT            Length);
+#endif
 VOID RTMPSendNullFrame(
        IN  PRTMP_ADAPTER   pAd,
        IN  UCHAR           TxRate,
@@ -3446,7 +3707,6 @@ PQUEUE_HEADER   RTMPCheckTxSwQueue(
        IN  PRTMP_ADAPTER   pAd,
        OUT UCHAR           *QueIdx);
 
-#ifdef CONFIG_STA_SUPPORT
 VOID RTMPReportMicError(
        IN  PRTMP_ADAPTER   pAd,
        IN  PCIPHER_KEY     pWpaKey);
@@ -3460,7 +3720,6 @@ VOID    WpaDisassocApAndBlockAssoc(
     IN  PVOID FunctionContext,
     IN  PVOID SystemSpecific2,
     IN  PVOID SystemSpecific3);
-#endif // CONFIG_STA_SUPPORT //
 
 NDIS_STATUS RTMPCloneNdisPacket(
        IN  PRTMP_ADAPTER   pAd,
@@ -3600,7 +3859,6 @@ VOID AsicRfTuningExec(
        IN PVOID SystemSpecific2,
        IN PVOID SystemSpecific3);
 
-#ifdef CONFIG_STA_SUPPORT
 VOID AsicSleepThenAutoWakeup(
        IN  PRTMP_ADAPTER   pAd,
        IN  USHORT TbttNumToNextWakeUp);
@@ -3610,8 +3868,12 @@ VOID AsicForceSleep(
 
 VOID AsicForceWakeup(
        IN PRTMP_ADAPTER pAd,
+#ifdef RT2860
        IN UCHAR         Level);
-#endif // CONFIG_STA_SUPPORT //
+#endif
+#ifdef RT2870
+       IN BOOLEAN    bFromTx);
+#endif
 
 VOID AsicSetBssid(
        IN  PRTMP_ADAPTER   pAd,
@@ -3705,11 +3967,11 @@ BOOLEAN AsicSendCommandToMcu(
        IN UCHAR         Token,
        IN UCHAR         Arg0,
        IN UCHAR         Arg1);
-
+#ifdef RT2860
 BOOLEAN AsicCheckCommanOk(
        IN PRTMP_ADAPTER pAd,
        IN UCHAR                 Command);
-
+#endif
 VOID MacAddrRandomBssid(
        IN  PRTMP_ADAPTER   pAd,
        OUT PUCHAR pAddr);
@@ -3732,11 +3994,9 @@ VOID MlmeRadioOn(
 VOID BssTableInit(
        IN BSS_TABLE *Tab);
 
-#ifdef DOT11_N_SUPPORT
 VOID BATableInit(
        IN PRTMP_ADAPTER pAd,
     IN BA_TABLE *Tab);
-#endif // DOT11_N_SUPPORT //
 
 ULONG BssTableSearch(
        IN BSS_TABLE *Tab,
@@ -3762,7 +4022,6 @@ VOID BssTableDeleteEntry(
        IN      PUCHAR pBssid,
        IN      UCHAR Channel);
 
-#ifdef DOT11_N_SUPPORT
 VOID BATableDeleteORIEntry(
        IN OUT  PRTMP_ADAPTER pAd,
        IN              BA_ORI_ENTRY    *pBAORIEntry);
@@ -3783,7 +4042,6 @@ VOID BATableTearRECEntry(
        IN              UCHAR TID,
        IN              UCHAR WCID,
        IN              BOOLEAN ALL);
-#endif // DOT11_N_SUPPORT //
 
 VOID  BssEntrySet(
        IN  PRTMP_ADAPTER   pAd,
@@ -3845,7 +4103,6 @@ ULONG  BssTableSetEntry(
        IN USHORT LengthVIE,
        IN PNDIS_802_11_VARIABLE_IEs pVIE);
 
-#ifdef DOT11_N_SUPPORT
 VOID BATableInsertEntry(
     IN PRTMP_ADAPTER   pAd,
        IN USHORT Aid,
@@ -3855,7 +4112,6 @@ VOID BATableInsertEntry(
        IN UCHAR BAWinSize,
        IN UCHAR OriginatorStatus,
     IN BOOLEAN IsRecipient);
-#endif // DOT11_N_SUPPORT //
 
 VOID BssTableSsidSort(
        IN  PRTMP_ADAPTER   pAd,
@@ -4021,6 +4277,12 @@ VOID InvalidStateWhenDisassociate(
        IN  PRTMP_ADAPTER pAd,
        IN  MLME_QUEUE_ELEM *Elem);
 
+#ifdef RT2870
+VOID MlmeCntlConfirm(
+       IN PRTMP_ADAPTER pAd,
+       IN ULONG MsgType,
+       IN USHORT Msg);
+#endif // RT2870 //
 
 VOID  ComposePsPoll(
        IN  PRTMP_ADAPTER   pAd);
@@ -4354,9 +4616,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
        OUT PQOS_CAPABILITY_PARM pQosCapability,
        OUT ULONG *pRalinkIe,
        OUT UCHAR                *pHtCapabilityLen,
-#ifdef CONFIG_STA_SUPPORT
        OUT UCHAR                *pPreNHtCapabilityLen,
-#endif // CONFIG_STA_SUPPORT //
        OUT HT_CAPABILITY_IE *pHtCapability,
        OUT UCHAR                *AddHtInfoLen,
        OUT ADD_HT_INFO_IE *AddHtInfo,
@@ -4584,23 +4844,19 @@ VOID MlmeUpdateTxRates(
        IN      BOOLEAN                 bLinkUp,
        IN      UCHAR                   apidx);
 
-#ifdef DOT11_N_SUPPORT
 VOID MlmeUpdateHtTxRates(
        IN PRTMP_ADAPTER                pAd,
        IN      UCHAR                           apidx);
-#endif // DOT11_N_SUPPORT //
 
 VOID    RTMPCheckRates(
        IN      PRTMP_ADAPTER   pAd,
        IN OUT  UCHAR           SupRate[],
        IN OUT  UCHAR           *SupRateLen);
 
-#ifdef CONFIG_STA_SUPPORT
 BOOLEAN RTMPCheckChannel(
        IN PRTMP_ADAPTER pAd,
        IN UCHAR                CentralChannel,
        IN UCHAR                Channel);
-#endif // CONFIG_STA_SUPPORT //
 
 BOOLEAN        RTMPCheckHt(
        IN              PRTMP_ADAPTER   pAd,
@@ -4629,6 +4885,12 @@ CHAR RTMPMaxRssi(
        IN CHAR                         Rssi1,
        IN CHAR                         Rssi2);
 
+#ifdef RT30xx
+VOID AsicSetRxAnt(
+       IN PRTMP_ADAPTER        pAd,
+       IN UCHAR                        Ant);
+#endif
+
 VOID AsicEvaluateRxAnt(
        IN PRTMP_ADAPTER        pAd);
 
@@ -4841,15 +5103,12 @@ VOID RTMPIndicateWPA2Status(
 VOID   RTMPOPModeSwitching(
        IN      PRTMP_ADAPTER   pAd);
 
-#ifdef CONFIG_STA_SUPPORT
 VOID    RTMPAddBSSIDCipher(
     IN  PRTMP_ADAPTER   pAd,
        IN      UCHAR   Aid,
     IN  PNDIS_802_11_KEY    pKey,
     IN  UCHAR   CipherAlg);
-#endif // CONFIG_STA_SUPPORT //
 
-#ifdef DOT11_N_SUPPORT
 VOID   RTMPSetHT(
        IN      PRTMP_ADAPTER   pAd,
        IN      OID_SET_HT_PHYMODE *pHTPhyMode);
@@ -4857,7 +5116,6 @@ VOID      RTMPSetHT(
 VOID   RTMPSetIndividualHT(
        IN      PRTMP_ADAPTER           pAd,
        IN      UCHAR                           apidx);
-#endif // DOT11_N_SUPPORT //
 
 VOID RTMPSendWirelessEvent(
        IN      PRTMP_ADAPTER   pAd,
@@ -5306,6 +5564,10 @@ VOID     RTMPSendTriggerFrame(
        IN  UCHAR           TxRate,
        IN      BOOLEAN                 bQosNull);
 
+#ifdef RT30xx
+VOID RTMPFilterCalibration(
+       IN PRTMP_ADAPTER pAd);
+#endif // RT30xx //
 
 /* timeout -- ms */
 VOID RTMP_SetPeriodicTimer(
@@ -5497,7 +5759,6 @@ UCHAR VLAN_8023_Header_Copy(
        OUT PUCHAR                      pData,
        IN      UCHAR                   FromWhichBSSID);
 
-#ifdef DOT11_N_SUPPORT
 void ba_flush_reordering_timeout_mpdus(
        IN PRTMP_ADAPTER        pAd,
        IN PBA_REC_ENTRY        pBAEntry,
@@ -5515,7 +5776,6 @@ VOID BAOriSessionSetUp(
 VOID BASessionTearDownALL(
        IN OUT  PRTMP_ADAPTER pAd,
        IN              UCHAR Wcid);
-#endif // DOT11_N_SUPPORT //
 
 BOOLEAN OS_Need_Clone_Packet(void);
 
@@ -5663,7 +5923,6 @@ INT       Set_ResetStatCounter_Proc(
        IN      PRTMP_ADAPTER   pAd,
        IN      PUCHAR                  arg);
 
-#ifdef DOT11_N_SUPPORT
 INT    Set_BASetup_Proc(
        IN      PRTMP_ADAPTER   pAd,
        IN      PUCHAR                  arg);
@@ -5764,24 +6023,17 @@ INT     Set_HtMIMOPSmode_Proc(
 INT    Set_HtTxBASize_Proc(
        IN      PRTMP_ADAPTER   pAd,
        IN      PUCHAR                  arg);
-#endif // DOT11_N_SUPPORT //
 
-
-
-#ifdef CONFIG_STA_SUPPORT
 //Dls ,        kathy
 VOID RTMPSendDLSTearDownFrame(
        IN      PRTMP_ADAPTER   pAd,
        IN      PUCHAR                  pDA);
 
-#ifdef DOT11_N_SUPPORT
 //Block ACK
 VOID QueryBATABLE(
        IN  PRTMP_ADAPTER pAd,
        OUT PQUERYBA_TABLE pBAT);
-#endif // DOT11_N_SUPPORT //
 
-#ifdef WPA_SUPPLICANT_SUPPORT
 INT        WpaCheckEapCode(
        IN  PRTMP_ADAPTER       pAd,
        IN  PUCHAR                              pFrame,
@@ -5794,26 +6046,16 @@ VOID    WpaSendMicFailureToWpaSupplicant(
 
 VOID    SendAssocIEsToWpaSupplicant(
     IN  PRTMP_ADAPTER       pAd);
-#endif // WPA_SUPPLICANT_SUPPORT //
 
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
 int wext_notify_event_assoc(
        IN  RTMP_ADAPTER *pAd);
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-
-#endif // CONFIG_STA_SUPPORT //
 
-
-
-#ifdef DOT11_N_SUPPORT
 VOID Handle_BSS_Width_Trigger_Events(
        IN PRTMP_ADAPTER pAd);
 
 void build_ext_channel_switch_ie(
        IN PRTMP_ADAPTER pAd,
        IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
-#endif // DOT11_N_SUPPORT //
-
 
 BOOLEAN APRxDoneInterruptHandle(
        IN      PRTMP_ADAPTER   pAd);
@@ -5822,7 +6064,6 @@ BOOLEAN STARxDoneInterruptHandle(
        IN      PRTMP_ADAPTER   pAd,
        IN      BOOLEAN                 argc);
 
-#ifdef DOT11_N_SUPPORT
 // AMPDU packet indication
 VOID Indicate_AMPDU_Packet(
        IN      PRTMP_ADAPTER   pAd,
@@ -5834,7 +6075,6 @@ VOID Indicate_AMSDU_Packet(
        IN      PRTMP_ADAPTER   pAd,
        IN      RX_BLK                  *pRxBlk,
        IN      UCHAR                   FromWhichBSSID);
-#endif // DOT11_N_SUPPORT //
 
 // Normal legacy Rx packet indication
 VOID Indicate_Legacy_Packet(
@@ -5864,8 +6104,6 @@ UINT deaggregate_AMSDU_announce(
        IN      PUCHAR                  pData,
        IN      ULONG                   DataSize);
 
-
-#ifdef CONFIG_STA_SUPPORT
 // remove LLC and get 802_3 Header
 #define  RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3)   \
 {                                                                                                                                                              \
@@ -5896,8 +6134,6 @@ UINT deaggregate_AMSDU_announce(
        CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData,                             \
                _pRxBlk->DataSize, _pRemovedLLCSNAP);                                   \
 }
-#endif // CONFIG_STA_SUPPORT //
-
 
 BOOLEAN APFowardWirelessStaToWirelessSta(
        IN      PRTMP_ADAPTER   pAd,
@@ -5914,13 +6150,9 @@ VOID Sta_Announce_or_Forward_802_3_Packet(
        IN      PNDIS_PACKET    pPacket,
        IN      UCHAR                   FromWhichBSSID);
 
-
-#ifdef CONFIG_STA_SUPPORT
 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
                        Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
                        //announce_802_3_packet(_pAd, _pPacket);
-#endif // CONFIG_STA_SUPPORT //
-
 
 PNDIS_PACKET DuplicatePacket(
        IN      PRTMP_ADAPTER   pAd,
@@ -5963,8 +6195,6 @@ PNDIS_PACKET RTMPDeFragmentDataFrame(
        IN      RX_BLK                  *pRxBlk);
 
 ////////////////////////////////////////
-
-#ifdef CONFIG_STA_SUPPORT
 enum {
        DIDmsg_lnxind_wlansniffrm               = 0x00000044,
        DIDmsg_lnxind_wlansniffrm_hosttime      = 0x00010044,
@@ -6068,16 +6298,13 @@ void send_monitor_packets(
        IN      PRTMP_ADAPTER   pAd,
        IN      RX_BLK                  *pRxBlk);
 
-#if WIRELESS_EXT >= 12
 // This function will be called when query /proc
 struct iw_statistics *rt28xx_get_wireless_stats(
     IN struct net_device *net_dev);
-#endif
 
 VOID    RTMPSetDesiredRates(
     IN  PRTMP_ADAPTER   pAdapter,
     IN  LONG            Rates);
-#endif // CONFIG_STA_SUPPORT //
 
 INT    Set_FixedTxMode_Proc(
        IN      PRTMP_ADAPTER   pAd,
@@ -6093,13 +6320,11 @@ static inline char* GetPhyMode(
 
                case MODE_OFDM:
                        return "OFDM";
-#ifdef DOT11_N_SUPPORT
                case MODE_HTMIX:
                        return "HTMIX";
 
                case MODE_HTGREENFIELD:
                        return "GREEN";
-#endif // DOT11_N_SUPPORT //
                default:
                        return "N/A";
        }
@@ -6116,10 +6341,8 @@ static inline char* GetBW(
 
                case BW_20:
                        return "20M";
-#ifdef DOT11_N_SUPPORT
                case BW_40:
                        return "40M";
-#endif // DOT11_N_SUPPORT //
                default:
                        return "N/A";
        }
@@ -6159,13 +6382,10 @@ INT rt28xx_ioctl(
        IN      OUT     struct ifreq    *rq,
        IN      INT                     cmd);
 
-
-#ifdef CONFIG_STA_SUPPORT
 INT rt28xx_sta_ioctl(
        IN      struct net_device       *net_dev,
        IN      OUT     struct ifreq    *rq,
        IN      INT                     cmd);
-#endif // CONFIG_STA_SUPPORT //
 
 BOOLEAN RT28XXSecurityKeyAdd(
        IN              PRTMP_ADAPTER           pAd,
@@ -6185,6 +6405,7 @@ void kill_thread_task(PRTMP_ADAPTER pAd);
 
 void tbtt_tasklet(unsigned long data);
 
+#ifdef RT2860
 //
 // Function Prototype in cmm_data_2860.c
 //
@@ -6249,7 +6470,6 @@ NDIS_STATUS RTMPCheckRxError(
        IN      PRXWI_STRUC     pRxWI,
        IN  PRT28XX_RXD_STRUC      pRxD);
 
-#ifdef CONFIG_STA_SUPPORT
 VOID RTMPInitPCIeLinkCtrlValue(
        IN      PRTMP_ADAPTER   pAd);
 
@@ -6292,13 +6512,13 @@ VOID  RadioOnExec(
        IN PVOID FunctionContext,
        IN PVOID SystemSpecific2,
        IN PVOID SystemSpecific3);
-#endif // CONFIG_STA_SUPPORT //
 
 VOID RT28xxPciMlmeRadioOn(
        IN PRTMP_ADAPTER pAd);
 
 VOID RT28xxPciMlmeRadioOFF(
        IN PRTMP_ADAPTER pAd);
+#endif /* RT2860 */
 
 VOID AsicTurnOffRFClk(
        IN PRTMP_ADAPTER    pAd,
@@ -6308,6 +6528,481 @@ VOID AsicTurnOnRFClk(
        IN PRTMP_ADAPTER        pAd,
        IN      UCHAR                   Channel);
 
+NTSTATUS RT30xxWriteRFRegister(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UCHAR                   RegID,
+       IN      UCHAR                   Value);
+
+NTSTATUS RT30xxReadRFRegister(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UCHAR                   RegID,
+       IN      PUCHAR                  pValue);
+
+#ifdef RT30xx
+//2008/09/11:KH add to support efuse<--
+UCHAR eFuseReadRegisters(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT Offset,
+       IN      USHORT Length,
+       OUT     USHORT* pData);
+
+VOID eFuseReadPhysical(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PUSHORT lpInBuffer,
+       IN      ULONG nInBufferSize,
+       OUT     PUSHORT lpOutBuffer,
+       IN      ULONG nOutBufferSize
+);
+
+NTSTATUS eFuseRead(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       OUT     PUCHAR                  pData,
+       IN      USHORT                  Length);
+
+VOID eFusePhysicalWriteRegisters(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT Offset,
+       IN      USHORT Length,
+       OUT     USHORT* pData);
+
+NTSTATUS eFuseWriteRegisters(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT Offset,
+       IN      USHORT Length,
+       IN      USHORT* pData);
+
+VOID eFuseWritePhysical(
+       IN      PRTMP_ADAPTER   pAd,
+       PUSHORT lpInBuffer,
+       ULONG nInBufferSize,
+       PUCHAR lpOutBuffer,
+       ULONG nOutBufferSize
+);
+
+NTSTATUS eFuseWrite(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       IN      PUCHAR                  pData,
+       IN      USHORT                  length);
+
+INT set_eFuseGetFreeBlockCount_Proc(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PUCHAR                  arg);
+
+INT set_eFusedump_Proc(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PUCHAR                  arg);
+
+INT set_eFuseLoadFromBin_Proc(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PUCHAR                  arg);
+
+NTSTATUS eFuseWriteRegistersFromBin(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT Offset,
+       IN      USHORT Length,
+       IN      USHORT* pData);
+
+VOID eFusePhysicalReadRegisters(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT Offset,
+       IN      USHORT Length,
+       OUT     USHORT* pData);
+
+NDIS_STATUS NICLoadEEPROM(
+       IN PRTMP_ADAPTER pAd);
+
+BOOLEAN bNeedLoadEEPROM(
+       IN      PRTMP_ADAPTER   pAd);
+//2008/09/11:KH add to support efuse-->
+#endif // RT30xx //
+
+#ifdef RT30xx
+// add by johnli, RF power sequence setup
+VOID RT30xxLoadRFNormalModeSetup(
+       IN PRTMP_ADAPTER        pAd);
+
+VOID RT30xxLoadRFSleepModeSetup(
+       IN PRTMP_ADAPTER        pAd);
+
+VOID RT30xxReverseRFSleepModeSetup(
+       IN PRTMP_ADAPTER        pAd);
+// end johnli
+#endif // RT30xx //
+
+#ifdef RT2870
+//
+// Function Prototype in rtusb_bulk.c
+//
+VOID   RTUSBInitTxDesc(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PTX_CONTEXT             pTxContext,
+       IN      UCHAR                   BulkOutPipeId,
+       IN      usb_complete_t  Func);
+
+VOID   RTUSBInitHTTxDesc(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PHT_TX_CONTEXT  pTxContext,
+       IN      UCHAR                   BulkOutPipeId,
+       IN      ULONG                   BulkOutSize,
+       IN      usb_complete_t  Func);
+
+VOID   RTUSBInitRxDesc(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PRX_CONTEXT             pRxContext);
+
+VOID RTUSBCleanUpDataBulkOutQueue(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBCancelPendingBulkOutIRP(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBBulkOutDataPacket(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UCHAR                   BulkOutPipeId,
+       IN      UCHAR                   Index);
+
+VOID RTUSBBulkOutNullFrame(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBBulkOutRTSFrame(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBCancelPendingBulkInIRP(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBCancelPendingIRPs(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBBulkOutMLMEPacket(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UCHAR                   Index);
+
+VOID RTUSBBulkOutPsPoll(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBCleanUpMLMEBulkOutQueue(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBKickBulkOut(
+       IN      PRTMP_ADAPTER pAd);
+
+VOID   RTUSBBulkReceive(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID DoBulkIn(
+       IN RTMP_ADAPTER *pAd);
+
+VOID RTUSBInitRxDesc(
+       IN      PRTMP_ADAPTER   pAd,
+       IN  PRX_CONTEXT         pRxContext);
+
+VOID RTUSBBulkRxHandle(
+       IN unsigned long data);
+
+//
+// Function Prototype in rtusb_io.c
+//
+NTSTATUS RTUSBMultiRead(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       OUT     PUCHAR                  pData,
+       IN      USHORT                  length);
+
+NTSTATUS RTUSBMultiWrite(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       IN      PUCHAR                  pData,
+       IN      USHORT                  length);
+
+NTSTATUS RTUSBMultiWrite_OneByte(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       IN      PUCHAR                  pData);
+
+NTSTATUS RTUSBReadBBPRegister(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UCHAR                   Id,
+       IN      PUCHAR                  pValue);
+
+NTSTATUS RTUSBWriteBBPRegister(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UCHAR                   Id,
+       IN      UCHAR                   Value);
+
+NTSTATUS RTUSBWriteRFRegister(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UINT32                  Value);
+
+NTSTATUS RTUSB_VendorRequest(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UINT32                  TransferFlags,
+       IN      UCHAR                   ReservedBits,
+       IN      UCHAR                   Request,
+       IN      USHORT                  Value,
+       IN      USHORT                  Index,
+       IN      PVOID                   TransferBuffer,
+       IN      UINT32                  TransferBufferLength);
+
+NTSTATUS RTUSBReadEEPROM(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       OUT     PUCHAR                  pData,
+       IN      USHORT                  length);
+
+NTSTATUS RTUSBWriteEEPROM(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       IN      PUCHAR                  pData,
+       IN      USHORT                  length);
+
+VOID RTUSBPutToSleep(
+       IN      PRTMP_ADAPTER   pAd);
+
+NTSTATUS RTUSBWakeUp(
+       IN      PRTMP_ADAPTER   pAd);
+
+VOID RTUSBInitializeCmdQ(
+       IN      PCmdQ   cmdq);
+
+NDIS_STATUS    RTUSBEnqueueCmdFromNdis(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      NDIS_OID                Oid,
+       IN      BOOLEAN                 SetInformation,
+       IN      PVOID                   pInformationBuffer,
+       IN      UINT32                  InformationBufferLength);
+
+NDIS_STATUS RTUSBEnqueueInternalCmd(
+       IN      PRTMP_ADAPTER   pAd,
+       IN NDIS_OID                     Oid,
+       IN PVOID                        pInformationBuffer,
+       IN UINT32                       InformationBufferLength);
+
+VOID RTUSBDequeueCmd(
+       IN      PCmdQ           cmdq,
+       OUT     PCmdQElmt       *pcmdqelmt);
+
+INT RTUSBCmdThread(
+       IN OUT PVOID Context);
+
+INT TimerQThread(
+       IN OUT PVOID Context);
+
+RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
+       IN RTMP_ADAPTER *pAd,
+       IN RALINK_TIMER_STRUCT *pTimer);
+
+BOOLEAN RT2870_TimerQ_Remove(
+       IN RTMP_ADAPTER *pAd,
+       IN RALINK_TIMER_STRUCT *pTimer);
+
+void RT2870_TimerQ_Exit(
+       IN RTMP_ADAPTER *pAd);
+
+void RT2870_TimerQ_Init(
+       IN RTMP_ADAPTER *pAd);
+
+VOID RT2870_BssBeaconExit(
+       IN RTMP_ADAPTER *pAd);
+
+VOID RT2870_BssBeaconStop(
+       IN RTMP_ADAPTER *pAd);
+
+VOID RT2870_BssBeaconStart(
+       IN RTMP_ADAPTER * pAd);
+
+VOID RT2870_BssBeaconInit(
+       IN RTMP_ADAPTER *pAd);
+
+VOID RT2870_WatchDog(
+       IN RTMP_ADAPTER *pAd);
+
+NTSTATUS RTUSBWriteMACRegister(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       IN      UINT32                  Value);
+
+NTSTATUS RTUSBReadMACRegister(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      USHORT                  Offset,
+       OUT     PUINT32                 pValue);
+
+NTSTATUS RTUSBSingleWrite(
+       IN      RTMP_ADAPTER    *pAd,
+       IN      USHORT                  Offset,
+       IN      USHORT                  Value);
+
+NTSTATUS RTUSBFirmwareRun(
+       IN      PRTMP_ADAPTER   pAd);
+
+NTSTATUS RTUSBFirmwareWrite(
+       IN PRTMP_ADAPTER pAd,
+       IN PUCHAR               pFwImage,
+       IN ULONG                FwLen);
+
+NTSTATUS       RTUSBFirmwareOpmode(
+       IN      PRTMP_ADAPTER   pAd,
+       OUT     PUINT32                 pValue);
+
+NTSTATUS       RTUSBVenderReset(
+       IN      PRTMP_ADAPTER   pAd);
+
+NDIS_STATUS RTUSBSetHardWareRegister(
+       IN      PRTMP_ADAPTER   pAdapter,
+       IN      PVOID                   pBuf);
+
+NDIS_STATUS RTUSBQueryHardWareRegister(
+       IN      PRTMP_ADAPTER   pAdapter,
+       IN      PVOID                   pBuf);
+
+VOID CMDHandler(
+    IN PRTMP_ADAPTER pAd);
+
+
+NDIS_STATUS     CreateThreads(
+       IN      struct net_device *net_dev );
+
+
+VOID MacTableInitialize(
+       IN  PRTMP_ADAPTER   pAd);
+
+VOID MlmeSetPsm(
+       IN PRTMP_ADAPTER pAd,
+       IN USHORT psm);
+
+NDIS_STATUS RTMPWPAAddKeyProc(
+       IN  PRTMP_ADAPTER   pAd,
+       IN  PVOID           pBuf);
+
+VOID AsicRxAntEvalAction(
+       IN PRTMP_ADAPTER pAd);
+
+void append_pkt(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PUCHAR                  pHeader802_3,
+    IN  UINT            HdrLen,
+       IN      PUCHAR                  pData,
+       IN      ULONG                   DataSize,
+       OUT  PNDIS_PACKET       *ppPacket);
+
+UINT deaggregate_AMSDU_announce(
+       IN      PRTMP_ADAPTER   pAd,
+       PNDIS_PACKET            pPacket,
+       IN      PUCHAR                  pData,
+       IN      ULONG                   DataSize);
+
+NDIS_STATUS    RTMPCheckRxError(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PHEADER_802_11  pHeader,
+       IN      PRXWI_STRUC     pRxWI,
+       IN      PRT28XX_RXD_STRUC       pRxINFO);
+
+
+VOID RTUSBMlmeHardTransmit(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PMGMT_STRUC             pMgmt);
+
+INT MlmeThread(
+       IN PVOID Context);
+
+//
+// Function Prototype in rtusb_data.c
+//
+NDIS_STATUS    RTUSBFreeDescriptorRequest(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UCHAR                   BulkOutPipeId,
+       IN      UINT32                  NumberRequired);
+
+
+BOOLEAN        RTUSBNeedQueueBackForAgg(
+       IN RTMP_ADAPTER *pAd,
+       IN UCHAR                BulkOutPipeId);
+
+
+VOID RTMPWriteTxInfo(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      PTXINFO_STRUC   pTxInfo,
+       IN        USHORT                USBDMApktLen,
+       IN        BOOLEAN               bWiv,
+       IN        UCHAR                 QueueSel,
+       IN        UCHAR                 NextValid,
+       IN        UCHAR                 TxBurst);
+
+//
+// Function Prototype in cmm_data_2870.c
+//
+USHORT RtmpUSB_WriteSubTxResource(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      TX_BLK                  *pTxBlk,
+       IN      BOOLEAN                 bIsLast,
+       OUT     USHORT                  *FreeNumber);
+
+USHORT RtmpUSB_WriteSingleTxResource(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      TX_BLK                  *pTxBlk,
+       IN      BOOLEAN                 bIsLast,
+       OUT     USHORT                  *FreeNumber);
+
+USHORT RtmpUSB_WriteFragTxResource(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      TX_BLK                  *pTxBlk,
+       IN      UCHAR                   fragNum,
+       OUT     USHORT                  *FreeNumber);
+
+USHORT RtmpUSB_WriteMultiTxResource(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      TX_BLK                  *pTxBlk,
+       IN      UCHAR                   frameNum,
+       OUT     USHORT                  *FreeNumber);
+
+VOID RtmpUSB_FinalWriteTxResource(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      TX_BLK                  *pTxBlk,
+       IN      USHORT                  totalMPDUSize,
+#ifdef RT2860
+       IN      USHORT                  FirstTxIdx);
+#endif
+       IN      USHORT                  TxIdx);
+
+VOID RtmpUSBDataLastTxIdx(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      UCHAR                   QueIdx,
+       IN      USHORT                  TxIdx);
+
+VOID RtmpUSBDataKickOut(
+       IN      PRTMP_ADAPTER   pAd,
+       IN      TX_BLK                  *pTxBlk,
+       IN      UCHAR                   QueIdx);
+
+
+int RtmpUSBMgmtKickOut(
+       IN RTMP_ADAPTER         *pAd,
+       IN UCHAR                        QueIdx,
+       IN PNDIS_PACKET         pPacket,
+       IN PUCHAR                       pSrcBufVA,
+       IN UINT                         SrcBufLen);
+
+VOID RtmpUSBNullFrameKickOut(
+       IN RTMP_ADAPTER *pAd,
+       IN UCHAR                QueIdx,
+       IN UCHAR                *pNullFrame,
+       IN UINT32               frameLen);
+
+VOID RT28xxUsbStaAsicForceWakeup(
+       IN PRTMP_ADAPTER pAd,
+       IN BOOLEAN       bFromTx);
+
+VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
+       IN PRTMP_ADAPTER pAd,
+       IN USHORT TbttNumToNextWakeUp);
+
+VOID RT28xxUsbMlmeRadioOn(
+       IN PRTMP_ADAPTER pAd);
+
+VOID RT28xxUsbMlmeRadioOFF(
+       IN PRTMP_ADAPTER pAd);
+#endif // RT2870 //
 
 ////////////////////////////////////////
 
@@ -6334,10 +7029,10 @@ PCHAR   RTMPGetRalinkEncryModeStr(
     IN  USHORT encryMode);
 //////////////////////////////////////
 
-#ifdef CONFIG_STA_SUPPORT
 VOID AsicStaBbpTuning(
        IN PRTMP_ADAPTER pAd);
 
+#ifdef RT2860
 VOID AsicResetFromDMABusy(
        IN PRTMP_ADAPTER pAd);
 
@@ -6349,7 +7044,16 @@ VOID AsicResetMAC(
 
 VOID AsicResetPBF(
        IN PRTMP_ADAPTER pAd);
-#endif // CONFIG_STA_SUPPORT //
+#endif
+#ifdef RT2870
+BOOLEAN StaAddMacTableEntry(
+       IN  PRTMP_ADAPTER               pAd,
+       IN  PMAC_TABLE_ENTRY    pEntry,
+       IN  UCHAR                               MaxSupportedRateIn500Kbps,
+       IN  HT_CAPABILITY_IE    *pHtCapability,
+       IN  UCHAR                               HtCapabilityLen,
+       IN  USHORT                      CapabilityInfo);
+#endif
 
 void RTMP_IndicateMediaState(
        IN      PRTMP_ADAPTER   pAd);