diff options
Diffstat (limited to 'network/wlan/WDI/COMMON/Dot11d.c')
| -rw-r--r-- | network/wlan/WDI/COMMON/Dot11d.c | 1881 |
1 files changed, 0 insertions, 1881 deletions
diff --git a/network/wlan/WDI/COMMON/Dot11d.c b/network/wlan/WDI/COMMON/Dot11d.c deleted file mode 100644 index 9a415fc6..00000000 --- a/network/wlan/WDI/COMMON/Dot11d.c +++ /dev/null @@ -1,1881 +0,0 @@ -//----------------------------------------------------------------------------- -// File: -// Dot11d.c -// -// Description: -// Implement 802.11d. -// -//----------------------------------------------------------------------------- - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "Dot11d.tmh" -#endif - -/*------------------------ Private Funtion Declaration-------------------------------------*/ -// The following function are called only in Dot11d.c -#define RtResetScanChannel(__pChannelList) \ -{ \ - (__pChannelList)->ScanChannelListLength = 0; \ - (__pChannelList)->ScanChannelIndex = 0; \ -} - -#define RtInsertScanChannel(__pChannelList, __pChnlListEntry) \ -{ \ - if((__pChannelList)->ScanChannelListLength < MAX_SCAN_CHANNEL_NUM) \ - { \ - (__pChannelList)->ScanChannelList[(__pChannelList)->ScanChannelListLength ++] = \ - (PRT_CHNL_LIST_ENTRY)(__pChnlListEntry); \ - } \ -} - -#define RtGetScanChannel(__pChannelList) \ - (((__pChannelList)->ScanChannelIndex >= (__pChannelList)->ScanChannelListLength) ? \ - NULL : (__pChannelList)->ScanChannelList[(__pChannelList)->ScanChannelIndex]) - -#define RtPopScanChannel(__pChannelList) \ - (((__pChannelList)->ScanChannelIndex >= (__pChannelList)->ScanChannelListLength) ? \ - NULL : (__pChannelList)->ScanChannelList[(__pChannelList)->ScanChannelIndex ++]) - - -#define RtResetChannelList(__pChannelList) \ -{ \ - (__pChannelList)->ChannelPlan = RT_CHANNEL_DOMAIN_MAX; \ - (__pChannelList)->bDot11d = FALSE; \ - (__pChannelList)->ChannelLen = 0; \ - (__pChannelList)->WirelessMode = WIRELESS_MODE_UNKNOWN; \ - PlatformZeroMemory((__pChannelList)->ChnlListEntry, sizeof(RT_CHNL_LIST_ENTRY) * MAX_CHANNEL_NUM); \ - RtResetScanChannel(__pChannelList); \ -} -/*------------------------ End of Private Funtion Declaration------------------------------*/ - - -static u1Byte s_MaxChnlList[] = { - 1,2,3,4,5,6,7,8,9,10,11,12,13,14, - 36,40,44,48,52,56,60,64,149,153,157,161,165 -}; - - -#define DOMAIN_CODE_2G_WORLD \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define DOMAIN_CODE_2G_ETSI1 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define DOMAIN_CODE_2G_ETSI2 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14 -#define DOMAIN_CODE_2G_FCC1 \ - {1,2,3,4,5,6,7,8,9,10,11}, 11 -#define DOMAIN_CODE_2G_MKK1 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14 -#define DOMAIN_CODE_2G_MKK2 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define DOMAIN_CODE_2G_GLOBAL \ - {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14 -#define DOMAIN_CODE_2G_WHQL_WFD \ - {1,4,6,8,11}, 5 - -#define DOMAIN_CODE_5G_ETSI1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define DOMAIN_CODE_5G_ETSI2 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define DOMAIN_CODE_5G_ETSI3 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,149,153,157,161,165}, 22 -#define DOMAIN_CODE_5G_ETSI4 \ - {36,40,44,48}, 4 -#define DOMAIN_CODE_5G_ETSI5 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 21 -#define DOMAIN_CODE_5G_ETSI6 \ - {36,40,44,48,52,56,60,64}, 8 -#define DOMAIN_CODE_5G_ETSI7 \ - {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13 -#define DOMAIN_CODE_5G_ETSI8 \ - {149,153,157,161}, 4 -#define DOMAIN_CODE_5G_ETSI9 \ - {100,104,108,112,116,132,136,140}, 8 -#define DOMAIN_CODE_5G_ETSI10 \ - {149,153,157,161,165}, 5 -#define DOMAIN_CODE_5G_ETSI11 \ - {36,40,44,48,52,56,60,64,132,136,140,149,153,157,161,165}, 16 -#define DOMAIN_CODE_5G_ETSI12 \ - {149,153,157,161}, 4 -#define DOMAIN_CODE_5G_ETSI13 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140}, 16 -#define DOMAIN_CODE_5G_ETSI14 \ - {36,40,44,48,52,56,60,64,132,136,140}, 11 - -#define DOMAIN_CODE_5G_FCC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define DOMAIN_CODE_5G_FCC2 \ - {36,40,44,48,149,153,157,161,165}, 9 -#define DOMAIN_CODE_5G_FCC3 \ - {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13 -#define DOMAIN_CODE_5G_FCC4 \ - {36,40,44,48,52,56,60,64,149,153,157,161}, 12 -#define DOMAIN_CODE_5G_FCC5 \ - {149,153,157,161,165}, 5 -#define DOMAIN_CODE_5G_FCC6 \ - {36,40,44,48,52,56,60,64}, 8 -#define DOMAIN_CODE_5G_FCC7 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 21 -#define DOMAIN_CODE_5G_FCC8 \ - {149,153,157,161}, 4 -#define DOMAIN_CODE_5G_FCC9 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 21 -#define DOMAIN_CODE_5G_FCC10 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161}, 20 - -#define DOMAIN_CODE_5G_IC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20 - -#define DOMAIN_CODE_5G_KCC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161}, 19 - -#define DOMAIN_CODE_5G_MKK1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define DOMAIN_CODE_5G_MKK2 \ - {36,40,44,48,52,56,60,64}, 8 -#define DOMAIN_CODE_5G_MKK3 \ - {100,104,108,112,116,120,124,128,132,136,140}, 11 -#define DOMAIN_CODE_5G_MKK4 \ - {36,40,44,48}, 4 - -#define DOMAIN_CODE_5G_NCC1 \ - {56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 16 -#define DOMAIN_CODE_5G_NCC2 \ - {56,60,64,149,153,157,161,165}, 8 -#define DOMAIN_CODE_5G_NCC3 \ - {149,153,157,161,165}, 5 -#define DOMAIN_CODE_5G_NCC4 \ - {52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 17 -#define DOMAIN_CODE_5G_WHQL_WFD \ - {36,40,44,48,149,157,165}, 7 -#define UNDEFINED \ - {0}, 0 - -// -// Note: -// (1) I merge Default Channel Plan to here because I think channel plans are global defintions -// which shall not depend on ICs or customized requests (ex. scan period, passive scan, -// join actions, etc.). If the channel plans depend on the ICs, we should take care of the mp kits -// for all ICs. And we take a large risk to maintain different channel plans for differnet ICs. -// (2) We shall not add/modify the channel plans excpet when the channels in the channel plan -// are different from the existing channel plan. -// (3) All extra infomation about the channel plan for customized requests should not put into the -// definitions of the DefaultChannelPlan, and instead, keep the information in the -// RT_CHNL_LIST_ENTRY when we construct the RT_CHANNEL_LIST. To compatible with the -// past customized requests, I merge old customized channel plan in the RtConstructChannelList(). -// By Bruce, 2008-09-01. -// - - -static RT_CHANNEL_PLAN DefaultChannelPlan[RT_CHANNEL_DOMAIN_MAX] = { -#if (DFS_TEST_CHNL_PLAN == 1) - // The channel plan is for DFS test only. - //4 #00 EFUSE_00h: RT_CHANNEL_DOMAIN_FCC - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,124,128,149,153,157,161,165} ,28, UNDEFINED, UNDEFINED}, -#else - //4 #00 EFUSE_00h: RT_CHANNEL_DOMAIN_FCC - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165} ,35, UNDEFINED, UNDEFINED}, -#endif - //4 #01 EFUSE_01h: RT_CHANNEL_DOMAIN_IC - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165} , 31, UNDEFINED, UNDEFINED}, - - //4 #02 EFUSE_02h: RT_CHANNEL_DOMAIN_ETSI - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,100,104,108,112,116,120,124,128,132,136,140} , 31, UNDEFINED, UNDEFINED}, - - //4 #03 EFUSE_03h: RT_CHANNEL_DOMAIN_SPAIN - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #04 EFUSE_04h: RT_CHANNEL_DOMAIN_FRANCE - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #05 EFUSE_05h: RT_CHANNEL_DOMAIN_MKK - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #06 EFUSE_06h: RT_CHANNEL_DOMAIN_MKK1 - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #07 EFUSE_07h: RT_CHANNEL_DOMAIN_ISRAEL - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64} , 21, UNDEFINED, UNDEFINED}, - - //4 #08 EFUSE_08h: RT_CHANNEL_DOMAIN_TELEC - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64} , 22, UNDEFINED, UNDEFINED}, - - //4 #09 EFUSE_09h: RT_CHANNEL_DOMAIN_MIC - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64} , 21, UNDEFINED, UNDEFINED}, - - //4 #10 EFUSE_0Ah: RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14} , 14, UNDEFINED, UNDEFINED}, - - //4 #11 EFUSE_0Bh: RT_CHANNEL_DOMAIN_WORLD_WIDE_13 - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #12 EFUSE_0Ch: RT_CHANNEL_DOMAIN_TAIWAN - {{1,2,3,4,5,6,7,8,9,10,11,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165} , 26, UNDEFINED, UNDEFINED}, - - //4 #13 EFUSE_0Dh: RT_CHANNEL_DOMAIN_CHIAN - {{1,2,3,4,5,6,7,8,9,10,11,12,13,149,153,157,161,165} , 18, UNDEFINED, UNDEFINED}, - - //4 #14 EFUSE_0Eh: RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,149,153,157,161,165} , 24, UNDEFINED, UNDEFINED}, - - //4 #15 EFUSE_0Fh: RT_CHANNEL_DOMAIN_KOREA - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161,165} , 33, UNDEFINED, UNDEFINED}, - - //4 #16 EFUSE_10h: RT_CHANNEL_DOMAIN_TURKEY - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64} , 19, UNDEFINED, UNDEFINED}, - - //4 #17 EFUSE_11h: RT_CHANNEL_DOMAIN_JAPAN - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140} , 32, UNDEFINED, UNDEFINED}, - - //4 #18 EFUSE_12h: FCC_No_DFS - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,149,153,157,161,165} , 20, UNDEFINED, UNDEFINED}, - - //4 #19 EFUSE_13h: Japan_No_DFS - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48} , 17, UNDEFINED, UNDEFINED}, - - //4 #20 EFUSE_14h: WORLD_WIDE_5G // RT_CHANNEL_DOMAIN_WORLD_WIDE_5G - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165} , 37, UNDEFINED, UNDEFINED}, - - //4 #21 Taiwan_No_DFS // RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS - {{1,2,3,4,5,6,7,8,9,10,11,56,60,64,149,153,157,161,165},19, UNDEFINED, UNDEFINED}, - - //4 #22 EFUSE_16h Default 7F: RealtekReserved // RT_CHANNEL_DOMAIN_DEFAULT - // 2013/01/29 MH According to new definition from RF team, RTK default channel plan will support all CH. - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165},37, UNDEFINED, UNDEFINED}, - - //4 #23 EFUSE_17h OmniPeek-All-Channel (RT_CHANNEL_DOMAIN_OMNIPEEK_ALL_CHANNEL): 2.4G and 5G now - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165},38, UNDEFINED, UNDEFINED}, - - //4 #24 RT_CHANNEL_DOMAIN_WHQL - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,149,157,165} , 18, UNDEFINED, UNDEFINED}, - -//1 ============= New definition supports 2.4G and 5G ============= - - // #25 EFUSE_20h: RT_CHANNEL_DOMAIN_WW13_2G 2.4G World Wide 13 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, UNDEFINED}, - - // #26 EFUSE_21h: RT_CHANNEL_DOMAIN_EUROPE_2G 2.4G Europe - {UNDEFINED, DOMAIN_CODE_2G_ETSI1, UNDEFINED}, - - // #27 EFUSE_22h: RT_CHANNEL_DOMAIN_US_2G 2.4G US - {UNDEFINED, DOMAIN_CODE_2G_FCC1, UNDEFINED}, - - // #28 EFUSE_23h: RT_CHANNEL_DOMAIN_JAPAN_2G 2.4G Japan - {UNDEFINED, DOMAIN_CODE_2G_MKK1, UNDEFINED}, - - // #29 EFUSE_24h: RT_CHANNEL_DOMAIN_FRANCE_2G 2.4G France - {UNDEFINED, DOMAIN_CODE_2G_ETSI2, UNDEFINED}, - - // #30 EFUSE_25h: RT_CHANNEL_DOMAIN_US_2G_5G 2.4G/5G US - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC1}, - - // #31 EFUSE_26h: RT_CHANNEL_DOMAIN_WW13_2G_EUROPE_5G 2.4G World Wide 13 + 5G Europe - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI1}, - - // #32 EFUSE_27h: RT_CHANNEL_DOMAIN_JAPAN_2G_5G 2.4G/5G Japan - {UNDEFINED, DOMAIN_CODE_2G_MKK1, DOMAIN_CODE_5G_MKK1}, - - // #33 EFUSE_28h: RT_CHANNEL_DOMAIN_WW13_2G_KOREA_5G 2.4G World Wide 13 + 5G Korea - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_KCC1}, - - // #34 EFUSE_29h: RT_CHANNEL_DOMAIN_WW13_2G_US_5G 2.4G World Wide 13 + 5G US/DFS Channels - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC2}, - - // #35 EFUSE_30h: RT_CHANNEL_DOMAIN_WW13_2G_INDIA_5G 2.4G World Wide 13 + 5G India/Mexico - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC3}, - - // #36 EFUSE_31h: RT_CHANNEL_DOMAIN_WW13_2G_VENEZUELA_5G 2.4G World Wide 13 + 5G Venezuela - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC4}, - - // #37 EFUSE_32h: RT_CHANNEL_DOMAIN_WW13_2G_CHINA_5G 2.4G World Wide 13 + 5G China - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC5}, - - // #38 EFUSE_33h: RT_CHANNEL_DOMAIN_WW13_2G_ISRAEL_5G 2.4G World Wide 13 + 5G Israel - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC6}, - - // #39 EFUSE_34h: RT_CHANNEL_DOMAIN_US_2G_CANADA_5G 2.4G US + 5G US/Canada - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC7}, - - // #40 EFUSE_35h: RT_CHANNEL_DOMAIN_WW13_2G_AUSTRALIA_5G 2.4G World Wide 13 + 5G Australia/New Zealand - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI2}, - - // #41 EFUSE_36h: RT_CHANNEL_DOMAIN_WW13_2G_RUSSIA_5G 2.4G World Wide 13 + 5G Russia - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI3}, - - // #42 EFUSE_37h: RT_CHANNEL_DOMAIN_JAPAN_2G_W52_W53_5G 2.4G Japan + 5G Japan(W52, W53) - {UNDEFINED, DOMAIN_CODE_2G_MKK1, DOMAIN_CODE_5G_MKK2}, - - // #43 EFUSE_38h: RT_CHANNEL_DOMAIN_JAPAN_2G_W56_5G - {UNDEFINED, DOMAIN_CODE_2G_MKK1, DOMAIN_CODE_5G_MKK3}, - - // #44 EFUSE_39h: RT_CHANNEL_DOMAIN_US_2G_TAIWAN_5G - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_NCC1}, - - // #45 EFUSE_40h: RT_CHANNEL_DOMAIN_US_2G_TAIWAN_DFS_5G - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_NCC2}, - - // #46 EFUSE_41h: RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN_2G - {UNDEFINED, DOMAIN_CODE_2G_GLOBAL, UNDEFINED}, - - // #47 EFUSE_42h: RT_CHANNEL_DOMAIN_2G_ETSI1_5G_ETSI4 - {UNDEFINED, DOMAIN_CODE_2G_ETSI1, DOMAIN_CODE_5G_ETSI4}, - - // #48 EFUSE_43h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC2 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC2}, - - // #49 EFUSE_44h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_NCC3 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_NCC3}, - - // #50 EFUSE_45h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI5 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI5}, - - // #51 EFUSE_46h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC8 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC8}, - - // #52 EFUSE_47h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI6 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI6}, - - // #53 EFUSE_48h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI7 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI7}, - - // #54 EFUSE_49h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI8 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI8}, - - // #55 EFUSE_50h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI9 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI9}, - - // #56 EFUSE_51h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI10 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI10}, - - // #57 EFUSE_52h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI11 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI11}, - - // #58 EFUSE_53h: RT_CHANNEL_DOMAIN_WW13_2G_5G_NCC4 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_NCC4}, - - // #59 EFUSE_54h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI12 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI12}, - - // #60 EFUSE_55h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC9 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC9}, - - // #61 EFUSE_56h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI13 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI13}, - - // #62 EFUSE_57h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC10 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC10}, - - // #63 EFUSE_58h: RT_CHANNEL_DOMAIN_2G_MKK2_5G_MKK4 - {UNDEFINED, DOMAIN_CODE_2G_MKK2, DOMAIN_CODE_5G_MKK4}, - - // #64 EFUSE_59h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI14 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI14}, - - //1 ============= End of customer definition ============= - - //4 RT_CHANNEL_DOMAIN_WHQL_WFD - {UNDEFINED, DOMAIN_CODE_2G_WHQL_WFD, DOMAIN_CODE_5G_WHQL_WFD}, - -//1 ============= End of New definition ============= -}; - -/*------------------------Private of Protected Funtion Declaration-------------------------------------*/ -// The following function are called only in Dot11d.c -BOOLEAN -RtConstructChannelList( - IN PADAPTER pAdapter - ); -PRT_CHNL_LIST_ENTRY -RtGetChnlListEntry( - IN PADAPTER pAdapter, - IN u1Byte Channel - ); - -BOOLEAN -RtConstructScanList( - IN PADAPTER pAdapter - ); - -VOID -RtCalcScanStatistic( - IN PADAPTER pAdapter - ); - -VOID -RtCalcScanPeriod( - IN PADAPTER pAdapter - ); - -#if DBG -VOID -DumpChannelList( - IN PADAPTER pAdapter - ); - -VOID -DumpScanChannelList( - IN PADAPTER pAdapter - ); -#else - #define DumpChannelList(_pAdapter) - #define DumpScanChannelList(_pAdapter) -#endif -/*------------------------ End of Private of Protected Funtion Declaration------------------------------*/ - -//------------------------------------------------------------------------------ -// Debug routines. -//------------------------------------------------------------------------------ -#if DBG -VOID -DumpChannelList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - u1Byte i; - - FunctionIn(COMP_SCAN); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Channel Plan: ChannelLen %d\n", pChannelList->ChannelLen)); - for(i = 0; i < pChannelList->ChannelLen; i ++) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%d ", pChannelList->ChnlListEntry[i].ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("##Channel: %d\n", pChannelList->ChnlListEntry[i].ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_TRACE, ("##ScanType: %d\n", pChannelList->ChnlListEntry[i].ScanType)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("##ScanPeriod: %d\n", pChannelList->ChnlListEntry[i].ScanPeriod)); - RT_TRACE(COMP_SCAN, DBG_TRACE, ("##MaxTxPwrDbm: %d\n", pChannelList->ChnlListEntry[i].MaxTxPwrDbm)); - RT_TRACE(COMP_SCAN, DBG_TRACE, ("##ExInfo: %X\n", pChannelList->ChnlListEntry[i].ExInfo)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - } - RT_TRACE(COMP_SCAN, DBG_TRACE, ("\n")); - - FunctionOut(COMP_SCAN); - -} - -VOID -DumpScanChannelList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - u1Byte i; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Scan List: (len = %d) ", pChannelList->ScanChannelListLength)); - for(i = 0; i < pChannelList->ScanChannelListLength; i ++) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%d ", pChannelList->ScanChannelList[i]->ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); -} - -#endif - -// <20140311, Kordan> Knuth Shuffle Algorithm -// Please refer to http://rosettacode.org/wiki/Knuth_shuffle#C - -void _shuffle(PRT_CHNL_LIST_ENTRY *list, u1Byte len) { - u4Byte j; - PRT_CHNL_LIST_ENTRY tmp; - - while(len) { - j = (u4Byte)(PlatformGetCurrentTime()%len); - if (j != len - 1) { - tmp = list[j]; - list[j] = list[len - 1]; - list[len - 1] = tmp; - } - len--; - } -} - -VOID -shuffleScanChannelList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - - if(pChannelList == NULL) - return; - else if(pChannelList->ScanChannelListLength == 0) - return; - - _shuffle(pChannelList->ScanChannelList, pChannelList->ScanChannelListLength-1); -} - - -// -// Description: -// Reset to the state as we are just entering a regulatory domain. -// -VOID -Dot11d_Reset( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - - if(!pDot11dInfo->bEnabled) - return; - - pDot11dInfo->State = DOT11D_STATE_NONE; - pDot11dInfo->CountryIeLen = 0; - pDot11dInfo->ChnlListLen = 0; - RESET_CIE_WATCHDOG(pMgntInfo); - - RtResetChannelList(GET_RT_CHANNEL_LIST(pMgntInfo)); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Dot11d_Reset()\n")); - AddDrvLog(pAdapter, LID_DOT11D_RESET, NULL, 0); -} - -// -// Description: -// Update country IE from Beacon or Probe Resopnse -// and configure PHY for operation in the regulatory domain. -// -// TODO: -// Configure Tx power. -// -// Assumption: -// 1. IS_DOT11D_ENABLE() is TRUE. -// 2. Input IE is an valid one. -// -VOID -Dot11d_UpdateCountryIe( - IN PADAPTER pAdapter, - IN pu1Byte pTaddr, - IN POCTET_STRING posCoutryIe - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - u1Byte i, j, NumTriples, MaxChnlNum, ChnlListLen; - PCHNL_TXPOWER_TRIPLE pTriple; - - MaxChnlNum = 0; - ChnlListLen = 0; - NumTriples = (posCoutryIe->Length - 3) / 3; // skip 3-byte country string. - pTriple = (PCHNL_TXPOWER_TRIPLE)(posCoutryIe->Octet + 3); - - if(posCoutryIe->Length > MAX_IE_LEN) - return; - - for(i = 0; i < NumTriples; i++) - { - if(MaxChnlNum >= pTriple->FirstChnl) - { // It is not in a monotonically increasing order, so stop processing. - RT_TRACE(COMP_SCAN, DBG_WARNING, ("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........\n")); - return; - } - - if((pTriple->NumChnls+ChnlListLen) > DOT11D_MAX_CHNL_NUM) - {// To prevent malicious attack. Added by Roger, 2010.02.24. - RT_TRACE(COMP_SCAN, DBG_WARNING, ("Dot11d_UpdateCountryIe(): Invalid channel list length, skip it........\n")); - return; - } - - for(j = 0 ; j < pTriple->NumChnls; j++) - { - pDot11dInfo->ChnlList[ChnlListLen] = (pTriple->FirstChnl + j); - pDot11dInfo->MaxTxPwrDbmList[ChnlListLen] = pTriple->MaxTxPowerInDbm; - MaxChnlNum = pDot11dInfo->ChnlList[ChnlListLen];// Keep tracking maximal channel number. - ChnlListLen++; - } - pTriple = (PCHNL_TXPOWER_TRIPLE)((pu1Byte)pTriple + 3); - } - pDot11dInfo->ChnlListLen = ChnlListLen; - RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, "Dot11d_UpdateCountryIe(): Channel List:", - pDot11dInfo->ChnlList, pDot11dInfo->ChnlListLen); - - UPDATE_CIE_SRC(pMgntInfo, pTaddr); - - pDot11dInfo->CountryIeLen = posCoutryIe->Length; - PlatformMoveMemory( - pDot11dInfo->CountryIeBuf, - posCoutryIe->Octet, - pDot11dInfo->CountryIeLen); - pDot11dInfo->State = DOT11D_STATE_LEARNED; - - RT_PRINT_STR(COMP_SCAN, DBG_LOUD, "Dot11d_UpdateCountryIe(): Country Code", &pDot11dInfo->CountryIeBuf[0], 3); - RT_PRINT_DATA(COMP_SCAN, DBG_TRACE, "Dot11d_UpdateCountryIe(): Country IE:", - pDot11dInfo->CountryIeBuf, pDot11dInfo->CountryIeLen); - AddDrvLog(pAdapter, LID_DOT11D_GET_COUNTRY_IE, pDot11dInfo->CountryIeBuf, pDot11dInfo->CountryIeLen); -} - - -// -// Assumption: -// 1. IS_DOT11D_ENABLE() is TRUE. -// 2. Channel numbers in s_MaxChnlList[] or pDot11dInfo->ChnlList -// are monotonically increasing. -// -u1Byte -Dot11d_GetChannelList( - IN PADAPTER Adapter, - OUT pu1Byte* ppChnlList - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - pu1Byte pChnlList; - u1Byte ChnlListLen, First5gChnlIdx; - - if(IS_COUNTRY_IE_VALID(pMgntInfo)) - { - ChnlListLen = pDot11dInfo->ChnlListLen; - pChnlList = pDot11dInfo->ChnlList; - } - else - { - ChnlListLen = sizeof(s_MaxChnlList); - pChnlList = s_MaxChnlList; - } - - for(First5gChnlIdx = 0; First5gChnlIdx < ChnlListLen; First5gChnlIdx++) - { - if(pChnlList[First5gChnlIdx] > 14) - break; // 1st A band channel bound - } - - if(IS_5G_WIRELESS_MODE(pMgntInfo->dot11CurrentWirelessMode)) - { - pChnlList += First5gChnlIdx; - ChnlListLen -= First5gChnlIdx; - } - else - ChnlListLen = First5gChnlIdx; - - if(ChnlListLen == 0) - *ppChnlList = NULL; - else - *ppChnlList = pChnlList; - - RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, "Dot11d_GetChannelList: ", *ppChnlList, ChnlListLen); - - return ChnlListLen; -} - - -s4Byte -DOT11D_GetMaxTxPwrInDbm( - IN PADAPTER Adapter, - IN u1Byte Channel - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - s4Byte MaxTxPwrInDbm = UNSPECIFIED_PWR_DBM; - u4Byte ChnlIdx = 0; - - for(ChnlIdx = 0; ChnlIdx < pDot11dInfo->ChnlListLen; ChnlIdx++) - { - if(Channel == pDot11dInfo->ChnlList[ChnlIdx]) - { - MaxTxPwrInDbm = (s4Byte)pDot11dInfo->MaxTxPwrDbmList[ChnlIdx]; - break; - } - } - - return MaxTxPwrInDbm; -} - - -VOID -DOT11D_ScanComplete( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - - switch(pDot11dInfo->State) - { - case DOT11D_STATE_LEARNED: - pDot11dInfo->State = DOT11D_STATE_DONE; - - // Reset the channel list because dot11d has changed. - RtResetChannelList(GET_RT_CHANNEL_LIST(pMgntInfo)); - break; - - case DOT11D_STATE_DONE: - if( GET_CIE_WATCHDOG(pMgntInfo) == 0 ) - { // Reset country IE if previous one is gone. - Dot11d_Reset(Adapter); - } - break; - - default: //MacOS warning:enum value "DOT11D_STATE_NONE" not handled in switch - break; - } - -} - -// -// Description: -// The interface for all channel list actions. -// Update the current channel list according to the input status code. -// Arguments: -// Adapter - -// NIC adapter context pointer. -// ActionCode - -// An u4Byte number enumered in RT_CHNL_LIST_ACTION. -// pInputBuf - -// The input buffer as a pointer. -// pOutputBuf - -// The output buffer as a pointer. -// Return Value: -// TRUE if this action is complete, or retrun FALSE. -// By Bruce, 2008-09-09. -// -BOOLEAN -RtActChannelList( - IN PADAPTER pAdapter, - IN u4Byte ActionCode, - IN PVOID pInputBuf, - OUT PVOID pOutputBuf - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - BOOLEAN bResult = TRUE; - - switch(ActionCode) - { - case RT_CHNL_LIST_ACTION_INIT: - RtResetChannelList(GET_RT_CHANNEL_LIST(pMgntInfo)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_RESET\n")); - break; - - case RT_CHNL_LIST_ACTION_CONSTRUCT: - bResult = RtConstructChannelList(pAdapter); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_CONSTRUCT\n")); - break; - - case RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST: - { - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - if(!IS_CHANNEL_LIST_VALID(pMgntInfo)) - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST IS_CHANNEL_LIST_VALID FALSE\n")); - - RtConstructChannelList(pAdapter); - // Because RtConstructChannelList() will reset the scan list, so we construct again - bResult = RtConstructScanList(pAdapter); - RT_ASSERT(bResult, ("RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST fail!!\n")); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - } - - // Save the channel list address to the output context. - if(pOutputBuf) - *((PRT_CHANNEL_LIST*)pOutputBuf) = GET_RT_CHANNEL_LIST(pMgntInfo); - } - // RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST\n")); - break; - case RT_CHNL_LIST_ACTION_UPDATE_CHANNEL: - case RT_CHNL_LIST_ACTION_ADD_CHANNEL: - { - PRT_CHNL_LIST_ENTRY pChannelUpdateInfo = (PRT_CHNL_LIST_ENTRY)pInputBuf; - PRT_CHNL_LIST_ENTRY pChnlListEntry; - - if(!pChannelUpdateInfo) - { - bResult = FALSE; - break; - } - - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - if(!IS_CHANNEL_LIST_VALID(pMgntInfo)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_UPDATE(ADD)_CHANNEL IS_CHANNEL_LIST_VALID FALSE\n")); - - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - RtConstructChannelList(pAdapter); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - } - - pChnlListEntry = RtGetChnlListEntry(pAdapter, pChannelUpdateInfo->ChannelNum); - - if(!pChnlListEntry) - { // No this channel, add into the channel list - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - if(pChannelList->ChannelLen < MAX_CHANNEL_NUM) - { - PlatformMoveMemory(&(pChannelList->ChnlListEntry[pChannelList->ChannelLen]), pChannelUpdateInfo, sizeof(RT_CHNL_LIST_ENTRY)); - pChannelList->ChannelLen ++; - } - else - { - bResult = FALSE; - break; - } - } - else - { - PlatformMoveMemory(pChnlListEntry, pChannelUpdateInfo, sizeof(RT_CHNL_LIST_ENTRY)); - } - } - // RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_UPDATE(ADD)_CHANNEL\n")); - break; - - case RT_CHNL_LIST_ACTION_DEL_CHANNEL: - { - u1Byte Channel = *((pu1Byte)pInputBuf); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - u1Byte i; - - bResult = FALSE; - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - if(pChannelList->ChnlListEntry[i].ChannelNum == Channel) - { - for(i=i; i < pChannelList->ChannelLen; i ++) - { - PlatformMoveMemory(&(pChannelList->ChnlListEntry[i]), &(pChannelList->ChnlListEntry[i + 1]), sizeof(RT_CHNL_LIST_ENTRY)); - } - bResult = TRUE; - break; - } - } - } - // RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_DELETE_CHANNEL\n")); - break; - - case RT_CHNL_LIST_ACTION_GET_CHANNEL: - { - u1Byte Channel = *((pu1Byte)pInputBuf); - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - if(!IS_CHANNEL_LIST_VALID(pMgntInfo)) - { - RT_TRACE(COMP_SCAN, DBG_TRACE, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_CHANNEL IS_CHANNEL_LIST_VALID FALSE\n")); - - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - RtConstructChannelList(pAdapter); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - } - - if((pChnlListEntry = RtGetChnlListEntry(pAdapter, Channel)) != NULL) - { - if(pChnlListEntry->ChannelNum == Channel) - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = pChnlListEntry; - else - { - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = NULL; - bResult = FALSE; - } - } - else - { - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = NULL; - bResult = FALSE; - } - } - // RT_TRACE(COMP_SCAN, DBG_TRACE, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_CHANNEL\n")); - break; - - case RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST: - { - if(!IS_CHANNEL_LIST_VALID(pMgntInfo)) - RtConstructChannelList(pAdapter); - - bResult = RtConstructScanList(pAdapter); - } - //RT_ASSERT(bResult, ("RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST fail!!\n")); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST\n")); - break; - - case RT_CHNL_LIST_ACTION_POP_SCAN_CHANNEL: - { - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - - pChnlListEntry = RtPopScanChannel(pChannelList); - if(pChnlListEntry) - { - bResult = TRUE; - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = pChnlListEntry; - } - else - { - bResult = FALSE; - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = NULL; - } - } - // RT_TRACE(COMP_SCAN, DBG_TRACE, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_POP_SCAN_CHANNEL\n")); - break; - - case RT_CHNL_LIST_ACTION_GET_SCAN_CHANNEL: - { - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - - pChnlListEntry = RtGetScanChannel(pChannelList); - if(pChnlListEntry) - { - bResult = TRUE; - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = pChnlListEntry; - } - else - { - bResult = FALSE; - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = NULL; - } - - if(pChannelList != NULL) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_SCAN_CHANNEL index %d length %d channellength %d\n", pChannelList->ScanChannelIndex, pChannelList->ScanChannelListLength, pChannelList->ChannelLen)); - } - break; - - case RT_CHNL_LIST_ACTION_GET_CHANNEL_PLAN: - { - if(pInputBuf) - *(RT_CHANNEL_PLAN **)pOutputBuf = &DefaultChannelPlan[*(RT_CHANNEL_DOMAIN *)pInputBuf]; - } - break; - - default: - bResult = FALSE; - RT_TRACE(COMP_SCAN, DBG_WARNING, ("RtActChannelList(): NO RT_CHNL_LIST_ACTION!!!\n")); - break; - } - - return bResult; -} - -// -// Description: -// Find the channel information in the channel list and retrun the address. -// By Bruce, 2008-09-09. -// -PRT_CHNL_LIST_ENTRY -RtGetChnlListEntry( - IN PADAPTER pAdapter, - IN u1Byte Channel - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - PRT_CHNL_LIST_ENTRY pChnlListEntry; - int i = 0; - - if(pChannelList->ChannelLen == 0) - return NULL; - - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - if(pChannelList->ChnlListEntry[i].ChannelNum == Channel) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - return pChnlListEntry; - } - } - - return NULL; -} - -u1Byte -RtCustomizeChannelList( - PMGNT_INFO pMgntInfo, - u1Byte ChannelPlan, - u1Byte ChannelLen, - PRT_CHNL_LIST_ENTRY pChnlList - ) -{ - u1Byte i; - PRT_CHNL_LIST_ENTRY pChnlListEntry; - - //3 // Put Customized Action here... - switch(ChannelPlan) - { - case RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN: - case RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN_2G: // 2G global domain. - { - for(i = 0; i < ChannelLen; i ++) - { - pChnlListEntry = &(pChnlList[i]); - - // (1) Start IBSS at channel 1~11. - // (2) Join IBSS at channel 1~11. - if(pChnlListEntry->ChannelNum >= 12 && pChnlListEntry->ChannelNum <= 14) - { - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_NO_IBSS_JOIN; - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_NO_IBSS_START; - } - else - { - pChnlListEntry->ExInfo &= ~CHANNEL_EXINFO_NO_IBSS_JOIN; - pChnlListEntry->ExInfo &= ~CHANNEL_EXINFO_NO_IBSS_START; - } - - // (3) Channel 1~11 is active, and 12~14 is passive when dot11 is not learned yet. - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { - if(pChnlListEntry->ChannelNum >= 1 && pChnlListEntry->ChannelNum <= 11) - { - pChnlListEntry->ScanType = SCAN_ACTIVE; - pChnlListEntry->ScanPeriod = DEFAULT_ACTIVE_SCAN_PERIOD; - } - - if((pChnlListEntry->ChannelNum >= 12 && pChnlListEntry->ChannelNum <= 14)) - { - pChnlListEntry->ScanType = SCAN_PASSIVE; - pChnlListEntry->ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - } - } - } - } - break; - - case RT_CHANNEL_DOMAIN_WORLD_WIDE_13: - { - for(i = 0; i < ChannelLen; i ++) - { - pChnlListEntry = &(pChnlList[i]); - - // (1) Channel 14 is disable - if(pChnlListEntry->ChannelNum == 14) - { - for(++ i; i < ChannelLen; i ++) - { - PlatformMoveMemory(&(pChnlList[i - 1]), &(pChnlList[i]), sizeof(RT_CHNL_LIST_ENTRY)); - } - ChannelLen --; - break; - } - - // (2) Join IBSS at channel 1~11. - // (3) Start IBSS at channel 1~11. - // (4) channel 12~13, passive scan - if(pChnlListEntry->ChannelNum >= 12 && pChnlListEntry->ChannelNum <= 13) - { - pChnlListEntry->ExInfo |= (CHANNEL_EXINFO_NO_IBSS_JOIN); - pChnlListEntry->ExInfo |= (CHANNEL_EXINFO_NO_IBSS_START); - pChnlListEntry->ScanType = SCAN_MIX; - pChnlListEntry->ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - } - } - } - break; - case RT_CHANNEL_DOMAIN_DEFAULT://For Realtek default setting - { - for(i = 0; i < ChannelLen; i ++) - { - pChnlListEntry = &(pChnlList[i]); - - // (2) Join IBSS at channel 1~11. - // (3) Start IBSS at channel 1~11. - // (4) channel 12~13, passive scan - if(pChnlListEntry->ChannelNum <=13 && pChnlListEntry->ChannelNum >= 12) - { - pChnlListEntry->ExInfo |= (CHANNEL_EXINFO_NO_IBSS_JOIN); - pChnlListEntry->ExInfo |= (CHANNEL_EXINFO_NO_IBSS_START); - pChnlListEntry->ScanType = SCAN_MIX; - pChnlListEntry->ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - } - } - } - break; - - default: - break; - } - - switch(pMgntInfo->CustomerID) - { - - - case RT_CID_WHQL: - { - for(i = 0; i < ChannelLen; i ++) - { - pChnlListEntry = &(pChnlList[i]); - pChnlListEntry->ScanPeriod = SCAN_PERIOD_Long_Win_DTM; - } - } - break; - - default: - break; - } - - return ChannelLen; -} - -VOID -_ForcedChannelPlan( - PMGNT_INFO pMgntInfo, - BOOLEAN bIs5G, - pu1Byte pChnlList, - pu1Byte pChannelLen - ) -{ - ps1Byte s = (ps1Byte)((bIs5G) ?
pMgntInfo->RegChannelPlan5G.Octet : - pMgntInfo->RegChannelPlan2G.Octet); - u2Byte len = ((bIs5G) ?
pMgntInfo->RegChannelPlan5G.Length : - pMgntInfo->RegChannelPlan2G.Length); - u1Byte c = 0, n = 0, i = 0; - - RT_TRACE( COMP_INIT, DBG_LOUD, ("===> _ForcedChannelPlan\n")); - - if (bIs5G) - if (pMgntInfo->RegChannelPlan5G.bDefaultStr) - return; - else - if (pMgntInfo->RegChannelPlan2G.bDefaultStr) - return; - - PlatformZeroMemory(pChnlList, *pChannelLen); - *pChannelLen = 0; - - for (i = 0; i < len; ++i, ++s) { - while (*s != ',' && *s >= '0' && *s <= '9') { - c = 10 * c + (*s - '0'); - s++, i++; - } - pChnlList[n++] = c; - c = 0; - } - - *pChannelLen = n; - - RT_TRACE( COMP_INIT, DBG_LOUD, ("<=== _ForcedChannelPlan\n")); -} - -// -// Description: -// (Re-)Construct the channel list by 11d or default channel plan. -// Note: -// We collect all customized requests of joining/scanning about each channel in here. -// By Bruce, 2008-09-09. -// -BOOLEAN -RtConstructChannelList( - IN PADAPTER pAdapter - ) -{ - pu1Byte pChnlList = NULL; - u1Byte ChnlsLen = 0, i = 0; - PRT_CHNL_LIST_ENTRY pChnlListEntry; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - RT_CHANNEL_DOMAIN ChannelPlan = GetDefaultMgntInfo(pAdapter)->ChannelPlan; - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - if(pAdapter->pNdis62Common != NULL) - RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("port number %d \n", pAdapter->pNdis62Common->PortNumber)); - - if(ChannelPlan >= RT_CHANNEL_DOMAIN_MAX) // Channel Plan is invalid, fix it. - pMgntInfo->ChannelPlan = RT_CHANNEL_DOMAIN_FCC; - - RtResetChannelList(pChannelList); - - pChannelList->ChannelPlan = ChannelPlan; - - //3 // Dot11d or Default Channel Plan - if(IS_DOT11D_ENABLE(pMgntInfo)) - { // dot11d is enabled. - RT_SCAN_TYPE scanType = SCAN_ACTIVE; - - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { // domain learning is not complete - scanType = SCAN_PASSIVE; - } - - ChnlsLen = Dot11d_GetChannelList(pAdapter, &pChnlList); - - if(ChnlsLen > MAX_CHANNEL_NUM) - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - return FALSE; - } - - for(i = 0; i < ChnlsLen; i ++) - { - // Check if the channel is valid for the current wireless mode. - if(!CHNL_ValidForWirelessMode(pChnlList[i], (u2Byte)pMgntInfo->dot11CurrentWirelessMode)) - continue; - - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - - pChnlListEntry->ChannelNum = pChnlList[i]; - - // For 5G FCC Radar channel, default passive scan - if(DFS_5G_RADAR_CHANNEL(pChnlListEntry->ChannelNum)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("DFS_5G_RADAR_CHANNEL, 802.11d, set chnl %d to passive scan.\n", pChnlListEntry->ChannelNum)); - pChnlListEntry->ScanType = SCAN_PASSIVE; - DFS_StaInsertToRadarChnlList(pAdapter, pChnlListEntry->ChannelNum); - } - else - pChnlListEntry->ScanType = scanType; - - pChnlListEntry->ScanPeriod = (scanType == SCAN_ACTIVE) ? DEFAULT_ACTIVE_SCAN_PERIOD : DEFAULT_PASSIVE_SCAN_PERIOD; - pChnlListEntry->MaxTxPwrDbm = DOT11D_GetMaxTxPwrInDbm(pAdapter, pChnlListEntry->ChannelNum); - pChnlListEntry->ExInfo = 0; - - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { // domain learning is not complete, we cannot start IBSS. - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_NO_IBSS_START; - } - - pChannelList->ChannelLen ++; - } - - pChannelList->bDot11d = TRUE; - } - else - { // Normal Case - u1Byte usbswchnl; - RT_TRACE( COMP_SCAN, DBG_LOUD, ("_RT_CHANNEL_DOMAIN(0x%X) mapped from hal_MapChannelPlan: %s channel plan is applied.\n", - ChannelPlan, (ChannelPlan >= RT_CHANNEL_DOMAIN_WHQL)?"New":"Legacy")); - - if (ChannelPlan < RT_CHANNEL_DOMAIN_WW13_2G) - { - pChnlList = DefaultChannelPlan[pChannelList->ChannelPlan].Channel; - ChnlsLen = DefaultChannelPlan[pChannelList->ChannelPlan].Len; - } - else - { - if(IS_WIRELESS_MODE_5G(pAdapter)) - { - pChnlList = DefaultChannelPlan[pChannelList->ChannelPlan].Channel5G; - ChnlsLen = DefaultChannelPlan[pChannelList->ChannelPlan].Len5G; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("===>RtConstructChannelList, DefaultChannelPlan[%d].Channel5G: ", pChannelList->ChannelPlan)); - } - else - { - pChnlList = DefaultChannelPlan[pChannelList->ChannelPlan].Channel2_4G; - ChnlsLen = DefaultChannelPlan[pChannelList->ChannelPlan].Len2_4G; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("===>RtConstructChannelList, DefaultChannelPlan[%d].Channel2.4G: ", pChannelList->ChannelPlan)); - } - - } - - if (pMgntInfo->RegChannelPlan2G.bDefaultStr != TRUE || - pMgntInfo->RegChannelPlan5G.bDefaultStr != TRUE) - _ForcedChannelPlan(pMgntInfo, IS_WIRELESS_MODE_5G(pAdapter), pChnlList, &ChnlsLen); - - for(i = 0; i < ChnlsLen; i ++) - { - - // Check if the channel is valid for the current wireless mode. - if (!CHNL_ValidForWirelessMode(pChnlList[i], pMgntInfo->dot11CurrentWirelessMode)) - { - // RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("Skip channel (%d) for wirelessMode (%d)\n", pChnlList[i], pMgntInfo->dot11CurrentWirelessMode)); - continue; - } - - pChnlListEntry = &(pChannelList->ChnlListEntry[pChannelList->ChannelLen]); - - pChnlListEntry->ChannelNum = pChnlList[i]; - - // For 5G FCC Radar channel, default passive scan - if (DFS_5G_RADAR_CHANNEL(pChnlListEntry->ChannelNum)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("DFS_5G_RADAR_CHANNEL, Non 802.11d, set chnl %d to passive scan.\n", pChnlListEntry->ChannelNum)); - pChnlListEntry->ScanType = SCAN_PASSIVE; - DFS_StaInsertToRadarChnlList(pAdapter, pChnlListEntry->ChannelNum); - } - else - { - if (pMgntInfo->RegPassiveScan && ChannelPlan == RT_CHANNEL_DOMAIN_DEFAULT) - { - // 0= by channel plan, 1=5g all passive scan / 2= 24g passive scan /3= 2/5g all passive scan - if (pMgntInfo->RegPassiveScan == 1 && pChnlListEntry->ChannelNum >= 36) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("CHNL-%d passive scan", pChnlListEntry->ChannelNum)); - pChnlListEntry->ScanType = SCAN_PASSIVE; - } - else if (pMgntInfo->RegPassiveScan == 2 && pChnlListEntry->ChannelNum <= 14) - { - pChnlListEntry->ScanType = SCAN_PASSIVE; - } - else if (pMgntInfo->RegPassiveScan == 3) - { - pChnlListEntry->ScanType = SCAN_PASSIVE; - } - else - { - pChnlListEntry->ScanType = SCAN_ACTIVE; - } - } - else - pChnlListEntry->ScanType = SCAN_ACTIVE; - - } - - if(pAdapter->bInHctTest) - pChnlListEntry->ScanPeriod = SCAN_PERIOD_Long_Win_DTM; - else - { - { - pChnlListEntry->ScanPeriod = DEFAULT_ACTIVE_SCAN_PERIOD; - } - } - pChnlListEntry->MaxTxPwrDbm = UNSPECIFIED_PWR_DBM; - pChnlListEntry->ExInfo = 0; - - pChannelList->ChannelLen ++; - } - RT_TRACE(COMP_SCAN, DBG_LOUD, ("===>RtConstructChannelList, ChannelList: ")); - for (i = 0; i < pChannelList->ChannelLen; ++i) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%d ", (pChannelList->ChnlListEntry[i]).ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n ")); - } - - pChannelList->WirelessMode = pMgntInfo->dot11CurrentWirelessMode; - - pChannelList->ChannelLen = RtCustomizeChannelList(pMgntInfo, pChannelList->ChannelPlan, pChannelList->ChannelLen, pChannelList->ChnlListEntry); - - // Increase the weighted channel - #ifdef USE_SMART_SCAN - { - u1Byte WeightedChannel[3] = {1, 6, 11}; - - for(i = 0; i < 3; i ++) - { - if((pChnlListEntry = RtGetChnlListEntry(pAdapter, WeightedChannel[i])) != NULL) - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_WEIGHTED_SCAN_PERIOD; - } - } - #endif // #ifdef USE_SMART_SCAN - - if(!pAdapter->bInHctTest) - { - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - pChnlListEntry->ScanPeriod = SCAN_PERIOD_Long; - } - } - - DumpChannelList(pAdapter); - - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - FunctionOut(COMP_SCAN); - - return TRUE; -} - -u1Byte -RtGetConnectedChannels( - IN PADAPTER pAdapter, - OUT pu1Byte ConnectedChannels, - IN u1Byte maxChnlArrayNum -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - u1Byte uNumberOfConnectedChannel = 0; - u1Byte i = 0; - BOOLEAN bDuplicate = FALSE; - - if(0 == (uNumberOfConnectedChannel = MultiChannelGetConnectedChannels( - pAdapter, - ConnectedChannels, - maxChnlArrayNum))) - { - ConnectedChannels[uNumberOfConnectedChannel++] = pDefaultAdapter->MgntInfo.dot11CurrentChannelNumber; - } - - // Let AP can serve the Client During scanning ------------------------------------------------------------------- - if(IsAPModeExist(pDefaultAdapter)) - { - bDuplicate = FALSE; - - for(i = 0; i < uNumberOfConnectedChannel; i++) - { - if(ConnectedChannels[i] == pDefaultAdapter->MgntInfo.dot11CurrentChannelNumber) - { - bDuplicate = TRUE; - break; - } - } - - if(bDuplicate == FALSE) - { - ConnectedChannels[uNumberOfConnectedChannel++] = pDefaultAdapter->MgntInfo.dot11CurrentChannelNumber; - } - } - // -------------------------------------------------------------------------------------------------------- - - - return uNumberOfConnectedChannel; -} - - - -// -// Description: -// (Re-)Construct the scan channel list. -// Any customized request about scanning can be put here. -// By Bruce, 2008-09-09. -// -BOOLEAN -RtConstructScanList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL, pFinalChnlListEntry = NULL; - u2Byte i, j, k; - - u1Byte ConnectedChannels[MAX_SCAN_CHANNEL_NUM]; - u1Byte uNumberOfConnectedChannel = 0; - - const u1Byte CountForAddConnectedChannel = 2; - u1Byte uAccumulatedCountForAdd = 0; - - u1Byte BackupScanChannelListLength; - PRT_CHNL_LIST_ENTRY BackupScanChannelList[MAX_SCAN_CHANNEL_NUM]; - BOOLEAN bRet = FALSE; - - if(pAdapter->pNdis62Common != NULL) - RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("port number %d \n", pAdapter->pNdis62Common->PortNumber)); - - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - RtResetScanChannel(pChannelList); - - RtCalcScanStatistic(pAdapter); - RtCalcScanPeriod(pAdapter); - - RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("ChannelLen %d \n", pChannelList->ChannelLen)); - - if(pDefaultAdapter->bInWFDTest && pDefaultAdapter->MgntInfo.WFDOpChannel != 0) - { - // Rearrange scan channel(one based) - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - - if(pChnlListEntry->ChannelNum == pDefaultAdapter->MgntInfo.WFDOpChannel) - { - RtInsertScanChannel(pChannelList, pChnlListEntry); - } - } - } - - // Rearrange scan channel(one based) - for(i = 0; i < CHANNEL_SCAN_CYCLE_NUM; i ++) - { - for(j = i; j < pChannelList->ChannelLen; j += CHANNEL_SCAN_CYCLE_NUM) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[j]); - - if(pChnlListEntry->ChannelNum == pMgntInfo->dot11CurrentChannelNumber) - { - //4 //Put ChannelNumBeforeScan at the end of the channel list - //4 //So we don't need to do channel switch after scan. - pFinalChnlListEntry = pChnlListEntry; - } - else - { - if(!pDefaultAdapter->bInWFDTest || - (pChnlListEntry->ChannelNum != pDefaultAdapter->MgntInfo.WFDOpChannel)) - RtInsertScanChannel(pChannelList, pChnlListEntry); - } - } - } - - if(pFinalChnlListEntry) - { - RtInsertScanChannel(pChannelList, pFinalChnlListEntry); - } - - //8192DE SMSP Dual Scan for Hidden SSID - if(pMgntInfo->bNeedSkipScan )//Add hidded ssid's channel to first place. - { - PRT_CHNL_LIST_ENTRY ptmpChnlListEntry = NULL; - ptmpChnlListEntry = (pChannelList->ScanChannelList[0]); - for(j = 1; j < pChannelList->ChannelLen; j ++) - { - pChnlListEntry = (pChannelList->ScanChannelList[j]); - - if(pChnlListEntry->ChannelNum == pMgntInfo->hiddenChannel) - { - pChannelList->ScanChannelList[0] = pChnlListEntry; - pChannelList->ScanChannelList[j] = ptmpChnlListEntry; - break; - } - } - } - - - // Construct Connected Channels: --------------------------------------------------------------- - uNumberOfConnectedChannel = RtGetConnectedChannels(pAdapter, ConnectedChannels, MAX_SCAN_CHANNEL_NUM); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%s: uNumberOfConnectedChannel: %d\n", - __FUNCTION__, uNumberOfConnectedChannel) - ); - - for(i = 0; i < uNumberOfConnectedChannel; i++) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%s: Connected Channel: %d\n", - __FUNCTION__, ConnectedChannels[i]) - ); - } - // ------------------------------------------------------------------------------------------ - - if(pMgntInfo->dot11CurrentChannelBandWidth == CHANNEL_WIDTH_20) //yangjun121019 - { - // Insert Connected Channel for Every CountForAddConnectedChannel (Default 2) Channels ----------------------------------- - for(k = 0; k < uNumberOfConnectedChannel; k++) - { - // Search for the Connected Channel Information - for(i = 0; i < pChannelList->ChannelLen; i++) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - - if(pChnlListEntry->ChannelNum == ConnectedChannels[k]) - { - // Backup the ScanChannelList - BackupScanChannelListLength = pChannelList->ScanChannelListLength; - PlatformMoveMemory(BackupScanChannelList, pChannelList->ScanChannelList, sizeof(BackupScanChannelList)); - - // Clean the ScanChannel - RtResetScanChannel(pChannelList); - - // Set the Flag for Connected Channel - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_CONNECTED_CHANNEL; - - for(j = 0, uAccumulatedCountForAdd = 0; j < BackupScanChannelListLength; j++) - { - RtInsertScanChannel(pChannelList, BackupScanChannelList[j]); - - if(BackupScanChannelList[j]->ChannelNum != ConnectedChannels[k]) - {// Different Channel - uAccumulatedCountForAdd++; - - if(uAccumulatedCountForAdd % CountForAddConnectedChannel == 0) - {// Insert Connected Channel - RtInsertScanChannel(pChannelList, pChnlListEntry); - } - } - else - {// Same Channel as Connected Channel - uAccumulatedCountForAdd = 0; - } - } - - break; - } - } - } - // ------------------------------------------------------------------------------------------------------------ - } - - if(CustomScan_ConstructScanListCb(GET_CUSTOM_SCAN_INFO(pAdapter), pChannelList)) - {// system scan - if(!pDefaultAdapter->bInHctTest) - shuffleScanChannelList(pAdapter); - DumpScanChannelList(pAdapter); - bRet = (0 != pChannelList->ScanChannelListLength); - } - else - {// other - DumpScanChannelList(pAdapter); - bRet = (0 != pChannelList->ScanChannelListLength); - } - - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - FunctionOut(COMP_SCAN); - - return bRet; -} - -// -// Caculate the statistic of the scan list. -// -VOID -RtCalcScanStatistic( - IN PADAPTER pAdapter - ) -{ - u1Byte j; - u2Byte ChannelNum, i; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - - PlatformZeroMemory(pChannelList->EachChannelSTAs, MAX_SCAN_CHANNEL_NUM); - pChannelList->bValidSTAStatis = FALSE; - - if(pMgntInfo->NumBssDesc4Query == 0) - return; - - pChannelList->bValidSTAStatis = TRUE; - for(i = 0; i < pMgntInfo->NumBssDesc4Query; i++) - { - ChannelNum = pMgntInfo->bssDesc4Query[i].ChannelNumber; - for(j = 0; j < pChannelList->ChannelLen; j++) - { - if(pChannelList->ChnlListEntry[j].ChannelNum == ChannelNum) - { - pChannelList->EachChannelSTAs[j]++; - break; - } - } - } -} - -// -// Description: -// Caculate the scan period. -// By Bruce, 2009-04-09. -// -VOID -RtCalcScanPeriod( - IN PADAPTER pAdapter - ) -{ - u1Byte i; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - static u1Byte Scan5gCnt = 0; - BOOLEAN bShortScanPeriod = FALSE; - - if(IsActiveAPModeExist(pAdapter) - /*||pMgntInfo->mAssoc || pMgntInfo->bMediaConnect*/)// comment out for temporary solve less AP scaned when connected, Sean, 201501 - { - bShortScanPeriod = TRUE; - } - - if(IS_5G_WIRELESS_MODE(pChannelList->WirelessMode)) - Scan5gCnt++; - - for(i = 0; i < pChannelList->ChannelLen; i++) - { - if(pAdapter->bInHctTest) - { - //For Win7 DTMTest (Performance_ext). To avoid scan too long to roaming to another AP more than 4.1 seconds. - //Maddest 05132009. - if(pMgntInfo->NdisVersion>=RT_NDIS_VERSION_6_20) - pChannelList->ChnlListEntry[i].ScanPeriod =SCAN_PERIOD_Long_Win_DTM; - else - pChannelList->ChnlListEntry[i].ScanPeriod = DEFAULT_ACTIVE_SCAN_PERIOD; - - } - else if(bShortScanPeriod) - { - pChannelList->ChnlListEntry[i].ScanPeriod = SCAN_PERIOD_Short; - } - else if(pMgntInfo->RegForcedScanPeriod != 0 ) - { - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegForcedScanPeriod; - } - else if(pChannelList->ChnlListEntry[i].ScanType == SCAN_PASSIVE) - { - if(pChannelList->ChannelPlan == RT_CHANNEL_DOMAIN_WORLD_WIDE_5G || pChannelList->ChannelLen >= 15) - { - pChannelList->ChnlListEntry[i].ScanPeriod = ((i+Scan5gCnt)%3)?50:100; - } - else - { - pChannelList->ChnlListEntry[i].ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - } - } - else if(pMgntInfo->bScanOnly && pChannelList->bValidSTAStatis) - { - // - // If "pMgntInfo->bScanOnly" is set false as scanning for join, we shall not set the scan period too long. - // A long scan period may cause join procedure timeout. - // Such as the example under XP, the ndis sets the SSID and wait just 2 Seconds for join complete. - // If we cannot complete the join procedure as soon as possible (in 2 s), it will set the dummy SSID, which - // a reset command, and stop the driver stop the join procedure. - // By Bruce, 2009-04-09. - // - if(pChannelList->EachChannelSTAs[i] >= Scan_STA_Large) - { - RT_TRACE( COMP_SCAN, DBG_TRACE, ("RtCalcScanPeriod, Scan_STA_Large change ScanPeriod from %d to %d/%d\n", pChannelList->ChnlListEntry[i].ScanPeriod, pMgntInfo->RegScanLarge, SCAN_PERIOD_Long)); - - if( pMgntInfo->RegScanLarge == 0 ) - pChannelList->ChnlListEntry[i].ScanPeriod = SMART_SCAN_PERIOD_LONG; - else - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegScanLarge; - } - else if(pChannelList->EachChannelSTAs[i] >= Scan_STA_Middle) - { - RT_TRACE( COMP_SCAN, DBG_TRACE, ("RtCalcScanPeriod, Scan_STA_Middle change ScanPeriod from %d to %d/%d\n", pChannelList->ChnlListEntry[i].ScanPeriod, pMgntInfo->RegScanMiddle, DEFAULT_ACTIVE_SCAN_PERIOD)); - - if( pMgntInfo->RegScanMiddle== 0 ) - pChannelList->ChnlListEntry[i].ScanPeriod = SMART_SCAN_PERIOD_MIDDLE; - else - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegScanMiddle; - } - else - { - RT_TRACE( COMP_SCAN, DBG_TRACE, ("RtCalcScanPeriod, !(Scan_STA_Large && Scan_STA_Middle) change ScanPeriod from %d to %d/%d\n", pChannelList->ChnlListEntry[i].ScanPeriod, pMgntInfo->RegScanNormal, SCAN_PERIOD_Short)); - - if( pMgntInfo->RegScanNormal== 0 ) - pChannelList->ChnlListEntry[i].ScanPeriod = SMART_SCAN_PERIOD_SHORT; - else - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegScanNormal; - } - } - else - { - RT_TRACE( COMP_SCAN, DBG_TRACE, ("RtCalcScanPeriod, change ScanPeriod from %d to %d/%d\n", pChannelList->ChnlListEntry[i].ScanPeriod, pMgntInfo->RegScanActive, DEFAULT_ACTIVE_SCAN_PERIOD)); - - //20121121 Sinda enlarge scan time per channel from 50 ms to 100 ms. - if( pMgntInfo->RegScanActive== 0 ) - pChannelList->ChnlListEntry[i].ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - else - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegScanActive; - } - - RT_TRACE(COMP_SCAN, DBG_TRACE, ("channel %d STAs %d Period %d\n", pChannelList->ChnlListEntry[i].ChannelNum, pChannelList->EachChannelSTAs[i], pChannelList->ChnlListEntry[i].ScanPeriod)); - } - -} - - -//sherry sync with 92C_92D, 20110701 GetDualBandChannelList -u1Byte -RtGetDualBandChannel( - IN PADAPTER Adapter, - OUT PRT_CHNL_LIST_ENTRY ChnlListEntryArray -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - pu1Byte pChnlList; - u1Byte listLen; - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - u1Byte i, ChannelLen = 0; - - RT_TRACE(COMP_SCAN, DBG_LOUD,("============> RtGetDualBandChannel \n")); - - if(IS_DOT11D_ENABLE(pMgntInfo)) - { // dot11d is enabled. - RT_SCAN_TYPE scanType = SCAN_ACTIVE; - - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { // domain learning is not complete - scanType = SCAN_PASSIVE; - } - - if(IS_COUNTRY_IE_VALID(pMgntInfo)) - { - listLen = pDot11dInfo->ChnlListLen; - pChnlList = pDot11dInfo->ChnlList; - } - else - { - listLen = sizeof(s_MaxChnlList); - pChnlList = s_MaxChnlList; - } - - if(listLen > MAX_CHANNEL_NUM) - listLen = MAX_CHANNEL_NUM; - - RT_TRACE(COMP_SCAN, DBG_LOUD,("RtGetDualBandChannel: Dot11d case listLen %d \n", listLen)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelNum")); - - for(i = 0; i < listLen; i ++) - { - ChnlListEntryArray[i].ChannelNum = pChnlList[i]; - - // For 5G FCC Radar channel, default passive scan - if(DFS_5G_RADAR_CHANNEL(ChnlListEntryArray[i].ChannelNum)) - ChnlListEntryArray[i].ScanType = SCAN_PASSIVE; - else - ChnlListEntryArray[i].ScanType = scanType; - - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d ",ChnlListEntryArray[i].ChannelNum)); - } - - ChannelLen = listLen; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelLen %d\n", ChannelLen)); - } - else - { // Normal Case - - RT_TRACE(COMP_SCAN, DBG_LOUD,("RtGetDualBandChannel: Normal case")); - - //RT_CHANNEL_DOMAIN_WW13_2G and after are in new format to support both 2.4G & 5G - if(pMgntInfo->ChannelPlan < RT_CHANNEL_DOMAIN_WW13_2G) - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("DefaultChannelPlan[%d].Len %d \n", pMgntInfo->ChannelPlan, DefaultChannelPlan[pMgntInfo->ChannelPlan].Len)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelNum")); - - for(i = 0; i < DefaultChannelPlan[pMgntInfo->ChannelPlan].Len; i ++) - { - ChnlListEntryArray[i].ChannelNum = DefaultChannelPlan[pMgntInfo->ChannelPlan].Channel[i]; - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d ",ChnlListEntryArray[i].ChannelNum)); - } - - ChannelLen = DefaultChannelPlan[pMgntInfo->ChannelPlan].Len; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelLen %d\n", ChannelLen)); - } - else - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("DefaultChannelPlan[%d].Len2_4G %d \n", pMgntInfo->ChannelPlan, DefaultChannelPlan[pMgntInfo->ChannelPlan].Len2_4G)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelNum")); - - for(i = 0; i < DefaultChannelPlan[pMgntInfo->ChannelPlan].Len2_4G; i++) - { - ChnlListEntryArray[i].ChannelNum = DefaultChannelPlan[pMgntInfo->ChannelPlan].Channel2_4G[i]; - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d ",ChnlListEntryArray[i].ChannelNum)); - } - - RT_TRACE(COMP_SCAN, DBG_LOUD,("DefaultChannelPlan[%d].Len5G %d \n", pMgntInfo->ChannelPlan, DefaultChannelPlan[pMgntInfo->ChannelPlan].Len5G)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelNum")); - - ChannelLen = DefaultChannelPlan[pMgntInfo->ChannelPlan].Len2_4G; - for(i = 0; i < DefaultChannelPlan[pMgntInfo->ChannelPlan].Len5G; i++) - { - ChnlListEntryArray[ChannelLen].ChannelNum = DefaultChannelPlan[pMgntInfo->ChannelPlan].Channel5G[i]; - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d ",ChnlListEntryArray[ChannelLen].ChannelNum)); - ChannelLen++; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelLen %d\n", ChannelLen)); - } - - - for(i = 0; i < ChannelLen; i ++) - { - // For 5G FCC Radar channel, default passive scan - if(DFS_5G_RADAR_CHANNEL(ChnlListEntryArray[i].ChannelNum)) - ChnlListEntryArray[i].ScanType = SCAN_PASSIVE; - else - ChnlListEntryArray[i].ScanType = SCAN_ACTIVE; - } - } - - RT_TRACE(COMP_SCAN, DBG_LOUD,("pMgntInfo->ChannelPlan %d \n",pMgntInfo->ChannelPlan)); - - ChannelLen = RtCustomizeChannelList(pMgntInfo, pMgntInfo->ChannelPlan, ChannelLen, ChnlListEntryArray); - - return ChannelLen; -} - - |
