![Greg Kroah-Hartman](/assets/img/avatar_default.png)
This is the Ralink RT2870 driver from the company that does horrible things like reading a config file from /etc. However, the driver that is currently under development from the wireless development community is not working at all yet, so distros and users are using this version instead (quite common hardware on a lot of netbook machines). So here is this driver, for now, until the wireless developers get a "clean" version into the main tree, or until this version is cleaned up sufficiently to move out of the staging tree. Ported to the Linux build system and cleaned up a bit already by me. Cc: Linux wireless <linux-wireless@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
563 lines
12 KiB
C
563 lines
12 KiB
C
/*
|
|
*************************************************************************
|
|
* 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.h
|
|
|
|
Abstract:
|
|
Miniport generic portion header file
|
|
|
|
Revision History:
|
|
Who When What
|
|
-------- ---------- ----------------------------------------------
|
|
Paul Lin 08-01-2002 created
|
|
James Tan 09-06-2002 modified (Revise NTCRegTable)
|
|
John Chang 12-22-2004 modified for RT2561/2661. merge with STA driver
|
|
*/
|
|
#ifndef __AP_H__
|
|
#define __AP_H__
|
|
|
|
|
|
|
|
// ========================= AP RTMP.h ================================
|
|
|
|
|
|
|
|
// =============================================================
|
|
// Function Prototypes
|
|
// =============================================================
|
|
|
|
// ap_data.c
|
|
|
|
BOOLEAN APBridgeToWirelessSta(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pHeader,
|
|
IN UINT HdrLen,
|
|
IN PUCHAR pData,
|
|
IN UINT DataLen,
|
|
IN ULONG fromwdsidx);
|
|
|
|
BOOLEAN APHandleRxDoneInterrupt(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APSendPackets(
|
|
IN NDIS_HANDLE MiniportAdapterContext,
|
|
IN PPNDIS_PACKET ppPacketArray,
|
|
IN UINT NumberOfPackets);
|
|
|
|
NDIS_STATUS APSendPacket(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PNDIS_PACKET pPacket);
|
|
|
|
|
|
NDIS_STATUS APHardTransmit(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN TX_BLK *pTxBlk,
|
|
IN UCHAR QueIdx);
|
|
|
|
VOID APRxEAPOLFrameIndicate(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MAC_TABLE_ENTRY *pEntry,
|
|
IN RX_BLK *pRxBlk,
|
|
IN UCHAR FromWhichBSSID);
|
|
|
|
NDIS_STATUS APCheckRxError(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PRT28XX_RXD_STRUC pRxD,
|
|
IN UCHAR Wcid);
|
|
|
|
BOOLEAN APCheckClass2Class3Error(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN ULONG Wcid,
|
|
IN PHEADER_802_11 pHeader);
|
|
|
|
VOID APHandleRxPsPoll(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr,
|
|
IN USHORT Aid,
|
|
IN BOOLEAN isActive);
|
|
|
|
VOID RTMPDescriptorEndianChange(
|
|
IN PUCHAR pData,
|
|
IN ULONG DescriptorType);
|
|
|
|
VOID RTMPFrameEndianChange(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pData,
|
|
IN ULONG Dir,
|
|
IN BOOLEAN FromRxDoneInt);
|
|
|
|
// ap_assoc.c
|
|
|
|
VOID APAssocStateMachineInit(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN STATE_MACHINE *S,
|
|
OUT STATE_MACHINE_FUNC Trans[]);
|
|
|
|
VOID APPeerAssocReqAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APPeerReassocReqAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APPeerDisassocReqAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID MbssKickOutStas(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN INT apidx,
|
|
IN USHORT Reason);
|
|
|
|
VOID APMlmeKickOutSta(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pStaAddr,
|
|
IN UCHAR Wcid,
|
|
IN USHORT Reason);
|
|
|
|
VOID APMlmeDisassocReqAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APCls3errAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN ULONG Wcid,
|
|
IN PHEADER_802_11 pHeader);
|
|
|
|
|
|
USHORT APBuildAssociation(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MAC_TABLE_ENTRY *pEntry,
|
|
IN USHORT CapabilityInfo,
|
|
IN UCHAR MaxSupportedRateIn500Kbps,
|
|
IN UCHAR *RSN,
|
|
IN UCHAR *pRSNLen,
|
|
IN BOOLEAN bWmmCapable,
|
|
IN ULONG RalinkIe,
|
|
#ifdef DOT11N_DRAFT3
|
|
IN EXT_CAP_INFO_ELEMENT ExtCapInfo,
|
|
#endif // DOT11N_DRAFT3 //
|
|
IN HT_CAPABILITY_IE *pHtCapability,
|
|
IN UCHAR HtCapabilityLen,
|
|
OUT USHORT *pAid);
|
|
|
|
/*
|
|
VOID RTMPAddClientSec(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN UCHAR BssIdx,
|
|
IN UCHAR KeyIdx,
|
|
IN UCHAR CipherAlg,
|
|
IN PUCHAR pKey,
|
|
IN PUCHAR pTxMic,
|
|
IN PUCHAR pRxMic,
|
|
IN MAC_TABLE_ENTRY *pEntry);
|
|
*/
|
|
|
|
// ap_auth.c
|
|
|
|
void APAuthStateMachineInit(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN STATE_MACHINE *Sm,
|
|
OUT STATE_MACHINE_FUNC Trans[]);
|
|
|
|
VOID APMlmeDeauthReqAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APCls2errAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN ULONG Wcid,
|
|
IN PHEADER_802_11 pHeader);
|
|
|
|
// ap_authrsp.c
|
|
|
|
VOID APAuthRspStateMachineInit(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PSTATE_MACHINE Sm,
|
|
IN STATE_MACHINE_FUNC Trans[]);
|
|
|
|
VOID APPeerAuthAtAuthRspIdleAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APPeerDeauthReqAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APPeerAuthSimpleRspGenAndSend(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PHEADER_802_11 pHdr80211,
|
|
IN USHORT Alg,
|
|
IN USHORT Seq,
|
|
IN USHORT StatusCode);
|
|
|
|
// ap_connect.c
|
|
|
|
BOOLEAN BeaconTransmitRequired(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN INT apidx);
|
|
|
|
VOID APMakeBssBeacon(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN INT apidx);
|
|
|
|
VOID APUpdateBeaconFrame(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN INT apidx);
|
|
|
|
VOID APMakeAllBssBeacon(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APUpdateAllBeaconFrame(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
|
|
// ap_sync.c
|
|
|
|
VOID APSyncStateMachineInit(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN STATE_MACHINE *Sm,
|
|
OUT STATE_MACHINE_FUNC Trans[]);
|
|
|
|
VOID APScanTimeout(
|
|
IN PVOID SystemSpecific1,
|
|
IN PVOID FunctionContext,
|
|
IN PVOID SystemSpecific2,
|
|
IN PVOID SystemSpecific3);
|
|
|
|
VOID APInvalidStateWhenScan(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APScanTimeoutAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APPeerProbeReqAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APPeerBeaconAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APMlmeScanReqAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APPeerBeaconAtScanAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID APScanCnclAction(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN MLME_QUEUE_ELEM *Elem);
|
|
|
|
VOID ApSiteSurvey(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID SupportRate(
|
|
IN PUCHAR SupRate,
|
|
IN UCHAR SupRateLen,
|
|
IN PUCHAR ExtRate,
|
|
IN UCHAR ExtRateLen,
|
|
OUT PUCHAR *Rates,
|
|
OUT PUCHAR RatesLen,
|
|
OUT PUCHAR pMaxSupportRate);
|
|
|
|
|
|
BOOLEAN ApScanRunning(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
#ifdef DOT11N_DRAFT3
|
|
VOID APOverlappingBSSScan(
|
|
IN RTMP_ADAPTER *pAd);
|
|
#endif // DOT11N_DRAFT3 //
|
|
|
|
// ap_wpa.c
|
|
|
|
VOID APWpaStateMachineInit(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN STATE_MACHINE *Sm,
|
|
OUT STATE_MACHINE_FUNC Trans[]);
|
|
|
|
// ap_mlme.c
|
|
|
|
VOID APMlmePeriodicExec(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APMlmeSelectTxRateTable(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PMAC_TABLE_ENTRY pEntry,
|
|
IN PUCHAR *ppTable,
|
|
IN PUCHAR pTableSize,
|
|
IN PUCHAR pInitTxRateIdx);
|
|
|
|
VOID APMlmeSetTxRate(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PMAC_TABLE_ENTRY pEntry,
|
|
IN PRTMP_TX_RATE_SWITCH pTxRate);
|
|
|
|
VOID APMlmeDynamicTxRateSwitching(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APQuickResponeForRateUpExec(
|
|
IN PVOID SystemSpecific1,
|
|
IN PVOID FunctionContext,
|
|
IN PVOID SystemSpecific2,
|
|
IN PVOID SystemSpecific3);
|
|
|
|
BOOLEAN APMsgTypeSubst(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PFRAME_802_11 pFrame,
|
|
OUT INT *Machine,
|
|
OUT INT *MsgType);
|
|
|
|
VOID APQuickResponeForRateUpExec(
|
|
IN PVOID SystemSpecific1,
|
|
IN PVOID FunctionContext,
|
|
IN PVOID SystemSpecific2,
|
|
IN PVOID SystemSpecific3);
|
|
|
|
#ifdef RT2870
|
|
VOID BeaconUpdateExec(
|
|
IN PVOID SystemSpecific1,
|
|
IN PVOID FunctionContext,
|
|
IN PVOID SystemSpecific2,
|
|
IN PVOID SystemSpecific3);
|
|
#endif // RT2870 //
|
|
|
|
VOID RTMPSetPiggyBack(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN BOOLEAN bPiggyBack);
|
|
|
|
VOID APAsicEvaluateRxAnt(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APAsicRxAntEvalTimeout(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
// ap.c
|
|
|
|
VOID APSwitchChannel(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN INT Channel);
|
|
|
|
NDIS_STATUS APInitialize(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APShutdown(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APStartUp(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APStop(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
VOID APCleanupPsQueue(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PQUEUE_HEADER pQueue);
|
|
|
|
VOID MacTableReset(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
MAC_TABLE_ENTRY *MacTableInsertEntry(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr,
|
|
IN UCHAR apidx,
|
|
IN BOOLEAN CleanAll);
|
|
|
|
BOOLEAN MacTableDeleteEntry(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN USHORT wcid,
|
|
IN PUCHAR pAddr);
|
|
|
|
MAC_TABLE_ENTRY *MacTableLookup(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr);
|
|
|
|
VOID MacTableMaintenance(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
UINT32 MacTableAssocStaNumGet(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
MAC_TABLE_ENTRY *APSsPsInquiry(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr,
|
|
OUT SST *Sst,
|
|
OUT USHORT *Aid,
|
|
OUT UCHAR *PsMode,
|
|
OUT UCHAR *Rate);
|
|
|
|
BOOLEAN APPsIndicate(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr,
|
|
IN ULONG Wcid,
|
|
IN UCHAR Psm);
|
|
|
|
VOID ApLogEvent(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr,
|
|
IN USHORT Event);
|
|
|
|
#ifdef DOT11_N_SUPPORT
|
|
VOID APUpdateOperationMode(
|
|
IN PRTMP_ADAPTER pAd);
|
|
#endif // DOT11_N_SUPPORT //
|
|
|
|
VOID APUpdateCapabilityAndErpIe(
|
|
IN PRTMP_ADAPTER pAd);
|
|
|
|
BOOLEAN ApCheckAccessControlList(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr,
|
|
IN UCHAR Apidx);
|
|
|
|
VOID ApUpdateAccessControlList(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN UCHAR Apidx);
|
|
|
|
VOID ApEnqueueNullFrame(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr,
|
|
IN UCHAR TxRate,
|
|
IN UCHAR PID,
|
|
IN UCHAR apidx,
|
|
IN BOOLEAN bQosNull,
|
|
IN BOOLEAN bEOSP,
|
|
IN UCHAR OldUP);
|
|
|
|
VOID ApSendFrame(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PVOID pBuffer,
|
|
IN ULONG Length,
|
|
IN UCHAR TxRate,
|
|
IN UCHAR PID);
|
|
|
|
VOID ApEnqueueAckFrame(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN PUCHAR pAddr,
|
|
IN UCHAR TxRate,
|
|
IN UCHAR apidx);
|
|
|
|
UCHAR APAutoSelectChannel(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN BOOLEAN Optimal);
|
|
|
|
// ap_sanity.c
|
|
|
|
|
|
BOOLEAN PeerAssocReqCmmSanity(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN BOOLEAN isRessoc,
|
|
IN VOID *Msg,
|
|
IN ULONG MsgLen,
|
|
OUT PUCHAR pAddr2,
|
|
OUT USHORT *pCapabilityInfo,
|
|
OUT USHORT *pListenInterval,
|
|
OUT PUCHAR pApAddr,
|
|
OUT UCHAR *pSsidLen,
|
|
OUT char *Ssid,
|
|
OUT UCHAR *pRatesLen,
|
|
OUT UCHAR Rates[],
|
|
OUT UCHAR *RSN,
|
|
OUT UCHAR *pRSNLen,
|
|
OUT BOOLEAN *pbWmmCapable,
|
|
#ifdef WSC_AP_SUPPORT
|
|
OUT BOOLEAN *pWscCapable,
|
|
#endif // WSC_AP_SUPPORT //
|
|
OUT ULONG *pRalinkIe,
|
|
#ifdef DOT11N_DRAFT3
|
|
OUT EXT_CAP_INFO_ELEMENT *pExtCapInfo,
|
|
#endif // DOT11N_DRAFT3 //
|
|
OUT UCHAR *pHtCapabilityLen,
|
|
OUT HT_CAPABILITY_IE *pHtCapability);
|
|
|
|
BOOLEAN PeerDisassocReqSanity(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN VOID *Msg,
|
|
IN ULONG MsgLen,
|
|
OUT PUCHAR pAddr2,
|
|
OUT USHORT *Reason);
|
|
|
|
BOOLEAN PeerDeauthReqSanity(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN VOID *Msg,
|
|
IN ULONG MsgLen,
|
|
OUT PUCHAR pAddr2,
|
|
OUT USHORT *Reason);
|
|
|
|
BOOLEAN APPeerAuthSanity(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN VOID *Msg,
|
|
IN ULONG MsgLen,
|
|
OUT PUCHAR pAddr1,
|
|
OUT PUCHAR pAddr2,
|
|
OUT USHORT *Alg,
|
|
OUT USHORT *Seq,
|
|
OUT USHORT *Status,
|
|
CHAR *ChlgText);
|
|
|
|
BOOLEAN APPeerProbeReqSanity(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN VOID *Msg,
|
|
IN ULONG MsgLen,
|
|
OUT PUCHAR pAddr2,
|
|
OUT CHAR Ssid[],
|
|
OUT UCHAR *SsidLen);
|
|
|
|
BOOLEAN APPeerBeaconAndProbeRspSanity(
|
|
IN PRTMP_ADAPTER pAd,
|
|
IN VOID *Msg,
|
|
IN ULONG MsgLen,
|
|
OUT PUCHAR pAddr2,
|
|
OUT PUCHAR pBssid,
|
|
OUT CHAR Ssid[],
|
|
OUT UCHAR *SsidLen,
|
|
OUT UCHAR *BssType,
|
|
OUT USHORT *BeaconPeriod,
|
|
OUT UCHAR *Channel,
|
|
OUT LARGE_INTEGER *Timestamp,
|
|
OUT USHORT *CapabilityInfo,
|
|
OUT UCHAR Rate[],
|
|
OUT UCHAR *RateLen,
|
|
OUT BOOLEAN *ExtendedRateIeExist,
|
|
OUT UCHAR *Erp);
|
|
|
|
// ap_info.c
|
|
|
|
|
|
|
|
// ================== end of AP RTMP.h ========================
|
|
|
|
|
|
#endif // __AP_H__
|
|
|