?? rtmp_init.c
字號:
Length Size Return Value: None Note: ========================================================================*/VOID RTMPZeroMemory( IN PVOID pSrc, IN ULONG Length){ memset(pSrc, 0, Length);}VOID RTMPFillMemory( IN PVOID pSrc, IN ULONG Length, IN UCHAR Fill){ memset(pSrc, Fill, Length);}/* ======================================================================== Routine Description: Copy data from memory block 1 to memory block 2 Arguments: pDest Pointer to destination memory address pSrc Pointer to source memory address Length Copy size Return Value: None Note: ========================================================================*/VOID RTMPMoveMemory( OUT PVOID pDest, IN PVOID pSrc, IN ULONG Length){#ifdef RTMP_EMBEDDED if(Length <= 8) { *(PUCHAR)pDest++ = *(PUCHAR)pSrc++; if(--Length == 0) return; *(PUCHAR)pDest++ = *(PUCHAR)pSrc++; if(--Length == 0) return; *(PUCHAR)pDest++ = *(PUCHAR)pSrc++; if(--Length == 0) return; *(PUCHAR)pDest++ = *(PUCHAR)pSrc++; if(--Length == 0) return; *(PUCHAR)pDest++ = *(PUCHAR)pSrc++; if(--Length == 0) return; *(PUCHAR)pDest++ = *(PUCHAR)pSrc++; if(--Length == 0) return; *(PUCHAR)pDest++ = *(PUCHAR)pSrc++; if(--Length == 0) return; *(PUCHAR)pDest++ = *(PUCHAR)pSrc++; if(--Length == 0) return; } else memcpy(pDest, pSrc, Length);#else memcpy(pDest, pSrc, Length);#endif}/* ======================================================================== Routine Description: Initialize port configuration structure Arguments: Adapter Pointer to our adapter Return Value: None Note: ========================================================================*/VOID PortCfgInit( IN PRTMP_ADAPTER pAd){ UINT i; DBGPRINT(RT_DEBUG_TRACE, "--> PortCfgInit\n"); // // part I. intialize common configuration // for(i = 0; i < SHARE_KEY_NUM; i++) { pAd->SharedKey[i].KeyLen = 0; pAd->SharedKey[i].CipherAlg = CIPHER_NONE; } pAd->Antenna.field.TxDefaultAntenna = 2; // Ant-B pAd->Antenna.field.RxDefaultAntenna = 2; // Ant-B pAd->Antenna.field.NumOfAntenna = 2; pAd->LedCntl.field.LedMode = LED_MODE_DEFAULT; pAd->LedIndicatorStrength = 0; pAd->bAutoTxAgcA = FALSE; // Default is OFF pAd->bAutoTxAgcG = FALSE; // Default is OFF pAd->RfIcType = RFIC_5226; pAd->PortCfg.Dsifs = 10; // in units of usec pAd->PortCfg.PrivacyFilter = Ndis802_11PrivFilterAcceptAll; pAd->PortCfg.TxPower = 100; //mW pAd->PortCfg.TxPowerPercentage = 0xffffffff; // AUTO pAd->PortCfg.TxPowerDefault = 0xffffffff; // AUTO pAd->PortCfg.TxPreamble = Rt802_11PreambleAuto; // use Long preamble on TX by defaut pAd->PortCfg.bUseZeroToDisableFragment = FALSE; pAd->PortCfg.RtsThreshold = 2347; pAd->PortCfg.FragmentThreshold = 2346; pAd->PortCfg.dBmToRoam = 70; // default threshold used pAd->PortCfg.UseBGProtection = 0; // 0: AUTO pAd->PortCfg.bEnableTxBurst = 0; pAd->PortCfg.PhyMode = 0xff; // unknown pAd->PortCfg.BandState = UNKNOWN_BAND; pAd->PortCfg.UseShortSlotTime = TRUE; // default short slot used, it depends on AP's capability pAd->bAcceptDirect = TRUE; pAd->bAcceptMulticast = FALSE; pAd->bAcceptBroadcast = TRUE; pAd->bAcceptAllMulticast = TRUE; pAd->bAcceptRFMONTx = FALSE; pAd->bLocalAdminMAC = FALSE; //TRUE; pAd->PortCfg.RadarDetect.CSPeriod = 10; pAd->PortCfg.RadarDetect.CSCount = 0; pAd->PortCfg.RadarDetect.RDMode = RD_NORMAL_MODE; // // part II. intialize STA specific configuration // pAd->PortCfg.Psm = PWR_ACTIVE; pAd->PortCfg.BeaconPeriod = 100; // in mSec pAd->PortCfg.ScanCnt = 0; pAd->PortCfg.AuthMode = Ndis802_11AuthModeOpen; pAd->PortCfg.WepStatus = Ndis802_11EncryptionDisabled; pAd->PortCfg.PairCipher = Ndis802_11EncryptionDisabled; pAd->PortCfg.GroupCipher = Ndis802_11EncryptionDisabled; pAd->PortCfg.bMixCipher = FALSE; pAd->PortCfg.DefaultKeyId = 0; // 802.1x port control pAd->PortCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; pAd->PortCfg.LastMicErrorTime = 0; pAd->PortCfg.MicErrCnt = 0; pAd->PortCfg.bBlockAssoc = FALSE; pAd->PortCfg.WpaState = SS_NOTUSE; // Handle by microsoft unless RaConfig changed it. pAd->PortCfg.RssiTrigger = 0; pAd->PortCfg.LastRssi = 0; pAd->PortCfg.LastRssi2 = 0; pAd->PortCfg.AvgRssi = 0; pAd->PortCfg.AvgRssiX8 = 0; pAd->PortCfg.RssiTriggerMode = RSSI_TRIGGERED_UPON_BELOW_THRESHOLD; pAd->PortCfg.AtimWin = 0; pAd->PortCfg.DefaultListenCount = 3;//default listen count; pAd->PortCfg.BssType = BSS_INFRA; // BSS_INFRA or BSS_ADHOC pAd->PortCfg.AdhocMode = 0; // global variables mXXXX used in MAC protocol state machines OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); // PHY specification pAd->PortCfg.PhyMode = PHY_11ABG_MIXED; // default PHY mode OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); // CCK use LONG preamble // user desired power mode pAd->PortCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; pAd->PortCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; pAd->PortCfg.bWindowsACCAMEnable = FALSE; RTMPInitTimer(pAd, &pAd->PortCfg.QuickResponeForRateUpTimer, &StaQuickResponeForRateUpExec); pAd->PortCfg.QuickResponeForRateUpTimerRunning = FALSE; pAd->PortCfg.bHwRadio = TRUE; // Default Hardware Radio status is On pAd->PortCfg.bSwRadio = TRUE; // Default Software Radio status is On pAd->PortCfg.bRadio = TRUE; // bHwRadio && bSwRadio pAd->PortCfg.bHardwareRadio = FALSE; // Default is OFF pAd->PortCfg.bShowHiddenSSID = FALSE; // Default no show pAd->PortCfg.AdhocMode = 0; // b/g in adhoc // Nitro mode control pAd->PortCfg.bAutoReconnect = 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. pAd->PortCfg.LastScanTime = 0; // Default for extra information is not valid pAd->ExtraInfo = EXTRA_INFO_CLEAR; // Default Config change flag pAd->bConfigChanged = FALSE; // // part III. others // // dynamic BBP R17:sensibity tuning to overcome background noise pAd->BbpTuning.bEnable = TRUE; pAd->BbpTuning.R17LowerBoundG = 0x20; // for best RX sensibility pAd->BbpTuning.R17UpperBoundG = 0x40; // for best RX noise isolation to prevent false CCA pAd->BbpTuning.R17LowerBoundA = 0x28; // for best RX sensibility pAd->BbpTuning.R17UpperBoundA = 0x48; // for best RX noise isolation to prevent false CCA pAd->BbpTuning.R17LowerUpperSelect = 0; // Default used LowerBound. pAd->BbpTuning.FalseCcaLowerThreshold = 100; pAd->BbpTuning.FalseCcaUpperThreshold = 512; pAd->BbpTuning.R17Delta = 4; pAd->Bbp94 = BBPR94_DEFAULT; pAd->BbpForCCK = FALSE;//#if WPA_SUPPLICANT_SUPPORT pAd->PortCfg.IEEE8021X = 0; pAd->PortCfg.IEEE8021x_required_keys = 0; pAd->PortCfg.WPA_Supplicant = FALSE; pAd->PortCfg.bWscCapable = TRUE; pAd->PortCfg.WscIEProbeReq.ValueLen = 0; pAd->PortCfg.Send_Beacon = FALSE;//#endif DBGPRINT(RT_DEBUG_TRACE, "<-- PortCfgInit\n");}UCHAR BtoH( IN 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);}//// 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 make a hex byte so must put 1st ascii byte of pair// into upper nibble and 2nd ascii byte of pair into lower nibble.//VOID AtoH( IN CHAR *src, OUT UCHAR *dest, IN INT destlen){ CHAR *srcptr; PUCHAR destTemp; srcptr = src; destTemp = (PUCHAR) dest; while(destlen--) { *destTemp = BtoH(*srcptr++) << 4; // Put 1st ascii byte in upper nibble. *destTemp += BtoH(*srcptr++); // Add 2nd ascii byte to above. destTemp++; }}VOID RTMPPatchMacBbpBug( IN PRTMP_ADAPTER pAd){#if 0 ULONG Index; // Initialize BBP register to default value for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) { RTUSBWriteBBPRegister(pAd, BBPRegTable[Index].Register, (UCHAR)BBPRegTable[Index].Value); } // Initialize RF register to default value AsicSwitchChannel(pAd, pAd->PortCfg.Channel); AsicLockChannel(pAd, pAd->PortCfg.Channel); // Re-init BBP register from EEPROM value NICInitAsicFromEEPROM(pAd);#endif}// Unify all delay routine by using udelayVOID RTMPusecDelay( IN ULONG usec){ ULONG i; for (i = 0; i < (usec / 50); i++) udelay(50); if (usec % 50) udelay(usec % 50);}/* ======================================================================== Routine Description: Set LED Status Arguments: pAd Pointer to our adapter Status LED Status Return Value: None Note: ========================================================================*/VOID RTMPSetLED( IN UCHAR Status){ switch (Status) { case LED_LINK_DOWN: pAd->LedCntl.field.LinkGStatus = 0; pAd->LedCntl.field.LinkAStatus = 0; pAd->LedIndicatorStrength = 0; RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength); break; case LED_LINK_UP: if (pAd->PortCfg.Channel <= 14) { // 11 G mode pAd->LedCntl.field.LinkGStatus = 1; pAd->LedCntl.field.LinkAStatus = 0; } else { //11 A mode pAd->LedCntl.field.LinkGStatus = 0; pAd->LedCntl.field.LinkAStatus = 1; } RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength); break; case LED_RADIO_ON: pAd->LedCntl.field.RadioStatus = 1; RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength); break; case LED_HALT: //Same as Radio Off. case LED_RADIO_OFF: pAd->LedCntl.field.RadioStatus = 0; pAd->LedCntl.field.LinkGStatus = 0; pAd->LedCntl.field.LinkAStatus = 0; pAd->LedIndicatorStrength = 0; RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength); break; default: DBGPRINT(RT_DEBUG_WARN, "RTMPSetLED::Unknown Status %d\n", Status); break; }}/* ======================================================================== Routine Description: Set LED Signal Stregth Arguments: pAd Pointer to our adapter Dbm Signal Stregth Return Value: None Note: Can be run on any IRQL level. According to Microsoft Zero Config Wireless Signal Stregth definition as belows. <= -90 No Signal <= -81 Very Low <= -71 Low <= -67 Good <= -57 Very Good > -57 Excellent ========================================================================*/VOID RTMPSetSignalLED( IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm){ USHORT nLed = 0; if (Dbm <= -90) nLed = 0; else if (Dbm <= -81) nLed = 1; else if (Dbm <= -71) nLed = 2; else if (Dbm <= -67) nLed = 3; else if (Dbm <= -57) nLed = 4; else nLed = 5; // // Update Signal Stregth to if changed. // if ((pAd->LedIndicatorStrength != nLed) && (pAd->LedCntl.field.LedMode == LED_MODE_SIGNAL_STREGTH)) { pAd->LedIndicatorStrength = nLed; RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength); }}VOID RTMPCckBbpTuning( IN PRTMP_ADAPTER pAd, IN UINT TxRate){ CHAR Bbp94 = 0xFF; // // Do nothing if TxPowerEnable == FALSE // if (pAd->TxPowerDeltaConfig.field.TxPowerEnable == FALSE) return; if ((TxRate < RATE_FIRST_OFDM_RATE) && (pAd->BbpForCCK == FALSE)) { Bbp94 = pAd->Bbp94; if (pAd->TxPowerDeltaConfig.field.Type == 1) { Bbp94 += pAd->TxPowe
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -