aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/rt2860/common/rt_channel.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rt2860/common/rt_channel.c')
-rw-r--r--drivers/staging/rt2860/common/rt_channel.c1705
1 files changed, 1705 insertions, 0 deletions
diff --git a/drivers/staging/rt2860/common/rt_channel.c b/drivers/staging/rt2860/common/rt_channel.c
new file mode 100644
index 000000000000..538798981177
--- /dev/null
+++ b/drivers/staging/rt2860/common/rt_channel.c
@@ -0,0 +1,1705 @@
+/*
+ *************************************************************************
+ * Ralink Tech Inc.
+ * 5F., No.36, Taiyuan St., Jhubei City,
+ * Hsinchu County 302,
+ * Taiwan, R.O.C.
+ *
+ * (c) Copyright 2002-2007, Ralink Technology, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * *
+ *************************************************************************
+*/
+#include "../rt_config.h"
+
+struct rt_ch_freq_map CH_HZ_ID_MAP[] = {
+ {1, 2412}
+ ,
+ {2, 2417}
+ ,
+ {3, 2422}
+ ,
+ {4, 2427}
+ ,
+ {5, 2432}
+ ,
+ {6, 2437}
+ ,
+ {7, 2442}
+ ,
+ {8, 2447}
+ ,
+ {9, 2452}
+ ,
+ {10, 2457}
+ ,
+ {11, 2462}
+ ,
+ {12, 2467}
+ ,
+ {13, 2472}
+ ,
+ {14, 2484}
+ ,
+
+ /* UNII */
+ {36, 5180}
+ ,
+ {40, 5200}
+ ,
+ {44, 5220}
+ ,
+ {48, 5240}
+ ,
+ {52, 5260}
+ ,
+ {56, 5280}
+ ,
+ {60, 5300}
+ ,
+ {64, 5320}
+ ,
+ {149, 5745}
+ ,
+ {153, 5765}
+ ,
+ {157, 5785}
+ ,
+ {161, 5805}
+ ,
+ {165, 5825}
+ ,
+ {167, 5835}
+ ,
+ {169, 5845}
+ ,
+ {171, 5855}
+ ,
+ {173, 5865}
+ ,
+
+ /* HiperLAN2 */
+ {100, 5500}
+ ,
+ {104, 5520}
+ ,
+ {108, 5540}
+ ,
+ {112, 5560}
+ ,
+ {116, 5580}
+ ,
+ {120, 5600}
+ ,
+ {124, 5620}
+ ,
+ {128, 5640}
+ ,
+ {132, 5660}
+ ,
+ {136, 5680}
+ ,
+ {140, 5700}
+ ,
+
+ /* Japan MMAC */
+ {34, 5170}
+ ,
+ {38, 5190}
+ ,
+ {42, 5210}
+ ,
+ {46, 5230}
+ ,
+
+ /* Japan */
+ {184, 4920}
+ ,
+ {188, 4940}
+ ,
+ {192, 4960}
+ ,
+ {196, 4980}
+ ,
+
+ {208, 5040}
+ , /* Japan, means J08 */
+ {212, 5060}
+ , /* Japan, means J12 */
+ {216, 5080}
+ , /* Japan, means J16 */
+};
+
+int CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP) / sizeof(struct rt_ch_freq_map));
+
+struct rt_ch_region ChRegion[] = {
+ { /* Antigua and Berbuda */
+ "AG",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Argentina */
+ "AR",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 30, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Aruba */
+ "AW",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Australia */
+ "AU",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 5, 30, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Austria */
+ "AT",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Bahamas */
+ "BS",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 5, 30, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Barbados */
+ "BB",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Bermuda */
+ "BM",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Brazil */
+ "BR",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 24, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {149, 5, 30, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Belgium */
+ "BE",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 18, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 18, IDOR, FALSE}
+ , /* 5G, ch 52~64 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Bulgaria */
+ "BG",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, ODOR, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Canada */
+ "CA",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 5, 30, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Cayman IsLands */
+ "KY",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Chile */
+ "CL",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 5, 20, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* China */
+ "CN",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {149, 4, 27, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Colombia */
+ "CO",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 17, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {149, 5, 30, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Costa Rica */
+ "CR",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 17, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 30, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Cyprus */
+ "CY",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Czech_Republic */
+ "CZ",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Denmark */
+ "DK",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Dominican Republic */
+ "DO",
+ CE,
+ {
+ {1, 0, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 0 */
+ {149, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Equador */
+ "EC",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {100, 11, 27, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* El Salvador */
+ "SV",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 30, BOTH, TRUE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 36, BOTH, TRUE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Finland */
+ "FI",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* France */
+ "FR",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Germany */
+ "DE",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Greece */
+ "GR",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, ODOR, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Guam */
+ "GU",
+ CE,
+ {
+ {1, 11, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {36, 4, 17, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {149, 5, 30, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Guatemala */
+ "GT",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 17, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 30, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Haiti */
+ "HT",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 17, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 30, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Honduras */
+ "HN",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {149, 4, 27, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Hong Kong */
+ "HK",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 30, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Hungary */
+ "HU",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Iceland */
+ "IS",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* India */
+ "IN",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {149, 4, 24, IDOR, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Indonesia */
+ "ID",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {149, 4, 27, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Ireland */
+ "IE",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, ODOR, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Israel */
+ "IL",
+ CE,
+ {
+ {1, 3, 20, IDOR, FALSE}
+ , /* 2.4 G, ch 1~3 */
+ {4, 6, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 4~9 */
+ {10, 4, 20, IDOR, FALSE}
+ , /* 2.4 G, ch 10~13 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Italy */
+ "IT",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, ODOR, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Japan */
+ "JP",
+ JAP,
+ {
+ {1, 14, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~14 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Jordan */
+ "JO",
+ CE,
+ {
+ {1, 13, 20, IDOR, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {149, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Latvia */
+ "LV",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Liechtenstein */
+ "LI",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Lithuania */
+ "LT",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Luxemburg */
+ "LU",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Malaysia */
+ "MY",
+ CE,
+ {
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 5, 20, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Malta */
+ "MT",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Marocco */
+ "MA",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 24, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Mexico */
+ "MX",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 5, 30, IDOR, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Netherlands */
+ "NL",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* New Zealand */
+ "NZ",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 30, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Norway */
+ "NO",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 24, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 24, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Peru */
+ "PE",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {149, 4, 27, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Portugal */
+ "PT",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Poland */
+ "PL",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Romania */
+ "RO",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Russia */
+ "RU",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {149, 4, 20, IDOR, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Saudi Arabia */
+ "SA",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Serbia_and_Montenegro */
+ "CS",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Singapore */
+ "SG",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {149, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Slovakia */
+ "SK",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Slovenia */
+ "SI",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* South Africa */
+ "ZA",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {149, 4, 30, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* South Korea */
+ "KR",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 8, 20, BOTH, FALSE}
+ , /* 5G, ch 100~128 */
+ {149, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Spain */
+ "ES",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 17, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Sweden */
+ "SE",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Switzerland */
+ "CH",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~13 */
+ {36, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Taiwan */
+ "TW",
+ CE,
+ {
+ {1, 11, 30, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {52, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 52~64 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Turkey */
+ "TR",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {36, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 36~48 */
+ {52, 4, 23, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* UK */
+ "GB",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {36, 4, 23, IDOR, FALSE}
+ , /* 5G, ch 52~64 */
+ {52, 4, 23, IDOR, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Ukraine */
+ "UA",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* United_Arab_Emirates */
+ "AE",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* United_States */
+ "US",
+ CE,
+ {
+ {1, 11, 30, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {36, 4, 17, IDOR, FALSE}
+ , /* 5G, ch 52~64 */
+ {52, 4, 24, BOTH, TRUE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 30, BOTH, TRUE}
+ , /* 5G, ch 100~140 */
+ {149, 5, 30, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Venezuela */
+ "VE",
+ CE,
+ {
+ {1, 13, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {149, 4, 27, BOTH, FALSE}
+ , /* 5G, ch 149~161 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+
+ { /* Default */
+ "",
+ CE,
+ {
+ {1, 11, 20, BOTH, FALSE}
+ , /* 2.4 G, ch 1~11 */
+ {36, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {52, 4, 20, BOTH, FALSE}
+ , /* 5G, ch 52~64 */
+ {100, 11, 20, BOTH, FALSE}
+ , /* 5G, ch 100~140 */
+ {149, 5, 20, BOTH, FALSE}
+ , /* 5G, ch 149~165 */
+ {0}
+ , /* end */
+ }
+ }
+ ,
+};
+
+static struct rt_ch_region *GetChRegion(u8 *CntryCode)
+{
+ int loop = 0;
+ struct rt_ch_region *pChRegion = NULL;
+
+ while (strcmp((char *)ChRegion[loop].CountReg, "") != 0) {
+ if (strncmp
+ ((char *)ChRegion[loop].CountReg, (char *)CntryCode,
+ 2) == 0) {
+ pChRegion = &ChRegion[loop];
+ break;
+ }
+ loop++;
+ }
+
+ if (pChRegion == NULL)
+ pChRegion = &ChRegion[loop];
+ return pChRegion;
+}
+
+static void ChBandCheck(u8 PhyMode, u8 *pChType)
+{
+ switch (PhyMode) {
+ case PHY_11A:
+ case PHY_11AN_MIXED:
+ *pChType = BAND_5G;
+ break;
+ case PHY_11ABG_MIXED:
+ case PHY_11AGN_MIXED:
+ case PHY_11ABGN_MIXED:
+ *pChType = BAND_BOTH;
+ break;
+
+ default:
+ *pChType = BAND_24G;
+ break;
+ }
+}
+
+static u8 FillChList(struct rt_rtmp_adapter *pAd,
+ struct rt_ch_desp *pChDesp,
+ u8 Offset, u8 increment)
+{
+ int i, j, l;
+ u8 channel;
+
+ j = Offset;
+ for (i = 0; i < pChDesp->NumOfCh; i++) {
+ channel = pChDesp->FirstChannel + i * increment;
+ for (l = 0; l < MAX_NUM_OF_CHANNELS; l++) {
+ if (channel == pAd->TxPower[l].Channel) {
+ pAd->ChannelList[j].Power =
+ pAd->TxPower[l].Power;
+ pAd->ChannelList[j].Power2 =
+ pAd->TxPower[l].Power2;
+ break;
+ }
+ }
+ if (l == MAX_NUM_OF_CHANNELS)
+ continue;
+
+ pAd->ChannelList[j].Channel =
+ pChDesp->FirstChannel + i * increment;
+ pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr;
+ pAd->ChannelList[j].DfsReq = pChDesp->DfsReq;
+ j++;
+ }
+ pAd->ChannelListNum = j;
+
+ return j;
+}
+
+static inline void CreateChList(struct rt_rtmp_adapter *pAd,
+ struct rt_ch_region *pChRegion, u8 Geography)
+{
+ int i;
+ u8 offset = 0;
+ struct rt_ch_desp *pChDesp;
+ u8 ChType;
+ u8 increment;
+
+ if (pChRegion == NULL)
+ return;
+
+ ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
+
+ for (i = 0; i < 10; i++) {
+ pChDesp = &pChRegion->ChDesp[i];
+ if (pChDesp->FirstChannel == 0)
+ break;
+
+ if (ChType == BAND_5G) {
+ if (pChDesp->FirstChannel <= 14)
+ continue;
+ } else if (ChType == BAND_24G) {
+ if (pChDesp->FirstChannel > 14)
+ continue;
+ }
+
+ if ((pChDesp->Geography == BOTH)
+ || (pChDesp->Geography == Geography)) {
+ if (pChDesp->FirstChannel > 14)
+ increment = 4;
+ else
+ increment = 1;
+ offset = FillChList(pAd, pChDesp, offset, increment);
+ }
+ }
+}
+
+void BuildChannelListEx(struct rt_rtmp_adapter *pAd)
+{
+ struct rt_ch_region *pChReg;
+
+ pChReg = GetChRegion(pAd->CommonCfg.CountryCode);
+ CreateChList(pAd, pChReg, pAd->CommonCfg.Geography);
+}
+
+void BuildBeaconChList(struct rt_rtmp_adapter *pAd,
+ u8 *pBuf, unsigned long *pBufLen)
+{
+ int i;
+ unsigned long TmpLen;
+ struct rt_ch_region *pChRegion;
+ struct rt_ch_desp *pChDesp;
+ u8 ChType;
+
+ pChRegion = GetChRegion(pAd->CommonCfg.CountryCode);
+
+ if (pChRegion == NULL)
+ return;
+
+ ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
+ *pBufLen = 0;
+
+ for (i = 0; i < 10; i++) {
+ pChDesp = &pChRegion->ChDesp[i];
+ if (pChDesp->FirstChannel == 0)
+ break;
+
+ if (ChType == BAND_5G) {
+ if (pChDesp->FirstChannel <= 14)
+ continue;
+ } else if (ChType == BAND_24G) {
+ if (pChDesp->FirstChannel > 14)
+ continue;
+ }
+
+ if ((pChDesp->Geography == BOTH)
+ || (pChDesp->Geography == pAd->CommonCfg.Geography)) {
+ MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen,
+ 1, &pChDesp->FirstChannel,
+ 1, &pChDesp->NumOfCh,
+ 1, &pChDesp->MaxTxPwr, END_OF_ARGS);
+ *pBufLen += TmpLen;
+ }
+ }
+}
+
+static BOOLEAN IsValidChannel(struct rt_rtmp_adapter *pAd, u8 channel)
+{
+ int i;
+
+ for (i = 0; i < pAd->ChannelListNum; i++) {
+ if (pAd->ChannelList[i].Channel == channel)
+ break;
+ }
+
+ if (i == pAd->ChannelListNum)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static u8 GetExtCh(u8 Channel, u8 Direction)
+{
+ char ExtCh;
+
+ if (Direction == EXTCHA_ABOVE)
+ ExtCh = Channel + 4;
+ else
+ ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0;
+
+ return ExtCh;
+}
+
+void N_ChannelCheck(struct rt_rtmp_adapter *pAd)
+{
+ /*u8 ChannelNum = pAd->ChannelListNum; */
+ u8 Channel = pAd->CommonCfg.Channel;
+
+ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
+ && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) {
+ if (Channel > 14) {
+ if ((Channel == 36) || (Channel == 44)
+ || (Channel == 52) || (Channel == 60)
+ || (Channel == 100) || (Channel == 108)
+ || (Channel == 116) || (Channel == 124)
+ || (Channel == 132) || (Channel == 149)
+ || (Channel == 157)) {
+ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA =
+ EXTCHA_ABOVE;
+ } else if ((Channel == 40) || (Channel == 48)
+ || (Channel == 56) || (Channel == 64)
+ || (Channel == 104) || (Channel == 112)
+ || (Channel == 120) || (Channel == 128)
+ || (Channel == 136) || (Channel == 153)
+ || (Channel == 161)) {
+ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA =
+ EXTCHA_BELOW;
+ } else {
+ pAd->CommonCfg.RegTransmitSetting.field.BW =
+ BW_20;
+ }
+ } else {
+ do {
+ u8 ExtCh;
+ u8 Dir =
+ pAd->CommonCfg.RegTransmitSetting.field.
+ EXTCHA;
+ ExtCh = GetExtCh(Channel, Dir);
+ if (IsValidChannel(pAd, ExtCh))
+ break;
+
+ Dir =
+ (Dir ==
+ EXTCHA_ABOVE) ? EXTCHA_BELOW :
+ EXTCHA_ABOVE;
+ ExtCh = GetExtCh(Channel, Dir);
+ if (IsValidChannel(pAd, ExtCh)) {
+ pAd->CommonCfg.RegTransmitSetting.field.
+ EXTCHA = Dir;
+ break;
+ }
+ pAd->CommonCfg.RegTransmitSetting.field.BW =
+ BW_20;
+ } while (FALSE);
+
+ if (Channel == 14) {
+ pAd->CommonCfg.RegTransmitSetting.field.BW =
+ BW_20;
+ /*pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() */
+ }
+ }
+ }
+
+}
+
+void N_SetCenCh(struct rt_rtmp_adapter *pAd)
+{
+ if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) {
+ if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA ==
+ EXTCHA_ABOVE) {
+ pAd->CommonCfg.CentralChannel =
+ pAd->CommonCfg.Channel + 2;
+ } else {
+ if (pAd->CommonCfg.Channel == 14)
+ pAd->CommonCfg.CentralChannel =
+ pAd->CommonCfg.Channel - 1;
+ else
+ pAd->CommonCfg.CentralChannel =
+ pAd->CommonCfg.Channel - 2;
+ }
+ } else {
+ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
+ }
+}
+
+u8 GetCuntryMaxTxPwr(struct rt_rtmp_adapter *pAd, u8 channel)
+{
+ int i;
+ for (i = 0; i < pAd->ChannelListNum; i++) {
+ if (pAd->ChannelList[i].Channel == channel)
+ break;
+ }
+
+ if (i == pAd->ChannelListNum)
+ return 0xff;
+ else
+ return pAd->ChannelList[i].MaxTxPwr;
+}