blob: f49a35c95de67ec79e2e4453964c8433287d0a61 [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. *
* *
*************************************************************************
Module Name:
chlist.c
Abstract:
Revision History:
Who When What
-------- ---------- ----------------------------------------------
Fonchi Wu 2007-12-19 created
*/
#ifndef __CHLIST_H__
#define __CHLIST_H__
#include "rtmp_type.h"
#include "rtmp_def.h"
#define ODOR 0
#define IDOR 1
#define BOTH 2
#define BAND_5G 0
#define BAND_24G 1
#define BAND_BOTH 2
typedef struct _CH_DESP {
UCHAR FirstChannel;
UCHAR NumOfCh;
CHAR MaxTxPwr; // dBm
UCHAR Geography; // 0:out door, 1:in door, 2:both
BOOLEAN DfsReq; // Dfs require, 0: No, 1: yes.
} CH_DESP, *PCH_DESP;
typedef struct _CH_REGION {
UCHAR CountReg[3];
UCHAR DfsType; // 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56
CH_DESP ChDesp[10];
} CH_REGION, *PCH_REGION;
static 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 inline PCH_REGION GetChRegion(
IN PUCHAR CntryCode)
{
INT loop = 0;
PCH_REGION pChRegion = NULL;
while (strcmp(ChRegion[loop].CountReg, "") != 0)
{
if (strncmp(ChRegion[loop].CountReg, CntryCode, 2) == 0)
{
pChRegion = &ChRegion[loop];
break;
}
loop++;
}
if (pChRegion == NULL)
pChRegion = &ChRegion[loop];
return pChRegion;
}
static inline VOID ChBandCheck(
IN UCHAR PhyMode,
OUT PUCHAR 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 inline UCHAR FillChList(
IN PRTMP_ADAPTER pAd,
IN PCH_DESP pChDesp,
IN UCHAR Offset,
IN UCHAR increment)
{
INT i, j, l;
UCHAR 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(
IN PRTMP_ADAPTER pAd,
IN PCH_REGION pChRegion,
IN UCHAR Geography)
{
INT i;
UCHAR offset = 0;
PCH_DESP pChDesp;
UCHAR ChType;
UCHAR 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);
}
}
}
static inline VOID BuildChannelListEx(
IN PRTMP_ADAPTER pAd)
{
PCH_REGION pChReg;
pChReg = GetChRegion(pAd->CommonCfg.CountryCode);
CreateChList(pAd, pChReg, pAd->CommonCfg.Geography);
}
static inline VOID BuildBeaconChList(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf,
OUT PULONG pBufLen)
{
INT i;
ULONG TmpLen;
PCH_REGION pChRegion;
PCH_DESP pChDesp;
UCHAR 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 inline BOOLEAN IsValidChannel(
IN PRTMP_ADAPTER pAd,
IN UCHAR 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 inline UCHAR GetExtCh(
IN UCHAR Channel,
IN UCHAR Direction)
{
CHAR ExtCh;
if (Direction == EXTCHA_ABOVE)
ExtCh = Channel + 4;
else
ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0;
return ExtCh;
}
static inline VOID N_ChannelCheck(
IN PRTMP_ADAPTER pAd)
{
//UCHAR ChannelNum = pAd->ChannelListNum;
UCHAR 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
{
UCHAR ExtCh;
UCHAR 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()
}
}
}
}
static inline VOID N_SetCenCh(
IN PRTMP_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;
}
}
static inline UINT8 GetCuntryMaxTxPwr(
IN PRTMP_ADAPTER pAd,
IN UINT8 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;
}
#endif // __CHLIST_H__