📄 rtusb_init.c
字号:
DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n"); Status = NDIS_STATUS_RESOURCES; break; } memset(pRxContext->TransferBuffer, 0, BUFFER_SIZE); pRxContext->pAdapter = pAdapter; pRxContext->InUse = FALSE; } DBGPRINT(RT_DEBUG_TRACE,"<-- NICInitRecv\n"); return Status;}NDIS_STATUS RT2570InitAdapterBlock( PRT2570ADAPTER pAdapter){ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; UINT i; PCmdQElmt cmdqelmt; do { for (i = 0; i < COMMAND_QUEUE_SIZE; i++) { cmdqelmt = &(pAdapter->CmdQElements[i]); memset(cmdqelmt, 0, sizeof(CmdQElmt)); cmdqelmt->buffer = NULL; cmdqelmt->CmdFromNdis = FALSE; cmdqelmt->InUse = FALSE; } RTUSBInitializeCmdQ(&pAdapter->CmdQ); init_MUTEX(&(pAdapter->usbdev_semaphore)); init_MUTEX_LOCKED(&(pAdapter->mlme_semaphore)); init_MUTEX_LOCKED(&(pAdapter->RTUSBCmd_semaphore));#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0) init_completion (&pAdapter->notify);#endif NdisAllocateSpinLock(&pAdapter->CmdQLock); NdisAllocateSpinLock(&pAdapter->SendTxWaitQueueLock); NdisAllocateSpinLock(&pAdapter->BulkOutLock); NdisAllocateSpinLock(&pAdapter->MLMEWaitQueueLock); NdisAllocateSpinLock(&pAdapter->MLMEQLock); }while(0); return Status;}//////////////////////////////////////////////////////////////////////////////// FUNCTION// ReleaseAdapter//// DESCRIPTION// Calls USB_InterfaceStop and frees memory allocated for the URBs// calls NdisMDeregisterDevice and frees the memory// allocated in VNetInitialize for the Adapter Object// // INPUT// Adapter Pointer to RT2570ADAPTER structure//// OUTPUT// -// ////////////////////////////////////////////////////////////////////////////VOID ReleaseAdapter(PRT2570ADAPTER pAdapter, BOOLEAN IsF){ UINT i, IsFree; PTX_CONTEXT pNullContext = &pAdapter->NullContext; PTX_CONTEXT pPsPollContext = &pAdapter->PsPollContext; IsFree = 1; DBGPRINT(RT_DEBUG_TRACE, "==> ReleaseAdapter\n"); // Free all resources for the RECEIVE buffer queue. for (i = 0; i < RX_RING_SIZE; i++) { PRX_CONTEXT pRxContext = &(pAdapter->RxContext[i]); if (pRxContext->pUrb != NULL) { usb_kill_urb(pRxContext->pUrb); if (IsFree) usb_free_urb(pRxContext->pUrb); pRxContext->pUrb = NULL; } if (pRxContext->TransferBuffer != NULL) { FreeMemory(pRxContext->TransferBuffer); pRxContext->TransferBuffer = NULL; } }#if 0 if (NULL != pWpaPskContext->pUrb) { usb_free_urb(pWpaPskContext->pUrb); pWpaPskContext->pUrb = NULL; } if (NULL != pWpaPskContext->TransferBuffer) { FreeMemory(pWpaPskContext->TransferBuffer); pWpaPskContext->TransferBuffer = NULL; }#endif if (NULL != pPsPollContext->pUrb) { usb_kill_urb(pPsPollContext->pUrb); if (IsFree) usb_free_urb(pPsPollContext->pUrb); pPsPollContext->pUrb = NULL; } if (NULL != pPsPollContext->TransferBuffer) { FreeMemory(pPsPollContext->TransferBuffer); pPsPollContext->TransferBuffer = NULL; } if (NULL != pNullContext->pUrb) { usb_kill_urb(pNullContext->pUrb); if (IsFree) usb_free_urb(pNullContext->pUrb); pNullContext->pUrb = NULL; } if (NULL != pNullContext->TransferBuffer) { FreeMemory(pNullContext->TransferBuffer); pNullContext->TransferBuffer = NULL; } // Free beacon frame resource for (i = 0; i < BEACON_RING_SIZE; i++) { PTX_CONTEXT pBeaconContext = &(pAdapter->BeaconContext[i]); if ( NULL != pBeaconContext->pUrb ) { usb_kill_urb(pBeaconContext->pUrb); if (IsFree) usb_free_urb(pBeaconContext->pUrb); pBeaconContext->pUrb = NULL; } if ( NULL != pBeaconContext->TransferBuffer ) { FreeMemory( pBeaconContext->TransferBuffer); pBeaconContext->TransferBuffer = NULL; } } for ( i= 0; i < PRIO_RING_SIZE; i++ ) { PTX_CONTEXT pMLMEContext = &(pAdapter->MLMEContext[i]); if ( NULL != pMLMEContext->pUrb ) { usb_kill_urb(pMLMEContext->pUrb); if (IsFree) usb_free_urb(pMLMEContext->pUrb); pMLMEContext->pUrb = NULL; } if ( NULL != pMLMEContext->TransferBuffer ) { FreeMemory( pMLMEContext->TransferBuffer); pMLMEContext->TransferBuffer = NULL; } } // for for ( i= 0; i < TX_RING_SIZE; i++ ) { PTX_CONTEXT pTxContext = &(pAdapter->TxContext[i]); if ( NULL != pTxContext->pUrb ) { usb_kill_urb(pTxContext->pUrb); if (IsFree) usb_free_urb(pTxContext->pUrb); pTxContext->pUrb = NULL; } if ( NULL != pTxContext->TransferBuffer ) { FreeMemory( pTxContext->TransferBuffer); pTxContext->TransferBuffer = NULL; } } // for DBGPRINT(RT_DEBUG_TRACE, "<== ReleaseAdapter\n");}VOID PortCfgInit(PRT2570ADAPTER pAdapter){ UINT i; pAdapter->PortCfg.UseBGProtection = 2; // always not use pAdapter->PortCfg.CapabilityInfo = 0x0000; pAdapter->BulkOutMaxPacketSize = 64; //pAdapter->PortCfg.AuthRspTimeout = AUTH_KEY_TIMEOUT; // in msec pAdapter->PortCfg.Psm = PWR_ACTIVE; pAdapter->PortCfg.BeaconPeriod = 100; // in mSec // pAdapter->PortCfg.AssocRspTimeout = ASSOC_TIMEOUT; // in mSec#if 1 pAdapter->BBPR17InitValue = 0x32;#endif pAdapter->PortCfg.CfpMaxDuration = 0; // never mind, decided by AP later pAdapter->PortCfg.CfpDurRemain = 0; // never mind, decided by AP later pAdapter->PortCfg.CfpCount = 0; // never mind, decided by AP later pAdapter->PortCfg.CfpPeriod = 0; // never mind, decided by AP later pAdapter->PortCfg.AuthMode = Ndis802_11AuthModeOpen; pAdapter->PortCfg.CipherAlg = CIPHER_NONE; pAdapter->PortCfg.MlmeRate = RATE_2; pAdapter->PortCfg.RtsRate = RATE_2; for(i = 0; i < SHARE_KEY_NO; i++) { pAdapter->PortCfg.SharedKey[i].KeyLen = 0; } for(i = 0; i < PAIRWISE_KEY_NO; i++) { pAdapter->PortCfg.PairwiseKey[i].KeyLen = 0; } for(i = 0; i < GROUP_KEY_NO; i++) { pAdapter->PortCfg.GroupKey[i].KeyLen = 0; } pAdapter->PortCfg.WepStatus = Ndis802_11EncryptionDisabled; pAdapter->PortCfg.OrigWepStatus = Ndis802_11EncryptionDisabled; pAdapter->PortCfg.PairCipher = Ndis802_11EncryptionDisabled; pAdapter->PortCfg.GroupCipher = Ndis802_11EncryptionDisabled; pAdapter->PortCfg.bMixCipher = FALSE; pAdapter->PortCfg.DefaultKeyId = 0; pAdapter->PortCfg.PrivacyFilter = Ndis802_11PrivFilterAcceptAll; // 802.1x port control pAdapter->PortCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; pAdapter->PortCfg.LastMicErrorTime = 0; pAdapter->PortCfg.MicErrCnt = 0; pAdapter->PortCfg.bBlockAssoc = FALSE; pAdapter->PortCfg.RtsThreshold = 2347; pAdapter->PortCfg.FragmentThreshold = 2346; pAdapter->PortCfg.bFragmentZeroDisable = FALSE; pAdapter->PortCfg.CurrentTxAntenna = 0xff; // diversity pAdapter->PortCfg.CurrentRxAntenna = 0xff; // diversity pAdapter->PortCfg.NumberOfAntenna = 2;// pAdapter->PortCfg.TxPowerLevel[0] = 100;// pAdapter->PortCfg.NumOfTxPowerLevel = 1; pAdapter->PortCfg.TxPower = 100; //mW pAdapter->PortCfg.TxPowerPercentage = 0xffffffff; // AUTO pAdapter->PortCfg.AntennaSupportTx = TRUE; pAdapter->PortCfg.AntennaSupportRx = TRUE; pAdapter->PortCfg.AntennaSupportDiversityRx = TRUE; pAdapter->PortCfg.RecvDtim = TRUE; memset(&pAdapter->PortCfg.Bssid, 0, MAC_ADDR_LEN); memset(&pAdapter->PortCfg.Broadcast, 0xff, MAC_ADDR_LEN); pAdapter->PortCfg.Pss = PWR_ACTIVE; pAdapter->PortCfg.RssiTrigger = 0; pAdapter->PortCfg.LastRssi = 0; pAdapter->PortCfg.AvgRssi = 0; pAdapter->PortCfg.RssiTriggerMode = RSSI_TRIGGERED_UPON_BELOW_THRESHOLD; pAdapter->PortCfg.AtimWin = 0; pAdapter->PortCfg.Channel = 1; pAdapter->PortCfg.Aid = 1; pAdapter->PortCfg.DefaultListenCount = 3;//default listen count; pAdapter->PortCfg.BssType = BSS_INFRA; // BSS_INFRA or BSS_INDEP pAdapter->PortCfg.SsidLen = 0; memset(pAdapter->PortCfg.Ssid, 0, MAX_LEN_OF_SSID); // NOT NULL-terminated // global variables mXXXX used in MAC protocol state machines pAdapter->PortCfg.Mibss = FALSE; pAdapter->PortCfg.Massoc = FALSE; pAdapter->PortCfg.Mauth = FALSE; pAdapter->PortCfg.MallowRFMONTx = FALSE; pAdapter->PortCfg.ForcePrismHeader = 0; // PHY specification pAdapter->PortCfg.PhyMode = PHY_11BG_MIXED; // RTMPSetPhyMode(pAdapter, PHY_11BG_MIXED); // default in 11BG mixed mode pAdapter->PortCfg.Dsifs = 10; // in units of usec pAdapter->PortCfg.TxPreambleInUsed = Rt802_11PreambleLong; // use Long preamble on TX by defaut // user desired power mode pAdapter->PortCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; // Ndis802_11PowerModeFast_PSP; pAdapter->PortCfg.WindowsTxPreamble = Rt802_11PreambleAuto; // use Long preamble on TX by defaut //pAdapter->PortCfg.PacketFilter = NDIS_PACKET_TYPE_ALL_MULTICAST | NDIS_PACKET_TYPE_DIRECTED | NDIS_PACKET_TYPE_BROADCAST; pAdapter->bAcceptDirect = TRUE; pAdapter->bAcceptMulticast = FALSE; pAdapter->bAcceptBroadcast = TRUE; pAdapter->bAcceptAllMulticast = TRUE; #ifdef NDIS51_MINIPORT pAdapter->PortCfg.WindowsPowerProfile = NdisPowerProfileAcOnLine; // Ndis802_11PowerModeFast_PSP;#endif // parameters to be used when this STA starts a new ADHOC network pAdapter->PortCfg.IbssConfig.BeaconPeriod = 100; pAdapter->PortCfg.IbssConfig.AtimWin = 0; pAdapter->PortCfg.IbssConfig.Channel = 1; pAdapter->PortCfg.RfType = RFIC_2525; pAdapter->PortCfg.LedMode = LED_MODE_DEFAULT; //steven NdisMInitializeTimer(&pAdapter->PortCfg.RfTuningTimer, pAdapter->AdapterHandle, AsicRfTuningExec, pAdapter); // Patch for Ndtest pAdapter->PortCfg.IgnoredScanNumber = 0; pAdapter->bTxBusy = FALSE; pAdapter->PortCfg.bHwRadio = TRUE; pAdapter->PortCfg.bSwRadio = TRUE; pAdapter->PortCfg.bRadio = TRUE; DBGPRINT(RT_DEBUG_TEMP, "INIT bRadio=%d\n", pAdapter->PortCfg.bRadio); pAdapter->PortCfg.bHardwareRadio = FALSE; // Default is OFF pAdapter->PortCfg.bAutoTxAgc = FALSE; // Default is OFF pAdapter->PortCfg.bShowHiddenSSID = FALSE; // Default no show pAdapter->PortCfg.AdhocMode = 0; // b/g in adhoc // Nitro mode control pAdapter->PortCfg.EnableTxBurst = 0; pAdapter->PortCfg.AutoReconnect = TRUE; // Save the init time as last scan time, the system should do scan after 2 seconds. // This patch is for driver wake up from standby mode, system will do scan right away. pAdapter->PortCfg.LastScanTime = 0; pAdapter->ScanAllowed = TRUE; // Default for extra information is not valid pAdapter->ExtraInfo = EXTRA_INFO_CLEAR; // Default Config change flag pAdapter->bConfigChanged = FALSE; // dynamic BBP R17:sensibity tuning to overcome background noise pAdapter->PortCfg.BbpTuningEnable = TRUE; // overwritten by E2PROM setting pAdapter->PortCfg.VgcLowerBound = 0x38; // overwritten by E2PROM setting pAdapter->PortCfg.BbpTuning.FalseCcaLowerThreshold = 100; pAdapter->PortCfg.BbpTuning.FalseCcaUpperThreshold = 4; // unit 128, 4*128 = 512 pAdapter->PortCfg.BbpTuning.VgcDelta = 1; pAdapter->PortCfg.BbpTuning.VgcUpperBound = BBP_R17_DYNAMIC_UP_BOUND; pAdapter->PortCfg.UseShortSlotTime = 1;//steven:for 2/20 demo purpose for (i = 0; i < 12; i++) { pAdapter->TxRateSwitchingStruc[i].LastStableTime = 0; pAdapter->TxRateSwitchingStruc[i].DownRate1Ratio = 55; pAdapter->TxRateSwitchingStruc[i].DownRate2Ratio = 45; pAdapter->TxRateSwitchingStruc[i].UpRateRatio = 85; pAdapter->TxRateSwitchingStruc[i].StableTimeRequired = 3; pAdapter->TxRateSwitchingStruc[i].PenaltyPeriod = 6; pAdapter->TxRateSwitchingStruc[i].DownWaitingTime = 4; switch (i) { case 11: pAdapter->TxRateSwitchingStruc[i].DownRate1Ratio = 70; break; } } pAdapter->BBPTuningParameters.BBPTuningThreshold = 45; pAdapter->BBPTuningParameters.R24LowerValue = 0x80; pAdapter->BBPTuningParameters.R25LowerValue = 0x50; pAdapter->BBPTuningParameters.R61LowerValue = 0x60; pAdapter->BBPTuningParameters.R24HigherValue = 0x70; pAdapter->BBPTuningParameters.R25HigherValue = 0x40; pAdapter->BBPTuningParameters.R61HigherValue = 0x6d; pAdapter->BBPTuningParameters.BBPR17LowSensitivity = BBP_R17_LOW_SENSIBILITY; pAdapter->BBPTuningParameters.BBPR17MidSensitivity = BBP_R17_MID_SENSIBILITY; pAdapter->BBPTuningParameters.RSSIToDbmOffset = RSSI_TO_DBM_OFFSET; pAdapter->BBPTuningParameters.LargeCurrentRSSI = FALSE;}UCHAR BtoH(char ch){ if (ch >= '0' && ch <= '9') return (ch - '0'); // Handle numerals if (ch >= 'A' && ch <= 'F') return (ch - 'A' + 0xA); // Handle capitol hex digits if (ch >= 'a' && ch <= 'f') return (ch - 'a' + 0xA); // Handle small hex digits return(255);}//// FUNCTION: AtoH(char *, UCHAR *, int)//// PURPOSE: Converts ascii string to network order hex//// PARAMETERS:// src - pointer to input ascii string// dest - pointer to output hex// destlen - size of dest//// COMMENTS://// 2 ascii bytes m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -