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 *************************************************************************
34 --------- ---------- ----------------------------------------------
37 #include "../rt_config.h"
44 INT Show_WirelessMode_Proc(
48 INT Show_TxBurst_Proc(
52 INT Show_TxPreamble_Proc(
56 INT Show_TxPower_Proc(
60 INT Show_Channel_Proc(
64 INT Show_BGProtection_Proc(
68 INT Show_RTSThreshold_Proc(
72 INT Show_FragThreshold_Proc(
76 #ifdef DOT11_N_SUPPORT
89 INT Show_HtOpMode_Proc(
93 INT Show_HtExtcha_Proc(
97 INT Show_HtMpduDensity_Proc(
101 INT Show_HtBaWinSize_Proc(
102 IN PRTMP_ADAPTER pAd,
106 IN PRTMP_ADAPTER pAd,
109 INT Show_HtAmsdu_Proc(
110 IN PRTMP_ADAPTER pAd,
113 INT Show_HtAutoBa_Proc(
114 IN PRTMP_ADAPTER pAd,
116 #endif // DOT11_N_SUPPORT //
118 INT Show_CountryRegion_Proc(
119 IN PRTMP_ADAPTER pAd,
122 INT Show_CountryRegionABand_Proc(
123 IN PRTMP_ADAPTER pAd,
126 INT Show_CountryCode_Proc(
127 IN PRTMP_ADAPTER pAd,
130 #ifdef AGGREGATION_SUPPORT
131 INT Show_PktAggregate_Proc(
132 IN PRTMP_ADAPTER pAd,
134 #endif // AGGREGATION_SUPPORT //
137 INT Show_WmmCapable_Proc(
138 IN PRTMP_ADAPTER pAd,
140 #endif // WMM_SUPPORT //
142 INT Show_IEEE80211H_Proc(
143 IN PRTMP_ADAPTER pAd,
146 #ifdef CONFIG_STA_SUPPORT
147 INT Show_NetworkType_Proc(
148 IN PRTMP_ADAPTER pAd,
151 #endif // CONFIG_STA_SUPPORT //
153 INT Show_AuthMode_Proc(
154 IN PRTMP_ADAPTER pAd,
157 INT Show_EncrypType_Proc(
158 IN PRTMP_ADAPTER pAd,
161 INT Show_DefaultKeyID_Proc(
162 IN PRTMP_ADAPTER pAd,
166 IN PRTMP_ADAPTER pAd,
170 IN PRTMP_ADAPTER pAd,
174 IN PRTMP_ADAPTER pAd,
178 IN PRTMP_ADAPTER pAd,
181 INT Show_WPAPSK_Proc(
182 IN PRTMP_ADAPTER pAd,
187 INT (*show_proc)(PRTMP_ADAPTER pAdapter, PSTRING arg);
188 } *PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC, RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC[] = {
189 {"SSID", Show_SSID_Proc},
190 {"WirelessMode", Show_WirelessMode_Proc},
191 {"TxBurst", Show_TxBurst_Proc},
192 {"TxPreamble", Show_TxPreamble_Proc},
193 {"TxPower", Show_TxPower_Proc},
194 {"Channel", Show_Channel_Proc},
195 {"BGProtection", Show_BGProtection_Proc},
196 {"RTSThreshold", Show_RTSThreshold_Proc},
197 {"FragThreshold", Show_FragThreshold_Proc},
198 #ifdef DOT11_N_SUPPORT
199 {"HtBw", Show_HtBw_Proc},
200 {"HtMcs", Show_HtMcs_Proc},
201 {"HtGi", Show_HtGi_Proc},
202 {"HtOpMode", Show_HtOpMode_Proc},
203 {"HtExtcha", Show_HtExtcha_Proc},
204 {"HtMpduDensity", Show_HtMpduDensity_Proc},
205 {"HtBaWinSize", Show_HtBaWinSize_Proc},
206 {"HtRdg", Show_HtRdg_Proc},
207 {"HtAmsdu", Show_HtAmsdu_Proc},
208 {"HtAutoBa", Show_HtAutoBa_Proc},
209 #endif // DOT11_N_SUPPORT //
210 {"CountryRegion", Show_CountryRegion_Proc},
211 {"CountryRegionABand", Show_CountryRegionABand_Proc},
212 {"CountryCode", Show_CountryCode_Proc},
213 #ifdef AGGREGATION_SUPPORT
214 {"PktAggregate", Show_PktAggregate_Proc},
218 {"WmmCapable", Show_WmmCapable_Proc},
220 {"IEEE80211H", Show_IEEE80211H_Proc},
221 #ifdef CONFIG_STA_SUPPORT
222 {"NetworkType", Show_NetworkType_Proc},
223 #endif // CONFIG_STA_SUPPORT //
224 {"AuthMode", Show_AuthMode_Proc},
225 {"EncrypType", Show_EncrypType_Proc},
226 {"DefaultKeyID", Show_DefaultKeyID_Proc},
227 {"Key1", Show_Key1_Proc},
228 {"Key2", Show_Key2_Proc},
229 {"Key3", Show_Key3_Proc},
230 {"Key4", Show_Key4_Proc},
231 {"WPAPSK", Show_WPAPSK_Proc},
236 ==========================================================================
241 ==========================================================================
243 INT Set_DriverVersion_Proc(
244 IN PRTMP_ADAPTER pAd,
248 #ifdef CONFIG_STA_SUPPORT
249 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
250 DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s\n", STA_DRIVER_VERSION));
251 #endif // CONFIG_STA_SUPPORT //
258 ==========================================================================
261 This command will not work, if the field of CountryRegion in eeprom is programmed.
263 TRUE if all parameters are OK, FALSE otherwise
264 ==========================================================================
266 INT Set_CountryRegion_Proc(
267 IN PRTMP_ADAPTER pAd,
272 #ifdef EXT_BUILD_CHANNEL_LIST
274 #endif // EXT_BUILD_CHANNEL_LIST //
276 retval = RT_CfgSetCountryRegion(pAd, arg, BAND_24G);
280 // if set country region, driver needs to be reset
281 BuildChannelList(pAd);
283 DBGPRINT(RT_DEBUG_TRACE, ("Set_CountryRegion_Proc::(CountryRegion=%d)\n", pAd->CommonCfg.CountryRegion));
290 ==========================================================================
292 Set Country Region for A band.
293 This command will not work, if the field of CountryRegion in eeprom is programmed.
295 TRUE if all parameters are OK, FALSE otherwise
296 ==========================================================================
298 INT Set_CountryRegionABand_Proc(
299 IN PRTMP_ADAPTER pAd,
304 #ifdef EXT_BUILD_CHANNEL_LIST
306 #endif // EXT_BUILD_CHANNEL_LIST //
308 retval = RT_CfgSetCountryRegion(pAd, arg, BAND_5G);
312 // if set country region, driver needs to be reset
313 BuildChannelList(pAd);
315 DBGPRINT(RT_DEBUG_TRACE, ("Set_CountryRegionABand_Proc::(CountryRegion=%d)\n", pAd->CommonCfg.CountryRegionForABand));
322 ==========================================================================
326 TRUE if all parameters are OK, FALSE otherwise
327 ==========================================================================
329 INT Set_WirelessMode_Proc(
330 IN PRTMP_ADAPTER pAd,
335 success = RT_CfgSetWirelessMode(pAd, arg);
339 #ifdef CONFIG_STA_SUPPORT
340 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
342 LONG WirelessMode = pAd->CommonCfg.PhyMode;
344 RTMPSetPhyMode(pAd, WirelessMode);
345 #ifdef DOT11_N_SUPPORT
346 if (WirelessMode >= PHY_11ABGN_MIXED)
348 pAd->CommonCfg.BACapability.field.AutoBA = TRUE;
349 pAd->CommonCfg.REGBACapability.field.AutoBA = TRUE;
353 pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
354 pAd->CommonCfg.REGBACapability.field.AutoBA = FALSE;
356 #endif // DOT11_N_SUPPORT //
357 // Set AdhocMode rates
358 if (pAd->StaCfg.BssType == BSS_ADHOC)
360 MlmeUpdateTxRates(pAd, FALSE, 0);
361 MakeIbssBeacon(pAd); // re-build BEACON frame
362 AsicEnableIbssSync(pAd); // copy to on-chip memory
365 #endif // CONFIG_STA_SUPPORT //
367 // it is needed to set SSID to take effect
368 #ifdef DOT11_N_SUPPORT
370 #endif // DOT11_N_SUPPORT //
371 DBGPRINT(RT_DEBUG_TRACE, ("Set_WirelessMode_Proc::(=%d)\n", pAd->CommonCfg.PhyMode));
375 DBGPRINT(RT_DEBUG_ERROR, ("Set_WirelessMode_Proc::parameters out of range\n"));
382 ==========================================================================
386 TRUE if all parameters are OK, FALSE otherwise
387 ==========================================================================
389 INT Set_Channel_Proc(
390 IN PRTMP_ADAPTER pAd,
396 Channel = (UCHAR) simple_strtol(arg, 0, 10);
398 // check if this channel is valid
399 if (ChannelSanity(pAd, Channel) == TRUE)
401 #ifdef CONFIG_STA_SUPPORT
402 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
404 pAd->CommonCfg.Channel = Channel;
408 #ifdef DOT11_N_SUPPORT
410 if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED &&
411 pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)
414 AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
415 AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
416 DBGPRINT(RT_DEBUG_TRACE, ("BW_40, control_channel(%d), CentralChannel(%d) \n",
417 pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel));
420 #endif // DOT11_N_SUPPORT //
422 AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
423 AsicLockChannel(pAd, pAd->CommonCfg.Channel);
424 DBGPRINT(RT_DEBUG_TRACE, ("BW_20, Channel(%d)\n", pAd->CommonCfg.Channel));
428 #endif // CONFIG_STA_SUPPORT //
434 #ifdef CONFIG_STA_SUPPORT
435 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
437 #endif // CONFIG_STA_SUPPORT //
442 DBGPRINT(RT_DEBUG_TRACE, ("Set_Channel_Proc::(Channel=%d)\n", pAd->CommonCfg.Channel));
449 ==========================================================================
451 Set Short Slot Time Enable or Disable
453 TRUE if all parameters are OK, FALSE otherwise
454 ==========================================================================
456 INT Set_ShortSlot_Proc(
457 IN PRTMP_ADAPTER pAd,
462 retval = RT_CfgSetShortSlot(pAd, arg);
464 DBGPRINT(RT_DEBUG_TRACE, ("Set_ShortSlot_Proc::(ShortSlot=%d)\n", pAd->CommonCfg.bUseShortSlotTime));
471 ==========================================================================
475 TRUE if all parameters are OK, FALSE otherwise
476 ==========================================================================
478 INT Set_TxPower_Proc(
479 IN PRTMP_ADAPTER pAd,
485 TxPower = simple_strtol(arg, 0, 10);
489 #ifdef CONFIG_STA_SUPPORT
490 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
492 pAd->CommonCfg.TxPowerDefault = TxPower;
493 pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault;
495 #endif // CONFIG_STA_SUPPORT //
501 DBGPRINT(RT_DEBUG_TRACE, ("Set_TxPower_Proc::(TxPowerPercentage=%ld)\n", pAd->CommonCfg.TxPowerPercentage));
507 ==========================================================================
509 Set 11B/11G Protection
511 TRUE if all parameters are OK, FALSE otherwise
512 ==========================================================================
514 INT Set_BGProtection_Proc(
515 IN PRTMP_ADAPTER pAd,
518 switch (simple_strtol(arg, 0, 10))
521 pAd->CommonCfg.UseBGProtection = 0;
524 pAd->CommonCfg.UseBGProtection = 1;
527 pAd->CommonCfg.UseBGProtection = 2;
529 default: //Invalid argument
534 DBGPRINT(RT_DEBUG_TRACE, ("Set_BGProtection_Proc::(BGProtection=%ld)\n", pAd->CommonCfg.UseBGProtection));
540 ==========================================================================
544 TRUE if all parameters are OK, FALSE otherwise
545 ==========================================================================
547 INT Set_TxPreamble_Proc(
548 IN PRTMP_ADAPTER pAd,
551 RT_802_11_PREAMBLE Preamble;
553 Preamble = simple_strtol(arg, 0, 10);
558 case Rt802_11PreambleShort:
559 pAd->CommonCfg.TxPreamble = Preamble;
560 #ifdef CONFIG_STA_SUPPORT
561 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
562 MlmeSetTxPreamble(pAd, Rt802_11PreambleShort);
563 #endif // CONFIG_STA_SUPPORT //
565 case Rt802_11PreambleLong:
566 #ifdef CONFIG_STA_SUPPORT
567 case Rt802_11PreambleAuto:
568 // if user wants AUTO, initialize to LONG here, then change according to AP's
569 // capability upon association.
570 #endif // CONFIG_STA_SUPPORT //
571 pAd->CommonCfg.TxPreamble = Preamble;
572 #ifdef CONFIG_STA_SUPPORT
573 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
574 MlmeSetTxPreamble(pAd, Rt802_11PreambleLong);
575 #endif // CONFIG_STA_SUPPORT //
577 default: //Invalid argument
581 DBGPRINT(RT_DEBUG_TRACE, ("Set_TxPreamble_Proc::(TxPreamble=%ld)\n", pAd->CommonCfg.TxPreamble));
587 ==========================================================================
591 TRUE if all parameters are OK, FALSE otherwise
592 ==========================================================================
594 INT Set_RTSThreshold_Proc(
595 IN PRTMP_ADAPTER pAd,
598 NDIS_802_11_RTS_THRESHOLD RtsThresh;
600 RtsThresh = simple_strtol(arg, 0, 10);
602 if((RtsThresh > 0) && (RtsThresh <= MAX_RTS_THRESHOLD))
603 pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh;
604 #ifdef CONFIG_STA_SUPPORT
605 else if (RtsThresh == 0)
606 pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD;
607 #endif // CONFIG_STA_SUPPORT //
609 return FALSE; //Invalid argument
611 DBGPRINT(RT_DEBUG_TRACE, ("Set_RTSThreshold_Proc::(RTSThreshold=%d)\n", pAd->CommonCfg.RtsThreshold));
617 ==========================================================================
619 Set Fragment Threshold
621 TRUE if all parameters are OK, FALSE otherwise
622 ==========================================================================
624 INT Set_FragThreshold_Proc(
625 IN PRTMP_ADAPTER pAd,
628 NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh;
630 FragThresh = simple_strtol(arg, 0, 10);
632 if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD)
634 //Illegal FragThresh so we set it to default
635 pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD;
637 else if (FragThresh % 2 == 1)
639 // The length of each fragment shall always be an even number of octets, except for the last fragment
640 // of an MSDU or MMPDU, which may be either an even or an odd number of octets.
641 pAd->CommonCfg.FragmentThreshold = (USHORT)(FragThresh - 1);
645 pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh;
648 #ifdef CONFIG_STA_SUPPORT
649 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
651 if (pAd->CommonCfg.FragmentThreshold == MAX_FRAG_THRESHOLD)
652 pAd->CommonCfg.bUseZeroToDisableFragment = TRUE;
654 pAd->CommonCfg.bUseZeroToDisableFragment = FALSE;
656 #endif // CONFIG_STA_SUPPORT //
658 DBGPRINT(RT_DEBUG_TRACE, ("Set_FragThreshold_Proc::(FragThreshold=%d)\n", pAd->CommonCfg.FragmentThreshold));
664 ==========================================================================
668 TRUE if all parameters are OK, FALSE otherwise
669 ==========================================================================
671 INT Set_TxBurst_Proc(
672 IN PRTMP_ADAPTER pAd,
677 TxBurst = simple_strtol(arg, 0, 10);
679 pAd->CommonCfg.bEnableTxBurst = TRUE;
680 else if (TxBurst == 0)
681 pAd->CommonCfg.bEnableTxBurst = FALSE;
683 return FALSE; //Invalid argument
685 DBGPRINT(RT_DEBUG_TRACE, ("Set_TxBurst_Proc::(TxBurst=%d)\n", pAd->CommonCfg.bEnableTxBurst));
690 #ifdef AGGREGATION_SUPPORT
692 ==========================================================================
696 TRUE if all parameters are OK, FALSE otherwise
697 ==========================================================================
699 INT Set_PktAggregate_Proc(
700 IN PRTMP_ADAPTER pAd,
705 aggre = simple_strtol(arg, 0, 10);
708 pAd->CommonCfg.bAggregationCapable = TRUE;
710 pAd->CommonCfg.bAggregationCapable = FALSE;
712 return FALSE; //Invalid argument
715 DBGPRINT(RT_DEBUG_TRACE, ("Set_PktAggregate_Proc::(AGGRE=%d)\n", pAd->CommonCfg.bAggregationCapable));
722 #ifdef INF_AMAZON_PPA
723 INT Set_INF_AMAZON_SE_PPA_Proc(
724 IN PRTMP_ADAPTER pAd,
730 aggre = simple_strtol(arg, 0, 10);
734 if(pAd->PPAEnable==TRUE)
736 printk("INF_AMAZON_SE_PPA already enabled \n");
740 if (ppa_hook_directpath_register_dev_fn)
744 if (pAd->pDirectpathCb == NULL)
746 pAd->pDirectpathCb = (PPA_DIRECTPATH_CB *) kmalloc (sizeof(PPA_DIRECTPATH_CB), GFP_ATOMIC);
747 printk("Realloc memory for pDirectpathCb ??\n");
750 /* register callback */
751 pAd->pDirectpathCb->rx_fn = NULL;
752 pAd->pDirectpathCb->stop_tx_fn = NULL;
753 pAd->pDirectpathCb->start_tx_fn = NULL;
755 status = ppa_hook_directpath_register_dev_fn(&g_if_id, pAd->net_dev, pAd->pDirectpathCb, PPA_F_DIRECTPATH_ETH_IF);
759 pAd->g_if_id=g_if_id;
760 printk("register INF_AMAZON_SE_PPA success :ret:%d id:%d:%d\n",status,pAd->g_if_id,g_if_id);
765 printk("register INF_AMAZON_SE_PPA fail :ret:%d\n",status);
771 printk("INF_AMAZON_SE_PPA enable fail : there is no INF_AMAZON_SE_PPA module . \n");
779 if(pAd->PPAEnable==FALSE)
782 printk("INF_AMAZON_SE_PPA already disable \n");
786 if (ppa_hook_directpath_register_dev_fn)
789 g_if_id=pAd->g_if_id;
790 printk("g_if_id=%d \n",pAd->g_if_id);
791 status=ppa_hook_directpath_register_dev_fn(&g_if_id, pAd->net_dev, NULL, PPA_F_DIRECTPATH_DEREGISTER);
796 printk("unregister INF_AMAZON_SE_PPA success :ret:%d\n",status);
797 pAd->PPAEnable=FALSE;
801 printk("unregister INF_AMAZON_SE_PPA fail :ret:%d\n",status);
807 printk("INF_AMAZON_SE_PPA enable fail : there is no INF_AMAZON_SE_PPA module . \n");
814 printk("Invalid argument %d \n",aggre);
815 return FALSE; //Invalid argument
821 #endif // INF_AMAZON_PPA //
825 ==========================================================================
828 This parameter is 1 when needs radar detection, otherwise 0
830 TRUE if all parameters are OK, FALSE otherwise
831 ==========================================================================
833 INT Set_IEEE80211H_Proc(
834 IN PRTMP_ADAPTER pAd,
839 ieee80211h = simple_strtol(arg, 0, 10);
842 pAd->CommonCfg.bIEEE80211H = TRUE;
843 else if (ieee80211h == 0)
844 pAd->CommonCfg.bIEEE80211H = FALSE;
846 return FALSE; //Invalid argument
848 DBGPRINT(RT_DEBUG_TRACE, ("Set_IEEE80211H_Proc::(IEEE80211H=%d)\n", pAd->CommonCfg.bIEEE80211H));
856 ==========================================================================
858 For Debug information
860 TRUE if all parameters are OK, FALSE otherwise
861 ==========================================================================
864 IN PRTMP_ADAPTER pAd,
867 DBGPRINT(RT_DEBUG_TRACE, ("==> Set_Debug_Proc *******************\n"));
869 if(simple_strtol(arg, 0, 10) <= RT_DEBUG_LOUD)
870 RTDebugLevel = simple_strtol(arg, 0, 10);
872 DBGPRINT(RT_DEBUG_TRACE, ("<== Set_Debug_Proc(RTDebugLevel = %ld)\n", RTDebugLevel));
878 INT Show_DescInfo_Proc(
879 IN PRTMP_ADAPTER pAd,
885 PRT28XX_RXD_STRUC pRxD;
887 PRTMP_TX_RING pTxRing = &pAd->TxRing[QueIdx];
888 PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing;
889 PRTMP_RX_RING pRxRing = &pAd->RxRing;
891 for(i=0;i<TX_RING_SIZE;i++)
893 pTxD = (PTXD_STRUC) pTxRing->Cell[i].AllocVa;
894 DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i));
895 hex_dump("Tx Descriptor", (PUCHAR)pTxD, 16);
896 DBGPRINT(RT_DEBUG_OFF, ("pTxD->DMADONE = %x\n", pTxD->DMADONE));
898 DBGPRINT(RT_DEBUG_OFF, ("---------------------------------------------------\n"));
899 for(i=0;i<MGMT_RING_SIZE;i++)
901 pTxD = (PTXD_STRUC) pMgmtRing->Cell[i].AllocVa;
902 DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i));
903 hex_dump("Mgmt Descriptor", (PUCHAR)pTxD, 16);
904 DBGPRINT(RT_DEBUG_OFF, ("pMgmt->DMADONE = %x\n", pTxD->DMADONE));
906 DBGPRINT(RT_DEBUG_OFF, ("---------------------------------------------------\n"));
907 for(i=0;i<RX_RING_SIZE;i++)
909 pRxD = (PRT28XX_RXD_STRUC) pRxRing->Cell[i].AllocVa;
910 DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i));
911 hex_dump("Rx Descriptor", (PUCHAR)pRxD, 16);
912 DBGPRINT(RT_DEBUG_OFF, ("pRxD->DDONE = %x\n", pRxD->DDONE));
914 #endif // RTMP_MAC_PCI //
920 ==========================================================================
922 Reset statistics counter
925 pAdapter Pointer to our adapter
929 TRUE if all parameters are OK, FALSE otherwise
930 ==========================================================================
932 INT Set_ResetStatCounter_Proc(
933 IN PRTMP_ADAPTER pAd,
937 //MAC_TABLE_ENTRY *pEntry;
939 DBGPRINT(RT_DEBUG_TRACE, ("==>Set_ResetStatCounter_Proc\n"));
941 // add the most up-to-date h/w raw counters into software counters
942 NICUpdateRawCounters(pAd);
944 NdisZeroMemory(&pAd->WlanCounters, sizeof(COUNTER_802_11));
945 NdisZeroMemory(&pAd->Counters8023, sizeof(COUNTER_802_3));
946 NdisZeroMemory(&pAd->RalinkCounters, sizeof(COUNTER_RALINK));
948 // Reset HotSpot counter
955 ========================================================================
959 In Adhoc WPANONE, bPairwise = 0; KeyIdx = 0;
962 pAd Pointer to our adapter
963 pBuf Pointer to the where the key stored
966 NDIS_SUCCESS Add key successfully
968 IRQL = DISPATCH_LEVEL
972 ========================================================================
975 BOOLEAN RTMPCheckStrPrintAble(
981 for (i=0; i<strLen; i++)
983 if ((pInPutStr[i] < 0x21) ||
984 (pInPutStr[i] > 0x7E))
992 ========================================================================
995 Remove WPA Key process
998 pAd Pointer to our adapter
999 pBuf Pointer to the where the key stored
1002 NDIS_SUCCESS Add key successfully
1004 IRQL = DISPATCH_LEVEL
1008 ========================================================================
1010 #ifdef CONFIG_STA_SUPPORT
1011 VOID RTMPSetDesiredRates(
1012 IN PRTMP_ADAPTER pAdapter,
1015 NDIS_802_11_RATES aryRates;
1017 memset(&aryRates, 0x00, sizeof(NDIS_802_11_RATES));
1018 switch (pAdapter->CommonCfg.PhyMode)
1020 case PHY_11A: // A only
1024 aryRates[0] = 0x0c; // 6M
1025 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0;
1028 aryRates[0] = 0x12; // 9M
1029 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1;
1031 case 12000000: //12M
1032 aryRates[0] = 0x18; // 12M
1033 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2;
1035 case 18000000: //18M
1036 aryRates[0] = 0x24; // 18M
1037 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3;
1039 case 24000000: //24M
1040 aryRates[0] = 0x30; // 24M
1041 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_4;
1043 case 36000000: //36M
1044 aryRates[0] = 0x48; // 36M
1045 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_5;
1047 case 48000000: //48M
1048 aryRates[0] = 0x60; // 48M
1049 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_6;
1051 case 54000000: //54M
1052 aryRates[0] = 0x6c; // 54M
1053 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_7;
1057 aryRates[0] = 0x6c; // 54Mbps
1058 aryRates[1] = 0x60; // 48Mbps
1059 aryRates[2] = 0x48; // 36Mbps
1060 aryRates[3] = 0x30; // 24Mbps
1061 aryRates[4] = 0x24; // 18M
1062 aryRates[5] = 0x18; // 12M
1063 aryRates[6] = 0x12; // 9M
1064 aryRates[7] = 0x0c; // 6M
1065 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
1069 case PHY_11BG_MIXED: // B/G Mixed
1070 case PHY_11B: // B only
1071 case PHY_11ABG_MIXED: // A/B/G Mixed
1077 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0;
1081 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1;
1083 case 5000000: //5.5M
1084 aryRates[0] = 0x0b; // 5.5M
1085 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2;
1087 case 11000000: //11M
1088 aryRates[0] = 0x16; // 11M
1089 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3;
1092 aryRates[0] = 0x0c; // 6M
1093 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0;
1096 aryRates[0] = 0x12; // 9M
1097 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1;
1099 case 12000000: //12M
1100 aryRates[0] = 0x18; // 12M
1101 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2;
1103 case 18000000: //18M
1104 aryRates[0] = 0x24; // 18M
1105 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3;
1107 case 24000000: //24M
1108 aryRates[0] = 0x30; // 24M
1109 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_4;
1111 case 36000000: //36M
1112 aryRates[0] = 0x48; // 36M
1113 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_5;
1115 case 48000000: //48M
1116 aryRates[0] = 0x60; // 48M
1117 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_6;
1119 case 54000000: //54M
1120 aryRates[0] = 0x6c; // 54M
1121 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_7;
1125 if (pAdapter->CommonCfg.PhyMode == PHY_11B)
1127 aryRates[0] = 0x16; // 11Mbps
1128 aryRates[1] = 0x0b; // 5.5Mbps
1129 aryRates[2] = 0x04; // 2Mbps
1130 aryRates[3] = 0x02; // 1Mbps
1133 { //(B/G) Mixed or (A/B/G) Mixed
1134 aryRates[0] = 0x6c; // 54Mbps
1135 aryRates[1] = 0x60; // 48Mbps
1136 aryRates[2] = 0x48; // 36Mbps
1137 aryRates[3] = 0x30; // 24Mbps
1138 aryRates[4] = 0x16; // 11Mbps
1139 aryRates[5] = 0x0b; // 5.5Mbps
1140 aryRates[6] = 0x04; // 2Mbps
1141 aryRates[7] = 0x02; // 1Mbps
1143 pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
1149 NdisZeroMemory(pAdapter->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES);
1150 NdisMoveMemory(pAdapter->CommonCfg.DesireRate, &aryRates, sizeof(NDIS_802_11_RATES));
1151 DBGPRINT(RT_DEBUG_TRACE, (" RTMPSetDesiredRates (%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x)\n",
1152 pAdapter->CommonCfg.DesireRate[0],pAdapter->CommonCfg.DesireRate[1],
1153 pAdapter->CommonCfg.DesireRate[2],pAdapter->CommonCfg.DesireRate[3],
1154 pAdapter->CommonCfg.DesireRate[4],pAdapter->CommonCfg.DesireRate[5],
1155 pAdapter->CommonCfg.DesireRate[6],pAdapter->CommonCfg.DesireRate[7] ));
1156 // Changing DesiredRate may affect the MAX TX rate we used to TX frames out
1157 MlmeUpdateTxRates(pAdapter, FALSE, 0);
1160 NDIS_STATUS RTMPWPARemoveKeyProc(
1161 IN PRTMP_ADAPTER pAd,
1164 PNDIS_802_11_REMOVE_KEY pKey;
1166 NDIS_STATUS Status = NDIS_STATUS_FAILURE;
1167 BOOLEAN bTxKey; // Set the key as transmit key
1168 BOOLEAN bPairwise; // Indicate the key is pairwise key
1169 BOOLEAN bKeyRSC; // indicate the receive SC set by KeyRSC value.
1170 // Otherwise, it will set by the NIC.
1171 BOOLEAN bAuthenticator; // indicate key is set by authenticator.
1174 DBGPRINT(RT_DEBUG_TRACE,("---> RTMPWPARemoveKeyProc\n"));
1176 pKey = (PNDIS_802_11_REMOVE_KEY) pBuf;
1177 KeyIdx = pKey->KeyIndex & 0xff;
1178 // Bit 31 of Add-key, Tx Key
1179 bTxKey = (pKey->KeyIndex & 0x80000000) ? TRUE : FALSE;
1180 // Bit 30 of Add-key PairwiseKey
1181 bPairwise = (pKey->KeyIndex & 0x40000000) ? TRUE : FALSE;
1182 // Bit 29 of Add-key KeyRSC
1183 bKeyRSC = (pKey->KeyIndex & 0x20000000) ? TRUE : FALSE;
1184 // Bit 28 of Add-key Authenticator
1185 bAuthenticator = (pKey->KeyIndex & 0x10000000) ? TRUE : FALSE;
1187 // 1. If bTx is TRUE, return failure information
1189 return(NDIS_STATUS_INVALID_DATA);
1191 // 2. Check Pairwise Key
1194 // a. If BSSID is broadcast, remove all pairwise keys.
1195 // b. If not broadcast, remove the pairwise specified by BSSID
1196 for (i = 0; i < SHARE_KEY_NUM; i++)
1198 if (MAC_ADDR_EQUAL(pAd->SharedKey[BSS0][i].BssId, pKey->BSSID))
1200 DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%d)\n", i));
1201 pAd->SharedKey[BSS0][i].KeyLen = 0;
1202 pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_NONE;
1203 AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)i);
1204 Status = NDIS_STATUS_SUCCESS;
1212 // a. If BSSID is broadcast, remove all group keys indexed
1213 // b. If BSSID matched, delete the group key indexed.
1214 DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%ld)\n", KeyIdx));
1215 pAd->SharedKey[BSS0][KeyIdx].KeyLen = 0;
1216 pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_NONE;
1217 AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)KeyIdx);
1218 Status = NDIS_STATUS_SUCCESS;
1223 #endif // CONFIG_STA_SUPPORT //
1226 #ifdef CONFIG_STA_SUPPORT
1228 ========================================================================
1230 Routine Description:
1234 pAd Pointer to our adapter
1239 IRQL = DISPATCH_LEVEL
1243 ========================================================================
1245 VOID RTMPWPARemoveAllKeys(
1246 IN PRTMP_ADAPTER pAd)
1251 DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveAllKeys(AuthMode=%d, WepStatus=%d)\n", pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus));
1252 RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP);
1253 // For WEP/CKIP, there is no need to remove it, since WinXP won't set it again after
1254 // Link up. And it will be replaced if user changed it.
1255 if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA)
1258 // For WPA-None, there is no need to remove it, since WinXP won't set it again after
1259 // Link up. And it will be replaced if user changed it.
1260 if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone)
1263 // set BSSID wcid entry of the Pair-wise Key table as no-security mode
1264 AsicRemovePairwiseKeyEntry(pAd, BSS0, BSSID_WCID);
1266 // set all shared key mode as no-security.
1267 for (i = 0; i < SHARE_KEY_NUM; i++)
1269 DBGPRINT(RT_DEBUG_TRACE,("remove %s key #%d\n", CipherName[pAd->SharedKey[BSS0][i].CipherAlg], i));
1270 NdisZeroMemory(&pAd->SharedKey[BSS0][i], sizeof(CIPHER_KEY));
1272 AsicRemoveSharedKeyEntry(pAd, BSS0, i);
1274 RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP);
1277 #endif // CONFIG_STA_SUPPORT //
1281 ========================================================================
1283 Routine Description:
1284 As STA's BSSID is a WC too, it uses shared key table.
1285 This function write correct unicast TX key to ASIC WCID.
1286 And we still make a copy in our MacTab.Content[BSSID_WCID].PairwiseKey.
1287 Caller guarantee TKIP/AES always has keyidx = 0. (pairwise key)
1288 Caller guarantee WEP calls this function when set Txkey, default key index=0~3.
1291 pAd Pointer to our adapter
1292 pKey Pointer to the where the key stored
1295 NDIS_SUCCESS Add key successfully
1297 IRQL = DISPATCH_LEVEL
1301 ========================================================================
1304 ========================================================================
1305 Routine Description:
1306 Change NIC PHY mode. Re-association may be necessary. possible settings
1307 include - PHY_11B, PHY_11BG_MIXED, PHY_11A, and PHY_11ABG_MIXED
1310 pAd - Pointer to our adapter
1313 IRQL = PASSIVE_LEVEL
1314 IRQL = DISPATCH_LEVEL
1316 ========================================================================
1318 VOID RTMPSetPhyMode(
1319 IN PRTMP_ADAPTER pAd,
1323 // the selected phymode must be supported by the RF IC encoded in E2PROM
1325 // if no change, do nothing
1327 if (pAd->CommonCfg.PhyMode == phymode)
1330 pAd->CommonCfg.PhyMode = (UCHAR)phymode;
1332 DBGPRINT(RT_DEBUG_TRACE,("RTMPSetPhyMode : PhyMode=%d, channel=%d \n", pAd->CommonCfg.PhyMode, pAd->CommonCfg.Channel));
1333 #ifdef EXT_BUILD_CHANNEL_LIST
1334 BuildChannelListEx(pAd);
1336 BuildChannelList(pAd);
1337 #endif // EXT_BUILD_CHANNEL_LIST //
1339 // sanity check user setting
1340 for (i = 0; i < pAd->ChannelListNum; i++)
1342 if (pAd->CommonCfg.Channel == pAd->ChannelList[i].Channel)
1346 if (i == pAd->ChannelListNum)
1348 #ifdef CONFIG_STA_SUPPORT
1349 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1350 pAd->CommonCfg.Channel = FirstChannel(pAd);
1351 #endif // CONFIG_STA_SUPPORT //
1352 DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetPhyMode: channel is out of range, use first channel=%d \n", pAd->CommonCfg.Channel));
1355 NdisZeroMemory(pAd->CommonCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES);
1356 NdisZeroMemory(pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES);
1357 NdisZeroMemory(pAd->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES);
1360 pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate
1361 pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate
1362 pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate
1363 pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate
1364 pAd->CommonCfg.SupRateLen = 4;
1365 pAd->CommonCfg.ExtRateLen = 0;
1366 pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps
1367 pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps
1368 pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps
1369 pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps
1370 //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_CCK; // This MODE is only FYI. not use
1374 case PHY_11BG_MIXED:
1375 case PHY_11ABG_MIXED:
1376 #ifdef DOT11_N_SUPPORT
1378 case PHY_11ABGN_MIXED:
1379 case PHY_11BGN_MIXED:
1380 case PHY_11GN_MIXED:
1381 #endif // DOT11_N_SUPPORT //
1382 pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate
1383 pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate
1384 pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate
1385 pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate
1386 pAd->CommonCfg.SupRate[4] = 0x12; // 9 mbps, in units of 0.5 Mbps
1387 pAd->CommonCfg.SupRate[5] = 0x24; // 18 mbps, in units of 0.5 Mbps
1388 pAd->CommonCfg.SupRate[6] = 0x48; // 36 mbps, in units of 0.5 Mbps
1389 pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps
1390 pAd->CommonCfg.SupRateLen = 8;
1391 pAd->CommonCfg.ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps
1392 pAd->CommonCfg.ExtRate[1] = 0x18; // 12 mbps, in units of 0.5 Mbps
1393 pAd->CommonCfg.ExtRate[2] = 0x30; // 24 mbps, in units of 0.5 Mbps
1394 pAd->CommonCfg.ExtRate[3] = 0x60; // 48 mbps, in units of 0.5 Mbps
1395 pAd->CommonCfg.ExtRateLen = 4;
1396 pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps
1397 pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps
1398 pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps
1399 pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps
1400 pAd->CommonCfg.DesireRate[4] = 12; // 6 mbps, in units of 0.5 Mbps
1401 pAd->CommonCfg.DesireRate[5] = 18; // 9 mbps, in units of 0.5 Mbps
1402 pAd->CommonCfg.DesireRate[6] = 24; // 12 mbps, in units of 0.5 Mbps
1403 pAd->CommonCfg.DesireRate[7] = 36; // 18 mbps, in units of 0.5 Mbps
1404 pAd->CommonCfg.DesireRate[8] = 48; // 24 mbps, in units of 0.5 Mbps
1405 pAd->CommonCfg.DesireRate[9] = 72; // 36 mbps, in units of 0.5 Mbps
1406 pAd->CommonCfg.DesireRate[10] = 96; // 48 mbps, in units of 0.5 Mbps
1407 pAd->CommonCfg.DesireRate[11] = 108; // 54 mbps, in units of 0.5 Mbps
1411 #ifdef DOT11_N_SUPPORT
1412 case PHY_11AN_MIXED:
1413 case PHY_11AGN_MIXED:
1415 #endif // DOT11_N_SUPPORT //
1416 pAd->CommonCfg.SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate
1417 pAd->CommonCfg.SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps
1418 pAd->CommonCfg.SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate
1419 pAd->CommonCfg.SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps
1420 pAd->CommonCfg.SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate
1421 pAd->CommonCfg.SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps
1422 pAd->CommonCfg.SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps
1423 pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps
1424 pAd->CommonCfg.SupRateLen = 8;
1425 pAd->CommonCfg.ExtRateLen = 0;
1426 pAd->CommonCfg.DesireRate[0] = 12; // 6 mbps, in units of 0.5 Mbps
1427 pAd->CommonCfg.DesireRate[1] = 18; // 9 mbps, in units of 0.5 Mbps
1428 pAd->CommonCfg.DesireRate[2] = 24; // 12 mbps, in units of 0.5 Mbps
1429 pAd->CommonCfg.DesireRate[3] = 36; // 18 mbps, in units of 0.5 Mbps
1430 pAd->CommonCfg.DesireRate[4] = 48; // 24 mbps, in units of 0.5 Mbps
1431 pAd->CommonCfg.DesireRate[5] = 72; // 36 mbps, in units of 0.5 Mbps
1432 pAd->CommonCfg.DesireRate[6] = 96; // 48 mbps, in units of 0.5 Mbps
1433 pAd->CommonCfg.DesireRate[7] = 108; // 54 mbps, in units of 0.5 Mbps
1434 //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_OFDM; // This MODE is only FYI. not use
1442 pAd->CommonCfg.BandState = UNKNOWN_BAND;
1446 #ifdef DOT11_N_SUPPORT
1448 ========================================================================
1449 Routine Description:
1450 Caller ensures we has 802.11n support.
1451 Calls at setting HT from AP/STASetinformation
1454 pAd - Pointer to our adapter
1457 ========================================================================
1460 IN PRTMP_ADAPTER pAd,
1461 IN OID_SET_HT_PHYMODE *pHTPhyMode)
1466 UCHAR BBP3Value = 0;
1467 UCHAR RxStream = pAd->CommonCfg.RxStream;
1469 DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : HT_mode(%d), ExtOffset(%d), MCS(%d), BW(%d), STBC(%d), SHORTGI(%d)\n",
1470 pHTPhyMode->HtMode, pHTPhyMode->ExtOffset,
1471 pHTPhyMode->MCS, pHTPhyMode->BW,
1472 pHTPhyMode->STBC, pHTPhyMode->SHORTGI));
1474 // Don't zero supportedHyPhy structure.
1475 RTMPZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability));
1476 RTMPZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo));
1477 RTMPZeroMemory(&pAd->CommonCfg.NewExtChanOffset, sizeof(pAd->CommonCfg.NewExtChanOffset));
1478 RTMPZeroMemory(&pAd->CommonCfg.DesiredHtPhy, sizeof(pAd->CommonCfg.DesiredHtPhy));
1480 if (pAd->CommonCfg.bRdg)
1482 pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 1;
1483 pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 1;
1487 pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 0;
1488 pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 0;
1491 pAd->CommonCfg.HtCapability.HtCapParm.MaxRAmpduFactor = 3;
1492 pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor = 3;
1494 DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : RxBAWinLimit = %d\n", pAd->CommonCfg.BACapability.field.RxBAWinLimit));
1496 // Mimo power save, A-MSDU size,
1497 pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable;
1498 pAd->CommonCfg.DesiredHtPhy.AmsduSize = (UCHAR)pAd->CommonCfg.BACapability.field.AmsduSize;
1499 pAd->CommonCfg.DesiredHtPhy.MimoPs = (UCHAR)pAd->CommonCfg.BACapability.field.MMPSmode;
1500 pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity;
1502 pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize;
1503 pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode;
1504 pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity;
1506 DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : AMsduSize = %d, MimoPs = %d, MpduDensity = %d, MaxRAmpduFactor = %d\n",
1507 pAd->CommonCfg.DesiredHtPhy.AmsduSize,
1508 pAd->CommonCfg.DesiredHtPhy.MimoPs,
1509 pAd->CommonCfg.DesiredHtPhy.MpduDensity,
1510 pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor));
1512 if(pHTPhyMode->HtMode == HTMODE_GF)
1514 pAd->CommonCfg.HtCapability.HtCapInfo.GF = 1;
1515 pAd->CommonCfg.DesiredHtPhy.GF = 1;
1518 pAd->CommonCfg.DesiredHtPhy.GF = 0;
1524 pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff;
1525 pAd->CommonCfg.HtCapability.MCSSet[1] = 0x00;
1529 pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff;
1530 pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff;
1534 pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff;
1535 pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff;
1536 pAd->CommonCfg.HtCapability.MCSSet[2] = 0xff;
1540 if (pAd->CommonCfg.bForty_Mhz_Intolerant && (pAd->CommonCfg.Channel <= 14) && (pHTPhyMode->BW == BW_40) )
1542 pHTPhyMode->BW = BW_20;
1543 pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant = 1;
1546 if(pHTPhyMode->BW == BW_40)
1548 pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32
1549 pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 1;
1550 if (pAd->CommonCfg.Channel <= 14)
1551 pAd->CommonCfg.HtCapability.HtCapInfo.CCKmodein40 = 1;
1553 pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 1;
1554 pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 1;
1555 pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = (pHTPhyMode->ExtOffset == EXTCHA_BELOW)? (EXTCHA_BELOW): EXTCHA_ABOVE;
1556 // Set Regsiter for extension channel position.
1557 RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value);
1558 RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBP3Value);
1559 if ((pHTPhyMode->ExtOffset == EXTCHA_BELOW))
1562 BBP3Value |= (0x20);
1563 RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value);
1565 else if ((pHTPhyMode->ExtOffset == EXTCHA_ABOVE))
1568 BBP3Value &= (~0x20);
1569 RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value);
1572 // Turn on BBP 40MHz mode now only as AP .
1573 // Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection.
1574 if ((pAd->OpMode == OPMODE_AP) || INFRA_ON(pAd) || ADHOC_ON(pAd)
1577 RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
1578 BBPValue &= (~0x18);
1580 RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
1582 RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBP3Value);
1583 pAd->CommonCfg.BBPCurrentBW = BW_40;
1588 pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 0;
1589 pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 0;
1590 pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 0;
1591 pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = EXTCHA_NONE;
1592 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
1593 // Turn on BBP 20MHz mode by request here.
1595 RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
1596 BBPValue &= (~0x18);
1597 RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
1598 pAd->CommonCfg.BBPCurrentBW = BW_20;
1602 if(pHTPhyMode->STBC == STBC_USE)
1604 pAd->CommonCfg.HtCapability.HtCapInfo.TxSTBC = 1;
1605 pAd->CommonCfg.DesiredHtPhy.TxSTBC = 1;
1606 pAd->CommonCfg.HtCapability.HtCapInfo.RxSTBC = 1;
1607 pAd->CommonCfg.DesiredHtPhy.RxSTBC = 1;
1611 pAd->CommonCfg.DesiredHtPhy.TxSTBC = 0;
1612 pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0;
1615 if(pHTPhyMode->SHORTGI == GI_400)
1617 pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 1;
1618 pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 1;
1619 pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 1;
1620 pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 1;
1624 pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 0;
1625 pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 0;
1626 pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 0;
1627 pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 0;
1630 // We support link adaptation for unsolicit MCS feedback, set to 2.
1631 pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT;
1632 pAd->CommonCfg.AddHTInfo.ControlChan = pAd->CommonCfg.Channel;
1633 // 1, the extension channel above the control channel.
1635 // EDCA parameters used for AP's own transmission
1636 if (pAd->CommonCfg.APEdcaParm.bValid == FALSE)
1638 pAd->CommonCfg.APEdcaParm.bValid = TRUE;
1639 pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3;
1640 pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7;
1641 pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1;
1642 pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1;
1644 pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4;
1645 pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4;
1646 pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3;
1647 pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2;
1649 pAd->CommonCfg.APEdcaParm.Cwmax[0] = 6;
1650 pAd->CommonCfg.APEdcaParm.Cwmax[1] = 10;
1651 pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4;
1652 pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3;
1654 pAd->CommonCfg.APEdcaParm.Txop[0] = 0;
1655 pAd->CommonCfg.APEdcaParm.Txop[1] = 0;
1656 pAd->CommonCfg.APEdcaParm.Txop[2] = 94;
1657 pAd->CommonCfg.APEdcaParm.Txop[3] = 47;
1659 AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);
1662 #ifdef CONFIG_STA_SUPPORT
1663 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1665 RTMPSetIndividualHT(pAd, 0);
1667 #endif // CONFIG_STA_SUPPORT //
1672 ========================================================================
1673 Routine Description:
1674 Caller ensures we has 802.11n support.
1675 Calls at setting HT from AP/STASetinformation
1678 pAd - Pointer to our adapter
1681 ========================================================================
1683 VOID RTMPSetIndividualHT(
1684 IN PRTMP_ADAPTER pAd,
1687 PRT_HT_PHY_INFO pDesired_ht_phy = NULL;
1688 UCHAR TxStream = pAd->CommonCfg.TxStream;
1689 UCHAR DesiredMcs = MCS_AUTO;
1694 #ifdef CONFIG_STA_SUPPORT
1695 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1697 pDesired_ht_phy = &pAd->StaCfg.DesiredHtPhyInfo;
1698 DesiredMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS;
1699 //pAd->StaCfg.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE;
1702 #endif // CONFIG_STA_SUPPORT //
1705 if (pDesired_ht_phy == NULL)
1707 DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetIndividualHT: invalid apidx(%d)\n", apidx));
1710 RTMPZeroMemory(pDesired_ht_phy, sizeof(RT_HT_PHY_INFO));
1712 DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetIndividualHT : Desired MCS = %d\n", DesiredMcs));
1713 // Check the validity of MCS
1714 if ((TxStream == 1) && ((DesiredMcs >= MCS_8) && (DesiredMcs <= MCS_15)))
1716 DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS(%d) is invalid in 1S, reset it as MCS_7\n", DesiredMcs));
1720 if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_20) && (DesiredMcs == MCS_32))
1722 DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS_32 is only supported in 40-MHz, reset it as MCS_0\n"));
1726 pDesired_ht_phy->bHtEnable = TRUE;
1728 // Decide desired Tx MCS
1732 if (DesiredMcs == MCS_AUTO)
1734 pDesired_ht_phy->MCSSet[0]= 0xff;
1735 pDesired_ht_phy->MCSSet[1]= 0x00;
1737 else if (DesiredMcs <= MCS_7)
1739 pDesired_ht_phy->MCSSet[0]= 1<<DesiredMcs;
1740 pDesired_ht_phy->MCSSet[1]= 0x00;
1745 if (DesiredMcs == MCS_AUTO)
1747 pDesired_ht_phy->MCSSet[0]= 0xff;
1748 pDesired_ht_phy->MCSSet[1]= 0xff;
1750 else if (DesiredMcs <= MCS_15)
1754 mode = DesiredMcs / 8;
1756 pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8));
1761 if (DesiredMcs == MCS_AUTO)
1763 /* MCS0 ~ MCS23, 3 bytes */
1764 pDesired_ht_phy->MCSSet[0]= 0xff;
1765 pDesired_ht_phy->MCSSet[1]= 0xff;
1766 pDesired_ht_phy->MCSSet[2]= 0xff;
1768 else if (DesiredMcs <= MCS_23)
1772 mode = DesiredMcs / 8;
1774 pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8));
1779 if(pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_40)
1781 if (DesiredMcs == MCS_AUTO || DesiredMcs == MCS_32)
1782 pDesired_ht_phy->MCSSet[4] = 0x1;
1785 // update HT Rate setting
1786 if (pAd->OpMode == OPMODE_STA)
1787 MlmeUpdateHtTxRates(pAd, BSS0);
1789 MlmeUpdateHtTxRates(pAd, apidx);
1794 ========================================================================
1795 Routine Description:
1796 Update HT IE from our capability.
1799 Send all HT IE in beacon/probe rsp/assoc rsp/action frame.
1802 ========================================================================
1804 VOID RTMPUpdateHTIE(
1805 IN RT_HT_CAPABILITY *pRtHt,
1807 OUT HT_CAPABILITY_IE *pHtCapability,
1808 OUT ADD_HT_INFO_IE *pAddHtInfo)
1810 RTMPZeroMemory(pHtCapability, sizeof(HT_CAPABILITY_IE));
1811 RTMPZeroMemory(pAddHtInfo, sizeof(ADD_HT_INFO_IE));
1813 pHtCapability->HtCapInfo.ChannelWidth = pRtHt->ChannelWidth;
1814 pHtCapability->HtCapInfo.MimoPs = pRtHt->MimoPs;
1815 pHtCapability->HtCapInfo.GF = pRtHt->GF;
1816 pHtCapability->HtCapInfo.ShortGIfor20 = pRtHt->ShortGIfor20;
1817 pHtCapability->HtCapInfo.ShortGIfor40 = pRtHt->ShortGIfor40;
1818 pHtCapability->HtCapInfo.TxSTBC = pRtHt->TxSTBC;
1819 pHtCapability->HtCapInfo.RxSTBC = pRtHt->RxSTBC;
1820 pHtCapability->HtCapInfo.AMsduSize = pRtHt->AmsduSize;
1821 pHtCapability->HtCapParm.MaxRAmpduFactor = pRtHt->MaxRAmpduFactor;
1822 pHtCapability->HtCapParm.MpduDensity = pRtHt->MpduDensity;
1824 pAddHtInfo->AddHtInfo.ExtChanOffset = pRtHt->ExtChanOffset ;
1825 pAddHtInfo->AddHtInfo.RecomWidth = pRtHt->RecomWidth;
1826 pAddHtInfo->AddHtInfo2.OperaionMode = pRtHt->OperaionMode;
1827 pAddHtInfo->AddHtInfo2.NonGfPresent = pRtHt->NonGfPresent;
1828 RTMPMoveMemory(pAddHtInfo->MCSSet, /*pRtHt->MCSSet*/pMcsSet, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar.
1830 DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n"));
1832 #endif // DOT11_N_SUPPORT //
1835 ========================================================================
1837 Add Client security information into ASIC WCID table and IVEIV table.
1839 ========================================================================
1841 VOID RTMPAddWcidAttributeEntry(
1842 IN PRTMP_ADAPTER pAd,
1846 IN MAC_TABLE_ENTRY *pEntry)
1848 UINT32 WCIDAttri = 0;
1854 #ifdef CONFIG_STA_SUPPORT
1855 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1859 DBGPRINT(RT_DEBUG_ERROR, ("RTMPAddWcidAttributeEntry: The BSS-index(%d) is out of range for Infra link. \n", BssIdx));
1863 // 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists.
1864 // 2. In Infra mode, the AID:1 MUST be wcid of infra STA.
1865 // the AID:2~ assign to mesh link entry.
1871 #endif // CONFIG_STA_SUPPORT //
1874 // Update WCID attribute table
1875 offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE);
1877 #ifdef CONFIG_STA_SUPPORT
1878 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
1880 if (pEntry && pEntry->ValidAsMesh)
1881 WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;
1882 #ifdef QOS_DLS_SUPPORT
1883 else if ((pEntry) && (pEntry->ValidAsDls) &&
1884 ((CipherAlg == CIPHER_TKIP) ||
1885 (CipherAlg == CIPHER_TKIP_NO_MIC) ||
1886 (CipherAlg == CIPHER_AES) ||
1887 (CipherAlg == CIPHER_NONE)))
1888 WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;
1889 #endif // QOS_DLS_SUPPORT //
1891 WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE;
1893 #endif // CONFIG_STA_SUPPORT //
1895 RTMP_IO_WRITE32(pAd, offset, WCIDAttri);
1898 // Update IV/EIV table
1899 offset = MAC_IVEIV_TABLE_BASE + (Wcid * HW_IVEIV_ENTRY_SIZE);
1902 if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) || (CipherAlg == CIPHER_AES))
1904 // Eiv bit on. keyid always is 0 for pairwise key
1905 IVEIV = (KeyIdx <<6) | 0x20;
1909 // WEP KeyIdx is default tx key.
1910 IVEIV = (KeyIdx << 6);
1913 // For key index and ext IV bit, so only need to update the position(offset+3).
1915 RTMP_IO_WRITE8(pAd, offset+3, IVEIV);
1916 #endif // RTMP_MAC_PCI //
1918 DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg]));
1919 DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = 0x%x \n", WCIDAttri));
1924 ==========================================================================
1926 Parse encryption type
1928 pAdapter Pointer to our adapter
1929 wrq Pointer to the ioctl argument
1935 ==========================================================================
1937 PSTRING GetEncryptType(CHAR enc)
1939 if(enc == Ndis802_11WEPDisabled)
1941 if(enc == Ndis802_11WEPEnabled)
1943 if(enc == Ndis802_11Encryption2Enabled)
1945 if(enc == Ndis802_11Encryption3Enabled)
1947 if(enc == Ndis802_11Encryption4Enabled)
1953 PSTRING GetAuthMode(CHAR auth)
1955 if(auth == Ndis802_11AuthModeOpen)
1957 if(auth == Ndis802_11AuthModeShared)
1959 if(auth == Ndis802_11AuthModeAutoSwitch)
1961 if(auth == Ndis802_11AuthModeWPA)
1963 if(auth == Ndis802_11AuthModeWPAPSK)
1965 if(auth == Ndis802_11AuthModeWPANone)
1967 if(auth == Ndis802_11AuthModeWPA2)
1969 if(auth == Ndis802_11AuthModeWPA2PSK)
1971 if(auth == Ndis802_11AuthModeWPA1WPA2)
1973 if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK)
1974 return "WPA1PSKWPA2PSK";
1981 ==========================================================================
1983 Get site survey results
1985 pAdapter Pointer to our adapter
1986 wrq Pointer to the ioctl argument
1993 1.) UI needs to wait 4 seconds after issue a site survey command
1994 2.) iwpriv ra0 get_site_survey
1995 3.) UI needs to prepare at least 4096bytes to get the results
1996 ==========================================================================
1998 #define LINE_LEN (4+33+20+23+9+7+3) // Channel+SSID+Bssid+Security+Signal+WiressMode+NetworkType
1999 #ifdef CONFIG_STA_SUPPORT
2000 #endif // CONFIG_STA_SUPPORT //
2001 VOID RTMPCommSiteSurveyData(
2006 UINT Rssi_Quality = 0;
2007 NDIS_802_11_NETWORK_TYPE wireless_mode;
2008 CHAR Ssid[MAX_LEN_OF_SSID +1];
2009 STRING SecurityStr[32] = {0};
2010 NDIS_802_11_ENCRYPTION_STATUS ap_cipher = Ndis802_11EncryptionDisabled;
2011 NDIS_802_11_AUTHENTICATION_MODE ap_auth_mode = Ndis802_11AuthModeOpen;
2013 memset(Ssid, 0 ,(MAX_LEN_OF_SSID +1));
2016 sprintf(msg+strlen(msg),"%-4d", pBss->Channel);
2018 memcpy(Ssid, pBss->Ssid, pBss->SsidLen);
2019 Ssid[pBss->SsidLen] = '\0';
2020 sprintf(msg+strlen(msg),"%-33s", Ssid);
2022 sprintf(msg+strlen(msg),"%02x:%02x:%02x:%02x:%02x:%02x ",
2031 if ((Ndis802_11AuthModeWPA <= pBss->AuthMode) &&
2032 (pBss->AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK))
2034 if (pBss->AuthModeAux == Ndis802_11AuthModeWPANone)
2036 ap_auth_mode = pBss->AuthMode;
2037 if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)
2038 ap_cipher = pBss->WPA.PairCipher;
2040 ap_cipher = Ndis802_11Encryption4Enabled;
2042 else if (pBss->AuthModeAux == Ndis802_11AuthModeOpen)
2044 ap_auth_mode = pBss->AuthMode;
2045 if ((ap_auth_mode == Ndis802_11AuthModeWPA) ||
2046 (ap_auth_mode == Ndis802_11AuthModeWPAPSK))
2048 if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)
2049 ap_cipher = pBss->WPA.PairCipher;
2051 ap_cipher = Ndis802_11Encryption4Enabled;
2053 else if ((ap_auth_mode == Ndis802_11AuthModeWPA2) ||
2054 (ap_auth_mode == Ndis802_11AuthModeWPA2PSK))
2056 if (pBss->WPA2.PairCipherAux == Ndis802_11WEPDisabled)
2057 ap_cipher = pBss->WPA2.PairCipher;
2059 ap_cipher = Ndis802_11Encryption4Enabled;
2062 else if ((pBss->AuthMode == Ndis802_11AuthModeWPAPSK) ||
2063 (pBss->AuthMode == Ndis802_11AuthModeWPA2PSK))
2065 if ((pBss->AuthModeAux == Ndis802_11AuthModeWPAPSK) ||
2066 (pBss->AuthModeAux == Ndis802_11AuthModeWPA2PSK))
2067 ap_auth_mode = Ndis802_11AuthModeWPA1PSKWPA2PSK;
2069 ap_auth_mode = pBss->AuthMode;
2071 if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher)
2072 ap_cipher = Ndis802_11Encryption4Enabled;
2073 else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) &&
2074 (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux))
2075 ap_cipher = Ndis802_11Encryption4Enabled;
2076 else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) &&
2077 (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) &&
2078 (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled))
2079 ap_cipher = Ndis802_11Encryption4Enabled;
2080 else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) &&
2081 (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) &&
2082 (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled))
2083 ap_cipher = pBss->WPA.PairCipher;
2085 else if ((pBss->AuthMode == Ndis802_11AuthModeWPA) ||
2086 (pBss->AuthMode == Ndis802_11AuthModeWPA2))
2088 if ((pBss->AuthModeAux == Ndis802_11AuthModeWPA) ||
2089 (pBss->AuthMode == Ndis802_11AuthModeWPA2))
2090 ap_auth_mode = Ndis802_11AuthModeWPA1WPA2;
2092 ap_auth_mode = pBss->AuthMode;
2094 if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher)
2095 ap_cipher = Ndis802_11Encryption4Enabled;
2096 else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) &&
2097 (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux))
2098 ap_cipher = Ndis802_11Encryption4Enabled;
2099 else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) &&
2100 (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) &&
2101 (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled))
2102 ap_cipher = Ndis802_11Encryption4Enabled;
2103 else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) &&
2104 (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) &&
2105 (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled))
2106 ap_cipher = pBss->WPA.PairCipher;
2109 sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher));
2113 ap_auth_mode = pBss->AuthMode;
2114 ap_cipher = pBss->WepStatus;
2115 if (ap_cipher == Ndis802_11WEPDisabled)
2116 sprintf(SecurityStr, "NONE");
2117 else if (ap_cipher == Ndis802_11WEPEnabled)
2118 sprintf(SecurityStr, "WEP");
2120 sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher));
2123 sprintf(msg+strlen(msg), "%-23s", SecurityStr);
2126 Rssi = (INT)pBss->Rssi;
2129 else if (Rssi >= -80) // between -50 ~ -80dbm
2130 Rssi_Quality = (UINT)(24 + ((Rssi + 80) * 26)/10);
2131 else if (Rssi >= -90) // between -80 ~ -90dbm
2132 Rssi_Quality = (UINT)(((Rssi + 90) * 26)/10);
2135 sprintf(msg+strlen(msg),"%-9d", Rssi_Quality);
2137 wireless_mode = NetworkTypeInUseSanity(pBss);
2138 if (wireless_mode == Ndis802_11FH ||
2139 wireless_mode == Ndis802_11DS)
2140 sprintf(msg+strlen(msg),"%-7s", "11b");
2141 else if (wireless_mode == Ndis802_11OFDM5)
2142 sprintf(msg+strlen(msg),"%-7s", "11a");
2143 else if (wireless_mode == Ndis802_11OFDM5_N)
2144 sprintf(msg+strlen(msg),"%-7s", "11a/n");
2145 else if (wireless_mode == Ndis802_11OFDM24)
2146 sprintf(msg+strlen(msg),"%-7s", "11b/g");
2147 else if (wireless_mode == Ndis802_11OFDM24_N)
2148 sprintf(msg+strlen(msg),"%-7s", "11b/g/n");
2150 sprintf(msg+strlen(msg),"%-7s", "unknow");
2152 if (pBss->BssType == BSS_ADHOC)
2153 sprintf(msg+strlen(msg),"%-3s", " Ad");
2155 sprintf(msg+strlen(msg),"%-3s", " In");
2157 sprintf(msg+strlen(msg),"\n");
2162 VOID RTMPIoctlGetSiteSurvey(
2163 IN PRTMP_ADAPTER pAdapter,
2164 IN struct iwreq *wrq)
2170 INT max_len = LINE_LEN;
2173 #ifdef CONFIG_STA_SUPPORT
2174 #endif // CONFIG_STA_SUPPORT //
2176 os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*max_len));
2180 DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n"));
2184 memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*max_len );
2185 sprintf(msg,"%s","\n");
2186 sprintf(msg+strlen(msg),"%-4s%-33s%-20s%-23s%-9s%-7s%-3s\n",
2187 "Ch", "SSID", "BSSID", "Security", "Siganl(%)", "W-Mode", " NT");
2189 #ifdef CONFIG_STA_SUPPORT
2191 #endif // CONFIG_STA_SUPPORT //
2194 #ifdef CONFIG_STA_SUPPORT
2195 pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE;
2196 while ((ScanRunning(pAdapter) == TRUE) && (WaitCnt++ < 200))
2198 #endif // CONFIG_STA_SUPPORT //
2200 for(i=0; i<pAdapter->ScanTab.BssNr ;i++)
2202 pBss = &pAdapter->ScanTab.BssEntry[i];
2204 if( pBss->Channel==0)
2207 if((strlen(msg)+max_len ) >= IW_SCAN_MAX_DATA)
2211 RTMPCommSiteSurveyData(msg, pBss);
2213 #ifdef CONFIG_STA_SUPPORT
2215 #endif // CONFIG_STA_SUPPORT //
2218 #ifdef CONFIG_STA_SUPPORT
2219 pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE;
2220 #endif // CONFIG_STA_SUPPORT //
2221 wrq->u.data.length = strlen(msg);
2222 Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
2224 DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - wrq->u.data.length = %d\n", wrq->u.data.length));
2225 os_free_mem(NULL, (PUCHAR)msg);
2228 #define MAC_LINE_LEN (14+4+4+10+10+10+6+6) // Addr+aid+psm+datatime+rxbyte+txbyte+current tx rate+last tx rate
2229 VOID RTMPIoctlGetMacTable(
2230 IN PRTMP_ADAPTER pAd,
2231 IN struct iwreq *wrq)
2234 RT_802_11_MAC_TABLE MacTab;
2238 for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++)
2240 if (pAd->MacTab.Content[i].ValidAsCLI && (pAd->MacTab.Content[i].Sst == SST_ASSOC))
2242 COPY_MAC_ADDR(MacTab.Entry[MacTab.Num].Addr, &pAd->MacTab.Content[i].Addr);
2243 MacTab.Entry[MacTab.Num].Aid = (UCHAR)pAd->MacTab.Content[i].Aid;
2244 MacTab.Entry[MacTab.Num].Psm = pAd->MacTab.Content[i].PsMode;
2245 #ifdef DOT11_N_SUPPORT
2246 MacTab.Entry[MacTab.Num].MimoPs = pAd->MacTab.Content[i].MmpsMode;
2247 #endif // DOT11_N_SUPPORT //
2249 // Fill in RSSI per entry
2250 MacTab.Entry[MacTab.Num].AvgRssi0 = pAd->MacTab.Content[i].RssiSample.AvgRssi0;
2251 MacTab.Entry[MacTab.Num].AvgRssi1 = pAd->MacTab.Content[i].RssiSample.AvgRssi1;
2252 MacTab.Entry[MacTab.Num].AvgRssi2 = pAd->MacTab.Content[i].RssiSample.AvgRssi2;
2254 // the connected time per entry
2255 MacTab.Entry[MacTab.Num].ConnectedTime = pAd->MacTab.Content[i].StaConnectTime;
2256 MacTab.Entry[MacTab.Num].TxRate.field.MCS = pAd->MacTab.Content[i].HTPhyMode.field.MCS;
2257 MacTab.Entry[MacTab.Num].TxRate.field.BW = pAd->MacTab.Content[i].HTPhyMode.field.BW;
2258 MacTab.Entry[MacTab.Num].TxRate.field.ShortGI = pAd->MacTab.Content[i].HTPhyMode.field.ShortGI;
2259 MacTab.Entry[MacTab.Num].TxRate.field.STBC = pAd->MacTab.Content[i].HTPhyMode.field.STBC;
2260 MacTab.Entry[MacTab.Num].TxRate.field.rsv = pAd->MacTab.Content[i].HTPhyMode.field.rsv;
2261 MacTab.Entry[MacTab.Num].TxRate.field.MODE = pAd->MacTab.Content[i].HTPhyMode.field.MODE;
2262 MacTab.Entry[MacTab.Num].TxRate.word = pAd->MacTab.Content[i].HTPhyMode.word;
2267 wrq->u.data.length = sizeof(RT_802_11_MAC_TABLE);
2268 if (copy_to_user(wrq->u.data.pointer, &MacTab, wrq->u.data.length))
2270 DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __FUNCTION__));
2273 msg = kmalloc(sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN), MEM_ALLOC_FLAG);
2276 DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __FUNCTION__));
2279 memset(msg, 0 ,MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN );
2280 sprintf(msg,"%s","\n");
2281 sprintf(msg+strlen(msg),"%-14s%-4s%-4s%-10s%-10s%-10s%-6s%-6s\n",
2282 "MAC", "AID", "PSM", "LDT", "RxB", "TxB","CTxR", "LTxR");
2284 for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++)
2286 PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i];
2287 if (pEntry->ValidAsCLI && (pEntry->Sst == SST_ASSOC))
2289 if((strlen(msg)+MAC_LINE_LEN ) >= (MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN) )
2291 sprintf(msg+strlen(msg),"%02x%02x%02x%02x%02x%02x ",
2292 pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2],
2293 pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]);
2294 sprintf(msg+strlen(msg),"%-4d", (int)pEntry->Aid);
2295 sprintf(msg+strlen(msg),"%-4d", (int)pEntry->PsMode);
2296 sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.LastDataPacketTime*/); // ToDo
2297 sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalRxByteCount*/); // ToDo
2298 sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalTxByteCount*/); // ToDo
2299 sprintf(msg+strlen(msg),"%-6d",RateIdToMbps[pAd->MacTab.Content[i].CurrTxRate]);
2300 sprintf(msg+strlen(msg),"%-6d\n",0/*RateIdToMbps[pAd->MacTab.Content[i].LastTxRate]*/); // ToDo
2303 // for compatible with old API just do the printk to console
2304 //wrq->u.data.length = strlen(msg);
2305 //if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length))
2307 DBGPRINT(RT_DEBUG_TRACE, ("%s", msg));
2314 #ifdef DOT11_N_SUPPORT
2315 INT Set_BASetup_Proc(
2316 IN PRTMP_ADAPTER pAd,
2321 STRING sepValue[] = ":", DASH = '-';
2323 MAC_TABLE_ENTRY *pEntry;
2326 The BASetup inupt string format should be xx:xx:xx:xx:xx:xx-d,
2327 =>The six 2 digit hex-decimal number previous are the Mac address,
2328 =>The seventh decimal number is the tid value.
2330 //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg));
2332 if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format.
2335 token = strchr(arg, DASH);
2336 if ((token != NULL) && (strlen(token)>1))
2338 tid = (UCHAR) simple_strtol((token+1), 0, 10);
2343 for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
2345 if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
2347 AtoH(token, (&mac[i]), 1);
2352 DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x\n",
2353 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid));
2355 pEntry = MacTableLookup(pAd, (PUCHAR) mac);
2358 DBGPRINT(RT_DEBUG_OFF, ("\nSetup BA Session: Tid = %d\n", tid));
2359 BAOriSessionSetUp(pAd, pEntry, tid, 0, 100, TRUE);
2369 INT Set_BADecline_Proc(
2370 IN PRTMP_ADAPTER pAd,
2375 bBADecline = simple_strtol(arg, 0, 10);
2377 if (bBADecline == 0)
2379 pAd->CommonCfg.bBADecline = FALSE;
2381 else if (bBADecline == 1)
2383 pAd->CommonCfg.bBADecline = TRUE;
2387 return FALSE; //Invalid argument
2390 DBGPRINT(RT_DEBUG_TRACE, ("Set_BADecline_Proc::(BADecline=%d)\n", pAd->CommonCfg.bBADecline));
2395 INT Set_BAOriTearDown_Proc(
2396 IN PRTMP_ADAPTER pAd,
2401 STRING sepValue[] = ":", DASH = '-';
2403 MAC_TABLE_ENTRY *pEntry;
2405 //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg));
2407 The BAOriTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d,
2408 =>The six 2 digit hex-decimal number previous are the Mac address,
2409 =>The seventh decimal number is the tid value.
2411 if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format.
2414 token = strchr(arg, DASH);
2415 if ((token != NULL) && (strlen(token)>1))
2417 tid = simple_strtol((token+1), 0, 10);
2418 if (tid > NUM_OF_TID)
2422 for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
2424 if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
2426 AtoH(token, (&mac[i]), 1);
2431 DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x",
2432 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid));
2434 pEntry = MacTableLookup(pAd, (PUCHAR) mac);
2437 DBGPRINT(RT_DEBUG_OFF, ("\nTear down Ori BA Session: Tid = %d\n", tid));
2438 BAOriSessionTearDown(pAd, pEntry->Aid, tid, FALSE, TRUE);
2448 INT Set_BARecTearDown_Proc(
2449 IN PRTMP_ADAPTER pAd,
2454 STRING sepValue[] = ":", DASH = '-';
2456 MAC_TABLE_ENTRY *pEntry;
2458 //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg));
2460 The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d,
2461 =>The six 2 digit hex-decimal number previous are the Mac address,
2462 =>The seventh decimal number is the tid value.
2464 if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format.
2467 token = strchr(arg, DASH);
2468 if ((token != NULL) && (strlen(token)>1))
2470 tid = simple_strtol((token+1), 0, 10);
2471 if (tid > NUM_OF_TID)
2475 for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
2477 if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
2479 AtoH(token, (&mac[i]), 1);
2484 DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x",
2485 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid));
2487 pEntry = MacTableLookup(pAd, (PUCHAR) mac);
2490 DBGPRINT(RT_DEBUG_OFF, ("\nTear down Rec BA Session: Tid = %d\n", tid));
2491 BARecSessionTearDown(pAd, pEntry->Aid, tid, FALSE);
2502 IN PRTMP_ADAPTER pAd,
2507 HtBw = simple_strtol(arg, 0, 10);
2509 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40;
2510 else if (HtBw == BW_20)
2511 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
2513 return FALSE; //Invalid argument
2517 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtBw_Proc::(HtBw=%d)\n", pAd->CommonCfg.RegTransmitSetting.field.BW));
2523 IN PRTMP_ADAPTER pAd,
2526 ULONG HtMcs, Mcs_tmp;
2527 #ifdef CONFIG_STA_SUPPORT
2528 BOOLEAN bAutoRate = FALSE;
2529 #endif // CONFIG_STA_SUPPORT //
2531 Mcs_tmp = simple_strtol(arg, 0, 10);
2533 if (Mcs_tmp <= 15 || Mcs_tmp == 32)
2538 #ifdef CONFIG_STA_SUPPORT
2539 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
2541 pAd->StaCfg.DesiredTransmitSetting.field.MCS = HtMcs;
2542 pAd->StaCfg.bAutoTxRateSwitch = (HtMcs == MCS_AUTO) ? TRUE:FALSE;
2543 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMcs_Proc::(HtMcs=%d, bAutoTxRateSwitch = %d)\n",
2544 pAd->StaCfg.DesiredTransmitSetting.field.MCS, pAd->StaCfg.bAutoTxRateSwitch));
2546 if ((pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) ||
2547 (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE < MODE_HTMIX))
2549 if ((pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) &&
2550 (HtMcs >= 0 && HtMcs <= 3) &&
2551 (pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode == FIXED_TXMODE_CCK))
2553 RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[HtMcs] * 1000000));
2555 else if ((pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) &&
2556 (HtMcs >= 0 && HtMcs <= 7) &&
2557 (pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode == FIXED_TXMODE_OFDM))
2559 RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[HtMcs+4] * 1000000));
2566 pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
2567 RTMPSetDesiredRates(pAd, -1);
2569 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMcs_Proc::(FixedTxMode=%d)\n",pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode));
2574 #endif // CONFIG_STA_SUPPORT //
2582 IN PRTMP_ADAPTER pAd,
2587 HtGi = simple_strtol(arg, 0, 10);
2589 if ( HtGi == GI_400)
2590 pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400;
2591 else if ( HtGi == GI_800 )
2592 pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800;
2594 return FALSE; //Invalid argument
2598 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtGi_Proc::(ShortGI=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.ShortGI));
2604 INT Set_HtTxBASize_Proc(
2605 IN PRTMP_ADAPTER pAd,
2610 Size = simple_strtol(arg, 0, 10);
2612 if (Size <=0 || Size >=64)
2616 pAd->CommonCfg.TxBASize = Size-1;
2617 DBGPRINT(RT_DEBUG_ERROR, ("Set_HtTxBASize ::(TxBASize= %d)\n", Size));
2622 INT Set_HtDisallowTKIP_Proc(
2623 IN PRTMP_ADAPTER pAd,
2628 Value = simple_strtol(arg, 0, 10);
2632 pAd->CommonCfg.HT_DisallowTKIP = TRUE;
2636 pAd->CommonCfg.HT_DisallowTKIP = FALSE;
2639 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtDisallowTKIP_Proc ::%s\n",
2640 (pAd->CommonCfg.HT_DisallowTKIP == TRUE) ? "enabled" : "disabled"));
2645 INT Set_HtOpMode_Proc(
2646 IN PRTMP_ADAPTER pAd,
2652 Value = simple_strtol(arg, 0, 10);
2654 if (Value == HTMODE_GF)
2655 pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF;
2656 else if ( Value == HTMODE_MM )
2657 pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM;
2659 return FALSE; //Invalid argument
2663 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtOpMode_Proc::(HtOpMode=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.HTMODE));
2669 INT Set_HtStbc_Proc(
2670 IN PRTMP_ADAPTER pAd,
2676 Value = simple_strtol(arg, 0, 10);
2678 if (Value == STBC_USE)
2679 pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE;
2680 else if ( Value == STBC_NONE )
2681 pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE;
2683 return FALSE; //Invalid argument
2687 DBGPRINT(RT_DEBUG_TRACE, ("Set_Stbc_Proc::(HtStbc=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.STBC));
2693 IN PRTMP_ADAPTER pAd,
2699 Value = simple_strtol(arg, 0, 10);
2701 pAd->HTCEnable = FALSE;
2702 else if ( Value ==1 )
2703 pAd->HTCEnable = TRUE;
2705 return FALSE; //Invalid argument
2707 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtHtc_Proc::(HtHtc=%d)\n",pAd->HTCEnable));
2712 INT Set_HtExtcha_Proc(
2713 IN PRTMP_ADAPTER pAd,
2719 Value = simple_strtol(arg, 0, 10);
2722 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
2723 else if ( Value ==1 )
2724 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
2726 return FALSE; //Invalid argument
2730 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtExtcha_Proc::(HtExtcha=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.EXTCHA));
2735 INT Set_HtMpduDensity_Proc(
2736 IN PRTMP_ADAPTER pAd,
2741 Value = simple_strtol(arg, 0, 10);
2743 if (Value <=7 && Value >= 0)
2744 pAd->CommonCfg.BACapability.field.MpduDensity = Value;
2746 pAd->CommonCfg.BACapability.field.MpduDensity = 4;
2750 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMpduDensity_Proc::(HtMpduDensity=%d)\n",pAd->CommonCfg.BACapability.field.MpduDensity));
2755 INT Set_HtBaWinSize_Proc(
2756 IN PRTMP_ADAPTER pAd,
2761 Value = simple_strtol(arg, 0, 10);
2764 if (Value >=1 && Value <= 64)
2766 pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value;
2767 pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value;
2771 pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64;
2772 pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64;
2777 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtBaWinSize_Proc::(HtBaWinSize=%d)\n",pAd->CommonCfg.BACapability.field.RxBAWinLimit));
2783 IN PRTMP_ADAPTER pAd,
2788 Value = simple_strtol(arg, 0, 10);
2791 pAd->CommonCfg.bRdg = FALSE;
2792 else if ( Value ==1 )
2794 pAd->HTCEnable = TRUE;
2795 pAd->CommonCfg.bRdg = TRUE;
2798 return FALSE; //Invalid argument
2802 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtRdg_Proc::(HtRdg=%d)\n",pAd->CommonCfg.bRdg));
2807 INT Set_HtLinkAdapt_Proc(
2808 IN PRTMP_ADAPTER pAd,
2813 Value = simple_strtol(arg, 0, 10);
2815 pAd->bLinkAdapt = FALSE;
2816 else if ( Value ==1 )
2818 pAd->HTCEnable = TRUE;
2819 pAd->bLinkAdapt = TRUE;
2822 return FALSE; //Invalid argument
2824 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtLinkAdapt_Proc::(HtLinkAdapt=%d)\n",pAd->bLinkAdapt));
2829 INT Set_HtAmsdu_Proc(
2830 IN PRTMP_ADAPTER pAd,
2835 Value = simple_strtol(arg, 0, 10);
2837 pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE;
2838 else if ( Value == 1 )
2839 pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE;
2841 return FALSE; //Invalid argument
2845 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAmsdu_Proc::(HtAmsdu=%d)\n",pAd->CommonCfg.BACapability.field.AmsduEnable));
2850 INT Set_HtAutoBa_Proc(
2851 IN PRTMP_ADAPTER pAd,
2856 Value = simple_strtol(arg, 0, 10);
2859 pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
2860 pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE;
2862 else if (Value == 1)
2864 pAd->CommonCfg.BACapability.field.AutoBA = TRUE;
2865 pAd->CommonCfg.BACapability.field.Policy = IMMED_BA;
2868 return FALSE; //Invalid argument
2870 pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA;
2871 pAd->CommonCfg.REGBACapability.field.Policy = pAd->CommonCfg.BACapability.field.Policy;
2874 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAutoBa_Proc::(HtAutoBa=%d)\n",pAd->CommonCfg.BACapability.field.AutoBA));
2880 INT Set_HtProtect_Proc(
2881 IN PRTMP_ADAPTER pAd,
2886 Value = simple_strtol(arg, 0, 10);
2888 pAd->CommonCfg.bHTProtect = FALSE;
2889 else if (Value == 1)
2890 pAd->CommonCfg.bHTProtect = TRUE;
2892 return FALSE; //Invalid argument
2894 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtProtect_Proc::(HtProtect=%d)\n",pAd->CommonCfg.bHTProtect));
2899 INT Set_SendPSMPAction_Proc(
2900 IN PRTMP_ADAPTER pAd,
2905 STRING sepValue[] = ":", DASH = '-';
2907 MAC_TABLE_ENTRY *pEntry;
2909 //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg));
2911 The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d,
2912 =>The six 2 digit hex-decimal number previous are the Mac address,
2913 =>The seventh decimal number is the mode value.
2915 if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and mode value in decimal format.
2918 token = strchr(arg, DASH);
2919 if ((token != NULL) && (strlen(token)>1))
2921 mode = simple_strtol((token+1), 0, 10);
2922 if (mode > MMPS_ENABLE)
2926 for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
2928 if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
2930 AtoH(token, (&mac[i]), 1);
2935 DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x",
2936 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], mode));
2938 pEntry = MacTableLookup(pAd, mac);
2941 DBGPRINT(RT_DEBUG_OFF, ("\nSendPSMPAction MIPS mode = %d\n", mode));
2942 SendPSMPAction(pAd, pEntry->Aid, mode);
2953 INT Set_HtMIMOPSmode_Proc(
2954 IN PRTMP_ADAPTER pAd,
2959 Value = simple_strtol(arg, 0, 10);
2961 if (Value <=3 && Value >= 0)
2962 pAd->CommonCfg.BACapability.field.MMPSmode = Value;
2964 pAd->CommonCfg.BACapability.field.MMPSmode = 3;
2968 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMIMOPSmode_Proc::(MIMOPS mode=%d)\n",pAd->CommonCfg.BACapability.field.MMPSmode));
2974 INT Set_ForceShortGI_Proc(
2975 IN PRTMP_ADAPTER pAd,
2980 Value = simple_strtol(arg, 0, 10);
2982 pAd->WIFItestbed.bShortGI = FALSE;
2983 else if (Value == 1)
2984 pAd->WIFItestbed.bShortGI = TRUE;
2986 return FALSE; //Invalid argument
2990 DBGPRINT(RT_DEBUG_TRACE, ("Set_ForceShortGI_Proc::(ForceShortGI=%d)\n", pAd->WIFItestbed.bShortGI));
2997 INT Set_ForceGF_Proc(
2998 IN PRTMP_ADAPTER pAd,
3003 Value = simple_strtol(arg, 0, 10);
3005 pAd->WIFItestbed.bGreenField = FALSE;
3006 else if (Value == 1)
3007 pAd->WIFItestbed.bGreenField = TRUE;
3009 return FALSE; //Invalid argument
3013 DBGPRINT(RT_DEBUG_TRACE, ("Set_ForceGF_Proc::(ForceGF=%d)\n", pAd->WIFItestbed.bGreenField));
3018 INT Set_HtMimoPs_Proc(
3019 IN PRTMP_ADAPTER pAd,
3024 Value = simple_strtol(arg, 0, 10);
3026 pAd->CommonCfg.bMIMOPSEnable = FALSE;
3027 else if (Value == 1)
3028 pAd->CommonCfg.bMIMOPSEnable = TRUE;
3030 return FALSE; //Invalid argument
3032 DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMimoPs_Proc::(HtMimoPs=%d)\n",pAd->CommonCfg.bMIMOPSEnable));
3036 #endif // DOT11_N_SUPPORT //
3039 #ifdef DOT11_N_SUPPORT
3041 IN PRTMP_ADAPTER pAd)
3043 OID_SET_HT_PHYMODE SetHT;
3045 if (pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED)
3048 SetHT.PhyMode = pAd->CommonCfg.PhyMode;
3049 SetHT.TransmitNo = ((UCHAR)pAd->Antenna.field.TxPath);
3050 SetHT.HtMode = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.HTMODE;
3051 SetHT.ExtOffset = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.EXTCHA;
3052 SetHT.MCS = MCS_AUTO;
3053 SetHT.BW = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.BW;
3054 SetHT.STBC = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.STBC;
3055 SetHT.SHORTGI = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.ShortGI;
3057 RTMPSetHT(pAd, &SetHT);
3061 #endif // DOT11_N_SUPPORT //
3063 INT Set_FixedTxMode_Proc(
3064 IN PRTMP_ADAPTER pAd,
3067 UCHAR fix_tx_mode = FIXED_TXMODE_HT;
3069 if (strcmp(arg, "OFDM") == 0 || strcmp(arg, "ofdm") == 0)
3071 fix_tx_mode = FIXED_TXMODE_OFDM;
3073 else if (strcmp(arg, "CCK") == 0 || strcmp(arg, "cck") == 0)
3075 fix_tx_mode = FIXED_TXMODE_CCK;
3078 #ifdef CONFIG_STA_SUPPORT
3079 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3080 pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode;
3081 #endif // CONFIG_STA_SUPPORT //
3083 DBGPRINT(RT_DEBUG_TRACE, ("Set_FixedTxMode_Proc::(FixedTxMode=%d)\n", fix_tx_mode));
3088 #ifdef CONFIG_APSTA_MIXED_SUPPORT
3089 INT Set_OpMode_Proc(
3090 IN PRTMP_ADAPTER pAd,
3095 Value = simple_strtol(arg, 0, 10);
3098 if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE))
3099 #endif // RTMP_MAC_PCI //
3101 DBGPRINT(RT_DEBUG_ERROR, ("Can not switch operate mode on interface up !! \n"));
3106 pAd->OpMode = OPMODE_STA;
3107 else if (Value == 1)
3108 pAd->OpMode = OPMODE_AP;
3110 return FALSE; //Invalid argument
3112 DBGPRINT(RT_DEBUG_TRACE, ("Set_OpMode_Proc::(OpMode=%s)\n", pAd->OpMode == 1 ? "AP Mode" : "STA Mode"));
3116 #endif // CONFIG_APSTA_MIXED_SUPPORT //
3120 INT Set_LongRetryLimit_Proc(
3121 IN PRTMP_ADAPTER pAdapter,
3124 TX_RTY_CFG_STRUC tx_rty_cfg;
3125 UCHAR LongRetryLimit = (UCHAR)simple_strtol(arg, 0, 10);
3127 RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word);
3128 tx_rty_cfg.field.LongRtyLimit = LongRetryLimit;
3129 RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word);
3130 DBGPRINT(RT_DEBUG_TRACE, ("IF Set_LongRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word));
3134 INT Set_ShortRetryLimit_Proc(
3135 IN PRTMP_ADAPTER pAdapter,
3138 TX_RTY_CFG_STRUC tx_rty_cfg;
3139 UCHAR ShortRetryLimit = (UCHAR)simple_strtol(arg, 0, 10);
3141 RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word);
3142 tx_rty_cfg.field.ShortRtyLimit = ShortRetryLimit;
3143 RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word);
3144 DBGPRINT(RT_DEBUG_TRACE, ("IF Set_ShortRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word));
3149 /////////////////////////////////////////////////////////////////////////
3150 PSTRING RTMPGetRalinkAuthModeStr(
3151 IN NDIS_802_11_AUTHENTICATION_MODE authMode)
3155 case Ndis802_11AuthModeOpen:
3157 case Ndis802_11AuthModeWPAPSK:
3159 case Ndis802_11AuthModeShared:
3161 case Ndis802_11AuthModeWPA:
3163 case Ndis802_11AuthModeWPA2:
3165 case Ndis802_11AuthModeWPA2PSK:
3167 case Ndis802_11AuthModeWPA1PSKWPA2PSK:
3168 return "WPAPSKWPA2PSK";
3169 case Ndis802_11AuthModeWPA1WPA2:
3171 case Ndis802_11AuthModeWPANone:
3178 PSTRING RTMPGetRalinkEncryModeStr(
3179 IN USHORT encryMode)
3183 case Ndis802_11WEPDisabled:
3185 case Ndis802_11WEPEnabled:
3187 case Ndis802_11Encryption2Enabled:
3189 case Ndis802_11Encryption3Enabled:
3191 case Ndis802_11Encryption4Enabled:
3198 INT RTMPShowCfgValue(
3199 IN PRTMP_ADAPTER pAd,
3205 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++)
3207 if (!strcmp(pName, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name))
3209 if(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->show_proc(pAd, pBuf))
3211 break; //Exit for loop.
3215 if(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name == NULL)
3217 sprintf(pBuf, "\n");
3218 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++)
3219 sprintf(pBuf, "%s%s\n", pBuf, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name);
3226 IN PRTMP_ADAPTER pAd,
3230 #ifdef CONFIG_STA_SUPPORT
3231 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3232 sprintf(pBuf, "\t%s", pAd->CommonCfg.Ssid);
3233 #endif // CONFIG_STA_SUPPORT //
3237 INT Show_WirelessMode_Proc(
3238 IN PRTMP_ADAPTER pAd,
3241 switch(pAd->CommonCfg.PhyMode)
3243 case PHY_11BG_MIXED:
3244 sprintf(pBuf, "\t11B/G");
3247 sprintf(pBuf, "\t11B");
3250 sprintf(pBuf, "\t11A");
3252 case PHY_11ABG_MIXED:
3253 sprintf(pBuf, "\t11A/B/G");
3256 sprintf(pBuf, "\t11G");
3258 #ifdef DOT11_N_SUPPORT
3259 case PHY_11ABGN_MIXED:
3260 sprintf(pBuf, "\t11A/B/G/N");
3263 sprintf(pBuf, "\t11N only with 2.4G");
3265 case PHY_11GN_MIXED:
3266 sprintf(pBuf, "\t11G/N");
3268 case PHY_11AN_MIXED:
3269 sprintf(pBuf, "\t11A/N");
3271 case PHY_11BGN_MIXED:
3272 sprintf(pBuf, "\t11B/G/N");
3274 case PHY_11AGN_MIXED:
3275 sprintf(pBuf, "\t11A/G/N");
3278 sprintf(pBuf, "\t11N only with 5G");
3280 #endif // DOT11_N_SUPPORT //
3282 sprintf(pBuf, "\tUnknow Value(%d)", pAd->CommonCfg.PhyMode);
3289 INT Show_TxBurst_Proc(
3290 IN PRTMP_ADAPTER pAd,
3293 sprintf(pBuf, "\t%s", pAd->CommonCfg.bEnableTxBurst ? "TRUE":"FALSE");
3297 INT Show_TxPreamble_Proc(
3298 IN PRTMP_ADAPTER pAd,
3301 switch(pAd->CommonCfg.TxPreamble)
3303 case Rt802_11PreambleShort:
3304 sprintf(pBuf, "\tShort");
3306 case Rt802_11PreambleLong:
3307 sprintf(pBuf, "\tLong");
3309 case Rt802_11PreambleAuto:
3310 sprintf(pBuf, "\tAuto");
3313 sprintf(pBuf, "\tUnknow Value(%lu)", pAd->CommonCfg.TxPreamble);
3320 INT Show_TxPower_Proc(
3321 IN PRTMP_ADAPTER pAd,
3324 sprintf(pBuf, "\t%lu", pAd->CommonCfg.TxPowerPercentage);
3328 INT Show_Channel_Proc(
3329 IN PRTMP_ADAPTER pAd,
3332 sprintf(pBuf, "\t%d", pAd->CommonCfg.Channel);
3336 INT Show_BGProtection_Proc(
3337 IN PRTMP_ADAPTER pAd,
3340 switch(pAd->CommonCfg.UseBGProtection)
3343 sprintf(pBuf, "\tON");
3345 case 2: //Always OFF
3346 sprintf(pBuf, "\tOFF");
3349 sprintf(pBuf, "\tAuto");
3352 sprintf(pBuf, "\tUnknow Value(%lu)", pAd->CommonCfg.UseBGProtection);
3358 INT Show_RTSThreshold_Proc(
3359 IN PRTMP_ADAPTER pAd,
3362 sprintf(pBuf, "\t%u", pAd->CommonCfg.RtsThreshold);
3366 INT Show_FragThreshold_Proc(
3367 IN PRTMP_ADAPTER pAd,
3370 sprintf(pBuf, "\t%u", pAd->CommonCfg.FragmentThreshold);
3374 #ifdef DOT11_N_SUPPORT
3376 IN PRTMP_ADAPTER pAd,
3379 if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)
3381 sprintf(pBuf, "\t40 MHz");
3385 sprintf(pBuf, "\t20 MHz");
3390 INT Show_HtMcs_Proc(
3391 IN PRTMP_ADAPTER pAd,
3395 #ifdef CONFIG_STA_SUPPORT
3396 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3397 sprintf(pBuf, "\t%u", pAd->StaCfg.DesiredTransmitSetting.field.MCS);
3398 #endif // CONFIG_STA_SUPPORT //
3403 IN PRTMP_ADAPTER pAd,
3406 switch(pAd->CommonCfg.RegTransmitSetting.field.ShortGI)
3409 sprintf(pBuf, "\tGI_400");
3412 sprintf(pBuf, "\tGI_800");
3415 sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.ShortGI);
3421 INT Show_HtOpMode_Proc(
3422 IN PRTMP_ADAPTER pAd,
3425 switch(pAd->CommonCfg.RegTransmitSetting.field.HTMODE)
3428 sprintf(pBuf, "\tGF");
3431 sprintf(pBuf, "\tMM");
3434 sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.HTMODE);
3440 INT Show_HtExtcha_Proc(
3441 IN PRTMP_ADAPTER pAd,
3444 switch(pAd->CommonCfg.RegTransmitSetting.field.EXTCHA)
3447 sprintf(pBuf, "\tBelow");
3450 sprintf(pBuf, "\tAbove");
3453 sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.EXTCHA);
3460 INT Show_HtMpduDensity_Proc(
3461 IN PRTMP_ADAPTER pAd,
3464 sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.MpduDensity);
3468 INT Show_HtBaWinSize_Proc(
3469 IN PRTMP_ADAPTER pAd,
3472 sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.RxBAWinLimit);
3476 INT Show_HtRdg_Proc(
3477 IN PRTMP_ADAPTER pAd,
3480 sprintf(pBuf, "\t%s", pAd->CommonCfg.bRdg ? "TRUE":"FALSE");
3484 INT Show_HtAmsdu_Proc(
3485 IN PRTMP_ADAPTER pAd,
3488 sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AmsduEnable ? "TRUE":"FALSE");
3492 INT Show_HtAutoBa_Proc(
3493 IN PRTMP_ADAPTER pAd,
3496 sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AutoBA ? "TRUE":"FALSE");
3499 #endif // DOT11_N_SUPPORT //
3501 INT Show_CountryRegion_Proc(
3502 IN PRTMP_ADAPTER pAd,
3505 sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegion);
3509 INT Show_CountryRegionABand_Proc(
3510 IN PRTMP_ADAPTER pAd,
3513 sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegionForABand);
3517 INT Show_CountryCode_Proc(
3518 IN PRTMP_ADAPTER pAd,
3521 sprintf(pBuf, "\t%s", pAd->CommonCfg.CountryCode);
3525 #ifdef AGGREGATION_SUPPORT
3526 INT Show_PktAggregate_Proc(
3527 IN PRTMP_ADAPTER pAd,
3530 sprintf(pBuf, "\t%s", pAd->CommonCfg.bAggregationCapable ? "TRUE":"FALSE");
3533 #endif // AGGREGATION_SUPPORT //
3536 INT Show_WmmCapable_Proc(
3537 IN PRTMP_ADAPTER pAd,
3541 #ifdef CONFIG_STA_SUPPORT
3542 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3543 sprintf(pBuf, "\t%s", pAd->CommonCfg.bWmmCapable ? "TRUE":"FALSE");
3544 #endif // CONFIG_STA_SUPPORT //
3548 #endif // WMM_SUPPORT //
3550 INT Show_IEEE80211H_Proc(
3551 IN PRTMP_ADAPTER pAd,
3554 sprintf(pBuf, "\t%s", pAd->CommonCfg.bIEEE80211H ? "TRUE":"FALSE");
3558 #ifdef CONFIG_STA_SUPPORT
3559 INT Show_NetworkType_Proc(
3560 IN PRTMP_ADAPTER pAd,
3563 switch(pAd->StaCfg.BssType)
3566 sprintf(pBuf, "\tAdhoc");
3569 sprintf(pBuf, "\tInfra");
3572 sprintf(pBuf, "\tAny");
3575 sprintf(pBuf, "\tMonitor");
3578 sprintf(pBuf, "\tUnknow Value(%d)", pAd->StaCfg.BssType);
3585 #endif // CONFIG_STA_SUPPORT //
3587 INT Show_AuthMode_Proc(
3588 IN PRTMP_ADAPTER pAd,
3591 NDIS_802_11_AUTHENTICATION_MODE AuthMode = Ndis802_11AuthModeOpen;
3593 #ifdef CONFIG_STA_SUPPORT
3594 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3595 AuthMode = pAd->StaCfg.AuthMode;
3596 #endif // CONFIG_STA_SUPPORT //
3598 if ((AuthMode >= Ndis802_11AuthModeOpen) &&
3599 (AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK))
3600 sprintf(pBuf, "\t%s", RTMPGetRalinkAuthModeStr(AuthMode));
3602 sprintf(pBuf, "\tUnknow Value(%d)", AuthMode);
3607 INT Show_EncrypType_Proc(
3608 IN PRTMP_ADAPTER pAd,
3611 NDIS_802_11_WEP_STATUS WepStatus = Ndis802_11WEPDisabled;
3613 #ifdef CONFIG_STA_SUPPORT
3614 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3615 WepStatus = pAd->StaCfg.WepStatus;
3616 #endif // CONFIG_STA_SUPPORT //
3618 if ((WepStatus >= Ndis802_11WEPEnabled) &&
3619 (WepStatus <= Ndis802_11Encryption4KeyAbsent))
3620 sprintf(pBuf, "\t%s", RTMPGetRalinkEncryModeStr(WepStatus));
3622 sprintf(pBuf, "\tUnknow Value(%d)", WepStatus);
3627 INT Show_DefaultKeyID_Proc(
3628 IN PRTMP_ADAPTER pAd,
3631 UCHAR DefaultKeyId = 0;
3633 #ifdef CONFIG_STA_SUPPORT
3634 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3635 DefaultKeyId = pAd->StaCfg.DefaultKeyId;
3636 #endif // CONFIG_STA_SUPPORT //
3638 sprintf(pBuf, "\t%d", DefaultKeyId);
3643 INT Show_WepKey_Proc(
3644 IN PRTMP_ADAPTER pAd,
3648 UCHAR Key[16] = {0}, KeyLength = 0;
3651 KeyLength = pAd->SharedKey[index][KeyIdx].KeyLen;
3652 NdisMoveMemory(Key, pAd->SharedKey[index][KeyIdx].Key, KeyLength);
3654 //check key string is ASCII or not
3655 if (RTMPCheckStrPrintAble((PCHAR)Key, KeyLength))
3656 sprintf(pBuf, "\t%s", Key);
3660 sprintf(pBuf, "\t");
3661 for (idx = 0; idx < KeyLength; idx++)
3662 sprintf(pBuf+strlen(pBuf), "%02X", Key[idx]);
3668 IN PRTMP_ADAPTER pAd,
3671 Show_WepKey_Proc(pAd, 0, pBuf);
3676 IN PRTMP_ADAPTER pAd,
3679 Show_WepKey_Proc(pAd, 1, pBuf);
3684 IN PRTMP_ADAPTER pAd,
3687 Show_WepKey_Proc(pAd, 2, pBuf);
3692 IN PRTMP_ADAPTER pAd,
3695 Show_WepKey_Proc(pAd, 3, pBuf);
3699 INT Show_WPAPSK_Proc(
3700 IN PRTMP_ADAPTER pAd,
3704 UCHAR PMK[32] = {0};
3707 #ifdef CONFIG_STA_SUPPORT
3708 IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
3709 NdisMoveMemory(PMK, pAd->StaCfg.PMK, 32);
3710 #endif // CONFIG_STA_SUPPORT //
3712 sprintf(pBuf, "\tPMK = ");
3713 for (idx = 0; idx < 32; idx++)
3714 sprintf(pBuf+strlen(pBuf), "%02X", PMK[idx]);