📄 rt_profile.c
字号:
#ifdef CONFIG_STA_SUPPORT //PSMode if (RTMPGetKeyParameter("PSMode", tmpbuf, 10, buffer)) { if (pAd->StaCfg.BssType == BSS_INFRA) { if ((strcmp(tmpbuf, "MAX_PSP") == 0) || (strcmp(tmpbuf, "max_psp") == 0)) { // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() // to exclude certain situations. // MlmeSetPsm(pAd, PWR_SAVE); OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP; pAd->StaCfg.DefaultListenCount = 3; } else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0) || (strcmp(tmpbuf, "FAST_PSP") == 0)) { // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() // to exclude certain situations. // MlmeSetPsmBit(pAd, PWR_SAVE); OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP; pAd->StaCfg.DefaultListenCount = 3; } else { //Default Ndis802_11PowerModeCAM // clear PSM bit immediately MlmeSetPsmBit(pAd, PWR_ACTIVE); OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; } DBGPRINT(RT_DEBUG_TRACE, ("PSMode=%ld\n", pAd->StaCfg.WindowsPowerMode)); } } // FastRoaming if (RTMPGetKeyParameter("FastRoaming", tmpbuf, 32, buffer)) { if (simple_strtol(tmpbuf, 0, 10) == 0) pAd->StaCfg.bFastRoaming = FALSE; else pAd->StaCfg.bFastRoaming = TRUE; DBGPRINT(RT_DEBUG_TRACE, ("FastRoaming=%d\n", pAd->StaCfg.bFastRoaming)); } // RoamThreshold if (RTMPGetKeyParameter("RoamThreshold", tmpbuf, 32, buffer)) { long lInfo = simple_strtol(tmpbuf, 0, 10); if (lInfo > 90 || lInfo < 60) pAd->StaCfg.dBmToRoam = -70; else pAd->StaCfg.dBmToRoam = (CHAR)(-1)*lInfo; DBGPRINT(RT_DEBUG_TRACE, ("RoamThreshold=%d dBm\n", pAd->StaCfg.dBmToRoam)); }#endif // CONFIG_STA_SUPPORT // } } else { DBGPRINT(RT_DEBUG_TRACE, ("--> %s does not have a write method\n", src)); } retval=filp_close(srcf,NULL); if (retval) { DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); } } } set_fs(orgfs); current->fsuid = orgfsuid; current->fsgid = orgfsgid; kfree(buffer); kfree(tmpbuf); return (NDIS_STATUS_SUCCESS); }static void HTParametersHook( IN PRTMP_ADAPTER pAd, IN CHAR *pValueStr, IN CHAR *pInput){ INT Value; if (RTMPGetKeyParameter("HT_PROTECT", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.bHTProtect = FALSE; } else { pAd->CommonCfg.bHTProtect = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Protection = %s\n", (Value==0) ? "Disable" : "Enable")); } if (RTMPGetKeyParameter("HT_MIMOPSEnable", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.bMIMOPSEnable = FALSE; } else { pAd->CommonCfg.bMIMOPSEnable = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPSEnable = %s\n", (Value==0) ? "Disable" : "Enable")); } if (RTMPGetKeyParameter("HT_MIMOPSMode", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value > MMPS_ENABLE) { pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; } else { //TODO: add mimo power saving mechanism pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; //pAd->CommonCfg.BACapability.field.MMPSmode = Value; } DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPS Mode = %d\n", Value)); } if (RTMPGetKeyParameter("HT_BADecline", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.bBADecline = FALSE; } else { pAd->CommonCfg.bBADecline = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Decline = %s\n", (Value==0) ? "Disable" : "Enable")); } if (RTMPGetKeyParameter("HT_DisableReordering", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.bDisableReordering = FALSE; } else { pAd->CommonCfg.bDisableReordering = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: DisableReordering = %s\n", (Value==0) ? "Disable" : "Enable")); } if (RTMPGetKeyParameter("HT_AutoBA", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.BACapability.field.AutoBA = FALSE; } else { pAd->CommonCfg.BACapability.field.AutoBA = TRUE; } pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA; DBGPRINT(RT_DEBUG_TRACE, ("HT: Auto BA = %s\n", (Value==0) ? "Disable" : "Enable")); } // Tx_+HTC frame if (RTMPGetKeyParameter("HT_HTC", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->HTCEnable = FALSE; } else { pAd->HTCEnable = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx +HTC frame = %s\n", (Value==0) ? "Disable" : "Enable")); } // Enable HT Link Adaptation Control if (RTMPGetKeyParameter("HT_LinkAdapt", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->bLinkAdapt = FALSE; } else { pAd->HTCEnable = TRUE; pAd->bLinkAdapt = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Link Adaptation Control = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); } // Reverse Direction Mechanism if (RTMPGetKeyParameter("HT_RDG", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.bRdg = FALSE; } else { pAd->HTCEnable = TRUE; pAd->CommonCfg.bRdg = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: RDG = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); } // Tx A-MSUD ? if (RTMPGetKeyParameter("HT_AMSDU", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE; } else { pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx A-MSDU = %s\n", (Value==0) ? "Disable" : "Enable")); } // MPDU Density if (RTMPGetKeyParameter("HT_MpduDensity", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value <=7 && Value >= 0) { pAd->CommonCfg.BACapability.field.MpduDensity = Value; DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d\n", Value)); } else { pAd->CommonCfg.BACapability.field.MpduDensity = 4; DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d (Default)\n", 4)); } } // Max Rx BA Window Size if (RTMPGetKeyParameter("HT_BAWinSize", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); // Intel IOT //Value = 64; if (Value >=1 && Value <= 64) { pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value; pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value; DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = %d\n", Value)); } else { pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64; pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = 64 (Defualt)\n")); } } // Guard Interval if (RTMPGetKeyParameter("HT_GI", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == GI_400) { pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400; } else { pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Guard Interval = %s\n", (Value==GI_400) ? "400" : "800" )); } // HT Operation Mode : Mixed Mode , Green Field if (RTMPGetKeyParameter("HT_OpMode", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == HTMODE_GF) { pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF; } else { pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Operate Mode = %s\n", (Value==HTMODE_GF) ? "Green Field" : "Mixed Mode" )); } // Fixed Tx mode : CCK, OFDM if (RTMPGetKeyParameter("FixedTxMode", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("FixedTxMode = %d\n", Value)); if (Value == FIXED_TXMODE_CCK || Value == FIXED_TXMODE_OFDM) { pAd->CommonCfg.FixedTxMode = Value; } else { pAd->CommonCfg.FixedTxMode = FIXED_TXMODE_NONE; DBGPRINT(RT_DEBUG_WARN, ("Invalid FixedTxMode value (%d), ignored, Fix Tx Mode = NONE.\n", Value)); } } // Channel Width if (RTMPGetKeyParameter("HT_BW", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == BW_40) { pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; } else { pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Channel Width = %s\n", (Value==BW_40) ? "40 MHz" : "20 MHz" )); } if (RTMPGetKeyParameter("HT_EXTCHA", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; } else { pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Ext Channel = %s\n", (Value==0) ? "BELOW" : "ABOVE" )); } // MSC if (RTMPGetKeyParameter("HT_MCS", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); //if (Value >= 0 && Value < MCS_AUTO) if ((Value >= 0 && Value <= 15) || (Value == 32)) { OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); pAd->CommonCfg.RegTransmitSetting.field.MCS = Value; } else { OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); pAd->CommonCfg.RegTransmitSetting.field.MCS = MCS_AUTO; } if (pAd->CommonCfg.RegTransmitSetting.field.MCS == MCS_AUTO) { DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = AUTO\n")); } else { DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = %d\n", pAd->CommonCfg.RegTransmitSetting.field.MCS)); } } // STBC if (RTMPGetKeyParameter("HT_STBC", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == STBC_USE) { pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE; } else { pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: STBC = %d\n", pAd->CommonCfg.RegTransmitSetting.field.STBC)); } // 40_Mhz_Intolerant if (RTMPGetKeyParameter("HT_40MHZ_INTOLERANT", pValueStr, 25, pInput)) { Value = simple_strtol(pValueStr, 0, 10); if (Value == 0) { pAd->CommonCfg.bForty_Mhz_Intolerant = FALSE; } else { pAd->CommonCfg.bForty_Mhz_Intolerant = TRUE; } DBGPRINT(RT_DEBUG_TRACE, ("HT: 40MHZ INTOLERANT = %d\n", pAd->CommonCfg.bForty_Mhz_Intolerant)); } //HT_TxStream if(RTMPGetKeyParameter("HT_TxStream", pValueStr, 10, pInput)) { switch (simple_strtol(pValueStr, 0, 10)) { case 1: pAd->CommonCfg.TxStream = 1; break; case 2: default: pAd->CommonCfg.TxStream = 2; break; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx Stream = %d\n", pAd->CommonCfg.TxStream)); } //HT_RxStream if(RTMPGetKeyParameter("HT_RxStream", pValueStr, 10, pInput)) { switch (simple_strtol(pValueStr, 0, 10)) { case 1: pAd->CommonCfg.RxStream = 1; break; case 2: pAd->CommonCfg.RxStream = 2; break; case 3: default: pAd->CommonCfg.RxStream = 3; break; } DBGPRINT(RT_DEBUG_TRACE, ("HT: Rx Stream = %d\n", pAd->CommonCfg.RxStream)); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -