⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sync.c

📁 华硕无线网卡 167G linux 驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
/***************************************************************************  * RT2x00 SourceForge Project - http://rt2x00.sourceforge.net              *  *                                                                         *  *   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.             *  *                                                                         *  *   Licensed under the GNU GPL                                            *  *   Original code supplied under license from RaLink Inc, 2004.           *  ***************************************************************************//***************************************************************************  *	Module Name:	sync.c * *	Abstract: * *	Revision History: *	Who		When		What *	--------	----------	------------------------------- *	Name		Date		Modification logs *	Jan Lee		2005-06-01	Release ***************************************************************************/#include "rt_config.h"// 2.4 Ghz channel planUCHAR Ra24Ghz_FCC[] = {1,2,3,4,5,6,7,8,9,10,11};UCHAR Ra24Ghz_IC[]  = {1,2,3,4,5,6,7,8,9,10,11};UCHAR Ra24Ghz_ESTI[]= {1,2,3,4,5,6,7,8,9,10,11,12,13};UCHAR Ra24Ghz_SPAIN[] = {10,11};UCHAR Ra24Ghz_FRANCE[] = {10,11,12,13};UCHAR Ra24Ghz_MKK[] =  {14};UCHAR Ra24Ghz_MKK1[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14};UCHAR Ra24Ghz_ISRAEL[]  = {3,4,5,6,7,8,9};    // 5 Ghz channel planUCHAR Ra5Ghz_UNII[] = {36,40,44,48,52,56,60,64,  149,153,157,161};UCHAR Ra5Ghz_MMAC[] = {34,38,42,46};UCHAR Ra5Ghz_HyperLAN2[] = {36,40,44,48,52,56,60,64,  100,104,108,112,116,120,124,128,132,136,140};extern UCHAR CipherSuiteWpaNoneTkip[];extern UCHAR CipherSuiteWpaNoneTkipLen;extern UCHAR CipherSuiteWpaNoneAes[];extern UCHAR CipherSuiteWpaNoneAesLen;/*    ==========================================================================    Description:        The sync state machine,     Parameters:        Sm - pointer to the state machine    Note:        the state machine looks like the following            Column 1-2                        SYNC_IDLE                       JOIN_WAIT_BEACON    MT2_MLME_SCAN_REQ   mlme_scan_req_action            invalid_state_when_scan    MT2_MLME_JOIN_REQ   mlme_join_req_action            invalid_state_when_join    MT2_MLME_START_REQ  mlme_start_req_action           invalid_state_when_start    MT2_PEER_BEACON     peer_beacon                     peer_beacon_at_join_wait_beacon_action    MT2_PEER_PROBE_RSP  peer_beacon                     drop    MT2_PEER_ATIM       drop                            drop    MT2_SCAN_TIMEOUT    Drop                            Drop    MT2_BEACON_TIMEOUT  Drop                            beacon_timeout_at_join_wait_beacon_action    MT2_ATIM_TIMEOUT    Drop                            Drop    MT2_PEER_PROBE_REQ  ????                            drop        column 3                         SCAN_LISTEN    MT2_MLME_SCAN_REQ    invalid_state_when_scan    MT2_MLME_JOIN_REQ    invalid_state_when_join    MT2_MLME_START_REQ   invalid_state_when_start    MT2_PEER_BEACON      peer_beacon_at_scan_action    MT2_PEER_PROBE_RSP   peer_probe_rsp_at_scan_action    MT2_PEER_ATIM        drop    MT2_SCAN_TIMEOUT     scan_timeout_action    MT2_BEACON_TIMEOUT   Drop    MT2_ATIM_TIMEOUT     Drop    MT2_PEER_PROBE_REQ   drop    ========================================================================== */VOID SyncStateMachineInit(    IN PRT2570ADAPTER pAd,     IN STATE_MACHINE *Sm,     OUT STATE_MACHINE_FUNC Trans[]) {    StateMachineInit(Sm, Trans, MAX_SYNC_STATE, MAX_SYNC_MSG, (STATE_MACHINE_FUNC)Drop, SYNC_IDLE, SYNC_MACHINE_BASE);    // column 1    StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)MlmeScanReqAction);    StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)MlmeJoinReqAction);    StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)MlmeStartReqAction);    StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeacon);//  StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_RSP, PeerBeacon);    StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, (STATE_MACHINE_FUNC)PeerProbeReqAction);     //column 2    StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenScan);    StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenJoin);    StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenStart);    StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeaconAtJoinAction);    StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_BEACON_TIMEOUT, (STATE_MACHINE_FUNC)BeaconTimeoutAtJoinAction);    // column 3    StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenScan);    StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenJoin);    StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenStart);    StateMachineSetAction(Sm, SCAN_LISTEN, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeaconAtScanAction);    StateMachineSetAction(Sm, SCAN_LISTEN, MT2_PEER_PROBE_RSP, (STATE_MACHINE_FUNC)PeerBeaconAtScanAction);    StateMachineSetAction(Sm, SCAN_LISTEN, MT2_SCAN_TIMEOUT, (STATE_MACHINE_FUNC)ScanTimeoutAction);    // timer init    RTMPInitTimer(pAd, &pAd->Mlme.SyncAux.BeaconTimer, &BeaconTimeout);    //pAd->Mlme.SyncAux.BeaconTimer.data = (unsigned long)pAd;    //pAd->Mlme.SyncAux.BeaconTimer.function = &BeaconTimeout;    RTMPInitTimer(pAd, &pAd->Mlme.SyncAux.ScanTimer,  &ScanTimeout);    //pAd->Mlme.SyncAux.ScanTimer.data = (unsigned long)pAd;    //pAd->Mlme.SyncAux.ScanTimer.function = &ScanTimeout;}/*     ==========================================================================    Description:        Becaon timeout handler, executed in timer thread    ========================================================================== */VOID BeaconTimeout(    IN  unsigned long data) {	PRT2570ADAPTER  pAd = (PRT2570ADAPTER)data;	DBGPRINT(RT_DEBUG_TRACE,"SYNC - BeaconTimeout\n");	// Do nothing if the driver is starting halt state.	// This might happen when timer already been fired before cancel timer with mlmehalt	if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))		return;	MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_BEACON_TIMEOUT, 0, NULL);	RTUSBUp(pAd, &pAd->mlme_semaphore);}/*     ==========================================================================    Description:        ATIM timeout handler, executed in timer thread    ========================================================================== */VOID AtimTimeout(    IN  unsigned long data) {	PRT2570ADAPTER  pAd = (PRT2570ADAPTER)data;	DBGPRINT(RT_DEBUG_TRACE,"SYNC - AtimTimeout \n");	MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_ATIM_TIMEOUT, 0, NULL);	RTUSBUp(pAd, &pAd->mlme_semaphore);}/*     ==========================================================================    Description:        Scan timeout handler, executed in timer thread    ========================================================================== */VOID ScanTimeout(    IN  unsigned long data) {	PRT2570ADAPTER  pAd = (PRT2570ADAPTER)data;	DBGPRINT(RT_DEBUG_INFO,"SYNC - Scan Timeout \n");	// Do nothing if the driver is starting halt state.	// This might happen when timer already been fired before cancel timer with mlmehalt	if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))		return;	MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_SCAN_TIMEOUT, 0, NULL);	RTUSBUp(pAd, &pAd->mlme_semaphore);}/*     ==========================================================================    Description:        MLME SCAN req state machine procedure    ========================================================================== */VOID MlmeScanReqAction(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {	UCHAR          Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType;	ULONG          Now;	if (pAd->PortCfg.BssType == BSS_MONITOR)		return;	DBGPRINT(RT_DEBUG_INFO, "SYNC - MlmeScanReqAction\n");#if 0	// Check the total scan tries for one single OID command	if (pAd->PortCfg.IgnoredScanNumber >= 3)	{		DBGPRINT(RT_DEBUG_TRACE, "SYNC - MlmeScanReqAction: Too many tries already\n");		pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;		MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_INVALID_FORMAT);		return;	}#endif	// Increase the scan retry counters.	pAd->PortCfg.IgnoredScanNumber++;	// Suspend MSDU transmission here	RTUSBSuspendMsduTransmission(pAd);	// first check the parameter sanity	if (MlmeScanReqSanity(pAd, 	                      Elem->Msg, 	                      Elem->MsgLen, 	                      &BssType, 	                      Ssid, 	                      &SsidLen, 	                      &ScanType)) 	{		DBGPRINT(RT_DEBUG_TRACE, "SYNC - MlmeScanReqAction\n");		// temporarily recover BBP from short-distance-low-sensibility mode during SCAN		// for best SCANNING result;		AsicRestoreBbpSensibility(pAd);		Now = jiffies;		pAd->PortCfg.LastScanTime = Now;		// reset all the timers		RTMPCancelTimer(&pAd->Mlme.SyncAux.BeaconTimer);		RTMPCancelTimer(&pAd->Mlme.SyncAux.ScanTimer);		// record desired BSS parameters		pAd->Mlme.SyncAux.BssType = BssType;		pAd->Mlme.SyncAux.ScanType = ScanType;		pAd->Mlme.SyncAux.SsidLen = SsidLen;		memcpy(pAd->Mlme.SyncAux.Ssid, Ssid, SsidLen);		// start from the first channel		pAd->Mlme.SyncAux.Channel = FirstChannel(pAd);		ScanNextChannel(pAd);	} 	else 	{		DBGPRINT(RT_DEBUG_ERROR, "SYNC - MlmeScanReqAction() sanity check fail. BUG!!!\n");		pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;		MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_INVALID_FORMAT);	}}/*     ==========================================================================    Description:        MLME JOIN req state machine procedure    ========================================================================== */VOID MlmeJoinReqAction(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    BSS_ENTRY    *pBss;    MLME_JOIN_REQ_STRUCT *Info = (MLME_JOIN_REQ_STRUCT *)(Elem->Msg);    DBGPRINT(RT_DEBUG_INFO, "SYNC - MlmeJoinReqAction(BSS #%d)\n", Info->BssIdx);            // reset all the timers    RTMPCancelTimer(&pAd->Mlme.SyncAux.ScanTimer);    RTMPCancelTimer(&pAd->Mlme.SyncAux.BeaconTimer);    pBss = &pAd->Mlme.CntlAux.SsidBssTab.BssEntry[Info->BssIdx];        // record the desired SSID & BSSID we're waiting for            COPY_MAC_ADDR(&pAd->Mlme.SyncAux.Bssid, &pBss->Bssid);    memcpy(pAd->Mlme.SyncAux.Ssid, pBss->Ssid, pBss->SsidLen);    pAd->Mlme.SyncAux.SsidLen = pBss->SsidLen;            // switch channel and waiting for beacon timer    AsicSwitchChannel(pAd, pBss->Channel);    AsicLockChannel(pAd, pBss->Channel);    DBGPRINT(RT_DEBUG_INFO, "SYNC - Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x ...\n",         pAd->Mlme.SyncAux.Bssid.Octet[0], pAd->Mlme.SyncAux.Bssid.Octet[1],        pAd->Mlme.SyncAux.Bssid.Octet[2], pAd->Mlme.SyncAux.Bssid.Octet[3],        pAd->Mlme.SyncAux.Bssid.Octet[4], pAd->Mlme.SyncAux.Bssid.Octet[5]);    pAd->Mlme.SyncAux.BeaconTimer.Timer.expires = JOIN_TIMEOUT;    RTMPSetTimer(pAd, &pAd->Mlme.SyncAux.BeaconTimer, JOIN_TIMEOUT);    pAd->Mlme.SyncMachine.CurrState = JOIN_WAIT_BEACON;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -