blob: 5387989811777ba1b3ae36a335bcfd830d9e2b2f [file] [log] [blame]
/*
*************************************************************************
* 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;
}