2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
28 #include "../rt_config.h"
34 INT Show_WirelessMode_Proc(
38 INT Show_TxBurst_Proc(
42 INT Show_TxPreamble_Proc(
46 INT Show_TxPower_Proc(
50 INT Show_Channel_Proc(
54 INT Show_BGProtection_Proc(
58 INT Show_RTSThreshold_Proc(
62 INT Show_FragThreshold_Proc(
66 #ifdef DOT11_N_SUPPORT
79 INT Show_HtOpMode_Proc(
83 INT Show_HtExtcha_Proc(
87 INT Show_HtMpduDensity_Proc(
91 INT Show_HtBaWinSize_Proc(
99 INT Show_HtAmsdu_Proc(
100 IN PRTMP_ADAPTER pAd,
103 INT Show_HtAutoBa_Proc(
104 IN PRTMP_ADAPTER pAd,
106 #endif // DOT11_N_SUPPORT //
108 INT Show_CountryRegion_Proc(
109 IN PRTMP_ADAPTER pAd,
112 INT Show_CountryRegionABand_Proc(
113 IN PRTMP_ADAPTER pAd,
116 INT Show_CountryCode_Proc(
117 IN PRTMP_ADAPTER pAd,
120 #ifdef AGGREGATION_SUPPORT
121 INT Show_PktAggregate_Proc(
122 IN PRTMP_ADAPTER pAd,
124 #endif // AGGREGATION_SUPPORT //
127 INT Show_WmmCapable_Proc(
128 IN PRTMP_ADAPTER pAd,
130 #endif // WMM_SUPPORT //
132 INT Show_IEEE80211H_Proc(
133 IN PRTMP_ADAPTER pAd,
136 #ifdef CONFIG_STA_SUPPORT
137 INT Show_NetworkType_Proc(
138 IN PRTMP_ADAPTER pAd,
140 #endif // CONFIG_STA_SUPPORT //
142 INT Show_AuthMode_Proc(
143 IN PRTMP_ADAPTER pAd,
146 INT Show_EncrypType_Proc(
147 IN PRTMP_ADAPTER pAd,
150 INT Show_DefaultKeyID_Proc(
151 IN PRTMP_ADAPTER pAd,
155 IN PRTMP_ADAPTER pAd,
159 IN PRTMP_ADAPTER pAd,
163 IN PRTMP_ADAPTER pAd,
167 IN PRTMP_ADAPTER pAd,
170 INT Show_WPAPSK_Proc(
171 IN PRTMP_ADAPTER pAd,
176 INT (*show_proc)(PRTMP_ADAPTER pAdapter, PUCHAR arg);
177 } *PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC, RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC[] = {
178 {"SSID", Show_SSID_Proc},
179 {"WirelessMode", Show_WirelessMode_Proc},
180 {"TxBurst", Show_TxBurst_Proc},
181 {"TxPreamble", Show_TxPreamble_Proc},
182 {"TxPower", Show_TxPower_Proc},
183 {"Channel", Show_Channel_Proc},
184 {"BGProtection", Show_BGProtection_Proc},
185 {"RTSThreshold", Show_RTSThreshold_Proc},
186 {"FragThreshold", Show_FragThreshold_Proc},
187 #ifdef DOT11_N_SUPPORT
188 {"HtBw", Show_HtBw_Proc},
189 {"HtMcs", Show_HtMcs_Proc},
190 {"HtGi", Show_HtGi_Proc},
191 {"HtOpMode", Show_HtOpMode_Proc},
192 {"HtExtcha", Show_HtExtcha_Proc},
193 {"HtMpduDensity", Show_HtMpduDensity_Proc},
194 {"HtBaWinSize", Show_HtBaWinSize_Proc},
195 {"HtRdg", Show_HtRdg_Proc},
196 {"HtAmsdu", Show_HtAmsdu_Proc},
197 {"HtAutoBa", Show_HtAutoBa_Proc},
198 #endif // DOT11_N_SUPPORT //
199 {"CountryRegion", Show_CountryRegion_Proc},
200 {"CountryRegionABand", Show_CountryRegionABand_Proc},
201 {"CountryCode", Show_CountryCode_Proc},
202 #ifdef AGGREGATION_SUPPORT
203 {"PktAggregate", Show_PktAggregate_Proc},
207 {"WmmCapable", Show_WmmCapable_Proc},
209 {"IEEE80211H", Show_IEEE80211H_Proc},
210 #ifdef CONFIG_STA_SUPPORT
211 {"NetworkType", Show_NetworkType_Proc},
212 #endif // CONFIG_STA_SUPPORT //
213 {"AuthMode", Show_AuthMode_Proc},
214 {"EncrypType", Show_EncrypType_Proc},
215 {"DefaultKeyID", Show_DefaultKeyID_Proc},
216 {"Key1", Show_Key1_Proc},
217 {"Key2", Show_Key2_Proc},
218 {"Key3", Show_Key3_Proc},
219 {"Key4", Show_Key4_Proc},
220 {"WPAPSK", Show_WPAPSK_Proc},
225 ==========================================================================
230 ==========================================================================
232 INT Set_DriverVersion_Proc(
233 IN PRTMP_ADAPTER pAd,
237 #ifdef CONFIG_STA_SUPPORT
238 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
239 DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s\n", STA_DRIVER_VERSION));
240 #endif // CONFIG_STA_SUPPORT //
246 ==========================================================================
249 This command will not work, if the field of CountryRegion in eeprom is programmed.
251 TRUE if all parameters are OK, FALSE otherwise
252 ==========================================================================
254 INT Set_CountryRegion_Proc(
255 IN PRTMP_ADAPTER pAd,
260 region = simple_strtol(arg, 0, 10);
262 #ifdef EXT_BUILD_CHANNEL_LIST
264 #endif // EXT_BUILD_CHANNEL_LIST //
266 // Country can be set only when EEPROM not programmed
267 if (pAd->CommonCfg.CountryRegion & 0x80)
269 DBGPRINT(RT_DEBUG_ERROR, ("Set_CountryRegion_Proc::parameter of CountryRegion in eeprom is programmed \n"));
273 if((region >= 0) && (region <= REGION_MAXIMUM_BG_BAND))
275 pAd->CommonCfg.CountryRegion = (UCHAR) region;
277 else if (region == REGION_31_BG_BAND)
279 pAd->CommonCfg.CountryRegion = (UCHAR) region;
283 DBGPRINT(RT_DEBUG_ERROR, ("Set_CountryRegion_Proc::parameters out of range\n"));
287 // if set country region, driver needs to be reset
288 BuildChannelList(pAd);
290 DBGPRINT(RT_DEBUG_TRACE, ("Set_CountryRegion_Proc::(CountryRegion=%d)\n", pAd->CommonCfg.CountryRegion));
296 ==========================================================================
298 Set Country Region for A band.
299 This command will not work, if the field of CountryRegion in eeprom is programmed.
301 TRUE if all parameters are OK, FALSE otherwise
302 ==========================================================================
304 INT Set_CountryRegionABand_Proc(
305 IN PRTMP_ADAPTER pAd,
310 region = simple_strtol(arg, 0, 10);
312 #ifdef EXT_BUILD_CHANNEL_LIST
314 #endif // EXT_BUILD_CHANNEL_LIST //
316 // Country can be set only when EEPROM not programmed
317 if (pAd->CommonCfg.CountryRegionForABand & 0x80)
319 DBGPRINT(RT_DEBUG_ERROR, ("Set_CountryRegionABand_Proc::parameter of CountryRegion in eeprom is programmed \n"));
323 if((region >= 0) && (region <= REGION_MAXIMUM_A_BAND))
325 pAd->CommonCfg.CountryRegionForABand = (UCHAR) region;
329 DBGPRINT(RT_DEBUG_ERROR, ("Set_CountryRegionABand_Proc::parameters out of range\n"));
333 // if set country region, driver needs to be reset
334 BuildChannelList(pAd);
336 DBGPRINT(RT_DEBUG_TRACE, ("Set_CountryRegionABand_Proc::(CountryRegion=%d)\n", pAd->CommonCfg.CountryRegionForABand));
342 ==========================================================================
346 TRUE if all parameters are OK, FALSE otherwise
347 ==========================================================================
349 INT Set_WirelessMode_Proc(
350 IN PRTMP_ADAPTER pAd,
356 WirelessMode = simple_strtol(arg, 0, 10);
359 #ifdef CONFIG_STA_SUPPORT
360 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
362 INT MaxPhyMode = PHY_11G;
364 #ifdef DOT11_N_SUPPORT
365 MaxPhyMode = PHY_11N_5G;
366 #endif // DOT11_N_SUPPORT //
368 if (WirelessMode <= MaxPhyMode)
370 RTMPSetPhyMode(pAd, WirelessMode);
371 #ifdef DOT11_N_SUPPORT
372 if (WirelessMode >= PHY_11ABGN_MIXED)
374 pAd->CommonCfg.BACapability.field.AutoBA = TRUE;
375 pAd->CommonCfg.REGBACapability.field.AutoBA = TRUE;
379 pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
380 pAd->CommonCfg.REGBACapability.field.AutoBA = FALSE;
382 #endif // DOT11_N_SUPPORT //
383 // Set AdhocMode rates
384 if (pAd->StaCfg.BssType == BSS_ADHOC)
386 MlmeUpdateTxRates(pAd, FALSE, 0);
387 MakeIbssBeacon(pAd); // re-build BEACON frame
388 AsicEnableIbssSync(pAd); // copy to on-chip memory
396 #endif // CONFIG_STA_SUPPORT //
398 // it is needed to set SSID to take effect
401 #ifdef DOT11_N_SUPPORT
403 #endif // DOT11_N_SUPPORT //
404 DBGPRINT(RT_DEBUG_TRACE, ("Set_WirelessMode_Proc::(=%ld)\n", WirelessMode));
408 DBGPRINT(RT_DEBUG_ERROR, ("Set_WirelessMode_Proc::parameters out of range\n"));
415 ==========================================================================
419 TRUE if all parameters are OK, FALSE otherwise
420 ==========================================================================
422 INT Set_Channel_Proc(
423 IN PRTMP_ADAPTER pAd,
429 Channel = (UCHAR) simple_strtol(arg, 0, 10);
431 // check if this channel is valid
432 if (ChannelSanity(pAd, Channel) == TRUE)
434 #ifdef CONFIG_STA_SUPPORT
435 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
437 pAd->CommonCfg.Channel = Channel;
441 #ifdef DOT11_N_SUPPORT
443 if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED &&
444 pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)
447 AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
448 AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
449 DBGPRINT(RT_DEBUG_TRACE, ("BW_40, control_channel(%d), CentralChannel(%d) \n",
450 pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel));
453 #endif // DOT11_N_SUPPORT //
455 AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
456 AsicLockChannel(pAd, pAd->CommonCfg.Channel);
457 DBGPRINT(RT_DEBUG_TRACE, ("BW_20, Channel(%d)\n", pAd->CommonCfg.Channel));
461 #endif // CONFIG_STA_SUPPORT //
467 #ifdef CONFIG_STA_SUPPORT
468 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
470 #endif // CONFIG_STA_SUPPORT //
475 DBGPRINT(RT_DEBUG_TRACE, ("Set_Channel_Proc::(Channel=%d)\n", pAd->CommonCfg.Channel));
481 ==========================================================================
483 Set Short Slot Time Enable or Disable
485 TRUE if all parameters are OK, FALSE otherwise
486 ==========================================================================
488 INT Set_ShortSlot_Proc(
489 IN PRTMP_ADAPTER pAd,
494 ShortSlot = simple_strtol(arg, 0, 10);
497 pAd->CommonCfg.bUseShortSlotTime = TRUE;
498 else if (ShortSlot == 0)
499 pAd->CommonCfg.bUseShortSlotTime = FALSE;
501 return FALSE; //Invalid argument
503 DBGPRINT(RT_DEBUG_TRACE, ("Set_ShortSlot_Proc::(ShortSlot=%d)\n", pAd->CommonCfg.bUseShortSlotTime));
509 ==========================================================================
513 TRUE if all parameters are OK, FALSE otherwise
514 ==========================================================================
516 INT Set_TxPower_Proc(
517 IN PRTMP_ADAPTER pAd,
523 TxPower = (ULONG) simple_strtol(arg, 0, 10);
527 #ifdef CONFIG_STA_SUPPORT
528 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
530 pAd->CommonCfg.TxPowerDefault = TxPower;
531 pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault;
533 #endif // CONFIG_STA_SUPPORT //
539 DBGPRINT(RT_DEBUG_TRACE, ("Set_TxPower_Proc::(TxPowerPercentage=%ld)\n", pAd->CommonCfg.TxPowerPercentage));
545 ==========================================================================
547 Set 11B/11G Protection
549 TRUE if all parameters are OK, FALSE otherwise
550 ==========================================================================
552 INT Set_BGProtection_Proc(
553 IN PRTMP_ADAPTER pAd,
556 switch (simple_strtol(arg, 0, 10))
559 pAd->CommonCfg.UseBGProtection = 0;
562 pAd->CommonCfg.UseBGProtection = 1;
565 pAd->CommonCfg.UseBGProtection = 2;
567 default: //Invalid argument
572 DBGPRINT(RT_DEBUG_TRACE, ("Set_BGProtection_Proc::(BGProtection=%ld)\n", pAd->CommonCfg.UseBGProtection));
578 ==========================================================================
582 TRUE if all parameters are OK, FALSE otherwise
583 ==========================================================================
585 INT Set_TxPreamble_Proc(
586 IN PRTMP_ADAPTER pAd,
589 RT_802_11_PREAMBLE Preamble;
591 Preamble = simple_strtol(arg, 0, 10);
596 case Rt802_11PreambleShort:
597 pAd->CommonCfg.TxPreamble = Preamble;
598 #ifdef CONFIG_STA_SUPPORT
599 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
600 MlmeSetTxPreamble(pAd, Rt802_11PreambleShort);
601 #endif // CONFIG_STA_SUPPORT //
603 case Rt802_11PreambleLong:
604 #ifdef CONFIG_STA_SUPPORT
605 case Rt802_11PreambleAuto:
606 // if user wants AUTO, initialize to LONG here, then change according to AP's
607 // capability upon association.
608 #endif // CONFIG_STA_SUPPORT //
609 pAd->CommonCfg.TxPreamble = Preamble;
610 #ifdef CONFIG_STA_SUPPORT
611 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
612 MlmeSetTxPreamble(pAd, Rt802_11PreambleLong);
613 #endif // CONFIG_STA_SUPPORT //
615 default: //Invalid argument
619 DBGPRINT(RT_DEBUG_TRACE, ("Set_TxPreamble_Proc::(TxPreamble=%ld)\n", pAd->CommonCfg.TxPreamble));
625 ==========================================================================
629 TRUE if all parameters are OK, FALSE otherwise
630 ==========================================================================
632 INT Set_RTSThreshold_Proc(
633 IN PRTMP_ADAPTER pAd,
636 NDIS_802_11_RTS_THRESHOLD RtsThresh;
638 RtsThresh = simple_strtol(arg, 0, 10);
640 if((RtsThresh > 0) && (RtsThresh <= MAX_RTS_THRESHOLD))
641 pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh;
642 #ifdef CONFIG_STA_SUPPORT
643 else if (RtsThresh == 0)
644 pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD;
645 #endif // CONFIG_STA_SUPPORT //
647 return FALSE; //Invalid argument
649 DBGPRINT(RT_DEBUG_TRACE, ("Set_RTSThreshold_Proc::(RTSThreshold=%d)\n", pAd->CommonCfg.RtsThreshold));
655 ==========================================================================
657 Set Fragment Threshold
659 TRUE if all parameters are OK, FALSE otherwise
660 ==========================================================================
662 INT Set_FragThreshold_Proc(
663 IN PRTMP_ADAPTER pAd,
666 NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh;
668 FragThresh = simple_strtol(arg, 0, 10);
670 if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD)
672 //Illegal FragThresh so we set it to default
673 pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD;
675 else if (FragThresh % 2 == 1)
677 // The length of each fragment shall always be an even number of octets, except for the last fragment
678 // of an MSDU or MMPDU, which may be either an even or an odd number of octets.
679 pAd->CommonCfg.FragmentThreshold = (USHORT)(FragThresh - 1);
683 pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh;
686 #ifdef CONFIG_STA_SUPPORT
687 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
689 if (pAd->CommonCfg.FragmentThreshold == MAX_FRAG_THRESHOLD)
690 pAd->CommonCfg.bUseZeroToDisableFragment = TRUE;
692 pAd->CommonCfg.bUseZeroToDisableFragment = FALSE;
694 #endif // CONFIG_STA_SUPPORT //
696 DBGPRINT(RT_DEBUG_TRACE, ("Set_FragThreshold_Proc::(FragThreshold=%d)\n", pAd->CommonCfg.FragmentThreshold));
702 ==========================================================================
706 TRUE if all parameters are OK, FALSE otherwise
707 ==========================================================================
709 INT Set_TxBurst_Proc(
710 IN PRTMP_ADAPTER pAd,
715 TxBurst = simple_strtol(arg, 0, 10);
717 pAd->CommonCfg.bEnableTxBurst = TRUE;
718 else if (TxBurst == 0)
719 pAd->CommonCfg.bEnableTxBurst = FALSE;
721 return FALSE; //Invalid argument
723 DBGPRINT(RT_DEBUG_TRACE, ("Set_TxBurst_Proc::(TxBurst=%d)\n", pAd->CommonCfg.bEnableTxBurst));
728 #ifdef AGGREGATION_SUPPORT
730 ==========================================================================
734 TRUE if all parameters are OK, FALSE otherwise
735 ==========================================================================
737 INT Set_PktAggregate_Proc(
738 IN PRTMP_ADAPTER pAd,
743 aggre = simple_strtol(arg, 0, 10);
746 pAd->CommonCfg.bAggregationCapable = TRUE;
748 pAd->CommonCfg.bAggregationCapable = FALSE;
750 return FALSE; //Invalid argument
753 DBGPRINT(RT_DEBUG_TRACE, ("Set_PktAggregate_Proc::(AGGRE=%d)\n", pAd->CommonCfg.bAggregationCapable));
760 ==========================================================================
763 This parameter is 1 when needs radar detection, otherwise 0
765 TRUE if all parameters are OK, FALSE otherwise
766 ==========================================================================
768 INT Set_IEEE80211H_Proc(
769 IN PRTMP_ADAPTER pAd,
774 ieee80211h = simple_strtol(arg, 0, 10);
777 pAd->CommonCfg.bIEEE80211H = TRUE;
778 else if (ieee80211h == 0)
779 pAd->CommonCfg.bIEEE80211H = FALSE;
781 return FALSE; //Invalid argument
783 DBGPRINT(RT_DEBUG_TRACE, ("Set_IEEE80211H_Proc::(IEEE80211H=%d)\n", pAd->CommonCfg.bIEEE80211H));
791 ==========================================================================
793 For Debug information
795 TRUE if all parameters are OK, FALSE otherwise
796 ==========================================================================
799 IN PRTMP_ADAPTER pAd,
802 DBGPRINT(RT_DEBUG_TRACE, ("==> Set_Debug_Proc *******************\n"));
804 if(simple_strtol(arg, 0, 10) <= RT_DEBUG_LOUD)
805 RTDebugLevel = simple_strtol(arg, 0, 10);
807 DBGPRINT(RT_DEBUG_TRACE, ("<== Set_Debug_Proc(RTDebugLevel = %ld)\n", RTDebugLevel));
813 INT Show_DescInfo_Proc(
814 IN PRTMP_ADAPTER pAd,
822 ==========================================================================
824 Reset statistics counter
827 pAdapter Pointer to our adapter
831 TRUE if all parameters are OK, FALSE otherwise
832 ==========================================================================
834 INT Set_ResetStatCounter_Proc(
835 IN PRTMP_ADAPTER pAd,
839 //MAC_TABLE_ENTRY *pEntry;
841 DBGPRINT(RT_DEBUG_TRACE, ("==>Set_ResetStatCounter_Proc\n"));
843 // add the most up-to-date h/w raw counters into software counters
844 NICUpdateRawCounters(pAd);
846 NdisZeroMemory(&pAd->WlanCounters, sizeof(COUNTER_802_11));
847 NdisZeroMemory(&pAd->Counters8023, sizeof(COUNTER_802_3));
848 NdisZeroMemory(&pAd->RalinkCounters, sizeof(COUNTER_RALINK));
853 BOOLEAN RTMPCheckStrPrintAble(
859 for (i=0; i<strLen; i++)
861 if ((pInPutStr[i] < 0x21) ||
862 (pInPutStr[i] > 0x7E))
870 ========================================================================
873 Remove WPA Key process
876 pAd Pointer to our adapter
877 pBuf Pointer to the where the key stored
880 NDIS_SUCCESS Add key successfully
882 IRQL = DISPATCH_LEVEL
886 ========================================================================
888 #ifdef CONFIG_STA_SUPPORT
889 VOID RTMPSetDesiredRates(
890 IN PRTMP_ADAPTER pAdapter,
893 NDIS_802_11_RATES aryRates;
895 memset(&aryRates, 0x00, sizeof(NDIS_802_11_RATES));
896 switch (pAdapter->CommonCfg.PhyMode)
898 case PHY_11A: // A only
902 aryRates[0] = 0x0c; // 6M
903 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0;
906 aryRates[0] = 0x12; // 9M
907 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1;
910 aryRates[0] = 0x18; // 12M
911 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2;
914 aryRates[0] = 0x24; // 18M
915 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3;
918 aryRates[0] = 0x30; // 24M
919 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_4;
922 aryRates[0] = 0x48; // 36M
923 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_5;
926 aryRates[0] = 0x60; // 48M
927 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_6;
930 aryRates[0] = 0x6c; // 54M
931 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_7;
935 aryRates[0] = 0x6c; // 54Mbps
936 aryRates[1] = 0x60; // 48Mbps
937 aryRates[2] = 0x48; // 36Mbps
938 aryRates[3] = 0x30; // 24Mbps
939 aryRates[4] = 0x24; // 18M
940 aryRates[5] = 0x18; // 12M
941 aryRates[6] = 0x12; // 9M
942 aryRates[7] = 0x0c; // 6M
943 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
947 case PHY_11BG_MIXED: // B/G Mixed
948 case PHY_11B: // B only
949 case PHY_11ABG_MIXED: // A/B/G Mixed
955 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0;
959 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1;
962 aryRates[0] = 0x0b; // 5.5M
963 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2;
966 aryRates[0] = 0x16; // 11M
967 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3;
970 aryRates[0] = 0x0c; // 6M
971 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0;
974 aryRates[0] = 0x12; // 9M
975 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1;
978 aryRates[0] = 0x18; // 12M
979 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2;
982 aryRates[0] = 0x24; // 18M
983 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3;
986 aryRates[0] = 0x30; // 24M
987 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_4;
990 aryRates[0] = 0x48; // 36M
991 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_5;
994 aryRates[0] = 0x60; // 48M
995 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_6;
998 aryRates[0] = 0x6c; // 54M
999 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_7;
1003 if (pAdapter->CommonCfg.PhyMode == PHY_11B)
1005 aryRates[0] = 0x16; // 11Mbps
1006 aryRates[1] = 0x0b; // 5.5Mbps
1007 aryRates[2] = 0x04; // 2Mbps
1008 aryRates[3] = 0x02; // 1Mbps
1011 { //(B/G) Mixed or (A/B/G) Mixed
1012 aryRates[0] = 0x6c; // 54Mbps
1013 aryRates[1] = 0x60; // 48Mbps
1014 aryRates[2] = 0x48; // 36Mbps
1015 aryRates[3] = 0x30; // 24Mbps
1016 aryRates[4] = 0x16; // 11Mbps
1017 aryRates[5] = 0x0b; // 5.5Mbps
1018 aryRates[6] = 0x04; // 2Mbps
1019 aryRates[7] = 0x02; // 1Mbps
1021 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
1027 NdisZeroMemory(pAdapter->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES);
1028 NdisMoveMemory(pAdapter->CommonCfg.DesireRate, &aryRates, sizeof(NDIS_802_11_RATES));
1029 DBGPRINT(RT_DEBUG_TRACE, (" RTMPSetDesiredRates (%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x)\n",
1030 pAdapter->CommonCfg.DesireRate[0],pAdapter->CommonCfg.DesireRate[1],
1031 pAdapter->CommonCfg.DesireRate[2],pAdapter->CommonCfg.DesireRate[3],
1032 pAdapter->CommonCfg.DesireRate[4],pAdapter->CommonCfg.DesireRate[5],
1033 pAdapter->CommonCfg.DesireRate[6],pAdapter->CommonCfg.DesireRate[7] ));
1034 // Changing DesiredRate may affect the MAX TX rate we used to TX frames out
1035 MlmeUpdateTxRates(pAdapter, FALSE, 0);
1038 NDIS_STATUS RTMPWPARemoveKeyProc(
1039 IN PRTMP_ADAPTER pAd,
1042 PNDIS_802_11_REMOVE_KEY pKey;
1044 NDIS_STATUS Status = NDIS_STATUS_FAILURE;
1045 BOOLEAN bTxKey; // Set the key as transmit key
1046 BOOLEAN bPairwise; // Indicate the key is pairwise key
1047 BOOLEAN bKeyRSC; // indicate the receive SC set by KeyRSC value.
1048 // Otherwise, it will set by the NIC.
1049 BOOLEAN bAuthenticator; // indicate key is set by authenticator.
1052 DBGPRINT(RT_DEBUG_TRACE,("---> RTMPWPARemoveKeyProc\n"));
1054 pKey = (PNDIS_802_11_REMOVE_KEY) pBuf;
1055 KeyIdx = pKey->KeyIndex & 0xff;
1056 // Bit 31 of Add-key, Tx Key
1057 bTxKey = (pKey->KeyIndex & 0x80000000) ? TRUE : FALSE;
1058 // Bit 30 of Add-key PairwiseKey
1059 bPairwise = (pKey->KeyIndex & 0x40000000) ? TRUE : FALSE;
1060 // Bit 29 of Add-key KeyRSC
1061 bKeyRSC = (pKey->KeyIndex & 0x20000000) ? TRUE : FALSE;
1062 // Bit 28 of Add-key Authenticator
1063 bAuthenticator = (pKey->KeyIndex & 0x10000000) ? TRUE : FALSE;
1065 // 1. If bTx is TRUE, return failure information
1067 return(NDIS_STATUS_INVALID_DATA);
1069 // 2. Check Pairwise Key
1072 // a. If BSSID is broadcast, remove all pairwise keys.
1073 // b. If not broadcast, remove the pairwise specified by BSSID
1074 for (i = 0; i < SHARE_KEY_NUM; i++)
1076 if (MAC_ADDR_EQUAL(pAd->SharedKey[BSS0][i].BssId, pKey->BSSID))
1078 DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%d)\n", i));
1079 pAd->SharedKey[BSS0][i].KeyLen = 0;
1080 pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_NONE;
1081 AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)i);
1082 Status = NDIS_STATUS_SUCCESS;
1090 // a. If BSSID is broadcast, remove all group keys indexed
1091 // b. If BSSID matched, delete the group key indexed.
1092 DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%ld)\n", KeyIdx));
1093 pAd->SharedKey[BSS0][KeyIdx].KeyLen = 0;
1094 pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_NONE;
1095 AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)KeyIdx);
1096 Status = NDIS_STATUS_SUCCESS;
1101 #endif // CONFIG_STA_SUPPORT //
1104 #ifdef CONFIG_STA_SUPPORT
1106 ========================================================================
1108 Routine Description:
1112 pAd Pointer to our adapter
1117 IRQL = DISPATCH_LEVEL
1121 ========================================================================
1123 VOID RTMPWPARemoveAllKeys(
1124 IN PRTMP_ADAPTER pAd)
1129 DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveAllKeys(AuthMode=%d, WepStatus=%d)\n", pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus));
1131 // For WEP/CKIP, there is no need to remove it, since WinXP won't set it again after
1132 // Link up. And it will be replaced if user changed it.
1133 if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA)
1136 // For WPA-None, there is no need to remove it, since WinXP won't set it again after
1137 // Link up. And it will be replaced if user changed it.
1138 if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone)
1141 // set BSSID wcid entry of the Pair-wise Key table as no-security mode
1142 AsicRemovePairwiseKeyEntry(pAd, BSS0, BSSID_WCID);
1144 // set all shared key mode as no-security.
1145 for (i = 0; i < SHARE_KEY_NUM; i++)
1147 DBGPRINT(RT_DEBUG_TRACE,("remove %s key #%d\n", CipherName[pAd->SharedKey[BSS0][i].CipherAlg], i));
1148 NdisZeroMemory(&pAd->SharedKey[BSS0][i], sizeof(CIPHER_KEY));
1150 AsicRemoveSharedKeyEntry(pAd, BSS0, i);
1154 #endif // CONFIG_STA_SUPPORT //
1157 ========================================================================
1158 Routine Description:
1159 Change NIC PHY mode. Re-association may be necessary. possible settings
1160 include - PHY_11B, PHY_11BG_MIXED, PHY_11A, and PHY_11ABG_MIXED
1163 pAd - Pointer to our adapter
1166 IRQL = PASSIVE_LEVEL
1167 IRQL = DISPATCH_LEVEL
1169 ========================================================================
1171 VOID RTMPSetPhyMode(
1172 IN PRTMP_ADAPTER pAd,
1176 // the selected phymode must be supported by the RF IC encoded in E2PROM
1178 pAd->CommonCfg.PhyMode = (UCHAR)phymode;
1180 DBGPRINT(RT_DEBUG_TRACE,("RTMPSetPhyMode : PhyMode=%d, channel=%d \n", pAd->CommonCfg.PhyMode, pAd->CommonCfg.Channel));
1181 #ifdef EXT_BUILD_CHANNEL_LIST
1182 BuildChannelListEx(pAd);
1184 BuildChannelList(pAd);
1185 #endif // EXT_BUILD_CHANNEL_LIST //
1187 // sanity check user setting
1188 for (i = 0; i < pAd->ChannelListNum; i++)
1190 if (pAd->CommonCfg.Channel == pAd->ChannelList[i].Channel)
1194 if (i == pAd->ChannelListNum)
1196 #ifdef CONFIG_STA_SUPPORT
1197 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1198 pAd->CommonCfg.Channel = FirstChannel(pAd);
1199 #endif // CONFIG_STA_SUPPORT //
1200 DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetPhyMode: channel is out of range, use first channel=%d \n", pAd->CommonCfg.Channel));
1203 NdisZeroMemory(pAd->CommonCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES);
1204 NdisZeroMemory(pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES);
1205 NdisZeroMemory(pAd->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES);
1208 pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate
1209 pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate
1210 pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate
1211 pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate
1212 pAd->CommonCfg.SupRateLen = 4;
1213 pAd->CommonCfg.ExtRateLen = 0;
1214 pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps
1215 pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps
1216 pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps
1217 pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps
1218 //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_CCK; // This MODE is only FYI. not use
1222 case PHY_11BG_MIXED:
1223 case PHY_11ABG_MIXED:
1224 #ifdef DOT11_N_SUPPORT
1226 case PHY_11ABGN_MIXED:
1227 case PHY_11BGN_MIXED:
1228 case PHY_11GN_MIXED:
1229 #endif // DOT11_N_SUPPORT //
1230 pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate
1231 pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate
1232 pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate
1233 pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate
1234 pAd->CommonCfg.SupRate[4] = 0x12; // 9 mbps, in units of 0.5 Mbps
1235 pAd->CommonCfg.SupRate[5] = 0x24; // 18 mbps, in units of 0.5 Mbps
1236 pAd->CommonCfg.SupRate[6] = 0x48; // 36 mbps, in units of 0.5 Mbps
1237 pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps
1238 pAd->CommonCfg.SupRateLen = 8;
1239 pAd->CommonCfg.ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps
1240 pAd->CommonCfg.ExtRate[1] = 0x18; // 12 mbps, in units of 0.5 Mbps
1241 pAd->CommonCfg.ExtRate[2] = 0x30; // 24 mbps, in units of 0.5 Mbps
1242 pAd->CommonCfg.ExtRate[3] = 0x60; // 48 mbps, in units of 0.5 Mbps
1243 pAd->CommonCfg.ExtRateLen = 4;
1244 pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps
1245 pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps
1246 pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps
1247 pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps
1248 pAd->CommonCfg.DesireRate[4] = 12; // 6 mbps, in units of 0.5 Mbps
1249 pAd->CommonCfg.DesireRate[5] = 18; // 9 mbps, in units of 0.5 Mbps
1250 pAd->CommonCfg.DesireRate[6] = 24; // 12 mbps, in units of 0.5 Mbps
1251 pAd->CommonCfg.DesireRate[7] = 36; // 18 mbps, in units of 0.5 Mbps
1252 pAd->CommonCfg.DesireRate[8] = 48; // 24 mbps, in units of 0.5 Mbps
1253 pAd->CommonCfg.DesireRate[9] = 72; // 36 mbps, in units of 0.5 Mbps
1254 pAd->CommonCfg.DesireRate[10] = 96; // 48 mbps, in units of 0.5 Mbps
1255 pAd->CommonCfg.DesireRate[11] = 108; // 54 mbps, in units of 0.5 Mbps
1259 #ifdef DOT11_N_SUPPORT
1260 case PHY_11AN_MIXED:
1261 case PHY_11AGN_MIXED:
1263 #endif // DOT11_N_SUPPORT //
1264 pAd->CommonCfg.SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate
1265 pAd->CommonCfg.SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps
1266 pAd->CommonCfg.SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate
1267 pAd->CommonCfg.SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps
1268 pAd->CommonCfg.SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate
1269 pAd->CommonCfg.SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps
1270 pAd->CommonCfg.SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps
1271 pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps
1272 pAd->CommonCfg.SupRateLen = 8;
1273 pAd->CommonCfg.ExtRateLen = 0;
1274 pAd->CommonCfg.DesireRate[0] = 12; // 6 mbps, in units of 0.5 Mbps
1275 pAd->CommonCfg.DesireRate[1] = 18; // 9 mbps, in units of 0.5 Mbps
1276 pAd->CommonCfg.DesireRate[2] = 24; // 12 mbps, in units of 0.5 Mbps
1277 pAd->CommonCfg.DesireRate[3] = 36; // 18 mbps, in units of 0.5 Mbps
1278 pAd->CommonCfg.DesireRate[4] = 48; // 24 mbps, in units of 0.5 Mbps
1279 pAd->CommonCfg.DesireRate[5] = 72; // 36 mbps, in units of 0.5 Mbps
1280 pAd->CommonCfg.DesireRate[6] = 96; // 48 mbps, in units of 0.5 Mbps
1281 pAd->CommonCfg.DesireRate[7] = 108; // 54 mbps, in units of 0.5 Mbps
1282 //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_OFDM; // This MODE is only FYI. not use
1290 pAd->CommonCfg.BandState = UNKNOWN_BAND;
1294 #ifdef DOT11_N_SUPPORT
1296 ========================================================================
1297 Routine Description:
1298 Caller ensures we has 802.11n support.
1299 Calls at setting HT from AP/STASetinformation
1302 pAd - Pointer to our adapter
1305 ========================================================================
1308 IN PRTMP_ADAPTER pAd,
1309 IN OID_SET_HT_PHYMODE *pHTPhyMode)
1314 UCHAR BBP3Value = 0;
1315 UCHAR RxStream = pAd->CommonCfg.RxStream;
1317 DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : HT_mode(%d), ExtOffset(%d), MCS(%d), BW(%d), STBC(%d), SHORTGI(%d)\n",
1318 pHTPhyMode->HtMode, pHTPhyMode->ExtOffset,
1319 pHTPhyMode->MCS, pHTPhyMode->BW,
1320 pHTPhyMode->STBC, pHTPhyMode->SHORTGI));
1322 // Don't zero supportedHyPhy structure.
1323 RTMPZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability));
1324 RTMPZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo));
1325 RTMPZeroMemory(&pAd->CommonCfg.NewExtChanOffset, sizeof(pAd->CommonCfg.NewExtChanOffset));
1326 RTMPZeroMemory(&pAd->CommonCfg.DesiredHtPhy, sizeof(pAd->CommonCfg.DesiredHtPhy));
1328 if (pAd->CommonCfg.bRdg)
1330 pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 1;
1331 pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 1;
1335 pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 0;
1336 pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 0;
1339 pAd->CommonCfg.HtCapability.HtCapParm.MaxRAmpduFactor = 3;
1340 pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor = 3;
1342 DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : RxBAWinLimit = %d\n", pAd->CommonCfg.BACapability.field.RxBAWinLimit));
1344 // Mimo power save, A-MSDU size,
1345 pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable;
1346 pAd->CommonCfg.DesiredHtPhy.AmsduSize = (UCHAR)pAd->CommonCfg.BACapability.field.AmsduSize;
1347 pAd->CommonCfg.DesiredHtPhy.MimoPs = (UCHAR)pAd->CommonCfg.BACapability.field.MMPSmode;
1348 pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity;
1350 pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize;
1351 pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode;
1352 pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity;
1354 DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : AMsduSize = %d, MimoPs = %d, MpduDensity = %d, MaxRAmpduFactor = %d\n",
1355 pAd->CommonCfg.DesiredHtPhy.AmsduSize,
1356 pAd->CommonCfg.DesiredHtPhy.MimoPs,
1357 pAd->CommonCfg.DesiredHtPhy.MpduDensity,
1358 pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor));
1360 if(pHTPhyMode->HtMode == HTMODE_GF)
1362 pAd->CommonCfg.HtCapability.HtCapInfo.GF = 1;
1363 pAd->CommonCfg.DesiredHtPhy.GF = 1;
1366 pAd->CommonCfg.DesiredHtPhy.GF = 0;
1372 pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff;
1373 pAd->CommonCfg.HtCapability.MCSSet[1] = 0x00;
1377 pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff;
1378 pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff;
1382 pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff;
1383 pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff;
1384 pAd->CommonCfg.HtCapability.MCSSet[2] = 0xff;
1388 if (pAd->CommonCfg.bForty_Mhz_Intolerant && (pAd->CommonCfg.Channel <= 14) && (pHTPhyMode->BW == BW_40) )
1390 pHTPhyMode->BW = BW_20;
1391 pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant = 1;
1394 if(pHTPhyMode->BW == BW_40)
1396 pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32
1397 pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 1;
1398 if (pAd->CommonCfg.Channel <= 14)
1399 pAd->CommonCfg.HtCapability.HtCapInfo.CCKmodein40 = 1;
1401 pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 1;
1402 pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 1;
1403 pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = (pHTPhyMode->ExtOffset == EXTCHA_BELOW)? (EXTCHA_BELOW): EXTCHA_ABOVE;
1404 // Set Regsiter for extension channel position.
1405 RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value);
1406 RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBP3Value);
1407 if ((pHTPhyMode->ExtOffset == EXTCHA_BELOW))
1410 BBP3Value |= (0x20);
1411 RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value);
1413 else if ((pHTPhyMode->ExtOffset == EXTCHA_ABOVE))
1416 BBP3Value &= (~0x20);
1417 RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value);
1420 // Turn on BBP 40MHz mode now only as AP .
1421 // Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection.
1422 if ((pAd->OpMode == OPMODE_AP) || INFRA_ON(pAd) || ADHOC_ON(pAd)
1425 RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
1426 BBPValue &= (~0x18);
1428 RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
1430 RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBP3Value);
1431 pAd->CommonCfg.BBPCurrentBW = BW_40;
1436 pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 0;
1437 pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 0;
1438 pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 0;
1439 pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = EXTCHA_NONE;
1440 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
1441 // Turn on BBP 20MHz mode by request here.
1443 RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
1444 BBPValue &= (~0x18);
1445 RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
1446 pAd->CommonCfg.BBPCurrentBW = BW_20;
1450 if(pHTPhyMode->STBC == STBC_USE)
1452 pAd->CommonCfg.HtCapability.HtCapInfo.TxSTBC = 1;
1453 pAd->CommonCfg.DesiredHtPhy.TxSTBC = 1;
1454 pAd->CommonCfg.HtCapability.HtCapInfo.RxSTBC = 1;
1455 pAd->CommonCfg.DesiredHtPhy.RxSTBC = 1;
1459 pAd->CommonCfg.DesiredHtPhy.TxSTBC = 0;
1460 pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0;
1463 if(pHTPhyMode->SHORTGI == GI_400)
1465 pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 1;
1466 pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 1;
1467 pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 1;
1468 pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 1;
1472 pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 0;
1473 pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 0;
1474 pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 0;
1475 pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 0;
1478 // We support link adaptation for unsolicit MCS feedback, set to 2.
1479 pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT;
1480 pAd->CommonCfg.AddHTInfo.ControlChan = pAd->CommonCfg.Channel;
1481 // 1, the extension channel above the control channel.
1483 // EDCA parameters used for AP's own transmission
1484 if (pAd->CommonCfg.APEdcaParm.bValid == FALSE)
1486 pAd->CommonCfg.APEdcaParm.bValid = TRUE;
1487 pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3;
1488 pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7;
1489 pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1;
1490 pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1;
1492 pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4;
1493 pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4;
1494 pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3;
1495 pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2;
1497 pAd->CommonCfg.APEdcaParm.Cwmax[0] = 6;
1498 pAd->CommonCfg.APEdcaParm.Cwmax[1] = 10;
1499 pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4;
1500 pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3;
1502 pAd->CommonCfg.APEdcaParm.Txop[0] = 0;
1503 pAd->CommonCfg.APEdcaParm.Txop[1] = 0;
1504 pAd->CommonCfg.APEdcaParm.Txop[2] = 94;
1505 pAd->CommonCfg.APEdcaParm.Txop[3] = 47;
1507 AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);
1510 #ifdef CONFIG_STA_SUPPORT
1511 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1513 RTMPSetIndividualHT(pAd, 0);
1515 #endif // CONFIG_STA_SUPPORT //
1520 ========================================================================
1521 Routine Description:
1522 Caller ensures we has 802.11n support.
1523 Calls at setting HT from AP/STASetinformation
1526 pAd - Pointer to our adapter
1529 ========================================================================
1531 VOID RTMPSetIndividualHT(
1532 IN PRTMP_ADAPTER pAd,
1535 PRT_HT_PHY_INFO pDesired_ht_phy = NULL;
1536 UCHAR TxStream = pAd->CommonCfg.TxStream;
1537 UCHAR DesiredMcs = MCS_AUTO;
1542 #ifdef CONFIG_STA_SUPPORT
1543 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1545 pDesired_ht_phy = &pAd->StaCfg.DesiredHtPhyInfo;
1546 DesiredMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS;
1547 //pAd->StaCfg.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE;
1550 #endif // CONFIG_STA_SUPPORT //
1553 if (pDesired_ht_phy == NULL)
1555 DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetIndividualHT: invalid apidx(%d)\n", apidx));
1558 RTMPZeroMemory(pDesired_ht_phy, sizeof(RT_HT_PHY_INFO));
1560 DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetIndividualHT : Desired MCS = %d\n", DesiredMcs));
1561 // Check the validity of MCS
1562 if ((TxStream == 1) && ((DesiredMcs >= MCS_8) && (DesiredMcs <= MCS_15)))
1564 DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS(%d) is invalid in 1S, reset it as MCS_7\n", DesiredMcs));
1568 if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_20) && (DesiredMcs == MCS_32))
1570 DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS_32 is only supported in 40-MHz, reset it as MCS_0\n"));
1574 pDesired_ht_phy->bHtEnable = TRUE;
1576 // Decide desired Tx MCS
1580 if (DesiredMcs == MCS_AUTO)
1582 pDesired_ht_phy->MCSSet[0]= 0xff;
1583 pDesired_ht_phy->MCSSet[1]= 0x00;
1585 else if (DesiredMcs <= MCS_7)
1587 pDesired_ht_phy->MCSSet[0]= 1<<DesiredMcs;
1588 pDesired_ht_phy->MCSSet[1]= 0x00;
1593 if (DesiredMcs == MCS_AUTO)
1595 pDesired_ht_phy->MCSSet[0]= 0xff;
1596 pDesired_ht_phy->MCSSet[1]= 0xff;
1598 else if (DesiredMcs <= MCS_15)
1602 mode = DesiredMcs / 8;
1604 pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8));
1609 if (DesiredMcs == MCS_AUTO)
1611 /* MCS0 ~ MCS23, 3 bytes */
1612 pDesired_ht_phy->MCSSet[0]= 0xff;
1613 pDesired_ht_phy->MCSSet[1]= 0xff;
1614 pDesired_ht_phy->MCSSet[2]= 0xff;
1616 else if (DesiredMcs <= MCS_23)
1620 mode = DesiredMcs / 8;
1622 pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8));
1627 if(pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_40)
1629 if (DesiredMcs == MCS_AUTO || DesiredMcs == MCS_32)
1630 pDesired_ht_phy->MCSSet[4] = 0x1;
1633 // update HT Rate setting
1634 if (pAd->OpMode == OPMODE_STA)
1635 MlmeUpdateHtTxRates(pAd, BSS0);
1637 MlmeUpdateHtTxRates(pAd, apidx);
1642 ========================================================================
1643 Routine Description:
1644 Update HT IE from our capability.
1647 Send all HT IE in beacon/probe rsp/assoc rsp/action frame.
1650 ========================================================================
1652 VOID RTMPUpdateHTIE(
1653 IN RT_HT_CAPABILITY *pRtHt,
1655 OUT HT_CAPABILITY_IE *pHtCapability,
1656 OUT ADD_HT_INFO_IE *pAddHtInfo)
1658 RTMPZeroMemory(pHtCapability, sizeof(HT_CAPABILITY_IE));
1659 RTMPZeroMemory(pAddHtInfo, sizeof(ADD_HT_INFO_IE));
1661 pHtCapability->HtCapInfo.ChannelWidth = pRtHt->ChannelWidth;
1662 pHtCapability->HtCapInfo.MimoPs = pRtHt->MimoPs;
1663 pHtCapability->HtCapInfo.GF = pRtHt->GF;
1664 pHtCapability->HtCapInfo.ShortGIfor20 = pRtHt->ShortGIfor20;
1665 pHtCapability->HtCapInfo.ShortGIfor40 = pRtHt->ShortGIfor40;
1666 pHtCapability->HtCapInfo.TxSTBC = pRtHt->TxSTBC;
1667 pHtCapability->HtCapInfo.RxSTBC = pRtHt->RxSTBC;
1668 pHtCapability->HtCapInfo.AMsduSize = pRtHt->AmsduSize;
1669 pHtCapability->HtCapParm.MaxRAmpduFactor = pRtHt->MaxRAmpduFactor;
1670 pHtCapability->HtCapParm.MpduDensity = pRtHt->MpduDensity;
1672 pAddHtInfo->AddHtInfo.ExtChanOffset = pRtHt->ExtChanOffset ;
1673 pAddHtInfo->AddHtInfo.RecomWidth = pRtHt->RecomWidth;
1674 pAddHtInfo->AddHtInfo2.OperaionMode = pRtHt->OperaionMode;
1675 pAddHtInfo->AddHtInfo2.NonGfPresent = pRtHt->NonGfPresent;
1676 RTMPMoveMemory(pAddHtInfo->MCSSet, /*pRtHt->MCSSet*/pMcsSet, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar.
1678 DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n"));
1680 #endif // DOT11_N_SUPPORT //
1683 ========================================================================
1685 Add Client security information into ASIC WCID table and IVEIV table.
1687 ========================================================================
1689 VOID RTMPAddWcidAttributeEntry(
1690 IN PRTMP_ADAPTER pAd,
1694 IN MAC_TABLE_ENTRY *pEntry)
1696 UINT32 WCIDAttri = 0;
1702 #ifdef CONFIG_STA_SUPPORT
1703 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1707 DBGPRINT(RT_DEBUG_ERROR, ("RTMPAddWcidAttributeEntry: The BSS-index(%d) is out of range for Infra link. \n", BssIdx));
1711 // 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists.
1712 // 2. In Infra mode, the AID:1 MUST be wcid of infra STA.
1713 // the AID:2~ assign to mesh link entry.
1714 if (pEntry && ADHOC_ON(pAd))
1716 else if (pEntry && INFRA_ON(pAd))
1718 #ifdef QOS_DLS_SUPPORT
1719 if (pEntry->ValidAsDls == TRUE)
1722 #endif // QOS_DLS_SUPPORT //
1728 #endif // CONFIG_STA_SUPPORT //
1731 // Update WCID attribute table
1732 offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE);
1734 #ifdef CONFIG_STA_SUPPORT
1735 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1737 if (pEntry && pEntry->ValidAsMesh)
1738 WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;
1739 #ifdef QOS_DLS_SUPPORT
1740 else if ((pEntry) && (pEntry->ValidAsDls) &&
1741 ((CipherAlg == CIPHER_TKIP) ||
1742 (CipherAlg == CIPHER_TKIP_NO_MIC) ||
1743 (CipherAlg == CIPHER_AES) ||
1744 (CipherAlg == CIPHER_NONE)))
1745 WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;
1746 #endif // QOS_DLS_SUPPORT //
1748 WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE;
1750 #endif // CONFIG_STA_SUPPORT //
1752 RTMP_IO_WRITE32(pAd, offset, WCIDAttri);
1755 // Update IV/EIV table
1756 offset = MAC_IVEIV_TABLE_BASE + (Wcid * HW_IVEIV_ENTRY_SIZE);
1759 if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) || (CipherAlg == CIPHER_AES))
1761 // Eiv bit on. keyid always is 0 for pairwise key
1762 IVEIV = (KeyIdx <<6) | 0x20;
1766 // WEP KeyIdx is default tx key.
1767 IVEIV = (KeyIdx << 6);
1770 // For key index and ext IV bit, so only need to update the position(offset+3).
1772 RTUSBMultiWrite_OneByte(pAd, offset+3, &IVEIV);
1775 DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg]));
1776 DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = 0x%x \n", WCIDAttri));
1781 ==========================================================================
1783 Parse encryption type
1785 pAdapter Pointer to our adapter
1786 wrq Pointer to the ioctl argument
1792 ==========================================================================
1794 CHAR *GetEncryptType(CHAR enc)
1796 if(enc == Ndis802_11WEPDisabled)
1798 if(enc == Ndis802_11WEPEnabled)
1800 if(enc == Ndis802_11Encryption2Enabled)
1802 if(enc == Ndis802_11Encryption3Enabled)
1804 if(enc == Ndis802_11Encryption4Enabled)
1810 CHAR *GetAuthMode(CHAR auth)
1812 if(auth == Ndis802_11AuthModeOpen)
1814 if(auth == Ndis802_11AuthModeShared)
1816 if(auth == Ndis802_11AuthModeAutoSwitch)
1818 if(auth == Ndis802_11AuthModeWPA)
1820 if(auth == Ndis802_11AuthModeWPAPSK)
1822 if(auth == Ndis802_11AuthModeWPANone)
1824 if(auth == Ndis802_11AuthModeWPA2)
1826 if(auth == Ndis802_11AuthModeWPA2PSK)
1828 if(auth == Ndis802_11AuthModeWPA1WPA2)
1830 if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK)
1831 return "WPA1PSKWPA2PSK";
1836 #if 1 //#ifndef UCOS
1838 ==========================================================================
1840 Get site survey results
1842 pAdapter Pointer to our adapter
1843 wrq Pointer to the ioctl argument
1850 1.) UI needs to wait 4 seconds after issue a site survey command
1851 2.) iwpriv ra0 get_site_survey
1852 3.) UI needs to prepare at least 4096bytes to get the results
1853 ==========================================================================
1855 #define LINE_LEN (4+33+20+8+10+9+7+3) // Channel+SSID+Bssid+WepStatus+AuthMode+Signal+WiressMode+NetworkType
1856 #ifdef CONFIG_STA_SUPPORT
1857 #endif // CONFIG_STA_SUPPORT //
1858 VOID RTMPIoctlGetSiteSurvey(
1859 IN PRTMP_ADAPTER pAdapter,
1860 IN struct iwreq *wrq)
1866 CHAR Ssid[MAX_LEN_OF_SSID +1];
1867 INT Rssi = 0, max_len = LINE_LEN;
1868 UINT Rssi_Quality = 0;
1869 NDIS_802_11_NETWORK_TYPE wireless_mode;
1871 os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*max_len));
1875 DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n"));
1879 memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*max_len );
1880 memset(Ssid, 0 ,(MAX_LEN_OF_SSID +1));
1881 sprintf(msg,"%s","\n");
1882 sprintf(msg+strlen(msg),"%-4s%-33s%-20s%-8s%-10s%-9s%-7s%-3s\n",
1883 "Ch", "SSID", "BSSID", "Enc", "Auth", "Siganl(%)", "W-Mode", " NT");
1885 #ifdef CONFIG_STA_SUPPORT
1886 #endif // CONFIG_STA_SUPPORT //
1889 #ifdef CONFIG_STA_SUPPORT
1890 pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE;
1891 while ((ScanRunning(pAdapter) == TRUE) && (WaitCnt++ < 200))
1893 #endif // CONFIG_STA_SUPPORT //
1895 for(i=0; i<pAdapter->ScanTab.BssNr ;i++)
1897 if( pAdapter->ScanTab.BssEntry[i].Channel==0)
1900 if((strlen(msg)+max_len ) >= IW_SCAN_MAX_DATA)
1904 sprintf(msg+strlen(msg),"%-4d", pAdapter->ScanTab.BssEntry[i].Channel);
1906 memcpy(Ssid, pAdapter->ScanTab.BssEntry[i].Ssid, pAdapter->ScanTab.BssEntry[i].SsidLen);
1907 Ssid[pAdapter->ScanTab.BssEntry[i].SsidLen] = '\0';
1908 sprintf(msg+strlen(msg),"%-33s", Ssid);
1910 sprintf(msg+strlen(msg),"%02x:%02x:%02x:%02x:%02x:%02x ",
1911 pAdapter->ScanTab.BssEntry[i].Bssid[0],
1912 pAdapter->ScanTab.BssEntry[i].Bssid[1],
1913 pAdapter->ScanTab.BssEntry[i].Bssid[2],
1914 pAdapter->ScanTab.BssEntry[i].Bssid[3],
1915 pAdapter->ScanTab.BssEntry[i].Bssid[4],
1916 pAdapter->ScanTab.BssEntry[i].Bssid[5]);
1918 sprintf(msg+strlen(msg),"%-8s",GetEncryptType(pAdapter->ScanTab.BssEntry[i].WepStatus));
1919 //Authentication Mode
1920 if (pAdapter->ScanTab.BssEntry[i].WepStatus == Ndis802_11WEPEnabled)
1921 sprintf(msg+strlen(msg),"%-10s", "UNKNOW");
1923 sprintf(msg+strlen(msg),"%-10s",GetAuthMode(pAdapter->ScanTab.BssEntry[i].AuthMode));
1925 Rssi = (INT)pAdapter->ScanTab.BssEntry[i].Rssi;
1928 else if (Rssi >= -80) // between -50 ~ -80dbm
1929 Rssi_Quality = (UINT)(24 + ((Rssi + 80) * 26)/10);
1930 else if (Rssi >= -90) // between -80 ~ -90dbm
1931 Rssi_Quality = (UINT)(((Rssi + 90) * 26)/10);
1934 sprintf(msg+strlen(msg),"%-9d", Rssi_Quality);
1936 wireless_mode = NetworkTypeInUseSanity(&pAdapter->ScanTab.BssEntry[i]);
1937 if (wireless_mode == Ndis802_11FH ||
1938 wireless_mode == Ndis802_11DS)
1939 sprintf(msg+strlen(msg),"%-7s", "11b");
1940 else if (wireless_mode == Ndis802_11OFDM5)
1941 sprintf(msg+strlen(msg),"%-7s", "11a");
1942 else if (wireless_mode == Ndis802_11OFDM5_N)
1943 sprintf(msg+strlen(msg),"%-7s", "11a/n");
1944 else if (wireless_mode == Ndis802_11OFDM24)
1945 sprintf(msg+strlen(msg),"%-7s", "11b/g");
1946 else if (wireless_mode == Ndis802_11OFDM24_N)
1947 sprintf(msg+strlen(msg),"%-7s", "11b/g/n");
1949 sprintf(msg+strlen(msg),"%-7s", "unknow");
1951 if (pAdapter->ScanTab.BssEntry[i].BssType == BSS_ADHOC)
1952 sprintf(msg+strlen(msg),"%-3s", " Ad");
1954 sprintf(msg+strlen(msg),"%-3s", " In");
1956 sprintf(msg+strlen(msg),"\n");
1957 #ifdef CONFIG_STA_SUPPORT
1958 #endif // CONFIG_STA_SUPPORT //
1961 #ifdef CONFIG_STA_SUPPORT
1962 pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE;
1963 #endif // CONFIG_STA_SUPPORT //
1964 wrq->u.data.length = strlen(msg);
1965 Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
1967 DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - wrq->u.data.length = %d\n", wrq->u.data.length));
1968 os_free_mem(NULL, (PUCHAR)msg);
1972 #define MAC_LINE_LEN (14+4+4+10+10+10+6+6) // Addr+aid+psm+datatime+rxbyte+txbyte+current tx rate+last tx rate
1973 VOID RTMPIoctlGetMacTable(
1974 IN PRTMP_ADAPTER pAd,
1975 IN struct iwreq *wrq)
1978 RT_802_11_MAC_TABLE MacTab;
1982 for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++)
1984 if (pAd->MacTab.Content[i].ValidAsCLI && (pAd->MacTab.Content[i].Sst == SST_ASSOC))
1986 COPY_MAC_ADDR(MacTab.Entry[MacTab.Num].Addr, &pAd->MacTab.Content[i].Addr);
1987 MacTab.Entry[MacTab.Num].Aid = (UCHAR)pAd->MacTab.Content[i].Aid;
1988 MacTab.Entry[MacTab.Num].Psm = pAd->MacTab.Content[i].PsMode;
1989 #ifdef DOT11_N_SUPPORT
1990 MacTab.Entry[MacTab.Num].MimoPs = pAd->MacTab.Content[i].MmpsMode;
1991 #endif // DOT11_N_SUPPORT //
1993 // Fill in RSSI per entry
1994 MacTab.Entry[MacTab.Num].AvgRssi0 = pAd->MacTab.Content[i].RssiSample.AvgRssi0;
1995 MacTab.Entry[MacTab.Num].AvgRssi1 = pAd->MacTab.Content[i].RssiSample.AvgRssi1;
1996 MacTab.Entry[MacTab.Num].AvgRssi2 = pAd->MacTab.Content[i].RssiSample.AvgRssi2;
1998 // the connected time per entry
1999 MacTab.Entry[MacTab.Num].ConnectedTime = pAd->MacTab.Content[i].StaConnectTime;
2000 MacTab.Entry[MacTab.Num].TxRate.field.MCS = pAd->MacTab.Content[i].HTPhyMode.field.MCS;
2001 MacTab.Entry[MacTab.Num].TxRate.field.BW = pAd->MacTab.Content[i].HTPhyMode.field.BW;
2002 MacTab.Entry[MacTab.Num].TxRate.field.ShortGI = pAd->MacTab.Content[i].HTPhyMode.field.ShortGI;
2003 MacTab.Entry[MacTab.Num].TxRate.field.STBC = pAd->MacTab.Content[i].HTPhyMode.field.STBC;
2004 MacTab.Entry[MacTab.Num].TxRate.field.rsv = pAd->MacTab.Content[i].HTPhyMode.field.rsv;
2005 MacTab.Entry[MacTab.Num].TxRate.field.MODE = pAd->MacTab.Content[i].HTPhyMode.field.MODE;
2006 MacTab.Entry[MacTab.Num].TxRate.word = pAd->MacTab.Content[i].HTPhyMode.word;
2011 wrq->u.data.length = sizeof(RT_802_11_MAC_TABLE);
2012 if (copy_to_user(wrq->u.data.pointer, &MacTab, wrq->u.data.length))
2014 DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __func__));
2017 msg = (CHAR *) kmalloc(sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN), MEM_ALLOC_FLAG);
2018 memset(msg, 0 ,MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN );
2019 sprintf(msg,"%s","\n");
2020 sprintf(msg+strlen(msg),"%-14s%-4s%-4s%-10s%-10s%-10s%-6s%-6s\n",
2021 "MAC", "AID", "PSM", "LDT", "RxB", "TxB","CTxR", "LTxR");
2023 for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++)
2025 PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i];
2026 if (pEntry->ValidAsCLI && (pEntry->Sst == SST_ASSOC))
2028 if((strlen(msg)+MAC_LINE_LEN ) >= (MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN) )
2030 sprintf(msg+strlen(msg),"%02x%02x%02x%02x%02x%02x ",
2031 pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2],
2032 pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]);
2033 sprintf(msg+strlen(msg),"%-4d", (int)pEntry->Aid);
2034 sprintf(msg+strlen(msg),"%-4d", (int)pEntry->PsMode);
2035 sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.LastDataPacketTime*/); // ToDo
2036 sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalRxByteCount*/); // ToDo
2037 sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalTxByteCount*/); // ToDo
2038 sprintf(msg+strlen(msg),"%-6d",RateIdToMbps[pAd->MacTab.Content[i].CurrTxRate]);
2039 sprintf(msg+strlen(msg),"%-6d\n",0/*RateIdToMbps[pAd->MacTab.Content[i].LastTxRate]*/); // ToDo
2042 // for compatible with old API just do the printk to console
2043 //wrq->u.data.length = strlen(msg);
2044 //if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length))
2046 DBGPRINT(RT_DEBUG_TRACE, ("%s", msg));
2053 #ifdef DOT11_N_SUPPORT
2054 INT Set_BASetup_Proc(
2055 IN PRTMP_ADAPTER pAd,
2059 char *token, sepValue[] = ":", DASH = '-';
2061 MAC_TABLE_ENTRY *pEntry;
2064 The BASetup inupt string format should be xx:xx:xx:xx:xx:xx-d,
2065 =>The six 2 digit hex-decimal number previous are the Mac address,
2066 =>The seventh decimal number is the tid value.
2068 //printk("\n%s\n", arg);
2070 if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format.
2073 token = strchr(arg, DASH);
2074 if ((token != NULL) && (strlen(token)>1))
2076 tid = simple_strtol((token+1), 0, 10);
2081 for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
2083 if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
2085 AtoH(token, (PUCHAR)(&mac[i]), 1);
2090 printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x\n", mac[0], mac[1],
2091 mac[2], mac[3], mac[4], mac[5], tid);
2093 pEntry = MacTableLookup(pAd, mac);
2096 printk("\nSetup BA Session: Tid = %d\n", tid);
2097 BAOriSessionSetUp(pAd, pEntry, tid, 0, 100, TRUE);
2107 INT Set_BADecline_Proc(
2108 IN PRTMP_ADAPTER pAd,
2113 bBADecline = simple_strtol(arg, 0, 10);
2115 if (bBADecline == 0)
2117 pAd->CommonCfg.bBADecline = FALSE;
2119 else if (bBADecline == 1)
2121 pAd->CommonCfg.bBADecline = TRUE;
2125 return FALSE; //Invalid argument
2128 DBGPRINT(RT_DEBUG_TRACE, ("Set_BADecline_Proc::(BADecline=%d)\n", pAd->CommonCfg.bBADecline));
2133 INT Set_BAOriTearDown_Proc(
2134 IN PRTMP_ADAPTER pAd,
2138 char *token, sepValue[] = ":", DASH = '-';
2140 MAC_TABLE_ENTRY *pEntry;
2142 //printk("\n%s\n", arg);
2144 The BAOriTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d,
2145 =>The six 2 digit hex-decimal number previous are the Mac address,
2146 =>The seventh decimal number is the tid value.
2148 if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format.
2151 token = strchr(arg, DASH);
2152 if ((token != NULL) && (strlen(token)>1))
2154 tid = simple_strtol((token+1), 0, 10);
2155 if (tid > NUM_OF_TID)
2159 for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
2161 if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
2163 AtoH(token, (PUCHAR)(&mac[i]), 1);
2168 printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", mac[0], mac[1],
2169 mac[2], mac[3], mac[4], mac[5], tid);
2171 pEntry = MacTableLookup(pAd, mac);
2174 printk("\nTear down Ori BA Session: Tid = %d\n", tid);
2175 BAOriSessionTearDown(pAd, pEntry->Aid, tid, FALSE, TRUE);
2185 INT Set_BARecTearDown_Proc(
2186 IN PRTMP_ADAPTER pAd,
2190 char *token, sepValue[] = ":", DASH = '-';
2192 MAC_TABLE_ENTRY *pEntry;
2194 //printk("\n%s\n", arg);
2196 The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d,
2197 =>The six 2 digit hex-decimal number previous are the Mac address,
2198 =>The seventh decimal number is the tid value.
2200 if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format.
2203 token = strchr(arg, DASH);
2204 if ((token != NULL) && (strlen(token)>1))
2206 tid = simple_strtol((token+1), 0, 10);
2207 if (tid > NUM_OF_TID)
2211 for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
2213 if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
2215 AtoH(token, (PUCHAR)(&mac[i]), 1);
2220 printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", mac[0], mac[1],
2221 mac[2], mac[3], mac[4], mac[5], tid);
2223 pEntry = MacTableLookup(pAd, mac);
2226 printk("\nTear down Rec BA Session: Tid = %d\n", tid);
2227 BARecSessionTearDown(pAd, pEntry->Aid, tid, FALSE);
2238 IN PRTMP_ADAPTER pAd,
2243 HtBw = simple_strtol(arg, 0, 10);
2245 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40;
2246 else if (HtBw == BW_20)
2247 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
2249 return FALSE; //Invalid argument
2253 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtBw_Proc::(HtBw=%d)\n", pAd->CommonCfg.RegTransmitSetting.field.BW));
2259 IN PRTMP_ADAPTER pAd,
2262 ULONG HtMcs, Mcs_tmp;
2263 #ifdef CONFIG_STA_SUPPORT
2264 BOOLEAN bAutoRate = FALSE;
2265 #endif // CONFIG_STA_SUPPORT //
2267 Mcs_tmp = simple_strtol(arg, 0, 10);
2269 if (Mcs_tmp <= 15 || Mcs_tmp == 32)
2274 #ifdef CONFIG_STA_SUPPORT
2275 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
2277 pAd->StaCfg.DesiredTransmitSetting.field.MCS = HtMcs;
2278 pAd->StaCfg.bAutoTxRateSwitch = (HtMcs == MCS_AUTO) ? TRUE:FALSE;
2279 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMcs_Proc::(HtMcs=%d, bAutoTxRateSwitch = %d)\n",
2280 pAd->StaCfg.DesiredTransmitSetting.field.MCS, pAd->StaCfg.bAutoTxRateSwitch));
2282 if ((pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) ||
2283 (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE < MODE_HTMIX))
2285 if ((pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) &&
2286 (HtMcs >= 0 && HtMcs <= 3) &&
2287 (pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode == FIXED_TXMODE_CCK))
2289 RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[HtMcs] * 1000000));
2291 else if ((pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) &&
2292 (HtMcs >= 0 && HtMcs <= 7) &&
2293 (pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode == FIXED_TXMODE_OFDM))
2295 RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[HtMcs+4] * 1000000));
2302 pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
2303 RTMPSetDesiredRates(pAd, -1);
2305 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMcs_Proc::(FixedTxMode=%d)\n",pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode));
2310 #endif // CONFIG_STA_SUPPORT //
2318 IN PRTMP_ADAPTER pAd,
2323 HtGi = simple_strtol(arg, 0, 10);
2325 if ( HtGi == GI_400)
2326 pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400;
2327 else if ( HtGi == GI_800 )
2328 pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800;
2330 return FALSE; //Invalid argument
2334 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtGi_Proc::(ShortGI=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.ShortGI));
2340 INT Set_HtTxBASize_Proc(
2341 IN PRTMP_ADAPTER pAd,
2346 Size = simple_strtol(arg, 0, 10);
2348 if (Size <=0 || Size >=64)
2352 pAd->CommonCfg.TxBASize = Size-1;
2353 DBGPRINT(RT_DEBUG_ERROR, ("Set_HtTxBASize ::(TxBASize= %d)\n", Size));
2359 INT Set_HtOpMode_Proc(
2360 IN PRTMP_ADAPTER pAd,
2366 Value = simple_strtol(arg, 0, 10);
2368 if (Value == HTMODE_GF)
2369 pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF;
2370 else if ( Value == HTMODE_MM )
2371 pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM;
2373 return FALSE; //Invalid argument
2377 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtOpMode_Proc::(HtOpMode=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.HTMODE));
2383 INT Set_HtStbc_Proc(
2384 IN PRTMP_ADAPTER pAd,
2390 Value = simple_strtol(arg, 0, 10);
2392 if (Value == STBC_USE)
2393 pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE;
2394 else if ( Value == STBC_NONE )
2395 pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE;
2397 return FALSE; //Invalid argument
2401 DBGPRINT(RT_DEBUG_TRACE, ("Set_Stbc_Proc::(HtStbc=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.STBC));
2407 IN PRTMP_ADAPTER pAd,
2413 Value = simple_strtol(arg, 0, 10);
2415 pAd->HTCEnable = FALSE;
2416 else if ( Value ==1 )
2417 pAd->HTCEnable = TRUE;
2419 return FALSE; //Invalid argument
2421 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtHtc_Proc::(HtHtc=%d)\n",pAd->HTCEnable));
2426 INT Set_HtExtcha_Proc(
2427 IN PRTMP_ADAPTER pAd,
2433 Value = simple_strtol(arg, 0, 10);
2436 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
2437 else if ( Value ==1 )
2438 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
2440 return FALSE; //Invalid argument
2444 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtExtcha_Proc::(HtExtcha=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.EXTCHA));
2449 INT Set_HtMpduDensity_Proc(
2450 IN PRTMP_ADAPTER pAd,
2455 Value = simple_strtol(arg, 0, 10);
2457 if (Value <=7 && Value >= 0)
2458 pAd->CommonCfg.BACapability.field.MpduDensity = Value;
2460 pAd->CommonCfg.BACapability.field.MpduDensity = 4;
2464 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMpduDensity_Proc::(HtMpduDensity=%d)\n",pAd->CommonCfg.BACapability.field.MpduDensity));
2469 INT Set_HtBaWinSize_Proc(
2470 IN PRTMP_ADAPTER pAd,
2475 Value = simple_strtol(arg, 0, 10);
2478 if (Value >=1 && Value <= 64)
2480 pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value;
2481 pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value;
2485 pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64;
2486 pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64;
2491 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtBaWinSize_Proc::(HtBaWinSize=%d)\n",pAd->CommonCfg.BACapability.field.RxBAWinLimit));
2497 IN PRTMP_ADAPTER pAd,
2502 Value = simple_strtol(arg, 0, 10);
2505 pAd->CommonCfg.bRdg = FALSE;
2506 else if ( Value ==1 )
2508 pAd->HTCEnable = TRUE;
2509 pAd->CommonCfg.bRdg = TRUE;
2512 return FALSE; //Invalid argument
2516 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtRdg_Proc::(HtRdg=%d)\n",pAd->CommonCfg.bRdg));
2521 INT Set_HtLinkAdapt_Proc(
2522 IN PRTMP_ADAPTER pAd,
2527 Value = simple_strtol(arg, 0, 10);
2529 pAd->bLinkAdapt = FALSE;
2530 else if ( Value ==1 )
2532 pAd->HTCEnable = TRUE;
2533 pAd->bLinkAdapt = TRUE;
2536 return FALSE; //Invalid argument
2538 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtLinkAdapt_Proc::(HtLinkAdapt=%d)\n",pAd->bLinkAdapt));
2543 INT Set_HtAmsdu_Proc(
2544 IN PRTMP_ADAPTER pAd,
2549 Value = simple_strtol(arg, 0, 10);
2551 pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE;
2552 else if ( Value == 1 )
2553 pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE;
2555 return FALSE; //Invalid argument
2559 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAmsdu_Proc::(HtAmsdu=%d)\n",pAd->CommonCfg.BACapability.field.AmsduEnable));
2564 INT Set_HtAutoBa_Proc(
2565 IN PRTMP_ADAPTER pAd,
2570 Value = simple_strtol(arg, 0, 10);
2573 pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
2574 pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE;
2576 else if (Value == 1)
2578 pAd->CommonCfg.BACapability.field.AutoBA = TRUE;
2579 pAd->CommonCfg.BACapability.field.Policy = IMMED_BA;
2582 return FALSE; //Invalid argument
2584 pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA;
2585 pAd->CommonCfg.REGBACapability.field.Policy = pAd->CommonCfg.BACapability.field.Policy;
2588 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAutoBa_Proc::(HtAutoBa=%d)\n",pAd->CommonCfg.BACapability.field.AutoBA));
2594 INT Set_HtProtect_Proc(
2595 IN PRTMP_ADAPTER pAd,
2600 Value = simple_strtol(arg, 0, 10);
2602 pAd->CommonCfg.bHTProtect = FALSE;
2603 else if (Value == 1)
2604 pAd->CommonCfg.bHTProtect = TRUE;
2606 return FALSE; //Invalid argument
2608 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtProtect_Proc::(HtProtect=%d)\n",pAd->CommonCfg.bHTProtect));
2613 INT Set_SendPSMPAction_Proc(
2614 IN PRTMP_ADAPTER pAd,
2618 char *token, sepValue[] = ":", DASH = '-';
2620 MAC_TABLE_ENTRY *pEntry;
2622 //printk("\n%s\n", arg);
2624 The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d,
2625 =>The six 2 digit hex-decimal number previous are the Mac address,
2626 =>The seventh decimal number is the mode value.
2628 if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and mode value in decimal format.
2631 token = strchr(arg, DASH);
2632 if ((token != NULL) && (strlen(token)>1))
2634 mode = simple_strtol((token+1), 0, 10);
2635 if (mode > MMPS_ENABLE)
2639 for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
2641 if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
2643 AtoH(token, (PUCHAR)(&mac[i]), 1);
2648 printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", mac[0], mac[1],
2649 mac[2], mac[3], mac[4], mac[5], mode);
2651 pEntry = MacTableLookup(pAd, mac);
2654 printk("\nSendPSMPAction MIPS mode = %d\n", mode);
2655 SendPSMPAction(pAd, pEntry->Aid, mode);
2666 INT Set_HtMIMOPSmode_Proc(
2667 IN PRTMP_ADAPTER pAd,
2672 Value = simple_strtol(arg, 0, 10);
2674 if (Value <=3 && Value >= 0)
2675 pAd->CommonCfg.BACapability.field.MMPSmode = Value;
2677 pAd->CommonCfg.BACapability.field.MMPSmode = 3;
2681 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMIMOPSmode_Proc::(MIMOPS mode=%d)\n",pAd->CommonCfg.BACapability.field.MMPSmode));
2687 INT Set_ForceShortGI_Proc(
2688 IN PRTMP_ADAPTER pAd,
2693 Value = simple_strtol(arg, 0, 10);
2695 pAd->WIFItestbed.bShortGI = FALSE;
2696 else if (Value == 1)
2697 pAd->WIFItestbed.bShortGI = TRUE;
2699 return FALSE; //Invalid argument
2703 DBGPRINT(RT_DEBUG_TRACE, ("Set_ForceShortGI_Proc::(ForceShortGI=%d)\n", pAd->WIFItestbed.bShortGI));
2710 INT Set_ForceGF_Proc(
2711 IN PRTMP_ADAPTER pAd,
2716 Value = simple_strtol(arg, 0, 10);
2718 pAd->WIFItestbed.bGreenField = FALSE;
2719 else if (Value == 1)
2720 pAd->WIFItestbed.bGreenField = TRUE;
2722 return FALSE; //Invalid argument
2726 DBGPRINT(RT_DEBUG_TRACE, ("Set_ForceGF_Proc::(ForceGF=%d)\n", pAd->WIFItestbed.bGreenField));
2731 INT Set_HtMimoPs_Proc(
2732 IN PRTMP_ADAPTER pAd,
2737 Value = simple_strtol(arg, 0, 10);
2739 pAd->CommonCfg.bMIMOPSEnable = FALSE;
2740 else if (Value == 1)
2741 pAd->CommonCfg.bMIMOPSEnable = TRUE;
2743 return FALSE; //Invalid argument
2745 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMimoPs_Proc::(HtMimoPs=%d)\n",pAd->CommonCfg.bMIMOPSEnable));
2749 #endif // DOT11_N_SUPPORT //
2752 #ifdef DOT11_N_SUPPORT
2754 IN PRTMP_ADAPTER pAd)
2756 OID_SET_HT_PHYMODE SetHT;
2758 if (pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED)
2761 SetHT.PhyMode = pAd->CommonCfg.PhyMode;
2762 SetHT.TransmitNo = ((UCHAR)pAd->Antenna.field.TxPath);
2763 SetHT.HtMode = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.HTMODE;
2764 SetHT.ExtOffset = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.EXTCHA;
2765 SetHT.MCS = MCS_AUTO;
2766 SetHT.BW = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.BW;
2767 SetHT.STBC = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.STBC;
2768 SetHT.SHORTGI = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.ShortGI;
2770 RTMPSetHT(pAd, &SetHT);
2774 #endif // DOT11_N_SUPPORT //
2776 INT Set_FixedTxMode_Proc(
2777 IN PRTMP_ADAPTER pAd,
2780 UCHAR fix_tx_mode = FIXED_TXMODE_HT;
2782 if (strcmp(arg, "OFDM") == 0 || strcmp(arg, "ofdm") == 0)
2784 fix_tx_mode = FIXED_TXMODE_OFDM;
2786 else if (strcmp(arg, "CCK") == 0 || strcmp(arg, "cck") == 0)
2788 fix_tx_mode = FIXED_TXMODE_CCK;
2791 #ifdef CONFIG_STA_SUPPORT
2792 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
2793 pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode;
2794 #endif // CONFIG_STA_SUPPORT //
2796 DBGPRINT(RT_DEBUG_TRACE, ("Set_FixedTxMode_Proc::(FixedTxMode=%d)\n", fix_tx_mode));
2801 #ifdef CONFIG_APSTA_MIXED_SUPPORT
2802 INT Set_OpMode_Proc(
2803 IN PRTMP_ADAPTER pAd,
2808 Value = simple_strtol(arg, 0, 10);
2811 if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP))
2814 DBGPRINT(RT_DEBUG_ERROR, ("Can not switch operate mode on interface up !! \n"));
2819 pAd->OpMode = OPMODE_STA;
2820 else if (Value == 1)
2821 pAd->OpMode = OPMODE_AP;
2823 return FALSE; //Invalid argument
2825 DBGPRINT(RT_DEBUG_TRACE, ("Set_OpMode_Proc::(OpMode=%s)\n", pAd->OpMode == 1 ? "AP Mode" : "STA Mode"));
2829 #endif // CONFIG_APSTA_MIXED_SUPPORT //
2832 /////////////////////////////////////////////////////////////////////////
2833 PCHAR RTMPGetRalinkAuthModeStr(
2834 IN NDIS_802_11_AUTHENTICATION_MODE authMode)
2838 case Ndis802_11AuthModeOpen:
2841 case Ndis802_11AuthModeWPAPSK:
2843 case Ndis802_11AuthModeShared:
2845 case Ndis802_11AuthModeWPA:
2847 case Ndis802_11AuthModeWPA2:
2849 case Ndis802_11AuthModeWPA2PSK:
2851 case Ndis802_11AuthModeWPA1PSKWPA2PSK:
2852 return "WPAPSKWPA2PSK";
2853 case Ndis802_11AuthModeWPA1WPA2:
2858 PCHAR RTMPGetRalinkEncryModeStr(
2859 IN USHORT encryMode)
2864 case Ndis802_11WEPDisabled:
2866 case Ndis802_11WEPEnabled:
2868 case Ndis802_11Encryption2Enabled:
2870 case Ndis802_11Encryption3Enabled:
2872 case Ndis802_11Encryption4Enabled:
2877 INT RTMPShowCfgValue(
2878 IN PRTMP_ADAPTER pAd,
2884 for (PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC = RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC++)
2886 if (!strcmp(pName, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name))
2888 if(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->show_proc(pAd, pBuf))
2890 break; //Exit for loop.
2894 if(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name == NULL)
2896 sprintf(pBuf, "\n");
2897 for (PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC = RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC++)
2898 sprintf(pBuf, "%s%s\n", pBuf, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name);
2905 IN PRTMP_ADAPTER pAd,
2909 #ifdef CONFIG_STA_SUPPORT
2910 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
2911 sprintf(pBuf, "\t%s", pAd->CommonCfg.Ssid);
2912 #endif // CONFIG_STA_SUPPORT //
2916 INT Show_WirelessMode_Proc(
2917 IN PRTMP_ADAPTER pAd,
2920 switch(pAd->CommonCfg.PhyMode)
2922 case PHY_11BG_MIXED:
2923 sprintf(pBuf, "\t11B/G");
2926 sprintf(pBuf, "\t11B");
2929 sprintf(pBuf, "\t11A");
2931 case PHY_11ABG_MIXED:
2932 sprintf(pBuf, "\t11A/B/G");
2935 sprintf(pBuf, "\t11G");
2937 #ifdef DOT11_N_SUPPORT
2938 case PHY_11ABGN_MIXED:
2939 sprintf(pBuf, "\t11A/B/G/N");
2942 sprintf(pBuf, "\t11N only with 2.4G");
2944 case PHY_11GN_MIXED:
2945 sprintf(pBuf, "\t11G/N");
2947 case PHY_11AN_MIXED:
2948 sprintf(pBuf, "\t11A/N");
2950 case PHY_11BGN_MIXED:
2951 sprintf(pBuf, "\t11B/G/N");
2953 case PHY_11AGN_MIXED:
2954 sprintf(pBuf, "\t11A/G/N");
2957 sprintf(pBuf, "\t11N only with 5G");
2959 #endif // DOT11_N_SUPPORT //
2961 sprintf(pBuf, "\tUnknow Value(%d)", pAd->CommonCfg.PhyMode);
2968 INT Show_TxBurst_Proc(
2969 IN PRTMP_ADAPTER pAd,
2972 sprintf(pBuf, "\t%s", pAd->CommonCfg.bEnableTxBurst ? "TRUE":"FALSE");
2976 INT Show_TxPreamble_Proc(
2977 IN PRTMP_ADAPTER pAd,
2980 switch(pAd->CommonCfg.TxPreamble)
2982 case Rt802_11PreambleShort:
2983 sprintf(pBuf, "\tShort");
2985 case Rt802_11PreambleLong:
2986 sprintf(pBuf, "\tLong");
2988 case Rt802_11PreambleAuto:
2989 sprintf(pBuf, "\tAuto");
2992 sprintf(pBuf, "\tUnknow Value(%lu)", pAd->CommonCfg.TxPreamble);
2999 INT Show_TxPower_Proc(
3000 IN PRTMP_ADAPTER pAd,
3003 sprintf(pBuf, "\t%lu", pAd->CommonCfg.TxPowerPercentage);
3007 INT Show_Channel_Proc(
3008 IN PRTMP_ADAPTER pAd,
3011 sprintf(pBuf, "\t%d", pAd->CommonCfg.Channel);
3015 INT Show_BGProtection_Proc(
3016 IN PRTMP_ADAPTER pAd,
3019 switch(pAd->CommonCfg.UseBGProtection)
3022 sprintf(pBuf, "\tON");
3024 case 2: //Always OFF
3025 sprintf(pBuf, "\tOFF");
3028 sprintf(pBuf, "\tAuto");
3031 sprintf(pBuf, "\tUnknow Value(%lu)", pAd->CommonCfg.UseBGProtection);
3037 INT Show_RTSThreshold_Proc(
3038 IN PRTMP_ADAPTER pAd,
3041 sprintf(pBuf, "\t%u", pAd->CommonCfg.RtsThreshold);
3045 INT Show_FragThreshold_Proc(
3046 IN PRTMP_ADAPTER pAd,
3049 sprintf(pBuf, "\t%u", pAd->CommonCfg.FragmentThreshold);
3053 #ifdef DOT11_N_SUPPORT
3055 IN PRTMP_ADAPTER pAd,
3058 if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)
3060 sprintf(pBuf, "\t40 MHz");
3064 sprintf(pBuf, "\t20 MHz");
3069 INT Show_HtMcs_Proc(
3070 IN PRTMP_ADAPTER pAd,
3074 #ifdef CONFIG_STA_SUPPORT
3075 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3076 sprintf(pBuf, "\t%u", pAd->StaCfg.DesiredTransmitSetting.field.MCS);
3077 #endif // CONFIG_STA_SUPPORT //
3082 IN PRTMP_ADAPTER pAd,
3085 switch(pAd->CommonCfg.RegTransmitSetting.field.ShortGI)
3088 sprintf(pBuf, "\tGI_400");
3091 sprintf(pBuf, "\tGI_800");
3094 sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.ShortGI);
3100 INT Show_HtOpMode_Proc(
3101 IN PRTMP_ADAPTER pAd,
3104 switch(pAd->CommonCfg.RegTransmitSetting.field.HTMODE)
3107 sprintf(pBuf, "\tGF");
3110 sprintf(pBuf, "\tMM");
3113 sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.HTMODE);
3119 INT Show_HtExtcha_Proc(
3120 IN PRTMP_ADAPTER pAd,
3123 switch(pAd->CommonCfg.RegTransmitSetting.field.EXTCHA)
3126 sprintf(pBuf, "\tBelow");
3129 sprintf(pBuf, "\tAbove");
3132 sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.EXTCHA);
3139 INT Show_HtMpduDensity_Proc(
3140 IN PRTMP_ADAPTER pAd,
3143 sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.MpduDensity);
3147 INT Show_HtBaWinSize_Proc(
3148 IN PRTMP_ADAPTER pAd,
3151 sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.RxBAWinLimit);
3155 INT Show_HtRdg_Proc(
3156 IN PRTMP_ADAPTER pAd,
3159 sprintf(pBuf, "\t%s", pAd->CommonCfg.bRdg ? "TRUE":"FALSE");
3163 INT Show_HtAmsdu_Proc(
3164 IN PRTMP_ADAPTER pAd,
3167 sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AmsduEnable ? "TRUE":"FALSE");
3171 INT Show_HtAutoBa_Proc(
3172 IN PRTMP_ADAPTER pAd,
3175 sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AutoBA ? "TRUE":"FALSE");
3178 #endif // DOT11_N_SUPPORT //
3180 INT Show_CountryRegion_Proc(
3181 IN PRTMP_ADAPTER pAd,
3184 sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegion);
3188 INT Show_CountryRegionABand_Proc(
3189 IN PRTMP_ADAPTER pAd,
3192 sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegionForABand);
3196 INT Show_CountryCode_Proc(
3197 IN PRTMP_ADAPTER pAd,
3200 sprintf(pBuf, "\t%s", pAd->CommonCfg.CountryCode);
3204 #ifdef AGGREGATION_SUPPORT
3205 INT Show_PktAggregate_Proc(
3206 IN PRTMP_ADAPTER pAd,
3209 sprintf(pBuf, "\t%s", pAd->CommonCfg.bAggregationCapable ? "TRUE":"FALSE");
3212 #endif // AGGREGATION_SUPPORT //
3215 INT Show_WmmCapable_Proc(
3216 IN PRTMP_ADAPTER pAd,
3220 #ifdef CONFIG_STA_SUPPORT
3221 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3222 sprintf(pBuf, "\t%s", pAd->CommonCfg.bWmmCapable ? "TRUE":"FALSE");
3223 #endif // CONFIG_STA_SUPPORT //
3227 #endif // WMM_SUPPORT //
3229 INT Show_IEEE80211H_Proc(
3230 IN PRTMP_ADAPTER pAd,
3233 sprintf(pBuf, "\t%s", pAd->CommonCfg.bIEEE80211H ? "TRUE":"FALSE");
3237 #ifdef CONFIG_STA_SUPPORT
3238 INT Show_NetworkType_Proc(
3239 IN PRTMP_ADAPTER pAd,
3242 switch(pAd->StaCfg.BssType)
3245 sprintf(pBuf, "\tAdhoc");
3248 sprintf(pBuf, "\tInfra");
3251 sprintf(pBuf, "\tAny");
3254 sprintf(pBuf, "\tMonitor");
3257 sprintf(pBuf, "\tUnknow Value(%d)", pAd->StaCfg.BssType);
3262 #endif // CONFIG_STA_SUPPORT //
3264 INT Show_AuthMode_Proc(
3265 IN PRTMP_ADAPTER pAd,
3268 NDIS_802_11_AUTHENTICATION_MODE AuthMode = Ndis802_11AuthModeOpen;
3270 #ifdef CONFIG_STA_SUPPORT
3271 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3272 AuthMode = pAd->StaCfg.AuthMode;
3273 #endif // CONFIG_STA_SUPPORT //
3275 if ((AuthMode >= Ndis802_11AuthModeOpen) &&
3276 (AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK))
3277 sprintf(pBuf, "\t%s", RTMPGetRalinkAuthModeStr(AuthMode));
3279 sprintf(pBuf, "\tUnknow Value(%d)", AuthMode);
3284 INT Show_EncrypType_Proc(
3285 IN PRTMP_ADAPTER pAd,
3288 NDIS_802_11_WEP_STATUS WepStatus = Ndis802_11WEPDisabled;
3290 #ifdef CONFIG_STA_SUPPORT
3291 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3292 WepStatus = pAd->StaCfg.WepStatus;
3293 #endif // CONFIG_STA_SUPPORT //
3295 if ((WepStatus >= Ndis802_11WEPEnabled) &&
3296 (WepStatus <= Ndis802_11Encryption4KeyAbsent))
3297 sprintf(pBuf, "\t%s", RTMPGetRalinkEncryModeStr(WepStatus));
3299 sprintf(pBuf, "\tUnknow Value(%d)", WepStatus);
3304 INT Show_DefaultKeyID_Proc(
3305 IN PRTMP_ADAPTER pAd,
3308 UCHAR DefaultKeyId = 0;
3310 #ifdef CONFIG_STA_SUPPORT
3311 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3312 DefaultKeyId = pAd->StaCfg.DefaultKeyId;
3313 #endif // CONFIG_STA_SUPPORT //
3315 sprintf(pBuf, "\t%d", DefaultKeyId);
3320 INT Show_WepKey_Proc(
3321 IN PRTMP_ADAPTER pAd,
3325 UCHAR Key[16] = {0}, KeyLength = 0;
3328 KeyLength = pAd->SharedKey[index][KeyIdx].KeyLen;
3329 NdisMoveMemory(Key, pAd->SharedKey[index][KeyIdx].Key, KeyLength);
3331 //check key string is ASCII or not
3332 if (RTMPCheckStrPrintAble(Key, KeyLength))
3333 sprintf(pBuf, "\t%s", Key);
3337 sprintf(pBuf, "\t");
3338 for (idx = 0; idx < KeyLength; idx++)
3339 sprintf(pBuf+strlen(pBuf), "%02X", Key[idx]);
3345 IN PRTMP_ADAPTER pAd,
3348 Show_WepKey_Proc(pAd, 0, pBuf);
3353 IN PRTMP_ADAPTER pAd,
3356 Show_WepKey_Proc(pAd, 1, pBuf);
3361 IN PRTMP_ADAPTER pAd,
3364 Show_WepKey_Proc(pAd, 2, pBuf);
3369 IN PRTMP_ADAPTER pAd,
3372 Show_WepKey_Proc(pAd, 3, pBuf);
3376 INT Show_WPAPSK_Proc(
3377 IN PRTMP_ADAPTER pAd,
3381 UCHAR PMK[32] = {0};
3384 #ifdef CONFIG_STA_SUPPORT
3385 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3386 NdisMoveMemory(PMK, pAd->StaCfg.PMK, 32);
3387 #endif // CONFIG_STA_SUPPORT //
3389 sprintf(pBuf, "\tPMK = ");
3390 for (idx = 0; idx < 32; idx++)
3391 sprintf(pBuf+strlen(pBuf), "%02X", PMK[idx]);