| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846 |
- /*
- ** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/mgmt/rlm_domain.c#1
- */
- /*! \file "rlm_domain.c"
- \brief
- */
- /*
- ** Log: rlm_domain.c
- *
- * 11 10 2011 cm.chang
- * NULL
- * Modify debug message for XLOG
- *
- * 09 29 2011 cm.chang
- * NULL
- * Change the function prototype of rlmDomainGetChnlList()
- *
- * 09 23 2011 cm.chang
- * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
- * Let channel number to zero if band is illegal
- *
- * 09 22 2011 cm.chang
- * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
- * Exclude channel list with illegal band
- *
- * 09 15 2011 cm.chang
- * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
- * Use defined country group to have a change to add new group
- *
- * 09 08 2011 cm.chang
- * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
- * Use new fields ucChannelListMap and ucChannelListIndex in NVRAM
- *
- * 08 31 2011 cm.chang
- * [WCXRP00000969] [MT6620 Wi-Fi][Driver][FW] Channel list for 5G band based on country code
- * .
- *
- * 06 01 2011 cm.chang
- * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function
- * Provide legal channel function based on domain
- *
- * 03 19 2011 yuche.tsai
- * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct.
- * Add beacon timeout support for WiFi Direct Network.
- *
- * 03 02 2011 terry.wu
- * [WCXRP00000505] [MT6620 Wi-Fi][Driver/FW] WiFi Direct Integration
- * Export rlmDomainGetDomainInfo for p2p driver.
- *
- * 01 12 2011 cm.chang
- * [WCXRP00000354] [MT6620 Wi-Fi][Driver][FW] Follow NVRAM bandwidth setting
- * User-defined bandwidth is for 2.4G and 5G individually
- *
- * 12 07 2010 cm.chang
- * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant
- * 1. Country code is from NVRAM or supplicant
- * 2. Change band definition in CMD/EVENT.
- *
- * 07 08 2010 cp.wu
- *
- * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
- *
- * 07 08 2010 cm.chang
- * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
- * Check draft RLM code for HT cap
- *
- * 03 25 2010 cm.chang
- * [BORA00000018]Integrate WIFI part into BORA for the 1st time
- * Filter out not supported RF freq when reporting available chnl list
- *
- * 01 22 2010 cm.chang
- * [BORA00000018]Integrate WIFI part into BORA for the 1st time
- * Support protection and bandwidth switch
- *
- * 01 13 2010 cm.chang
- * [BORA00000018]Integrate WIFI part into BORA for the 1st time
- * Provide query function about full channel list.
- *
- * Dec 1 2009 mtk01104
- * [BORA00000018] Integrate WIFI part into BORA for the 1st time
- *
- *
- **
- */
- /*******************************************************************************
- * C O M P I L E R F L A G S
- ********************************************************************************
- */
- /*******************************************************************************
- * E X T E R N A L R E F E R E N C E S
- ********************************************************************************
- */
- #include "precomp.h"
- /*******************************************************************************
- * C O N S T A N T S
- ********************************************************************************
- */
- /*******************************************************************************
- * D A T A T Y P E S
- ********************************************************************************
- */
- /*******************************************************************************
- * P U B L I C D A T A
- ********************************************************************************
- */
- /* The following country or domain shall be set from host driver.
- * And host driver should pass specified DOMAIN_INFO_ENTRY to MT6620 as
- * the channel list of being a STA to do scanning/searching AP or being an
- * AP to choose an adequate channel if auto-channel is set.
- */
- /* Define mapping tables between country code and its channel set
- */
- static const UINT_16 g_u2CountryGroup0[] = {
- COUNTRY_CODE_AO, COUNTRY_CODE_BZ, COUNTRY_CODE_BJ, COUNTRY_CODE_BT,
- COUNTRY_CODE_BO, COUNTRY_CODE_BI, COUNTRY_CODE_CM, COUNTRY_CODE_CF,
- COUNTRY_CODE_TD, COUNTRY_CODE_KM, COUNTRY_CODE_CD, COUNTRY_CODE_CG,
- COUNTRY_CODE_CI, COUNTRY_CODE_DJ, COUNTRY_CODE_GQ, COUNTRY_CODE_ER,
- COUNTRY_CODE_FJ, COUNTRY_CODE_GA, COUNTRY_CODE_GM, COUNTRY_CODE_GN,
- COUNTRY_CODE_GW, COUNTRY_CODE_RKS, COUNTRY_CODE_KG, COUNTRY_CODE_LY,
- COUNTRY_CODE_MG, COUNTRY_CODE_ML, COUNTRY_CODE_NR, COUNTRY_CODE_NC,
- COUNTRY_CODE_ST, COUNTRY_CODE_SC, COUNTRY_CODE_SL, COUNTRY_CODE_SB,
- COUNTRY_CODE_SO, COUNTRY_CODE_SR, COUNTRY_CODE_SZ, COUNTRY_CODE_TJ,
- COUNTRY_CODE_TG, COUNTRY_CODE_TO, COUNTRY_CODE_TM, COUNTRY_CODE_TV,
- COUNTRY_CODE_VU, COUNTRY_CODE_IL, COUNTRY_CODE_YE
- };
- static const UINT_16 g_u2CountryGroup1[] = {
- COUNTRY_CODE_AS, COUNTRY_CODE_AI, COUNTRY_CODE_BM, COUNTRY_CODE_CA,
- COUNTRY_CODE_KY, COUNTRY_CODE_GU, COUNTRY_CODE_FM, COUNTRY_CODE_PR,
- COUNTRY_CODE_US, COUNTRY_CODE_VI,
- };
- static const UINT_16 g_u2CountryGroup2[] = {
- COUNTRY_CODE_AR, COUNTRY_CODE_AU, COUNTRY_CODE_AZ, COUNTRY_CODE_BW,
- COUNTRY_CODE_KH, COUNTRY_CODE_CX, COUNTRY_CODE_CO, COUNTRY_CODE_CR,
- #if (CFG_CN_SUPPORT_CLASS121 == 1)
- COUNTRY_CODE_CN,
- #endif
- COUNTRY_CODE_EC, COUNTRY_CODE_GD, COUNTRY_CODE_GT, COUNTRY_CODE_HK,
- COUNTRY_CODE_KI, COUNTRY_CODE_LB, COUNTRY_CODE_LR, COUNTRY_CODE_MN,
- COUNTRY_CODE_AN, COUNTRY_CODE_NZ, COUNTRY_CODE_NI, COUNTRY_CODE_PW,
- COUNTRY_CODE_PY, COUNTRY_CODE_PE, COUNTRY_CODE_PH, COUNTRY_CODE_WS,
- COUNTRY_CODE_SG, COUNTRY_CODE_LK, COUNTRY_CODE_TH, COUNTRY_CODE_TT,
- COUNTRY_CODE_UY, COUNTRY_CODE_VN
- };
- static const UINT_16 g_u2CountryGroup3[] = {
- COUNTRY_CODE_AW, COUNTRY_CODE_LA, COUNTRY_CODE_SA, COUNTRY_CODE_AE,
- COUNTRY_CODE_UG
- };
- static const UINT_16 g_u2CountryGroup4[] = { COUNTRY_CODE_MM };
- static const UINT_16 g_u2CountryGroup5[] = {
- COUNTRY_CODE_AL, COUNTRY_CODE_DZ, COUNTRY_CODE_AD, COUNTRY_CODE_AT,
- COUNTRY_CODE_BY, COUNTRY_CODE_BE, COUNTRY_CODE_BA, COUNTRY_CODE_VG,
- COUNTRY_CODE_BG, COUNTRY_CODE_CV, COUNTRY_CODE_HR, COUNTRY_CODE_CY,
- COUNTRY_CODE_CZ, COUNTRY_CODE_DK, COUNTRY_CODE_EE, COUNTRY_CODE_ET,
- COUNTRY_CODE_FI, COUNTRY_CODE_FR, COUNTRY_CODE_GF, COUNTRY_CODE_PF,
- COUNTRY_CODE_TF, COUNTRY_CODE_GE, COUNTRY_CODE_DE, COUNTRY_CODE_GH,
- COUNTRY_CODE_GR, COUNTRY_CODE_GP, COUNTRY_CODE_HU, COUNTRY_CODE_IS,
- COUNTRY_CODE_IQ, COUNTRY_CODE_IE, COUNTRY_CODE_IT, COUNTRY_CODE_KE,
- COUNTRY_CODE_LV, COUNTRY_CODE_LS, COUNTRY_CODE_LI, COUNTRY_CODE_LT,
- COUNTRY_CODE_LU, COUNTRY_CODE_MK, COUNTRY_CODE_MT, COUNTRY_CODE_MQ,
- COUNTRY_CODE_MR, COUNTRY_CODE_MU, COUNTRY_CODE_YT, COUNTRY_CODE_MD,
- COUNTRY_CODE_MC, COUNTRY_CODE_ME, COUNTRY_CODE_MS, COUNTRY_CODE_NL,
- COUNTRY_CODE_NO, COUNTRY_CODE_OM, COUNTRY_CODE_PL, COUNTRY_CODE_PT,
- COUNTRY_CODE_RE, COUNTRY_CODE_RO, COUNTRY_CODE_MF, COUNTRY_CODE_SM,
- COUNTRY_CODE_SN, COUNTRY_CODE_RS, COUNTRY_CODE_SK, COUNTRY_CODE_SI,
- COUNTRY_CODE_ZA, COUNTRY_CODE_ES, COUNTRY_CODE_SE, COUNTRY_CODE_CH,
- COUNTRY_CODE_TR, COUNTRY_CODE_TC, COUNTRY_CODE_GB, COUNTRY_CODE_VA,
- COUNTRY_CODE_FR
- };
- static const UINT_16 g_u2CountryGroup6[] = { COUNTRY_CODE_JP };
- static const UINT_16 g_u2CountryGroup7[] = {
- COUNTRY_CODE_AM, COUNTRY_CODE_IL, COUNTRY_CODE_KW, COUNTRY_CODE_MA,
- COUNTRY_CODE_NE, COUNTRY_CODE_TN, COUNTRY_CODE_MA
- };
- static const UINT_16 g_u2CountryGroup8[] = { COUNTRY_CODE_NP };
- static const UINT_16 g_u2CountryGroup9[] = { COUNTRY_CODE_AF };
- static const UINT_16 g_u2CountryGroup10[] = {
- COUNTRY_CODE_AG, COUNTRY_CODE_BS, COUNTRY_CODE_BH, COUNTRY_CODE_BB,
- COUNTRY_CODE_BN, COUNTRY_CODE_CL, COUNTRY_CODE_EG,
- #if (CFG_CN_SUPPORT_CLASS121 == 0)
- COUNTRY_CODE_CN,
- #endif
- COUNTRY_CODE_SV, COUNTRY_CODE_IN, COUNTRY_CODE_MY, COUNTRY_CODE_MV,
- COUNTRY_CODE_PA, COUNTRY_CODE_VE, COUNTRY_CODE_ZM,
- };
- static const UINT_16 g_u2CountryGroup11[] = { COUNTRY_CODE_JO, COUNTRY_CODE_PG };
- static const UINT_16 g_u2CountryGroup12[] = {
- COUNTRY_CODE_BF, COUNTRY_CODE_GY, COUNTRY_CODE_HT, COUNTRY_CODE_HN,
- COUNTRY_CODE_JM, COUNTRY_CODE_MO, COUNTRY_CODE_MW, COUNTRY_CODE_PK,
- COUNTRY_CODE_QA, COUNTRY_CODE_RW, COUNTRY_CODE_KN, COUNTRY_CODE_TZ,
- };
- static const UINT_16 g_u2CountryGroup13[] = { COUNTRY_CODE_ID };
- static const UINT_16 g_u2CountryGroup14[] = { COUNTRY_CODE_KR };
- static const UINT_16 g_u2CountryGroup15[] = { COUNTRY_CODE_NG };
- static const UINT_16 g_u2CountryGroup16[] = {
- COUNTRY_CODE_BD, COUNTRY_CODE_BR, COUNTRY_CODE_DM, COUNTRY_CODE_DO,
- COUNTRY_CODE_FK, COUNTRY_CODE_KZ, COUNTRY_CODE_MX, COUNTRY_CODE_MZ,
- COUNTRY_CODE_NA, COUNTRY_CODE_RU, COUNTRY_CODE_LC, COUNTRY_CODE_VC,
- COUNTRY_CODE_UA, COUNTRY_CODE_UZ, COUNTRY_CODE_ZW
- };
- static const UINT_16 g_u2CountryGroup17[] = { COUNTRY_CODE_MP };
- static const UINT_16 g_u2CountryGroup18[] = { COUNTRY_CODE_TW };
- static const UINT_16 g_u2CountryGroup19[] = {
- COUNTRY_CODE_CK, COUNTRY_CODE_CU, COUNTRY_CODE_TL, COUNTRY_CODE_FO,
- COUNTRY_CODE_GI, COUNTRY_CODE_GB, COUNTRY_CODE_IR, COUNTRY_CODE_IM,
- COUNTRY_CODE_JE, COUNTRY_CODE_KP, COUNTRY_CODE_MH, COUNTRY_CODE_NU,
- COUNTRY_CODE_NF, COUNTRY_CODE_PS, COUNTRY_CODE_PN, COUNTRY_CODE_PM,
- COUNTRY_CODE_SS, COUNTRY_CODE_SD, COUNTRY_CODE_SY
- };
- static const UINT_16 g_u2CountryGroup20[] = {
- COUNTRY_CODE_EU, COUNTRY_CODE_FF
- /* When country code is not found and no matched NVRAM setting, this domain info will be used.
- * So mark all country codes to reduce search time. 20110908
- */
- };
- static const UINT_16 g_u2CountryGroup21[] = {
- COUNTRY_CODE_UDF
- };
- #define REG_DOMAIN_DEF_IDX 20 /* EU (Europe Union) */
- DOMAIN_INFO_ENTRY arSupportedRegDomains[] = {
- {
- (PUINT_16) g_u2CountryGroup0, sizeof(g_u2CountryGroup0) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_LOW_NA */
- {118, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_MID_NA */
- {121, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_WW_NA */
- {125, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_UPPER_NA */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup1, sizeof(g_u2CountryGroup1) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE}
- , /* CH_SET_2G4_1_11 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 12, FALSE}
- , /* CH_SET_UNII_WW_100_144 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup2, sizeof(g_u2CountryGroup2) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 12, FALSE}
- , /* CH_SET_UNII_WW_100_144 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup3, sizeof(g_u2CountryGroup3) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 12, FALSE}
- , /* CH_SET_UNII_WW_100_144 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE}
- , /* CH_SET_UNII_UPPER_149_161 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup4, sizeof(g_u2CountryGroup4) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 12, FALSE}
- , /* CH_SET_UNII_WW_100_144 */
- {125, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_UPPER_NA */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup5, sizeof(g_u2CountryGroup5) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE}
- , /* CH_SET_UNII_WW_100_140 */
- {125, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_UPPER_NA */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup6, sizeof(g_u2CountryGroup6) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {82, BAND_2G4, CHNL_SPAN_5, 14, 1, FALSE}
- , /* CH_SET_2G4_14_14 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE}
- , /* CH_SET_UNII_WW_100_140 */
- {125, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_UPPER_NA */
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup7, sizeof(g_u2CountryGroup7) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_WW_NA */
- {125, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_UPPER_NA */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup8, sizeof(g_u2CountryGroup8) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_WW_NA */
- {125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE}
- , /* CH_SET_UNII_UPPER_149_161 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup9, sizeof(g_u2CountryGroup9) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_MID_NA */
- {121, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_WW_NA */
- {125, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_UPPER_NA */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup10, sizeof(g_u2CountryGroup10) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_WW_NA */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup11, sizeof(g_u2CountryGroup11) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_MID_NA */
- {121, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_WW_NA */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup12, sizeof(g_u2CountryGroup12) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_LOW_NA */
- {118, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_MID_NA */
- {121, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_WW_NA */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup13, sizeof(g_u2CountryGroup13) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_LOW_NA */
- {118, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_MID_NA */
- {121, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_WW_NA */
- {125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE}
- , /* CH_SET_UNII_UPPER_149_161 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup14, sizeof(g_u2CountryGroup14) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 8, FALSE}
- , /* CH_SET_UNII_WW_100_128 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 4, FALSE}
- , /* CH_SET_UNII_UPPER_149_161 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup15, sizeof(g_u2CountryGroup15) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_NULL, 0, 0, 0, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE}
- , /* CH_SET_UNII_WW_100_140 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup16, sizeof(g_u2CountryGroup16) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE}
- , /* CH_SET_UNII_WW_100_140 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup17, sizeof(g_u2CountryGroup17) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE}
- , /* CH_SET_2G4_1_11 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE}
- , /* CH_SET_UNII_WW_100_140 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup18, sizeof(g_u2CountryGroup18) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE}
- , /* CH_SET_2G4_1_11 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 11, FALSE}
- , /* CH_SET_UNII_WW_100_140 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- (PUINT_16) g_u2CountryGroup19, sizeof(g_u2CountryGroup19) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 12, FALSE}
- , /* CH_SET_UNII_WW_100_144 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 5, FALSE}
- , /* CH_SET_UNII_UPPER_149_165 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- /* Note: REG_DOMAIN_DEF_IDX group is Europe union */
- (PUINT_16) g_u2CountryGroup20, sizeof(g_u2CountryGroup20) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 4, FALSE}
- , /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 4, FALSE}
- , /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 12, FALSE}
- , /* CH_SET_UNII_WW_100_144 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 7, FALSE}
- , /* CH_SET_UNII_UPPER_149_173 */
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- ,
- {
- /* Note: for customer configured their own scanning list and passive scan list */
- (PUINT_16) g_u2CountryGroup21, sizeof(g_u2CountryGroup21) / 2,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 1, 12, FALSE}
- , /* CH_SET_2G4_1_13 */
- {115, BAND_5G, CHNL_SPAN_20, 36, 0, FALSE}
- ,
- {118, BAND_5G, CHNL_SPAN_20, 52, 0, FALSE}
- ,
- {121, BAND_5G, CHNL_SPAN_20, 100, 0, FALSE}
- ,
- {125, BAND_5G, CHNL_SPAN_20, 149, 0, FALSE}
- ,
- {0, BAND_NULL, 0, 0, 0, FALSE}
- }
- }
- };
- #define REG_DOMAIN_PASSIVE_DEF_IDX 0
- #define REG_DOMAIN_PASSIVE_UDF_IDX 1
- static UINT_16 g_u2CountryGroup0_Passive[] = {
- COUNTRY_CODE_UDF
- };
- DOMAIN_INFO_ENTRY arSupportedRegDomains_Passive[] = {
- {
- /* default passive scan channel table is empty */
- COUNTRY_CODE_NULL, 0,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 11, 0, 0}, /* CH_SET_2G4_1_14 */
- {82, BAND_2G4, CHNL_SPAN_5, 5, 0, 0},
- {115, BAND_5G, CHNL_SPAN_20, 36, 0, 0}, /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 0, 0}, /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 0, 0}, /* CH_SET_UNII_WW_100_140 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 0, 0}, /* CH_SET_UNII_UPPER_149_173 */
- }
- },
- {
- /* User Defined passive scan channel table */
- g_u2CountryGroup0_Passive, 0,
- {
- {81, BAND_2G4, CHNL_SPAN_5, 12, 1, 0}, /* CH_SET_2G4_1_14 */
- {82, BAND_2G4, CHNL_SPAN_5, 5, 0, 0},
- {115, BAND_5G, CHNL_SPAN_20, 36, 0, 0}, /* CH_SET_UNII_LOW_36_48 */
- {118, BAND_5G, CHNL_SPAN_20, 52, 0, 0}, /* CH_SET_UNII_MID_52_64 */
- {121, BAND_5G, CHNL_SPAN_20, 100, 0, 0}, /* CH_SET_UNII_WW_100_140 */
- {125, BAND_5G, CHNL_SPAN_20, 149, 0, 0}, /* CH_SET_UNII_UPPER_149_173 */
- }
- }
- };
- #if 0
- COUNTRY_CH_SET_T arCountryChSets[] = {
- /* idx=0: US, Bahamas, Barbados, Bolivia(Voluntary), Dominica (the Commonwealth of Dominica),
- The Dominican Republic, Haiti */
- {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165},
- /* idx=1: Brazil, Ecuador, Hong Kong, Mexico, Peru */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165},
- /* idx=2: JP1, Colombia(Voluntary), Paraguay */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA},
- /* idx=3: JP2 */
- {CH_SET_2G4_1_14, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_NA},
- /* idx=4: CN, Uruguay, Morocco */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA,
- CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165},
- /* idx=5: Argentina */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165},
- /* idx=6: Australia, New Zealand */
- {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161},
- /* idx=7: Russia */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_161},
- /* idx=8: Indonesia */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_NA,
- CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_161},
- /* idx=9: Canada */
- {CH_SET_2G4_1_11, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_116_132_140, CH_SET_UNII_UPPER_149_165},
- /* idx=10: Chile, India, Saudi Arabia, Singapore */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_149_165},
- /* idx=11: Israel, Ukraine */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA},
- /* idx=12: Jordan, Kuwait */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_NA,
- CH_SET_UNII_WW_NA, CH_SET_UNII_UPPER_NA},
- /* idx=13: South Korea */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_128, CH_SET_UNII_UPPER_149_165},
- /* idx=14: Taiwan */
- {CH_SET_2G4_1_11, CH_SET_UNII_LOW_NA, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_165},
- /* idx=15: EU all countries */
- {CH_SET_2G4_1_13, CH_SET_UNII_LOW_36_48, CH_SET_UNII_MID_52_64,
- CH_SET_UNII_WW_100_140, CH_SET_UNII_UPPER_149_173}
- };
- #endif
- #include "rlm_txpwr_init.h"
- #if CFG_SUPPORT_PWR_LIMIT_COUNTRY
- SUBBAND_CHANNEL_T g_rRlmSubBand[] = {
- {BAND_2G4_LOWER_BOUND, BAND_2G4_UPPER_BOUND, 1, 0}
- , /* 2.4G */
- {UNII1_LOWER_BOUND, UNII1_UPPER_BOUND, 2, 0}
- , /* ch36,38,40,..,48 */
- {UNII2A_LOWER_BOUND, UNII2A_UPPER_BOUND, 2, 0}
- , /* ch52,54,56,..,64 */
- {UNII2C_LOWER_BOUND, UNII2C_UPPER_BOUND, 2, 0}
- , /* ch100,102,104,...,144 */
- {UNII3_LOWER_BOUND, UNII3_UPPER_BOUND, 2, 0} /* ch149,151,153,....,173 */
- };
- #endif
- /*******************************************************************************
- * P R I V A T E D A T A
- ********************************************************************************
- */
- /*******************************************************************************
- * M A C R O S
- ********************************************************************************
- */
- /*******************************************************************************
- * F U N C T I O N D E C L A R A T I O N S
- ********************************************************************************
- */
- /*******************************************************************************
- * F U N C T I O N S
- ********************************************************************************
- */
- UINT32 rlmDomainSupOperatingClassIeFill(UINT_8 *pBuf)
- {
- /*
- The Country element should only be included for Status Code 0 (Successful).
- */
- UINT32 u4IeLen;
- UINT8 aucClass[12] = { 0x01, 0x02, 0x03, 0x05, 0x16, 0x17, 0x19, 0x1b,
- 0x1c, 0x1e, 0x20, 0x21
- };
- /*
- The Supported Operating Classes element is used by a STA to advertise the
- operating classes that it is capable of operating with in this country.
- The Country element (see 8.4.2.10) allows a STA to configure its PHY and MAC
- for operation when the operating triplet of Operating Extension Identifier,
- Operating Class, and Coverage Class fields is present.
- */
- SUP_OPERATING_CLASS_IE(pBuf)->ucId = ELEM_ID_SUP_OPERATING_CLASS;
- SUP_OPERATING_CLASS_IE(pBuf)->ucLength = 1 + sizeof(aucClass);
- SUP_OPERATING_CLASS_IE(pBuf)->ucCur = 0x0c; /* 0x51 */
- kalMemCopy(SUP_OPERATING_CLASS_IE(pBuf)->ucSup, aucClass, sizeof(aucClass));
- u4IeLen = (SUP_OPERATING_CLASS_IE(pBuf)->ucLength + 2);
- pBuf += u4IeLen;
- COUNTRY_IE(pBuf)->ucId = ELEM_ID_COUNTRY_INFO;
- COUNTRY_IE(pBuf)->ucLength = 6;
- COUNTRY_IE(pBuf)->aucCountryStr[0] = 0x55;
- COUNTRY_IE(pBuf)->aucCountryStr[1] = 0x53;
- COUNTRY_IE(pBuf)->aucCountryStr[2] = 0x20;
- COUNTRY_IE(pBuf)->arCountryStr[0].ucFirstChnlNum = 1;
- COUNTRY_IE(pBuf)->arCountryStr[0].ucNumOfChnl = 11;
- COUNTRY_IE(pBuf)->arCountryStr[0].cMaxTxPwrLv = 0x1e;
- u4IeLen += (COUNTRY_IE(pBuf)->ucLength + 2);
- return u4IeLen;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief
- *
- * \param[in/out]
- *
- * \return none
- */
- /*----------------------------------------------------------------------------*/
- P_DOMAIN_INFO_ENTRY rlmDomainGetDomainInfo(P_ADAPTER_T prAdapter)
- {
- #define REG_DOMAIN_GROUP_NUM \
- (sizeof(arSupportedRegDomains) / sizeof(DOMAIN_INFO_ENTRY))
- UINT_16 i, j;
- P_DOMAIN_INFO_ENTRY prDomainInfo;
- P_REG_INFO_T prRegInfo;
- UINT_16 u2TargetCountryCode;
- ASSERT(prAdapter);
- prRegInfo = &prAdapter->prGlueInfo->rRegInfo;
- DBGLOG(RLM, TRACE, "Domain: map=%d, idx=%d, code=0x%04x\n",
- prRegInfo->eRegChannelListMap, prRegInfo->ucRegChannelListIndex,
- prAdapter->rWifiVar.rConnSettings.u2CountryCode);
- /* only 1 is set among idx/customized/countryCode in NVRAM */
- /* searched by idx */
- if (prRegInfo->eRegChannelListMap == REG_CH_MAP_TBL_IDX &&
- prRegInfo->ucRegChannelListIndex < REG_DOMAIN_GROUP_NUM) {
- prDomainInfo = &arSupportedRegDomains[prRegInfo->ucRegChannelListIndex];
- goto L_set_domain_info;
- } /* searched by customized */
- else if (prRegInfo->eRegChannelListMap == REG_CH_MAP_CUSTOMIZED) {
- prDomainInfo = &prRegInfo->rDomainInfo;
- goto L_set_domain_info;
- }
- /* searched by countryCode */
- u2TargetCountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode;
- for (i = 0; i < REG_DOMAIN_GROUP_NUM; i++) {
- prDomainInfo = &arSupportedRegDomains[i];
- if ((prDomainInfo->u4CountryNum && prDomainInfo->pu2CountryGroup) ||
- prDomainInfo->u4CountryNum == 0) {
- for (j = 0; j < prDomainInfo->u4CountryNum; j++) {
- if (prDomainInfo->pu2CountryGroup[j] == u2TargetCountryCode)
- break;
- }
- if (j < prDomainInfo->u4CountryNum)
- break; /* Found */
- }
- }
- DATA_STRUCT_INSPECTING_ASSERT(REG_DOMAIN_DEF_IDX < REG_DOMAIN_GROUP_NUM);
- /* If no matched countryCode */
- if (i >= REG_DOMAIN_GROUP_NUM) {
- if (prAdapter->prDomainInfo) /* use previous NVRAM setting */
- return prAdapter->prDomainInfo;
- /* if never set before, use EU */
- prDomainInfo = &arSupportedRegDomains[REG_DOMAIN_DEF_IDX];
- }
- L_set_domain_info:
- prAdapter->prDomainInfo = prDomainInfo;
- return prDomainInfo;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief
- *
- * \param[in/out] The input variable pointed by pucNumOfChannel is the max
- * arrary size. The return value indciates meaning list size.
- *
- * \return none
- */
- /*----------------------------------------------------------------------------*/
- VOID
- rlmDomainGetChnlList(P_ADAPTER_T prAdapter,
- ENUM_BAND_T eSpecificBand,
- UINT_8 ucMaxChannelNum, PUINT_8 pucNumOfChannel, P_RF_CHANNEL_INFO_T paucChannelList)
- {
- UINT_8 i, j, ucNum;
- P_DOMAIN_SUBBAND_INFO prSubband;
- P_DOMAIN_INFO_ENTRY prDomainInfo;
- ASSERT(prAdapter);
- ASSERT(paucChannelList);
- ASSERT(pucNumOfChannel);
- /* If no matched country code, use previous NVRAM setting or EU */
- prDomainInfo = rlmDomainGetDomainInfo(prAdapter);
- ASSERT(prDomainInfo);
- ucNum = 0;
- for (i = 0; i < MAX_SUBBAND_NUM; i++) {
- prSubband = &prDomainInfo->rSubBand[i];
- if (prSubband->ucBand == BAND_NULL || prSubband->ucBand >= BAND_NUM ||
- (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand))
- continue;
- if (eSpecificBand == BAND_NULL || prSubband->ucBand == eSpecificBand) {
- for (j = 0; j < prSubband->ucNumChannels; j++) {
- if (ucNum >= ucMaxChannelNum)
- break;
- paucChannelList[ucNum].eBand = prSubband->ucBand;
- paucChannelList[ucNum].ucChannelNum =
- prSubband->ucFirstChannelNum + j * prSubband->ucChannelSpan;
- ucNum++;
- }
- }
- }
- *pucNumOfChannel = ucNum;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * @brief
- *
- * @param[in]
- *
- * @return (none)
- */
- /*----------------------------------------------------------------------------*/
- VOID rlmDomainSendCmd(P_ADAPTER_T prAdapter, BOOLEAN fgIsOid)
- {
- P_DOMAIN_INFO_ENTRY prDomainInfo;
- P_CMD_SET_DOMAIN_INFO_T prCmd;
- WLAN_STATUS rStatus;
- P_DOMAIN_SUBBAND_INFO prSubBand;
- UINT_8 i;
- prDomainInfo = rlmDomainGetDomainInfo(prAdapter);
- ASSERT(prDomainInfo);
- prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_DOMAIN_INFO_T));
- ASSERT(prCmd);
- /* To do: exception handle */
- if (!prCmd) {
- DBGLOG(RLM, ERROR, "Domain: no buf to send cmd\n");
- return;
- }
- kalMemZero(prCmd, sizeof(CMD_SET_DOMAIN_INFO_T));
- /* previous country code == FF : ignore country code, current country code == FE : resume */
- if (prAdapter->rWifiVar.rConnSettings.u2CountryCodeBakup == COUNTRY_CODE_FF) {
- if (prAdapter->rWifiVar.rConnSettings.u2CountryCode != COUNTRY_CODE_FE) {
- DBGLOG(RLM, INFO,
- "Domain: skip country code cmd (0x%x)\n",
- prAdapter->rWifiVar.rConnSettings.u2CountryCode);
- cnmMemFree(prAdapter, prCmd);
- return;
- }
- DBGLOG(RLM, INFO,
- "Domain: disable skip country code cmd (0x%x)\n",
- prAdapter->rWifiVar.rConnSettings.u2CountryCode);
- }
- prAdapter->rWifiVar.rConnSettings.u2CountryCodeBakup = prAdapter->rWifiVar.rConnSettings.u2CountryCode;
- DBGLOG(RLM, LOUD, "Domain: country code backup %x\n", prAdapter->rWifiVar.rConnSettings.u2CountryCodeBakup);
- prCmd->u2CountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode;
- prCmd->u2IsSetPassiveScan = 0;
- prCmd->uc2G4Bandwidth = prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode;
- prCmd->uc5GBandwidth = prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode;
- prCmd->aucReserved[0] = 0;
- prCmd->aucReserved[1] = 0;
- for (i = 0; i < 6; i++) {
- prSubBand = &prDomainInfo->rSubBand[i];
- prCmd->rSubBand[i].ucRegClass = prSubBand->ucRegClass;
- prCmd->rSubBand[i].ucBand = prSubBand->ucBand;
- if (prSubBand->ucBand != BAND_NULL && prSubBand->ucBand < BAND_NUM) {
- prCmd->rSubBand[i].ucChannelSpan = prSubBand->ucChannelSpan;
- prCmd->rSubBand[i].ucFirstChannelNum = prSubBand->ucFirstChannelNum;
- prCmd->rSubBand[i].ucNumChannels = prSubBand->ucNumChannels;
- }
- }
- /* Update domain info to chip */
- rStatus = wlanSendSetQueryCmd(prAdapter, /* prAdapter */
- CMD_ID_SET_DOMAIN_INFO, /* ucCID */
- TRUE, /* fgSetQuery */
- FALSE, /* fgNeedResp */
- fgIsOid, /* fgIsOid */
- NULL, /* pfCmdDoneHandler */
- NULL, /* pfCmdTimeoutHandler */
- sizeof(CMD_SET_DOMAIN_INFO_T), /* u4SetQueryInfoLen */
- (PUINT_8) prCmd, /* pucInfoBuffer */
- NULL, /* pvSetQueryBuffer */
- 0 /* u4SetQueryBufferLen */
- );
- ASSERT(rStatus == WLAN_STATUS_PENDING);
- cnmMemFree(prAdapter, prCmd);
- #if CFG_SUPPORT_PWR_LIMIT_COUNTRY
- rlmDomainSendPwrLimitCmd(prAdapter);
- #endif
- rlmDomainPassiveScanSendCmd(prAdapter, fgIsOid);
- }
- VOID rlmDomainPassiveScanSendCmd(P_ADAPTER_T prAdapter, BOOLEAN fgIsOid)
- {
- P_DOMAIN_INFO_ENTRY prDomainInfo;
- P_CMD_SET_DOMAIN_INFO_T prCmd;
- WLAN_STATUS rStatus;
- P_DOMAIN_SUBBAND_INFO prSubBand;
- UINT_8 i;
- prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_SET_DOMAIN_INFO_T));
- ASSERT(prCmd);
- /* To do: exception handle */
- if (!prCmd) {
- DBGLOG(RLM, ERROR, "Domain: no buf to send cmd\n");
- return;
- }
- kalMemZero(prCmd, sizeof(CMD_SET_DOMAIN_INFO_T));
- prCmd->u2CountryCode = prAdapter->rWifiVar.rConnSettings.u2CountryCode;
- prCmd->u2IsSetPassiveScan = 1;
- prCmd->uc2G4Bandwidth = prAdapter->rWifiVar.rConnSettings.uc2G4BandwidthMode;
- prCmd->uc5GBandwidth = prAdapter->rWifiVar.rConnSettings.uc5GBandwidthMode;
- prCmd->aucReserved[0] = 0;
- prCmd->aucReserved[1] = 0;
- DBGLOG(RLM, TRACE,
- "rlmDomainPassiveScanSendCmd(), CountryCode = %x\n", prAdapter->rWifiVar.rConnSettings.u2CountryCode);
- if (prAdapter->rWifiVar.rConnSettings.u2CountryCode == COUNTRY_CODE_UDF)
- prDomainInfo = &arSupportedRegDomains_Passive[REG_DOMAIN_PASSIVE_UDF_IDX];
- else
- prDomainInfo = &arSupportedRegDomains_Passive[REG_DOMAIN_PASSIVE_DEF_IDX];
- for (i = 0; i < 6; i++) {
- prSubBand = &prDomainInfo->rSubBand[i];
- prCmd->rSubBand[i].ucRegClass = prSubBand->ucRegClass;
- prCmd->rSubBand[i].ucBand = prSubBand->ucBand;
- if (prSubBand->ucBand != BAND_NULL && prSubBand->ucBand < BAND_NUM) {
- prCmd->rSubBand[i].ucChannelSpan = prSubBand->ucChannelSpan;
- prCmd->rSubBand[i].ucFirstChannelNum = prSubBand->ucFirstChannelNum;
- prCmd->rSubBand[i].ucNumChannels = prSubBand->ucNumChannels;
- }
- }
- rStatus = wlanSendSetQueryCmd(prAdapter, /* prAdapter */
- CMD_ID_SET_DOMAIN_INFO, /* ucCID */
- TRUE, /* fgSetQuery */
- FALSE, /* fgNeedResp */
- fgIsOid, /* fgIsOid */
- NULL, /* pfCmdDoneHandler */
- NULL, /* pfCmdTimeoutHandler */
- sizeof(CMD_SET_DOMAIN_INFO_T), /* u4SetQueryInfoLen */
- (PUINT_8) prCmd, /* pucInfoBuffer */
- NULL, /* pvSetQueryBuffer */
- 0 /* u4SetQueryBufferLen */
- );
- ASSERT(rStatus == WLAN_STATUS_PENDING);
- cnmMemFree(prAdapter, prCmd);
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief
- *
- * \param[in/out]
- *
- * \return TRUE Legal channel
- * FALSE Illegal channel for current regulatory domain
- */
- /*----------------------------------------------------------------------------*/
- BOOLEAN rlmDomainIsLegalChannel(P_ADAPTER_T prAdapter, ENUM_BAND_T eBand, UINT_8 ucChannel)
- {
- UINT_8 i, j;
- P_DOMAIN_SUBBAND_INFO prSubband;
- P_DOMAIN_INFO_ENTRY prDomainInfo;
- prDomainInfo = rlmDomainGetDomainInfo(prAdapter);
- ASSERT(prDomainInfo);
- for (i = 0; i < MAX_SUBBAND_NUM; i++) {
- prSubband = &prDomainInfo->rSubBand[i];
- if (prSubband->ucBand == BAND_5G && !prAdapter->fgEnable5GBand)
- continue;
- if (prSubband->ucBand == eBand) {
- for (j = 0; j < prSubband->ucNumChannels; j++) {
- if ((prSubband->ucFirstChannelNum + j * prSubband->ucChannelSpan)
- == ucChannel) {
- return TRUE;
- }
- }
- }
- }
- return FALSE;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * @brief
- *
- * @param[in]
- *
- * @return (fgValid) : 0 -> inValid, 1 -> Valid
- */
- /*----------------------------------------------------------------------------*/
- BOOLEAN rlmDomainCheckChannelEntryValid(P_ADAPTER_T prAdapter, UINT_8 ucCentralCh)
- {
- BOOLEAN fgValid = FALSE;
- UINT_8 ucTemp = 0;
- UINT_8 i;
- /*Check Power limit table channel efficient or not */
- for (i = POWER_LIMIT_2G4; i < POWER_LIMIT_SUBAND_NUM; i++) {
- if ((ucCentralCh >= g_rRlmSubBand[i].ucStartCh) && (ucCentralCh <= g_rRlmSubBand[i].ucEndCh))
- ucTemp = (ucCentralCh - g_rRlmSubBand[i].ucStartCh) % g_rRlmSubBand[i].ucInterval;
- }
- #if 0
- /*2.4G, ex 1, 2, 3 */
- if (ucCentralCh >= BAND_2G4_LOWER_BOUND && ucCentralCh <= BAND_2G4_UPPER_BOUND)
- ucTemp = 0;
- /*FCC- Spec : Band UNII-1, ex 36, 38, 40.... */
- else if (ucCentralCh >= UNII1_LOWER_BOUND && ucCentralCh <= UNII1_UPPER_BOUND)
- ucTemp = (ucCentralCh - UNII1_LOWER_BOUND) % 2;
- /*FCC- Spec : Band UNII-2A, ex 52, 54, 56.... */
- else if (ucCentralCh >= UNII2A_LOWER_BOUND && ucCentralCh <= UNII2A_UPPER_BOUND)
- ucTemp = (ucCentralCh - UNII2A_LOWER_BOUND) % 2;
- /*FCC- Spec : Band UNII-2C, ex 100, 102, 104.... */
- else if (ucCentralCh >= UNII2C_LOWER_BOUND && ucCentralCh <= UNII2C_UPPER_BOUND)
- ucTemp = (ucCentralCh - UNII2C_LOWER_BOUND) % 2;
- /*FCC- Spec : Band UNII-3, ex 149, 151, 153... */
- else if (ucCentralCh >= UNII3_LOWER_BOUND && ucCentralCh <= UNII3_UPPER_BOUND)
- ucTemp = (ucCentralCh - UNII3_LOWER_BOUND) % 2;
- #endif
- if (ucTemp == 0)
- fgValid = TRUE;
- return fgValid;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief
- *
- * \param[in]
- *
- * \return
- */
- /*----------------------------------------------------------------------------*/
- UINT_8 rlmDomainGetCenterChannel(ENUM_BAND_T eBand, UINT_8 ucPriChannel, ENUM_CHNL_EXT_T eExtend)
- {
- UINT_8 ucCenterChannel;
- if (eExtend == CHNL_EXT_SCA)
- ucCenterChannel = ucPriChannel + 2;
- else if (eExtend == CHNL_EXT_SCB)
- ucCenterChannel = ucPriChannel - 2;
- else
- ucCenterChannel = ucPriChannel;
- return ucCenterChannel;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief
- *
- * \param[in]
- *
- * \return
- */
- /*----------------------------------------------------------------------------*/
- BOOLEAN
- rlmDomainIsValidRfSetting(P_ADAPTER_T prAdapter,
- ENUM_BAND_T eBand,
- UINT_8 ucPriChannel,
- ENUM_CHNL_EXT_T eExtend,
- ENUM_CHANNEL_WIDTH_T eChannelWidth, UINT_8 ucChannelS1, UINT_8 ucChannelS2)
- {
- UINT_8 ucCenterChannel;
- BOOLEAN fgValidChannel = TRUE;
- BOOLEAN fgValidBW = TRUE;
- BOOLEAN fgValidRfSetting = TRUE;
- UINT_32 u4PrimaryOffset;
- /*DBG msg for Channel InValid */
- if (eChannelWidth == CW_20_40MHZ) {
- ucCenterChannel = rlmDomainGetCenterChannel(eBand, ucPriChannel, eExtend);
- /* Check Central Channel Valid or Not */
- fgValidChannel = rlmDomainCheckChannelEntryValid(prAdapter, ucCenterChannel);
- if (fgValidChannel == FALSE)
- DBGLOG(RLM, WARN, "Rf: CentralCh=%d\n", ucCenterChannel);
- } else if (eChannelWidth == CW_80MHZ) {
- ucCenterChannel = ucChannelS1;
- /* Check Central Channel Valid or Not */
- fgValidChannel = rlmDomainCheckChannelEntryValid(prAdapter, ucCenterChannel);
- if (fgValidChannel == FALSE)
- DBGLOG(RLM, WARN, "Rf: CentralCh=%d\n", ucCenterChannel);
- } else if (eChannelWidth == CW_160MHZ) {
- ucCenterChannel = ucChannelS2;
- /* Check Central Channel Valid or Not */
- /*TODo */
- }
- /* Check BW Setting Correct or Not */
- if (eBand == BAND_2G4) {
- if (eChannelWidth != CW_20_40MHZ) {
- fgValidBW = FALSE;
- DBGLOG(RLM, WARN, "Rf: B=%d, W=%d\n", eBand, eChannelWidth);
- }
- } else {
- if (eChannelWidth == CW_80MHZ) {
- u4PrimaryOffset = CAL_CH_OFFSET_80M(ucPriChannel, ucCenterChannel);
- if (u4PrimaryOffset > 4) {
- fgValidBW = FALSE;
- DBGLOG(RLM, WARN, "Rf: PriOffSet=%d, W=%d\n", u4PrimaryOffset, eChannelWidth);
- }
- } else if (eChannelWidth == CW_160MHZ) {
- u4PrimaryOffset = CAL_CH_OFFSET_160M(ucPriChannel, ucCenterChannel);
- if (u4PrimaryOffset > 8) {
- fgValidBW = FALSE;
- DBGLOG(RLM, WARN, "Rf: PriOffSet=%d, W=%d\n", u4PrimaryOffset, eChannelWidth);
- }
- }
- }
- if ((fgValidBW == FALSE) || (fgValidChannel == FALSE))
- fgValidRfSetting = FALSE;
- return fgValidRfSetting;
- }
- #if CFG_SUPPORT_PWR_LIMIT_COUNTRY
- /*----------------------------------------------------------------------------*/
- /*!
- * @brief
- *
- * @param[in]
- *
- * @return (fgValid) : 0 -> inValid, 1 -> Valid
- */
- /*----------------------------------------------------------------------------*/
- BOOLEAN
- rlmDomainCheckPowerLimitValid(P_ADAPTER_T prAdapter,
- COUNTRY_POWER_LIMIT_TABLE_CONFIGURATION rPowerLimitTableConfiguration,
- UINT_8 ucPwrLimitNum)
- {
- UINT_8 i;
- BOOLEAN fgValid = TRUE;
- PINT_8 prPwrLimit;
- prPwrLimit = &rPowerLimitTableConfiguration.aucPwrLimit[0];
- for (i = 0; i < ucPwrLimitNum; i++, prPwrLimit++) {
- if (*prPwrLimit > MAX_TX_POWER || *prPwrLimit < MIN_TX_POWER) {
- fgValid = FALSE;
- break; /*Find out Wrong Power limit */
- }
- }
- return fgValid;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * @brief
- *
- * @param[in]
- *
- * @return (none)
- */
- /*----------------------------------------------------------------------------*/
- VOID rlmDomainCheckCountryPowerLimitTable(P_ADAPTER_T prAdapter)
- {
- UINT_8 i, j;
- UINT_16 u2CountryCodeTable, u2CountryCodeCheck;
- BOOLEAN fgChannelValid = FALSE;
- BOOLEAN fgPowerLimitValid = FALSE;
- BOOLEAN fgEntryRepetetion = FALSE;
- BOOLEAN fgTableValid = TRUE;
- /*Configuration Table Check */
- for (i = 0; i < sizeof(g_rRlmPowerLimitConfiguration) / sizeof(COUNTRY_POWER_LIMIT_TABLE_CONFIGURATION); i++) {
- /*Table Country Code */
- WLAN_GET_FIELD_BE16(&g_rRlmPowerLimitConfiguration[i].aucCountryCode[0], &u2CountryCodeTable);
- /*Repetition Entry Check */
- for (j = i + 1;
- j < sizeof(g_rRlmPowerLimitConfiguration) / sizeof(COUNTRY_POWER_LIMIT_TABLE_CONFIGURATION);
- j++) {
- WLAN_GET_FIELD_BE16(&g_rRlmPowerLimitConfiguration[j].aucCountryCode[0], &u2CountryCodeCheck);
- if (((g_rRlmPowerLimitConfiguration[i].ucCentralCh) ==
- g_rRlmPowerLimitConfiguration[j].ucCentralCh)
- && (u2CountryCodeTable == u2CountryCodeCheck)) {
- fgEntryRepetetion = TRUE;
- DBGLOG(RLM, LOUD, "Domain: Configuration Repetition CC=%c%c, Ch=%d\n",
- g_rRlmPowerLimitConfiguration[i].aucCountryCode[0],
- g_rRlmPowerLimitConfiguration[i].aucCountryCode[1],
- g_rRlmPowerLimitConfiguration[i].ucCentralCh);
- }
- }
- /*Channel Number Check */
- fgChannelValid =
- rlmDomainCheckChannelEntryValid(prAdapter, g_rRlmPowerLimitConfiguration[i].ucCentralCh);
- /*Power Limit Check */
- fgPowerLimitValid =
- rlmDomainCheckPowerLimitValid(prAdapter, g_rRlmPowerLimitConfiguration[i], PWR_LIMIT_NUM);
- if (fgChannelValid == FALSE || fgPowerLimitValid == FALSE) {
- fgTableValid = FALSE;
- DBGLOG(RLM, LOUD, "Domain: CC=%c%c, Ch=%d, Limit: %d,%d,%d,%d,%d\n",
- g_rRlmPowerLimitConfiguration[i].aucCountryCode[0],
- g_rRlmPowerLimitConfiguration[i].aucCountryCode[1],
- g_rRlmPowerLimitConfiguration[i].ucCentralCh,
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_CCK],
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_20M],
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_40M],
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_80M],
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_160M]);
- }
- if (u2CountryCodeTable == COUNTRY_CODE_NULL) {
- DBGLOG(RLM, LOUD, "Domain: Full search down\n");
- break; /*End of country table entry */
- }
- }
- if (fgEntryRepetetion == FALSE)
- DBGLOG(RLM, TRACE, "Domain: Configuration Table no Repetiton.\n");
- /*Configuration Table no error */
- if (fgTableValid == TRUE)
- prAdapter->fgIsPowerLimitTableValid = TRUE;
- else
- prAdapter->fgIsPowerLimitTableValid = FALSE;
- /*Default Table Check */
- fgEntryRepetetion = FALSE;
- for (i = 0; i < sizeof(g_rRlmPowerLimitDefault) / sizeof(COUNTRY_POWER_LIMIT_TABLE_DEFAULT); i++) {
- WLAN_GET_FIELD_BE16(&g_rRlmPowerLimitDefault[i].aucCountryCode[0], &u2CountryCodeTable);
- for (j = i + 1; j < sizeof(g_rRlmPowerLimitDefault) / sizeof(COUNTRY_POWER_LIMIT_TABLE_DEFAULT); j++) {
- WLAN_GET_FIELD_BE16(&g_rRlmPowerLimitDefault[j].aucCountryCode[0], &u2CountryCodeCheck);
- if (u2CountryCodeTable == u2CountryCodeCheck) {
- fgEntryRepetetion = TRUE;
- DBGLOG(RLM, LOUD,
- "Domain: Default Repetition CC=%c%c\n",
- g_rRlmPowerLimitDefault[j].aucCountryCode[0],
- g_rRlmPowerLimitDefault[j].aucCountryCode[1]);
- }
- }
- }
- if (fgEntryRepetetion == FALSE)
- DBGLOG(RLM, TRACE, "Domain: Default Table no Repetiton.\n");
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * @brief
- *
- * @param[in]
- *
- * @return (u2TableIndex) : if 0xFFFF -> No Table Match
- */
- /*----------------------------------------------------------------------------*/
- UINT_16 rlmDomainPwrLimitDefaultTableDecision(P_ADAPTER_T prAdapter, UINT_16 u2CountryCode)
- {
- UINT_16 i;
- UINT_16 u2CountryCodeTable = COUNTRY_CODE_NULL;
- UINT_16 u2TableIndex = POWER_LIMIT_TABLE_NULL; /* No Table Match */
- /*Default Table Index */
- for (i = 0; i < sizeof(g_rRlmPowerLimitDefault) / sizeof(COUNTRY_POWER_LIMIT_TABLE_DEFAULT); i++) {
- WLAN_GET_FIELD_BE16(&g_rRlmPowerLimitDefault[i].aucCountryCode[0], &u2CountryCodeTable);
- if (u2CountryCodeTable == u2CountryCode) {
- u2TableIndex = i;
- break; /*match country code */
- } else if (u2CountryCodeTable == COUNTRY_CODE_NULL) {
- u2TableIndex = i;
- break; /*find last one country- Default */
- }
- }
- DBGLOG(RLM, TRACE, "Domain: Default Table Index = %d\n", u2TableIndex);
- return u2TableIndex;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * @brief
- *
- * @param[in]
- *
- * @return (none)
- */
- /*----------------------------------------------------------------------------*/
- VOID rlmDomainBuildCmdByDefaultTable(P_CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T prCmd, UINT_16 u2DefaultTableIndex)
- {
- UINT_8 i, k;
- P_COUNTRY_POWER_LIMIT_TABLE_DEFAULT prPwrLimitSubBand;
- P_CMD_CHANNEL_POWER_LIMIT prCmdPwrLimit;
- prCmdPwrLimit = &prCmd->rChannelPowerLimit[0];
- prPwrLimitSubBand = &g_rRlmPowerLimitDefault[u2DefaultTableIndex];
- /*Build power limit cmd by default table information */
- for (i = POWER_LIMIT_2G4; i < POWER_LIMIT_SUBAND_NUM; i++) {
- if (prPwrLimitSubBand->aucPwrLimitSubBand[i] < MAX_TX_POWER) {
- for (k = g_rRlmSubBand[i].ucStartCh; k <= g_rRlmSubBand[i].ucEndCh;
- k += g_rRlmSubBand[i].ucInterval) {
- if ((prPwrLimitSubBand->ucPwrUnit & BIT(i)) == 0) {
- prCmdPwrLimit->ucCentralCh = k;
- prCmdPwrLimit->cPwrLimitCCK =
- prPwrLimitSubBand->aucPwrLimitSubBand[i];
- prCmdPwrLimit->cPwrLimit20 =
- prPwrLimitSubBand->aucPwrLimitSubBand[i];
- prCmdPwrLimit->cPwrLimit40 =
- prPwrLimitSubBand->aucPwrLimitSubBand[i];
- prCmdPwrLimit->cPwrLimit80 =
- prPwrLimitSubBand->aucPwrLimitSubBand[i];
- prCmdPwrLimit->cPwrLimit160 =
- prPwrLimitSubBand->aucPwrLimitSubBand[i];
- prCmdPwrLimit++;
- prCmd->ucNum++;
- } else {
- /* ex: 40MHz power limit(mW\MHz) = 20MHz power limit(mW\MHz) * 2
- * ---> 40MHz power limit(dBm) = 20MHz power limit(dBm) + 6; */
- prCmdPwrLimit->ucCentralCh = k;
- prCmdPwrLimit->cPwrLimitCCK = prPwrLimitSubBand->aucPwrLimitSubBand[i];
- prCmdPwrLimit->cPwrLimit20 = prPwrLimitSubBand->aucPwrLimitSubBand[i];
- prCmdPwrLimit->cPwrLimit40 = prPwrLimitSubBand->aucPwrLimitSubBand[i] + 6;
- if (prCmdPwrLimit->cPwrLimit40 > MAX_TX_POWER)
- prCmdPwrLimit->cPwrLimit40 = MAX_TX_POWER;
- prCmdPwrLimit->cPwrLimit80 = prPwrLimitSubBand->aucPwrLimitSubBand[i] + 12;
- if (prCmdPwrLimit->cPwrLimit80 > MAX_TX_POWER)
- prCmdPwrLimit->cPwrLimit80 = MAX_TX_POWER;
- prCmdPwrLimit->cPwrLimit160 = prPwrLimitSubBand->aucPwrLimitSubBand[i] + 18;
- if (prCmdPwrLimit->cPwrLimit160 > MAX_TX_POWER)
- prCmdPwrLimit->cPwrLimit160 = MAX_TX_POWER;
- prCmdPwrLimit++;
- prCmd->ucNum++;
- }
- }
- }
- }
- #if 0
- if (prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_2G4] < MAX_TX_POWER) {
- for (i = BAND_2G4_LOWER_BOUND; i <= BAND_2G4_UPPER_BOUND; i++) {
- prCmdPwrLimit->ucCentralCh = i;
- kalMemSet(&prCmdPwrLimit->cPwrLimitCCK, prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_2G4],
- PWR_LIMIT_NUM);
- prCmdPwrLimit++;
- prCmd->ucNum++;
- }
- }
- if (prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_UNII1] < MAX_TX_POWER) {
- if (prCmd->u2CountryCode != COUNTRY_CODE_KR) {
- for (i = UNII1_LOWER_BOUND; i <= UNII1_UPPER_BOUND; i += 2) {
- prCmdPwrLimit->ucCentralCh = i;
- kalMemSet(&prCmdPwrLimit->cPwrLimitCCK,
- prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_UNII1], PWR_LIMIT_NUM);
- prCmdPwrLimit++;
- prCmd->ucNum++;
- }
- } else {
- for (i = UNII1_LOWER_BOUND; i <= UNII1_UPPER_BOUND; i += 2) {
- /* ex: 40MHz power limit(mW\MHz) = 20MHz power limit(mW\MHz) * 2
- * ---> 40MHz power limit(dBm) = 20MHz power limit(dBm) + 6; */
- prCmdPwrLimit->ucCentralCh = i;
- prCmdPwrLimit->cPwrLimitCCK =
- g_rRlmPowerLimitDefault[u2DefaultTableIndex].cPwrLimitUnii1;
- prCmdPwrLimit->cPwrLimit20 =
- g_rRlmPowerLimitDefault[u2DefaultTableIndex].cPwrLimitUnii1;
- prCmdPwrLimit->cPwrLimit40 =
- g_rRlmPowerLimitDefault[u2DefaultTableIndex].cPwrLimitUnii1 + 6;
- prCmdPwrLimit->cPwrLimit80 =
- g_rRlmPowerLimitDefault[u2DefaultTableIndex].cPwrLimitUnii1 + 12;
- prCmdPwrLimit->cPwrLimit160 =
- g_rRlmPowerLimitDefault[u2DefaultTableIndex].cPwrLimitUnii1 + 18;
- prCmdPwrLimit++;
- prCmd->ucNum++;
- }
- }
- }
- if (prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_UNII2A] < MAX_TX_POWER) {
- for (i = UNII2A_LOWER_BOUND; i <= UNII2A_UPPER_BOUND; i += 2) {
- prCmdPwrLimit->ucCentralCh = i;
- kalMemSet(&prCmdPwrLimit->cPwrLimitCCK,
- prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_UNII2A], PWR_LIMIT_NUM);
- prCmdPwrLimit++;
- prCmd->ucNum++;
- }
- }
- if (prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_UNII2C] < MAX_TX_POWER) {
- for (i = UNII2C_LOWER_BOUND; i <= UNII2C_UPPER_BOUND; i += 2) {
- prCmdPwrLimit->ucCentralCh = i;
- kalMemSet(&prCmdPwrLimit->cPwrLimitCCK,
- prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_UNII2C], PWR_LIMIT_NUM);
- prCmdPwrLimit++;
- prCmd->ucNum++;
- }
- }
- if (prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_UNII3] < MAX_TX_POWER) {
- for (i = UNII3_LOWER_BOUND; i <= UNII3_UPPER_BOUND; i += 2) {
- prCmdPwrLimit->ucCentralCh = i;
- kalMemSet(&prCmdPwrLimit->cPwrLimitCCK,
- prPwrLimitSubBand->aucPwrLimitSubBand[POWER_LIMIT_UNII3], PWR_LIMIT_NUM);
- prCmdPwrLimit++;
- prCmd->ucNum++;
- }
- }
- #endif
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * @brief
- *
- * @param[in]
- *
- * @return (none)
- */
- /*----------------------------------------------------------------------------*/
- VOID rlmDomainBuildCmdByConfigTable(P_ADAPTER_T prAdapter, P_CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T prCmd)
- {
- UINT_8 i, k;
- UINT_16 u2CountryCodeTable = COUNTRY_CODE_NULL;
- P_CMD_CHANNEL_POWER_LIMIT prCmdPwrLimit;
- BOOLEAN fgChannelValid;
- /*Build power limit cmd by configuration table information */
- for (i = 0; i < sizeof(g_rRlmPowerLimitConfiguration) / sizeof(COUNTRY_POWER_LIMIT_TABLE_CONFIGURATION); i++) {
- WLAN_GET_FIELD_BE16(&g_rRlmPowerLimitConfiguration[i].aucCountryCode[0], &u2CountryCodeTable);
- fgChannelValid =
- rlmDomainCheckChannelEntryValid(prAdapter, g_rRlmPowerLimitConfiguration[i].ucCentralCh);
- if (u2CountryCodeTable == COUNTRY_CODE_NULL) {
- DBGLOG(RLM, TRACE, "Domain: full search configuration table done.\n");
- break; /*end of configuration table */
- } else if ((u2CountryCodeTable == prCmd->u2CountryCode) && (fgChannelValid == TRUE)) {
- prCmdPwrLimit = &prCmd->rChannelPowerLimit[0];
- if (prCmd->ucNum != 0) {
- for (k = 0; k < prCmd->ucNum; k++) {
- if (prCmdPwrLimit->ucCentralCh ==
- g_rRlmPowerLimitConfiguration[i].ucCentralCh) {
- /*Cmd setting (Default table information) and
- Configuration table has repetition channel entry,
- ex : Default table (ex: 2.4G, limit = 20dBm) --> ch1~14 limit =20dBm,
- Configuration table (ex: ch1, limit = 22dBm) --> ch 1 = 22 dBm
- Cmd final setting --> ch1 = 22dBm, ch12~14 = 20dBm
- */
- prCmdPwrLimit->cPwrLimitCCK =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_CCK];
- prCmdPwrLimit->cPwrLimit20 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_20M];
- prCmdPwrLimit->cPwrLimit40 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_40M];
- prCmdPwrLimit->cPwrLimit80 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_80M];
- prCmdPwrLimit->cPwrLimit160 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_160M];
- DBGLOG(RLM, LOUD,
- "Domain: CC=%c%c,ConfigCh=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n",
- ((prCmd->u2CountryCode & 0xff00) >> 8),
- (prCmd->u2CountryCode & 0x00ff), prCmdPwrLimit->ucCentralCh,
- prCmdPwrLimit->cPwrLimitCCK, prCmdPwrLimit->cPwrLimit20,
- prCmdPwrLimit->cPwrLimit40, prCmdPwrLimit->cPwrLimit80,
- prCmdPwrLimit->cPwrLimit160, prCmdPwrLimit->ucFlag);
- break;
- }
- prCmdPwrLimit++;
- }
- if (k == prCmd->ucNum) {
- /*Full search cmd (Default table setting) no match channey,
- ex : Default table (ex: 2.4G, limit = 20dBm) --> ch1~14 limit =20dBm,
- Configuration table (ex: ch36, limit = 22dBm) --> ch 36 = 22 dBm
- Cmd final setting --> ch1~14 = 20dBm, ch36= 22dBm
- */
- prCmdPwrLimit->cPwrLimitCCK =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_CCK];
- prCmdPwrLimit->cPwrLimit20 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_20M];
- prCmdPwrLimit->cPwrLimit40 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_40M];
- prCmdPwrLimit->cPwrLimit80 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_80M];
- prCmdPwrLimit->cPwrLimit160 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_160M];
- prCmd->ucNum++;
- DBGLOG(RLM, LOUD,
- "Domain: Full CC=%c%c,ConfigCh=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n",
- ((prCmd->u2CountryCode & 0xff00) >> 8), (prCmd->u2CountryCode & 0x00ff),
- prCmdPwrLimit->ucCentralCh, prCmdPwrLimit->cPwrLimitCCK,
- prCmdPwrLimit->cPwrLimit20, prCmdPwrLimit->cPwrLimit40,
- prCmdPwrLimit->cPwrLimit80, prCmdPwrLimit->cPwrLimit160,
- prCmdPwrLimit->ucFlag);
- }
- } else {
- /*Default table power limit value are 63--> cmd table no channel entry
- ex : Default table (ex: 2.4G, limit = 63Bm) --> no channel entry in cmd,
- Configuration table (ex: ch36, limit = 22dBm) --> ch 36 = 22 dBm
- Cmd final setting --> ch36= 22dBm
- */
- prCmdPwrLimit->ucCentralCh = g_rRlmPowerLimitConfiguration[i].ucCentralCh;
- prCmdPwrLimit->cPwrLimitCCK =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_CCK];
- prCmdPwrLimit->cPwrLimit20 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_20M];
- prCmdPwrLimit->cPwrLimit40 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_40M];
- prCmdPwrLimit->cPwrLimit80 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_80M];
- prCmdPwrLimit->cPwrLimit160 =
- g_rRlmPowerLimitConfiguration[i].aucPwrLimit[PWR_LIMIT_160M];
- prCmd->ucNum++;
- DBGLOG(RLM, LOUD, "Domain: Default table power limit value are 63.\n");
- DBGLOG(RLM, LOUD, "Domain: CC=%c%c,ConfigCh=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n",
- ((prCmd->u2CountryCode & 0xff00) >> 8),
- (prCmd->u2CountryCode & 0x00ff), prCmdPwrLimit->ucCentralCh,
- prCmdPwrLimit->cPwrLimitCCK, prCmdPwrLimit->cPwrLimit20,
- prCmdPwrLimit->cPwrLimit40, prCmdPwrLimit->cPwrLimit80,
- prCmdPwrLimit->cPwrLimit160, prCmdPwrLimit->ucFlag);
- }
- }
- }
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * @brief
- *
- * @param[in]
- *
- * @return (none)
- */
- /*----------------------------------------------------------------------------*/
- VOID rlmDomainSendPwrLimitCmd(P_ADAPTER_T prAdapter)
- {
- P_CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T prCmd;
- WLAN_STATUS rStatus;
- UINT_8 i;
- UINT_16 u2DefaultTableIndex;
- UINT_32 u4SetCmdTableMaxSize;
- UINT_32 u4SetQueryInfoLen;
- P_CMD_CHANNEL_POWER_LIMIT prCmdPwrLimit; /* for print usage */
- u4SetCmdTableMaxSize =
- sizeof(CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T) +
- MAX_CMD_SUPPORT_CHANNEL_NUM * sizeof(CMD_CHANNEL_POWER_LIMIT);
- prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4SetCmdTableMaxSize);
- if (!prCmd) {
- DBGLOG(RLM, ERROR, "Domain: no buf to send cmd\n");
- return;
- }
- kalMemZero(prCmd, u4SetCmdTableMaxSize);
- u2DefaultTableIndex =
- rlmDomainPwrLimitDefaultTableDecision(prAdapter, prAdapter->rWifiVar.rConnSettings.u2CountryCode);
- if (u2DefaultTableIndex != POWER_LIMIT_TABLE_NULL) {
- WLAN_GET_FIELD_BE16(&g_rRlmPowerLimitDefault[u2DefaultTableIndex].aucCountryCode[0],
- &prCmd->u2CountryCode);
- prCmd->ucNum = 0;
- if (prCmd->u2CountryCode != COUNTRY_CODE_NULL) {
- /*Command - default table information */
- rlmDomainBuildCmdByDefaultTable(prCmd, u2DefaultTableIndex);
- /*Command - configuration table information */
- rlmDomainBuildCmdByConfigTable(prAdapter, prCmd);
- }
- }
- #if 0
- u4SetCmdTableMaxSize =
- sizeof(CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T) +
- MAX_CMD_SUPPORT_CHANNEL_NUM * sizeof(CMD_CHANNEL_POWER_LIMIT);
- prCmd = cnmMemAlloc(prAdapter, RAM_TYPE_BUF, u4SetCmdTableMaxSize);
- ASSERT(prCmd);
- /* To do: exception handle */
- if (!prCmd) {
- DBGLOG(RLM, ERROR, "Domain: no buf to send cmd\n");
- return;
- }
- kalMemZero(prCmd, u4SetCmdTableMaxSize); /* TODO memzero */
- if (u2TableIndex != POWER_LIMIT_TABLE_NULL && u2TableIndex < MAX_DEFAULT_TABLE_COUNTRY_NUM) {
- prCmd->u2CountryCode = (((UINT_16) g_rRlmCountryPowerLimitTable[u2TableIndex].aucCountryCode[0]) << 8) |
- (((UINT_16) g_rRlmCountryPowerLimitTable[u2TableIndex].aucCountryCode[1]) & BITS(0, 7));
- prChPwrLimit = &g_rRlmCountryPowerLimitTable[u2TableIndex].rChannelPowerLimit[0];
- prCmdPwrLimit = &prCmd->rChannelPowerLimit[0];
- prCmd->ucNum = 0;
- for (i = 0; i < MAX_CMD_SUPPORT_CHANNEL_NUM; i++) {
- if (prChPwrLimit->ucCentralCh != ENDCH) {
- /*Check Power limit table channel efficient or not */
- fgChannelValid = rlmDomainCheckChannelEntryValid(prAdapter, prChPwrLimit->ucCentralCh);
- /*Cmd set up */
- if (fgChannelValid) {
- kalMemCopy(prCmdPwrLimit, prChPwrLimit, sizeof(CMD_CHANNEL_POWER_LIMIT));
- DBGLOG(RLM, INFO,
- "Domain: ValidCh=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n",
- prCmdPwrLimit->ucCentralCh, prCmdPwrLimit->cPwrLimitCCK,
- prCmdPwrLimit->cPwrLimit20, prCmdPwrLimit->cPwrLimit40,
- prCmdPwrLimit->cPwrLimit80, prCmdPwrLimit->cPwrLimit160,
- prCmdPwrLimit->ucFlag);
- prCmd->ucNum++;
- prCmdPwrLimit++;
- } else {
- DBGLOG(RLM, INFO,
- "Domain: Non-Ch=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n",
- prChPwrLimit->ucCentralCh, prChPwrLimit->cPwrLimitCCK,
- prChPwrLimit->cPwrLimit20, prChPwrLimit->cPwrLimit40,
- prChPwrLimit->cPwrLimit80, prChPwrLimit->cPwrLimit160,
- prChPwrLimit->ucFlag);
- }
- prChPwrLimit++;
- } else {
- /*End of the chanel entry */
- break;
- }
- };
- }
- #endif
- if (prCmd->u2CountryCode != 0) {
- DBGLOG(RLM, INFO,
- "Domain: ValidCC =%c%c, ChNum=%d\n", ((prCmd->u2CountryCode & 0xff00) >> 8),
- (prCmd->u2CountryCode & 0x00ff), prCmd->ucNum);
- } else {
- DBGLOG(RLM, INFO, "Domain: ValidCC =0x%04x, ucNum=%d\n", prCmd->u2CountryCode, prCmd->ucNum);
- }
- prCmdPwrLimit = &prCmd->rChannelPowerLimit[0];
- for (i = 0; i < prCmd->ucNum; i++) {
- DBGLOG(RLM, TRACE, "Domain: Ch=%d,Limit=%d,%d,%d,%d,%d,Fg=%d\n", prCmdPwrLimit->ucCentralCh,
- prCmdPwrLimit->cPwrLimitCCK, prCmdPwrLimit->cPwrLimit20, prCmdPwrLimit->cPwrLimit40,
- prCmdPwrLimit->cPwrLimit80, prCmdPwrLimit->cPwrLimit160, prCmdPwrLimit->ucFlag);
- prCmdPwrLimit++;
- }
- u4SetQueryInfoLen =
- (sizeof(CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_T) + (prCmd->ucNum) * sizeof(CMD_CHANNEL_POWER_LIMIT));
- /* Update domain info to chip */
- if (prCmd->ucNum <= MAX_CMD_SUPPORT_CHANNEL_NUM) {
- rStatus = wlanSendSetQueryCmd(prAdapter, /* prAdapter */
- CMD_ID_SET_COUNTRY_POWER_LIMIT, /* ucCID */
- TRUE, /* fgSetQuery */
- FALSE, /* fgNeedResp */
- FALSE, /* fgIsOid */
- NULL, /* pfCmdDoneHandler */
- NULL, /* pfCmdTimeoutHandler */
- u4SetQueryInfoLen, /* u4SetQueryInfoLen */
- (PUINT_8) prCmd, /* pucInfoBuffer */
- NULL, /* pvSetQueryBuffer */
- 0 /* u4SetQueryBufferLen */
- );
- } else
- DBGLOG(RLM, ERROR, "Domain: illegal power limit table");
- /* ASSERT(rStatus == WLAN_STATUS_PENDING); */
- cnmMemFree(prAdapter, prCmd);
- }
- #endif
|