1706 lines
28 KiB
C
1706 lines
28 KiB
C
/*
|
|
*************************************************************************
|
|
* 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;
|
|
}
|