Archived
14
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
linux-2.6/drivers/staging/rt2870/chlist.h
Greg Kroah-Hartman c55519ff75 Staging: add rt2870 wireless driver
This is the Ralink RT2870 driver from the company that does horrible
things like reading a config file from /etc.  However, the driver that
is currently under development from the wireless development community
is not working at all yet, so distros and users are using this version
instead (quite common hardware on a lot of netbook machines).

So here is this driver, for now, until the wireless developers get a
"clean" version into the main tree, or until this version is cleaned up
sufficiently to move out of the staging tree.

Ported to the Linux build system and cleaned up a bit already by me.

Cc: Linux wireless <linux-wireless@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-01-06 13:52:35 -08:00

1297 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. *
* *
*************************************************************************
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:
#ifdef DOT11_N_SUPPORT
case PHY_11AN_MIXED:
#endif // DOT11_N_SUPPORT //
*pChType = BAND_5G;
break;
case PHY_11ABG_MIXED:
#ifdef DOT11_N_SUPPORT
case PHY_11AGN_MIXED:
case PHY_11ABGN_MIXED:
#endif // DOT11_N_SUPPORT //
*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;
}
}
}
#ifdef DOT11_N_SUPPORT
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()
}
#if 0
switch (pAd->CommonCfg.CountryRegion & 0x7f)
{
case REGION_0_BG_BAND: // 1 -11
case REGION_1_BG_BAND: // 1 - 13
case REGION_5_BG_BAND: // 1 - 14
if (Channel <= 4)
{
pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
}
else if (Channel >= 8)
{
if ((ChannelNum - Channel) < 4)
pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
}
break;
case REGION_2_BG_BAND: // 10 - 11
case REGION_3_BG_BAND: // 10 - 13
case REGION_4_BG_BAND: // 14
pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
break;
case REGION_6_BG_BAND: // 3 - 9
if (Channel <= 5)
pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
else if (Channel == 6)
pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
else if (Channel >= 7)
pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
break;
case REGION_7_BG_BAND: // 5 - 13
if (Channel <= 8)
pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
else if (Channel >= 10)
pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
break;
default: // Error. should never happen
break;
}
#endif
}
}
}
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;
}
}
#endif // DOT11_N_SUPPORT //
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__