update for hal changes

This commit is contained in:
Sam Leffler 2009-01-29 23:24:21 +00:00
parent 800e5ab76a
commit 2961d4c674
2 changed files with 232 additions and 449 deletions

View File

@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"/
.Dd January 15, 2009
.Dd January 27, 2009
.Dt ATHRD 1
.Os
.Sh NAME
@ -36,7 +36,7 @@
.Nd list channels and transmit power for a country/regulatory domain
.Sh SYNOPSIS
.Nm
.Op Fl aioedlpcfr4ABGT
.Op Fl aedlpcfr4ABGT
.Op Fl m Ar mode
.Bk
.Op Ar country
@ -61,10 +61,6 @@ use as G channels and similary for A and T channels.
With this option
.Nm
will list all channels.
.It Fl i
Calculate channels based on indoor use.
.It Fl o
Calculate channels based on outdoor use (default).
.It Fl e
Calculate channels not assuming extended channel mode.
.It Fl d

View File

@ -31,6 +31,10 @@
#include "opt_ah.h"
#include "ah.h"
#include <net80211/_ieee80211.h>
#include <net80211/ieee80211_regdomain.h>
#include "ah_internal.h"
#include "ah_eeprom_v3.h" /* XXX */
@ -40,13 +44,9 @@
#include <string.h>
#include <unistd.h>
#define IEEE80211_CHAN_MAX 255
#define IEEE80211_REGCLASSIDS_MAX 10
int ath_hal_debug = 0;
HAL_CTRY_CODE cc = CTRY_DEFAULT;
HAL_REG_DOMAIN rd = 169; /* FCC */
HAL_BOOL outdoor = AH_TRUE;
HAL_BOOL Amode = 1;
HAL_BOOL Bmode = 1;
HAL_BOOL Gmode = 1;
@ -169,12 +169,12 @@ getChannelEdges(struct ath_hal *ah, u_int16_t flags, u_int16_t *low, u_int16_t *
struct ath_hal_private *ahp = AH_PRIVATE(ah);
HAL_CAPABILITIES *pCap = &ahp->ah_caps;
if (flags & CHANNEL_5GHZ) {
if (flags & IEEE80211_CHAN_5GHZ) {
*low = pCap->halLow5GhzChan;
*high = pCap->halHigh5GhzChan;
return AH_TRUE;
}
if (flags & CHANNEL_2GHZ) {
if (flags & IEEE80211_CHAN_2GHZ) {
*low = pCap->halLow2GhzChan;
*high = pCap->halHigh2GhzChan;
return AH_TRUE;
@ -208,158 +208,6 @@ getWirelessModes(struct ath_hal *ah)
return mode;
}
/*
* Country/Region Codes from MS WINNLS.H
* Numbering from ISO 3166
*/
enum CountryCode {
CTRY_ALBANIA = 8, /* Albania */
CTRY_ALGERIA = 12, /* Algeria */
CTRY_ARGENTINA = 32, /* Argentina */
CTRY_ARMENIA = 51, /* Armenia */
CTRY_AUSTRALIA = 36, /* Australia */
CTRY_AUSTRIA = 40, /* Austria */
CTRY_AZERBAIJAN = 31, /* Azerbaijan */
CTRY_BAHRAIN = 48, /* Bahrain */
CTRY_BELARUS = 112, /* Belarus */
CTRY_BELGIUM = 56, /* Belgium */
CTRY_BELIZE = 84, /* Belize */
CTRY_BOLIVIA = 68, /* Bolivia */
CTRY_BRAZIL = 76, /* Brazil */
CTRY_BRUNEI_DARUSSALAM = 96, /* Brunei Darussalam */
CTRY_BULGARIA = 100, /* Bulgaria */
CTRY_CANADA = 124, /* Canada */
CTRY_CHILE = 152, /* Chile */
CTRY_CHINA = 156, /* People's Republic of China */
CTRY_COLOMBIA = 170, /* Colombia */
CTRY_COSTA_RICA = 188, /* Costa Rica */
CTRY_CROATIA = 191, /* Croatia */
CTRY_CYPRUS = 196,
CTRY_CZECH = 203, /* Czech Republic */
CTRY_DENMARK = 208, /* Denmark */
CTRY_DOMINICAN_REPUBLIC = 214, /* Dominican Republic */
CTRY_ECUADOR = 218, /* Ecuador */
CTRY_EGYPT = 818, /* Egypt */
CTRY_EL_SALVADOR = 222, /* El Salvador */
CTRY_ESTONIA = 233, /* Estonia */
CTRY_FAEROE_ISLANDS = 234, /* Faeroe Islands */
CTRY_FINLAND = 246, /* Finland */
CTRY_FRANCE = 250, /* France */
CTRY_FRANCE2 = 255, /* France2 */
CTRY_GEORGIA = 268, /* Georgia */
CTRY_GERMANY = 276, /* Germany */
CTRY_GREECE = 300, /* Greece */
CTRY_GSM = 843, /* 900MHz/GSM */
CTRY_GUATEMALA = 320, /* Guatemala */
CTRY_HONDURAS = 340, /* Honduras */
CTRY_HONG_KONG = 344, /* Hong Kong S.A.R., P.R.C. */
CTRY_HUNGARY = 348, /* Hungary */
CTRY_ICELAND = 352, /* Iceland */
CTRY_INDIA = 356, /* India */
CTRY_INDONESIA = 360, /* Indonesia */
CTRY_IRAN = 364, /* Iran */
CTRY_IRAQ = 368, /* Iraq */
CTRY_IRELAND = 372, /* Ireland */
CTRY_ISRAEL = 376, /* Israel */
CTRY_ITALY = 380, /* Italy */
CTRY_JAMAICA = 388, /* Jamaica */
CTRY_JAPAN = 392, /* Japan */
CTRY_JAPAN1 = 393, /* Japan (JP1) */
CTRY_JAPAN2 = 394, /* Japan (JP0) */
CTRY_JAPAN3 = 395, /* Japan (JP1-1) */
CTRY_JAPAN4 = 396, /* Japan (JE1) */
CTRY_JAPAN5 = 397, /* Japan (JE2) */
CTRY_JAPAN6 = 399, /* Japan (JP6) */
CTRY_JAPAN7 = 4007, /* Japan (J7) */
CTRY_JAPAN8 = 4008, /* Japan (J8) */
CTRY_JAPAN9 = 4009, /* Japan (J9) */
CTRY_JAPAN10 = 4010, /* Japan (J10) */
CTRY_JAPAN11 = 4011, /* Japan (J11) */
CTRY_JAPAN12 = 4012, /* Japan (J12) */
CTRY_JAPAN13 = 4013, /* Japan (J13) */
CTRY_JAPAN14 = 4014, /* Japan (J14) */
CTRY_JAPAN15 = 4015, /* Japan (J15) */
CTRY_JAPAN16 = 4016, /* Japan (J16) */
CTRY_JAPAN17 = 4017, /* Japan (J17) */
CTRY_JAPAN18 = 4018, /* Japan (J18) */
CTRY_JAPAN19 = 4019, /* Japan (J19) */
CTRY_JAPAN20 = 4020, /* Japan (J20) */
CTRY_JAPAN21 = 4021, /* Japan (J21) */
CTRY_JAPAN22 = 4022, /* Japan (J22) */
CTRY_JAPAN23 = 4023, /* Japan (J23) */
CTRY_JAPAN24 = 4024, /* Japan (J24) */
CTRY_JORDAN = 400, /* Jordan */
CTRY_KAZAKHSTAN = 398, /* Kazakhstan */
CTRY_KENYA = 404, /* Kenya */
CTRY_KOREA_NORTH = 408, /* North Korea */
CTRY_KOREA_ROC = 410, /* South Korea */
CTRY_KOREA_ROC2 = 411, /* South Korea */
CTRY_KOREA_ROC3 = 412, /* South Korea */
CTRY_KUWAIT = 414, /* Kuwait */
CTRY_LATVIA = 428, /* Latvia */
CTRY_LEBANON = 422, /* Lebanon */
CTRY_LIBYA = 434, /* Libya */
CTRY_LIECHTENSTEIN = 438, /* Liechtenstein */
CTRY_LITHUANIA = 440, /* Lithuania */
CTRY_LUXEMBOURG = 442, /* Luxembourg */
CTRY_MACAU = 446, /* Macau */
CTRY_MACEDONIA = 807, /* the Former Yugoslav Republic of Macedonia */
CTRY_MALAYSIA = 458, /* Malaysia */
CTRY_MALTA = 470, /* Malta */
CTRY_MEXICO = 484, /* Mexico */
CTRY_MONACO = 492, /* Principality of Monaco */
CTRY_MOROCCO = 504, /* Morocco */
CTRY_NETHERLANDS = 528, /* Netherlands */
CTRY_NEW_ZEALAND = 554, /* New Zealand */
CTRY_NICARAGUA = 558, /* Nicaragua */
CTRY_NORWAY = 578, /* Norway */
CTRY_OMAN = 512, /* Oman */
CTRY_PAKISTAN = 586, /* Islamic Republic of Pakistan */
CTRY_PANAMA = 591, /* Panama */
CTRY_PARAGUAY = 600, /* Paraguay */
CTRY_PERU = 604, /* Peru */
CTRY_PHILIPPINES = 608, /* Republic of the Philippines */
CTRY_POLAND = 616, /* Poland */
CTRY_PORTUGAL = 620, /* Portugal */
CTRY_PUERTO_RICO = 630, /* Puerto Rico */
CTRY_QATAR = 634, /* Qatar */
CTRY_ROMANIA = 642, /* Romania */
CTRY_RUSSIA = 643, /* Russia */
CTRY_SAUDI_ARABIA = 682, /* Saudi Arabia */
CTRY_SINGAPORE = 702, /* Singapore */
CTRY_SLOVAKIA = 703, /* Slovak Republic */
CTRY_SLOVENIA = 705, /* Slovenia */
CTRY_SOUTH_AFRICA = 710, /* South Africa */
CTRY_SPAIN = 724, /* Spain */
CTRY_SWEDEN = 752, /* Sweden */
CTRY_SWITZERLAND = 756, /* Switzerland */
CTRY_SYRIA = 760, /* Syria */
CTRY_TAIWAN = 158, /* Taiwan */
CTRY_THAILAND = 764, /* Thailand */
CTRY_TRINIDAD_Y_TOBAGO = 780, /* Trinidad y Tobago */
CTRY_TUNISIA = 788, /* Tunisia */
CTRY_TURKEY = 792, /* Turkey */
CTRY_UAE = 784, /* U.A.E. */
CTRY_UKRAINE = 804, /* Ukraine */
CTRY_UNITED_KINGDOM = 826, /* United Kingdom */
CTRY_UNITED_STATES = 840, /* United States */
CTRY_UNITED_STATES_FCC49 = 842, /* United States (Public Safety)*/
CTRY_URUGUAY = 858, /* Uruguay */
CTRY_UZBEKISTAN = 860, /* Uzbekistan */
CTRY_VENEZUELA = 862, /* Venezuela */
CTRY_VIET_NAM = 704, /* Viet Nam */
CTRY_YEMEN = 887, /* Yemen */
CTRY_ZIMBABWE = 716 /* Zimbabwe */
};
/* Enumerated Regulatory Domain Information 8 bit values indicate that
* the regdomain is really a pair of unitary regdomains. 12 bit values
* are the real unitary regdomains and are the only ones which have the
@ -381,7 +229,6 @@ enum EnumRd {
NULL1_WORLD = 0x03, /* For 11b-only countries (no 11a allowed) */
NULL1_ETSIB = 0x07, /* Israel */
NULL1_ETSIC = 0x08,
NULL1_GSM = 0x09, /* GSM-only operation */
FCC1_FCCA = 0x10, /* USA */
FCC1_WORLD = 0x11, /* Hong Kong */
FCC4_FCCA = 0x12, /* USA - Public Safety */
@ -531,7 +378,6 @@ enum EnumRd {
NULL1 = 0x0198,
WORLD = 0x0199,
GSM = 0x019a,
DEBUG_REG_DMN = 0x01ff,
};
#define DEF_REGDMN FCC1_FCCA
@ -545,7 +391,6 @@ static struct {
D(NULL1_WORLD), /* For 11b-only countries (no 11a allowed) */
D(NULL1_ETSIB), /* Israel */
D(NULL1_ETSIC),
D(NULL1_GSM), /* GSM-only operation */
D(FCC1_FCCA), /* USA */
D(FCC1_WORLD), /* Hong Kong */
D(FCC4_FCCA), /* USA - Public Safety */
@ -682,7 +527,6 @@ static struct {
D(NULL1),
D(WORLD),
D(GSM),
D(DEBUG_REG_DMN),
#undef D
};
@ -734,163 +578,151 @@ typedef struct {
HAL_REG_DOMAIN regDmnEnum;
const char* isoName;
const char* name;
HAL_BOOL allow11g;
HAL_BOOL allow11aTurbo;
HAL_BOOL allow11gTurbo;
u_int16_t outdoorChanStart;
} COUNTRY_CODE_TO_ENUM_RD;
#define YES AH_TRUE
#define NO AH_FALSE
/* Index into table to avoid DEBUG and NO COUNTRY SET entries */
#define CTRY_ONLY_INDEX 2
/*
* Country Code Table to Enumerated RD
*/
static COUNTRY_CODE_TO_ENUM_RD allCountries[] = {
{CTRY_DEBUG, NO_ENUMRD, "DB", "DEBUG", YES, YES, YES, 7000 },
{CTRY_DEFAULT, DEF_REGDMN, "NA", "NO_COUNTRY_SET", YES, YES, YES, 7000 },
{CTRY_ALBANIA, NULL1_WORLD, "AL", "ALBANIA", YES, NO, YES, 7000 },
{CTRY_ALGERIA, NULL1_WORLD, "DZ", "ALGERIA", YES, NO, YES, 7000 },
{CTRY_ARGENTINA, APL3_WORLD, "AR", "ARGENTINA", NO, NO, NO, 7000 },
{CTRY_ARMENIA, ETSI4_WORLD, "AM", "ARMENIA", YES, NO, YES, 7000 },
{CTRY_AUSTRALIA, FCC2_WORLD, "AU", "AUSTRALIA", YES, YES, YES, 7000 },
{CTRY_AUSTRIA, ETSI1_WORLD, "AT", "AUSTRIA", YES, NO, YES, 7000 },
{CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ", "AZERBAIJAN", YES, YES, YES, 7000 },
{CTRY_BAHRAIN, APL6_WORLD, "BH", "BAHRAIN", YES, NO, YES, 7000 },
{CTRY_BELARUS, NULL1_WORLD, "BY", "BELARUS", YES, NO, YES, 7000 },
{CTRY_BELGIUM, ETSI1_WORLD, "BE", "BELGIUM", YES, NO, YES, 7000 },
{CTRY_BELIZE, APL1_ETSIC, "BZ", "BELIZE", YES, YES, YES, 7000 },
{CTRY_BOLIVIA, APL1_ETSIC, "BO", "BOLVIA", YES, YES, YES, 7000 },
{CTRY_BRAZIL, FCC3_WORLD, "BR", "BRAZIL", YES, NO, NO, 7000 },
{CTRY_BRUNEI_DARUSSALAM,APL1_WORLD,"BN", "BRUNEI DARUSSALAM", YES, YES, YES, 7000 },
{CTRY_BULGARIA, ETSI6_WORLD, "BG", "BULGARIA", YES, NO, YES, 7000 },
{CTRY_CANADA, FCC2_FCCA, "CA", "CANADA", YES, YES, YES, 7000 },
{CTRY_CHILE, APL6_WORLD, "CL", "CHILE", YES, YES, YES, 7000 },
{CTRY_CHINA, APL1_WORLD, "CN", "CHINA", YES, YES, YES, 7000 },
{CTRY_COLOMBIA, FCC1_FCCA, "CO", "COLOMBIA", YES, NO, YES, 7000 },
{CTRY_COSTA_RICA, NULL1_WORLD, "CR", "COSTA RICA", YES, NO, YES, 7000 },
{CTRY_CROATIA, ETSI3_WORLD, "HR", "CROATIA", YES, NO, YES, 7000 },
{CTRY_CYPRUS, ETSI1_WORLD, "CY", "CYPRUS", YES, YES, YES, 7000 },
{CTRY_CZECH, ETSI3_WORLD, "CZ", "CZECH REPUBLIC", YES, NO, YES, 7000 },
{CTRY_DENMARK, ETSI1_WORLD, "DK", "DENMARK", YES, NO, YES, 7000 },
{CTRY_DOMINICAN_REPUBLIC,FCC1_FCCA,"DO", "DOMINICAN REPUBLIC", YES, YES, YES, 7000 },
{CTRY_ECUADOR, NULL1_WORLD, "EC", "ECUADOR", NO, NO, NO, 7000 },
{CTRY_EGYPT, ETSI3_WORLD, "EG", "EGYPT", YES, NO, YES, 7000 },
{CTRY_EL_SALVADOR, NULL1_WORLD, "SV", "EL SALVADOR", YES, NO, YES, 7000 },
{CTRY_ESTONIA, ETSI1_WORLD, "EE", "ESTONIA", YES, NO, YES, 7000 },
{CTRY_FINLAND, ETSI1_WORLD, "FI", "FINLAND", YES, NO, YES, 7000 },
{CTRY_FRANCE, ETSI3_WORLD, "FR", "FRANCE", YES, NO, YES, 7000 },
{CTRY_FRANCE2, ETSI3_WORLD, "F2", "FRANCE_RES", YES, NO, YES, 7000 },
{CTRY_GEORGIA, ETSI4_WORLD, "GE", "GEORGIA", YES, YES, YES, 7000 },
{CTRY_GERMANY, ETSI1_WORLD, "DE", "GERMANY", YES, NO, YES, 7000 },
{CTRY_GREECE, ETSI1_WORLD, "GR", "GREECE", YES, NO, YES, 7000 },
{CTRY_GSM, NULL1_GSM, "GS", "GSM", YES, NO, NO, 7000 },
{CTRY_GUATEMALA, FCC1_FCCA, "GT", "GUATEMALA", YES, YES, YES, 7000 },
{CTRY_HONDURAS, NULL1_WORLD, "HN", "HONDURAS", YES, NO, YES, 7000 },
{CTRY_HONG_KONG, FCC2_WORLD, "HK", "HONG KONG", YES, YES, YES, 7000 },
{CTRY_HUNGARY, ETSI1_WORLD, "HU", "HUNGARY", YES, NO, YES, 7000 },
{CTRY_ICELAND, ETSI1_WORLD, "IS", "ICELAND", YES, NO, YES, 7000 },
{CTRY_INDIA, APL6_WORLD, "IN", "INDIA", YES, NO, YES, 7000 },
{CTRY_INDONESIA, APL1_WORLD, "ID", "INDONESIA", YES, NO, YES, 7000 },
{CTRY_IRAN, APL1_WORLD, "IR", "IRAN", YES, YES, YES, 7000 },
{CTRY_IRELAND, ETSI1_WORLD, "IE", "IRELAND", YES, NO, YES, 7000 },
{CTRY_ISRAEL, NULL1_WORLD, "IL", "ISRAEL", YES, NO, YES, 7000 },
{CTRY_ITALY, ETSI1_WORLD, "IT", "ITALY", YES, NO, YES, 7000 },
{CTRY_JAPAN, MKK1_MKKA, "JP", "JAPAN", YES, NO, NO, 7000 },
{CTRY_JAPAN1, MKK1_MKKB, "JP", "JAPAN1", YES, NO, NO, 7000 },
{CTRY_JAPAN2, MKK1_FCCA, "JP", "JAPAN2", YES, NO, NO, 7000 },
{CTRY_JAPAN3, MKK2_MKKA, "JP", "JAPAN3", YES, NO, NO, 7000 },
{CTRY_JAPAN4, MKK1_MKKA1, "JP", "JAPAN4", YES, NO, NO, 7000 },
{CTRY_JAPAN5, MKK1_MKKA2, "JP", "JAPAN5", YES, NO, NO, 7000 },
{CTRY_JAPAN6, MKK1_MKKC, "JP", "JAPAN6", YES, NO, NO, 7000 },
{CTRY_DEBUG, NO_ENUMRD, "DB", "DEBUG" },
{CTRY_DEFAULT, DEF_REGDMN, "NA", "NO_COUNTRY_SET" },
{CTRY_ALBANIA, NULL1_WORLD, "AL", "ALBANIA" },
{CTRY_ALGERIA, NULL1_WORLD, "DZ", "ALGERIA" },
{CTRY_ARGENTINA, APL3_WORLD, "AR", "ARGENTINA" },
{CTRY_ARMENIA, ETSI4_WORLD, "AM", "ARMENIA" },
{CTRY_AUSTRALIA, FCC2_WORLD, "AU", "AUSTRALIA" },
{CTRY_AUSTRIA, ETSI1_WORLD, "AT", "AUSTRIA" },
{CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ", "AZERBAIJAN" },
{CTRY_BAHRAIN, APL6_WORLD, "BH", "BAHRAIN" },
{CTRY_BELARUS, NULL1_WORLD, "BY", "BELARUS" },
{CTRY_BELGIUM, ETSI1_WORLD, "BE", "BELGIUM" },
{CTRY_BELIZE, APL1_ETSIC, "BZ", "BELIZE" },
{CTRY_BOLIVIA, APL1_ETSIC, "BO", "BOLVIA" },
{CTRY_BRAZIL, FCC3_WORLD, "BR", "BRAZIL" },
{CTRY_BRUNEI_DARUSSALAM,APL1_WORLD,"BN", "BRUNEI DARUSSALAM" },
{CTRY_BULGARIA, ETSI6_WORLD, "BG", "BULGARIA" },
{CTRY_CANADA, FCC2_FCCA, "CA", "CANADA" },
{CTRY_CHILE, APL6_WORLD, "CL", "CHILE" },
{CTRY_CHINA, APL1_WORLD, "CN", "CHINA" },
{CTRY_COLOMBIA, FCC1_FCCA, "CO", "COLOMBIA" },
{CTRY_COSTA_RICA, NULL1_WORLD, "CR", "COSTA RICA" },
{CTRY_CROATIA, ETSI3_WORLD, "HR", "CROATIA" },
{CTRY_CYPRUS, ETSI1_WORLD, "CY", "CYPRUS" },
{CTRY_CZECH, ETSI3_WORLD, "CZ", "CZECH REPUBLIC" },
{CTRY_DENMARK, ETSI1_WORLD, "DK", "DENMARK" },
{CTRY_DOMINICAN_REPUBLIC,FCC1_FCCA,"DO", "DOMINICAN REPUBLIC" },
{CTRY_ECUADOR, NULL1_WORLD, "EC", "ECUADOR" },
{CTRY_EGYPT, ETSI3_WORLD, "EG", "EGYPT" },
{CTRY_EL_SALVADOR, NULL1_WORLD, "SV", "EL SALVADOR" },
{CTRY_ESTONIA, ETSI1_WORLD, "EE", "ESTONIA" },
{CTRY_FINLAND, ETSI1_WORLD, "FI", "FINLAND" },
{CTRY_FRANCE, ETSI3_WORLD, "FR", "FRANCE" },
{CTRY_FRANCE2, ETSI3_WORLD, "F2", "FRANCE_RES" },
{CTRY_GEORGIA, ETSI4_WORLD, "GE", "GEORGIA" },
{CTRY_GERMANY, ETSI1_WORLD, "DE", "GERMANY" },
{CTRY_GREECE, ETSI1_WORLD, "GR", "GREECE" },
{CTRY_GUATEMALA, FCC1_FCCA, "GT", "GUATEMALA" },
{CTRY_HONDURAS, NULL1_WORLD, "HN", "HONDURAS" },
{CTRY_HONG_KONG, FCC2_WORLD, "HK", "HONG KONG" },
{CTRY_HUNGARY, ETSI1_WORLD, "HU", "HUNGARY" },
{CTRY_ICELAND, ETSI1_WORLD, "IS", "ICELAND" },
{CTRY_INDIA, APL6_WORLD, "IN", "INDIA" },
{CTRY_INDONESIA, APL1_WORLD, "ID", "INDONESIA" },
{CTRY_IRAN, APL1_WORLD, "IR", "IRAN" },
{CTRY_IRELAND, ETSI1_WORLD, "IE", "IRELAND" },
{CTRY_ISRAEL, NULL1_WORLD, "IL", "ISRAEL" },
{CTRY_ITALY, ETSI1_WORLD, "IT", "ITALY" },
{CTRY_JAPAN, MKK1_MKKA, "JP", "JAPAN" },
{CTRY_JAPAN1, MKK1_MKKB, "JP", "JAPAN1" },
{CTRY_JAPAN2, MKK1_FCCA, "JP", "JAPAN2" },
{CTRY_JAPAN3, MKK2_MKKA, "JP", "JAPAN3" },
{CTRY_JAPAN4, MKK1_MKKA1, "JP", "JAPAN4" },
{CTRY_JAPAN5, MKK1_MKKA2, "JP", "JAPAN5" },
{CTRY_JAPAN6, MKK1_MKKC, "JP", "JAPAN6" },
{CTRY_JAPAN7, MKK3_MKKB, "JP", "JAPAN7", YES, NO, NO, 7000 },
{CTRY_JAPAN8, MKK3_MKKA2, "JP", "JAPAN8", YES, NO, NO, 7000 },
{CTRY_JAPAN9, MKK3_MKKC, "JP", "JAPAN9", YES, NO, NO, 7000 },
{CTRY_JAPAN7, MKK3_MKKB, "JP", "JAPAN7" },
{CTRY_JAPAN8, MKK3_MKKA2, "JP", "JAPAN8" },
{CTRY_JAPAN9, MKK3_MKKC, "JP", "JAPAN9" },
{CTRY_JAPAN10, MKK4_MKKB, "JP", "JAPAN10", YES, NO, NO, 7000 },
{CTRY_JAPAN11, MKK4_MKKA2, "JP", "JAPAN11", YES, NO, NO, 7000 },
{CTRY_JAPAN12, MKK4_MKKC, "JP", "JAPAN12", YES, NO, NO, 7000 },
{CTRY_JAPAN10, MKK4_MKKB, "JP", "JAPAN10" },
{CTRY_JAPAN11, MKK4_MKKA2, "JP", "JAPAN11" },
{CTRY_JAPAN12, MKK4_MKKC, "JP", "JAPAN12" },
{CTRY_JAPAN13, MKK5_MKKB, "JP", "JAPAN13", YES, NO, NO, 7000 },
{CTRY_JAPAN14, MKK5_MKKA2, "JP", "JAPAN14", YES, NO, NO, 7000 },
{CTRY_JAPAN15, MKK5_MKKC, "JP", "JAPAN15", YES, NO, NO, 7000 },
{CTRY_JAPAN13, MKK5_MKKB, "JP", "JAPAN13" },
{CTRY_JAPAN14, MKK5_MKKA2, "JP", "JAPAN14" },
{CTRY_JAPAN15, MKK5_MKKC, "JP", "JAPAN15" },
{CTRY_JAPAN16, MKK6_MKKB, "JP", "JAPAN16", YES, NO, NO, 7000 },
{CTRY_JAPAN17, MKK6_MKKA2, "JP", "JAPAN17", YES, NO, NO, 7000 },
{CTRY_JAPAN18, MKK6_MKKC, "JP", "JAPAN18", YES, NO, NO, 7000 },
{CTRY_JAPAN16, MKK6_MKKB, "JP", "JAPAN16" },
{CTRY_JAPAN17, MKK6_MKKA2, "JP", "JAPAN17" },
{CTRY_JAPAN18, MKK6_MKKC, "JP", "JAPAN18" },
{CTRY_JAPAN19, MKK7_MKKB, "JP", "JAPAN19", YES, NO, NO, 7000 },
{CTRY_JAPAN20, MKK7_MKKA2, "JP", "JAPAN20", YES, NO, NO, 7000 },
{CTRY_JAPAN21, MKK7_MKKC, "JP", "JAPAN21", YES, NO, NO, 7000 },
{CTRY_JAPAN19, MKK7_MKKB, "JP", "JAPAN19" },
{CTRY_JAPAN20, MKK7_MKKA2, "JP", "JAPAN20" },
{CTRY_JAPAN21, MKK7_MKKC, "JP", "JAPAN21" },
{CTRY_JAPAN22, MKK8_MKKB, "JP", "JAPAN22", YES, NO, NO, 7000 },
{CTRY_JAPAN23, MKK8_MKKA2, "JP", "JAPAN23", YES, NO, NO, 7000 },
{CTRY_JAPAN24, MKK8_MKKC, "JP", "JAPAN24", YES, NO, NO, 7000 },
{CTRY_JAPAN22, MKK8_MKKB, "JP", "JAPAN22" },
{CTRY_JAPAN23, MKK8_MKKA2, "JP", "JAPAN23" },
{CTRY_JAPAN24, MKK8_MKKC, "JP", "JAPAN24" },
{CTRY_JORDAN, APL4_WORLD, "JO", "JORDAN", YES, NO, YES, 7000 },
{CTRY_KAZAKHSTAN, NULL1_WORLD, "KZ", "KAZAKHSTAN", YES, NO, YES, 7000 },
{CTRY_KOREA_NORTH, APL2_WORLD, "KP", "NORTH KOREA", YES, YES, YES, 7000 },
{CTRY_KOREA_ROC, APL2_WORLD, "KR", "KOREA REPUBLIC", YES, NO, NO, 7000 },
{CTRY_KOREA_ROC2, APL2_WORLD, "K2", "KOREA REPUBLIC2",YES, NO, NO, 7000 },
{CTRY_KOREA_ROC3, APL9_WORLD, "K3", "KOREA REPUBLIC3",YES, NO, NO, 7000 },
{CTRY_KUWAIT, NULL1_WORLD, "KW", "KUWAIT", YES, NO, YES, 7000 },
{CTRY_LATVIA, ETSI1_WORLD, "LV", "LATVIA", YES, NO, YES, 7000 },
{CTRY_LEBANON, NULL1_WORLD, "LB", "LEBANON", YES, NO, YES, 7000 },
{CTRY_LIECHTENSTEIN,ETSI1_WORLD, "LI", "LIECHTENSTEIN", YES, NO, YES, 7000 },
{CTRY_LITHUANIA, ETSI1_WORLD, "LT", "LITHUANIA", YES, NO, YES, 7000 },
{CTRY_LUXEMBOURG, ETSI1_WORLD, "LU", "LUXEMBOURG", YES, NO, YES, 7000 },
{CTRY_MACAU, FCC2_WORLD, "MO", "MACAU", YES, YES, YES, 7000 },
{CTRY_MACEDONIA, NULL1_WORLD, "MK", "MACEDONIA", YES, NO, YES, 7000 },
{CTRY_MALAYSIA, APL8_WORLD, "MY", "MALAYSIA", YES, NO, NO, 7000 },
{CTRY_MALTA, ETSI1_WORLD, "MT", "MALTA", YES, NO, YES, 7000 },
{CTRY_MEXICO, FCC1_FCCA, "MX", "MEXICO", YES, YES, YES, 7000 },
{CTRY_MONACO, ETSI4_WORLD, "MC", "MONACO", YES, YES, YES, 7000 },
{CTRY_MOROCCO, NULL1_WORLD, "MA", "MOROCCO", YES, NO, YES, 7000 },
{CTRY_NETHERLANDS, ETSI1_WORLD, "NL", "NETHERLANDS", YES, NO, YES, 7000 },
{CTRY_NEW_ZEALAND, FCC2_ETSIC, "NZ", "NEW ZEALAND", YES, NO, YES, 7000 },
{CTRY_NORWAY, ETSI1_WORLD, "NO", "NORWAY", YES, NO, YES, 7000 },
{CTRY_OMAN, APL6_WORLD, "OM", "OMAN", YES, NO, YES, 7000 },
{CTRY_PAKISTAN, NULL1_WORLD, "PK", "PAKISTAN", YES, NO, YES, 7000 },
{CTRY_PANAMA, FCC1_FCCA, "PA", "PANAMA", YES, YES, YES, 7000 },
{CTRY_PERU, APL1_WORLD, "PE", "PERU", YES, NO, YES, 7000 },
{CTRY_PHILIPPINES, APL1_WORLD, "PH", "PHILIPPINES", YES, YES, YES, 7000 },
{CTRY_POLAND, ETSI1_WORLD, "PL", "POLAND", YES, NO, YES, 7000 },
{CTRY_PORTUGAL, ETSI1_WORLD, "PT", "PORTUGAL", YES, NO, YES, 7000 },
{CTRY_PUERTO_RICO, FCC1_FCCA, "PR", "PUERTO RICO", YES, YES, YES, 7000 },
{CTRY_QATAR, NULL1_WORLD, "QA", "QATAR", YES, NO, YES, 7000 },
{CTRY_ROMANIA, NULL1_WORLD, "RO", "ROMANIA", YES, NO, YES, 7000 },
{CTRY_RUSSIA, NULL1_WORLD, "RU", "RUSSIA", YES, NO, YES, 7000 },
{CTRY_SAUDI_ARABIA,NULL1_WORLD, "SA", "SAUDI ARABIA", YES, NO, YES, 7000 },
{CTRY_SINGAPORE, APL6_WORLD, "SG", "SINGAPORE", YES, YES, YES, 7000 },
{CTRY_SLOVAKIA, ETSI1_WORLD, "SK", "SLOVAK REPUBLIC",YES, NO, YES, 7000 },
{CTRY_SLOVENIA, ETSI1_WORLD, "SI", "SLOVENIA", YES, NO, YES, 7000 },
{CTRY_SOUTH_AFRICA,FCC3_WORLD, "ZA", "SOUTH AFRICA", YES, NO, YES, 7000 },
{CTRY_SPAIN, ETSI1_WORLD, "ES", "SPAIN", YES, NO, YES, 7000 },
{CTRY_SWEDEN, ETSI1_WORLD, "SE", "SWEDEN", YES, NO, YES, 7000 },
{CTRY_SWITZERLAND, ETSI1_WORLD, "CH", "SWITZERLAND", YES, NO, YES, 7000 },
{CTRY_SYRIA, NULL1_WORLD, "SY", "SYRIA", YES, NO, YES, 7000 },
{CTRY_TAIWAN, APL3_FCCA, "TW", "TAIWAN", YES, YES, YES, 7000 },
{CTRY_THAILAND, NULL1_WORLD, "TH", "THAILAND", YES, NO, YES, 7000 },
{CTRY_TRINIDAD_Y_TOBAGO,ETSI4_WORLD,"TT", "TRINIDAD & TOBAGO", YES, NO, YES, 7000 },
{CTRY_TUNISIA, ETSI3_WORLD, "TN", "TUNISIA", YES, NO, YES, 7000 },
{CTRY_TURKEY, ETSI3_WORLD, "TR", "TURKEY", YES, NO, YES, 7000 },
{CTRY_UKRAINE, NULL1_WORLD, "UA", "UKRAINE", YES, NO, YES, 7000 },
{CTRY_UAE, NULL1_WORLD, "AE", "UNITED ARAB EMIRATES", YES, NO, YES, 7000 },
{CTRY_UNITED_KINGDOM, ETSI1_WORLD,"GB", "UNITED KINGDOM", YES, NO, YES, 7000 },
{CTRY_UNITED_STATES, FCC1_FCCA, "US", "UNITED STATES", YES, YES, YES, 5825 },
{CTRY_UNITED_STATES_FCC49, FCC4_FCCA, "PS", "UNITED STATES (PUBLIC SAFETY)", YES, YES, YES, 7000 },
{CTRY_URUGUAY, APL2_WORLD, "UY", "URUGUAY", YES, NO, YES, 7000 },
{CTRY_UZBEKISTAN, FCC3_FCCA, "UZ", "UZBEKISTAN", YES, YES, YES, 7000 },
{CTRY_VENEZUELA, APL2_ETSIC, "VE", "VENEZUELA", YES, NO, YES, 7000 },
{CTRY_VIET_NAM, NULL1_WORLD, "VN", "VIET NAM", YES, NO, YES, 7000 },
{CTRY_YEMEN, NULL1_WORLD, "YE", "YEMEN", YES, NO, YES, 7000 },
{CTRY_ZIMBABWE, NULL1_WORLD, "ZW", "ZIMBABWE", YES, NO, YES, 7000 }
{CTRY_JORDAN, APL4_WORLD, "JO", "JORDAN" },
{CTRY_KAZAKHSTAN, NULL1_WORLD, "KZ", "KAZAKHSTAN" },
{CTRY_KOREA_NORTH, APL2_WORLD, "KP", "NORTH KOREA" },
{CTRY_KOREA_ROC, APL2_WORLD, "KR", "KOREA REPUBLIC" },
{CTRY_KOREA_ROC2, APL2_WORLD, "K2", "KOREA REPUBLIC2" },
{CTRY_KOREA_ROC3, APL9_WORLD, "K3", "KOREA REPUBLIC3" },
{CTRY_KUWAIT, NULL1_WORLD, "KW", "KUWAIT" },
{CTRY_LATVIA, ETSI1_WORLD, "LV", "LATVIA" },
{CTRY_LEBANON, NULL1_WORLD, "LB", "LEBANON" },
{CTRY_LIECHTENSTEIN,ETSI1_WORLD, "LI", "LIECHTENSTEIN" },
{CTRY_LITHUANIA, ETSI1_WORLD, "LT", "LITHUANIA" },
{CTRY_LUXEMBOURG, ETSI1_WORLD, "LU", "LUXEMBOURG" },
{CTRY_MACAU, FCC2_WORLD, "MO", "MACAU" },
{CTRY_MACEDONIA, NULL1_WORLD, "MK", "MACEDONIA" },
{CTRY_MALAYSIA, APL8_WORLD, "MY", "MALAYSIA" },
{CTRY_MALTA, ETSI1_WORLD, "MT", "MALTA" },
{CTRY_MEXICO, FCC1_FCCA, "MX", "MEXICO" },
{CTRY_MONACO, ETSI4_WORLD, "MC", "MONACO" },
{CTRY_MOROCCO, NULL1_WORLD, "MA", "MOROCCO" },
{CTRY_NETHERLANDS, ETSI1_WORLD, "NL", "NETHERLANDS" },
{CTRY_NEW_ZEALAND, FCC2_ETSIC, "NZ", "NEW ZEALAND" },
{CTRY_NORWAY, ETSI1_WORLD, "NO", "NORWAY" },
{CTRY_OMAN, APL6_WORLD, "OM", "OMAN" },
{CTRY_PAKISTAN, NULL1_WORLD, "PK", "PAKISTAN" },
{CTRY_PANAMA, FCC1_FCCA, "PA", "PANAMA" },
{CTRY_PERU, APL1_WORLD, "PE", "PERU" },
{CTRY_PHILIPPINES, APL1_WORLD, "PH", "PHILIPPINES" },
{CTRY_POLAND, ETSI1_WORLD, "PL", "POLAND" },
{CTRY_PORTUGAL, ETSI1_WORLD, "PT", "PORTUGAL" },
{CTRY_PUERTO_RICO, FCC1_FCCA, "PR", "PUERTO RICO" },
{CTRY_QATAR, NULL1_WORLD, "QA", "QATAR" },
{CTRY_ROMANIA, NULL1_WORLD, "RO", "ROMANIA" },
{CTRY_RUSSIA, NULL1_WORLD, "RU", "RUSSIA" },
{CTRY_SAUDI_ARABIA,NULL1_WORLD, "SA", "SAUDI ARABIA" },
{CTRY_SINGAPORE, APL6_WORLD, "SG", "SINGAPORE" },
{CTRY_SLOVAKIA, ETSI1_WORLD, "SK", "SLOVAK REPUBLIC" },
{CTRY_SLOVENIA, ETSI1_WORLD, "SI", "SLOVENIA" },
{CTRY_SOUTH_AFRICA,FCC3_WORLD, "ZA", "SOUTH AFRICA" },
{CTRY_SPAIN, ETSI1_WORLD, "ES", "SPAIN" },
{CTRY_SWEDEN, ETSI1_WORLD, "SE", "SWEDEN" },
{CTRY_SWITZERLAND, ETSI1_WORLD, "CH", "SWITZERLAND" },
{CTRY_SYRIA, NULL1_WORLD, "SY", "SYRIA" },
{CTRY_TAIWAN, APL3_FCCA, "TW", "TAIWAN" },
{CTRY_THAILAND, NULL1_WORLD, "TH", "THAILAND" },
{CTRY_TRINIDAD_Y_TOBAGO,ETSI4_WORLD,"TT", "TRINIDAD & TOBAGO" },
{CTRY_TUNISIA, ETSI3_WORLD, "TN", "TUNISIA" },
{CTRY_TURKEY, ETSI3_WORLD, "TR", "TURKEY" },
{CTRY_UKRAINE, NULL1_WORLD, "UA", "UKRAINE" },
{CTRY_UAE, NULL1_WORLD, "AE", "UNITED ARAB EMIRATES" },
{CTRY_UNITED_KINGDOM, ETSI1_WORLD,"GB", "UNITED KINGDOM" },
{CTRY_UNITED_STATES, FCC1_FCCA, "US", "UNITED STATES" },
{CTRY_UNITED_STATES_FCC49, FCC4_FCCA, "PS", "UNITED STATES (PUBLIC SAFETY)" },
{CTRY_URUGUAY, APL2_WORLD, "UY", "URUGUAY" },
{CTRY_UZBEKISTAN, FCC3_FCCA, "UZ", "UZBEKISTAN" },
{CTRY_VENEZUELA, APL2_ETSIC, "VE", "VENEZUELA" },
{CTRY_VIET_NAM, NULL1_WORLD, "VN", "VIET NAM" },
{CTRY_YEMEN, NULL1_WORLD, "YE", "YEMEN" },
{CTRY_ZIMBABWE, NULL1_WORLD, "ZW", "ZIMBABWE" }
};
#undef YES
#undef NO
static HAL_BOOL
cclookup(const char *name, HAL_REG_DOMAIN *rd, HAL_CTRY_CODE *cc)
@ -952,12 +784,13 @@ cclist()
}
static HAL_BOOL
setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
setRateTable(struct ath_hal *ah, const struct ieee80211_channel *chan,
int16_t tpcScaleReduction, int16_t powerLimit,
int16_t *pMinPower, int16_t *pMaxPower);
static void
calctxpower(struct ath_hal *ah, int nchan, HAL_CHANNEL *chans,
calctxpower(struct ath_hal *ah,
int nchan, const struct ieee80211_channel *chans,
int16_t tpcScaleReduction, int16_t powerLimit, int16_t *txpow)
{
int16_t minpow;
@ -979,12 +812,12 @@ int isdfs = 0;
int is4ms = 0;
static int
anychan(const HAL_CHANNEL *chans, int nc, int flag)
anychan(const struct ieee80211_channel *chans, int nc, int flag)
{
int i;
for (i = 0; i < nc; i++)
if ((chans[i].privFlags & flag) != 0)
if ((chans[i].ic_flags & flag) != 0)
return 1;
return 0;
}
@ -993,9 +826,9 @@ static __inline int
mapgsm(u_int freq, u_int flags)
{
freq *= 10;
if (flags & CHANNEL_QUARTER)
if (flags & IEEE80211_CHAN_QUARTER)
freq += 5;
else if (flags & CHANNEL_HALF)
else if (flags & IEEE80211_CHAN_HALF)
freq += 10;
else
freq += 20;
@ -1014,93 +847,85 @@ mappsb(u_int freq, u_int flags)
int
ath_hal_mhz2ieee(struct ath_hal *ah, u_int freq, u_int flags)
{
if (flags & CHANNEL_2GHZ) { /* 2GHz band */
if (flags & IEEE80211_CHAN_2GHZ) { /* 2GHz band */
if (freq == 2484)
return 14;
if (freq < 2484) {
if (ath_hal_isgsmsku(ah))
return mapgsm(freq, flags);
if (freq < 2484)
return ((int)freq - 2407) / 5;
} else
else
return 15 + ((freq - 2512) / 20);
} else if (flags & CHANNEL_5GHZ) {/* 5Ghz band */
if (ath_hal_ispublicsafetysku(ah) &&
IS_CHAN_IN_PUBLIC_SAFETY_BAND(freq)) {
} else if (flags & IEEE80211_CHAN_5GHZ) {/* 5Ghz band */
if (IS_CHAN_IN_PUBLIC_SAFETY_BAND(freq))
return mappsb(freq, flags);
} else if ((flags & CHANNEL_A) && (freq <= 5000)) {
else if ((flags & IEEE80211_CHAN_A) && (freq <= 5000))
return (freq - 4000) / 5;
} else {
else
return (freq - 5000) / 5;
}
} else { /* either, guess */
if (freq == 2484)
return 14;
if (freq < 2484) {
if (ath_hal_isgsmsku(ah))
return mapgsm(freq, flags);
if (freq < 2484)
return ((int)freq - 2407) / 5;
}
if (freq < 5000) {
if (ath_hal_ispublicsafetysku(ah) &&
IS_CHAN_IN_PUBLIC_SAFETY_BAND(freq)) {
if (IS_CHAN_IN_PUBLIC_SAFETY_BAND(freq))
return mappsb(freq, flags);
} else if (freq > 4900) {
else if (freq > 4900)
return (freq - 4000) / 5;
} else {
else
return 15 + ((freq - 2512) / 20);
}
}
return (freq - 5000) / 5;
}
}
#define IS_CHAN_DFS(_c) (((_c)->privFlags & CHANNEL_DFS) != 0)
#define IS_CHAN_4MS(_c) (((_c)->privFlags & CHANNEL_4MS_LIMIT) != 0)
#define IEEE80211_IS_CHAN_4MS(_c) \
(((_c)->ic_flags & IEEE80211_CHAN_4MSXMIT) != 0)
static void
dumpchannels(struct ath_hal *ah, int nc, HAL_CHANNEL *chans, int16_t *txpow)
dumpchannels(struct ath_hal *ah, int nc,
const struct ieee80211_channel *chans, int16_t *txpow)
{
int i;
for (i = 0; i < nc; i++) {
HAL_CHANNEL *c = &chans[i];
const struct ieee80211_channel *c = &chans[i];
int type;
if (showchannels)
printf("%s%3d", sep,
ath_hal_mhz2ieee(ah, c->channel, c->channelFlags));
ath_hal_mhz2ieee(ah, c->ic_freq, c->ic_flags));
else
printf("%s%u", sep, c->channel);
if (IS_CHAN_HALF_RATE(c))
printf("%s%u", sep, c->ic_freq);
if (IEEE80211_IS_CHAN_HALF(c))
type = 'H';
else if (IS_CHAN_QUARTER_RATE(c))
else if (IEEE80211_IS_CHAN_QUARTER(c))
type = 'Q';
else if (IS_CHAN_TURBO(c))
else if (IEEE80211_IS_CHAN_TURBO(c))
type = 'T';
else if (IS_CHAN_HT(c))
else if (IEEE80211_IS_CHAN_HT(c))
type = 'N';
else if (IS_CHAN_A(c))
else if (IEEE80211_IS_CHAN_A(c))
type = 'A';
else if (IS_CHAN_108G(c))
else if (IEEE80211_IS_CHAN_108G(c))
type = 'T';
else if (IS_CHAN_G(c))
else if (IEEE80211_IS_CHAN_G(c))
type = 'G';
else
type = 'B';
if (dopassive && IS_CHAN_PASSIVE(c))
if (dopassive && IEEE80211_IS_CHAN_PASSIVE(c))
type = tolower(type);
if (isdfs && is4ms)
printf("%c%c%c %d.%d", type,
IS_CHAN_DFS(c) ? '*' : ' ',
IS_CHAN_4MS(c) ? '4' : ' ',
IEEE80211_IS_CHAN_DFS(c) ? '*' : ' ',
IEEE80211_IS_CHAN_4MS(c) ? '4' : ' ',
txpow[i]/2, (txpow[i]%2)*5);
else if (isdfs)
printf("%c%c %d.%d", type,
IS_CHAN_DFS(c) ? '*' : ' ',
IEEE80211_IS_CHAN_DFS(c) ? '*' : ' ',
txpow[i]/2, (txpow[i]%2)*5);
else if (is4ms)
printf("%c%c %d.%d", type,
IS_CHAN_4MS(c) ? '4' : ' ',
IEEE80211_IS_CHAN_4MS(c) ? '4' : ' ',
txpow[i]/2, (txpow[i]%2)*5);
else
printf("%c %d.%d", type, txpow[i]/2, (txpow[i]%2)*5);
@ -1112,25 +937,12 @@ dumpchannels(struct ath_hal *ah, int nc, HAL_CHANNEL *chans, int16_t *txpow)
}
static void
checkchannels(struct ath_hal *ah, HAL_CHANNEL *chans, int nchan)
{
int i;
for (i = 0; i < nchan; i++) {
HAL_CHANNEL *c = &chans[i];
if (!ath_hal_checkchannel(ah, c))
printf("Channel %u (0x%x) disallowed\n",
c->channel, c->channelFlags);
}
}
static void
intersect(HAL_CHANNEL *dst, int16_t *dtxpow, int *nd,
const HAL_CHANNEL *src, int16_t *stxpow, int ns)
intersect(struct ieee80211_channel *dst, int16_t *dtxpow, int *nd,
const struct ieee80211_channel *src, int16_t *stxpow, int ns)
{
int i = 0, j, k, l;
while (i < *nd) {
for (j = 0; j < ns && dst[i].channel != src[j].channel; j++)
for (j = 0; j < ns && dst[i].ic_freq != src[j].ic_freq; j++)
;
if (j < ns && dtxpow[i] == stxpow[j]) {
for (k = i+1, l = i; k < *nd; k++, l++)
@ -1149,7 +961,7 @@ usage(const char *progname)
}
static HAL_BOOL
getChipPowerLimits(struct ath_hal *ah, HAL_CHANNEL *chans, u_int32_t nchan)
getChipPowerLimits(struct ath_hal *ah, struct ieee80211_channel *chan)
{
}
@ -1199,25 +1011,23 @@ main(int argc, char *argv[])
static const u_int16_t tpcScaleReductionTable[5] =
{ 0, 3, 6, 9, MAX_RATE_POWER };
struct ath_hal_private ahp;
HAL_CHANNEL achans[IEEE80211_CHAN_MAX];
struct ieee80211_channel achans[IEEE80211_CHAN_MAX];
int16_t atxpow[IEEE80211_CHAN_MAX];
HAL_CHANNEL bchans[IEEE80211_CHAN_MAX];
struct ieee80211_channel bchans[IEEE80211_CHAN_MAX];
int16_t btxpow[IEEE80211_CHAN_MAX];
HAL_CHANNEL gchans[IEEE80211_CHAN_MAX];
struct ieee80211_channel gchans[IEEE80211_CHAN_MAX];
int16_t gtxpow[IEEE80211_CHAN_MAX];
HAL_CHANNEL tchans[IEEE80211_CHAN_MAX];
struct ieee80211_channel tchans[IEEE80211_CHAN_MAX];
int16_t ttxpow[IEEE80211_CHAN_MAX];
HAL_CHANNEL tgchans[IEEE80211_CHAN_MAX];
struct ieee80211_channel tgchans[IEEE80211_CHAN_MAX];
int16_t tgtxpow[IEEE80211_CHAN_MAX];
HAL_CHANNEL nchans[IEEE80211_CHAN_MAX];
struct ieee80211_channel nchans[IEEE80211_CHAN_MAX];
int16_t ntxpow[IEEE80211_CHAN_MAX];
int i, na, nb, ng, nt, ntg, nn;
HAL_BOOL showall = AH_FALSE;
HAL_BOOL extendedChanMode = AH_TRUE;
int modes = 0;
int16_t tpcReduction, powerLimit;
int8_t regids[IEEE80211_REGCLASSIDS_MAX];
int nregids;
int showdfs = 0;
int show4ms = 0;
@ -1239,7 +1049,7 @@ main(int argc, char *argv[])
tpcReduction = tpcScaleReductionTable[0];
powerLimit = MAX_RATE_POWER;
while ((i = getopt(argc, argv, "acdefoilm:pr4ABGhHNT")) != -1)
while ((i = getopt(argc, argv, "acdeflm:pr4ABGhHNT")) != -1)
switch (i) {
case 'a':
showall = AH_TRUE;
@ -1256,12 +1066,6 @@ main(int argc, char *argv[])
case 'f':
showchannels = AH_FALSE;
break;
case 'o':
outdoor = AH_TRUE;
break;
case 'i':
outdoor = AH_FALSE;
break;
case 'l':
cclist();
rdlist();
@ -1362,93 +1166,76 @@ main(int argc, char *argv[])
printf("\n%s (0x%x, %u)\n",
getrdname(rd), rd, rd);
if (modes == 0)
if (modes == 0) {
/* NB: no HAL_MODE_HT */
modes = HAL_MODE_11A | HAL_MODE_11B |
HAL_MODE_11G | HAL_MODE_TURBO | HAL_MODE_108G |
HAL_MODE_HT;
HAL_MODE_11G | HAL_MODE_TURBO | HAL_MODE_108G;
}
na = nb = ng = nt = ntg = nn = 0;
if (modes & HAL_MODE_11G) {
ahp.ah_currentRD = rd;
if (ath_hal_init_channels(&ahp.h,
gchans, IEEE80211_CHAN_MAX, &ng,
regids, IEEE80211_REGCLASSIDS_MAX, &nregids,
cc, HAL_MODE_11G, outdoor, extendedChanMode)) {
checkchannels(&ahp.h, gchans, ng);
if (ath_hal_getchannels(&ahp.h, gchans, IEEE80211_CHAN_MAX, &ng,
HAL_MODE_11G, cc, rd, extendedChanMode) == HAL_OK) {
calctxpower(&ahp.h, ng, gchans, tpcReduction, powerLimit, gtxpow);
if (showdfs)
isdfs |= anychan(gchans, ng, CHANNEL_DFS);
isdfs |= anychan(gchans, ng, IEEE80211_CHAN_DFS);
if (show4ms)
is4ms |= anychan(gchans, ng, CHANNEL_4MS_LIMIT);
is4ms |= anychan(gchans, ng, IEEE80211_CHAN_4MSXMIT);
}
}
if (modes & HAL_MODE_11B) {
ahp.ah_currentRD = rd;
if (ath_hal_init_channels(&ahp.h,
bchans, IEEE80211_CHAN_MAX, &nb,
regids, IEEE80211_REGCLASSIDS_MAX, &nregids,
cc, HAL_MODE_11B, outdoor, extendedChanMode)) {
checkchannels(&ahp.h, bchans, nb);
if (ath_hal_getchannels(&ahp.h, bchans, IEEE80211_CHAN_MAX, &nb,
HAL_MODE_11B, cc, rd, extendedChanMode) == HAL_OK) {
calctxpower(&ahp.h, nb, bchans, tpcReduction, powerLimit, btxpow);
if (showdfs)
isdfs |= anychan(bchans, nb, CHANNEL_DFS);
isdfs |= anychan(bchans, nb, IEEE80211_CHAN_DFS);
if (show4ms)
is4ms |= anychan(bchans, nb, CHANNEL_4MS_LIMIT);
is4ms |= anychan(bchans, nb, IEEE80211_CHAN_4MSXMIT);
}
}
if (modes & HAL_MODE_11A) {
ahp.ah_currentRD = rd;
if (ath_hal_init_channels(&ahp.h,
achans, IEEE80211_CHAN_MAX, &na,
regids, IEEE80211_REGCLASSIDS_MAX, &nregids,
cc, HAL_MODE_11A, outdoor, extendedChanMode)) {
checkchannels(&ahp.h, achans, na);
if (ath_hal_getchannels(&ahp.h, achans, IEEE80211_CHAN_MAX, &na,
HAL_MODE_11A, cc, rd, extendedChanMode) == HAL_OK) {
calctxpower(&ahp.h, na, achans, tpcReduction, powerLimit, atxpow);
if (showdfs)
isdfs |= anychan(achans, na, CHANNEL_DFS);
isdfs |= anychan(achans, na, IEEE80211_CHAN_DFS);
if (show4ms)
is4ms |= anychan(achans, na, CHANNEL_4MS_LIMIT);
is4ms |= anychan(achans, na, IEEE80211_CHAN_4MSXMIT);
}
}
if (modes & HAL_MODE_TURBO) {
ahp.ah_currentRD = rd;
if (ath_hal_init_channels(&ahp.h,
tchans, IEEE80211_CHAN_MAX, &nt,
regids, IEEE80211_REGCLASSIDS_MAX, &nregids,
cc, HAL_MODE_TURBO, outdoor, extendedChanMode)) {
checkchannels(&ahp.h, tchans, nt);
if (ath_hal_getchannels(&ahp.h, tchans, IEEE80211_CHAN_MAX, &nt,
HAL_MODE_TURBO, cc, rd, extendedChanMode) == HAL_OK) {
calctxpower(&ahp.h, nt, tchans, tpcReduction, powerLimit, ttxpow);
if (showdfs)
isdfs |= anychan(tchans, nt, CHANNEL_DFS);
isdfs |= anychan(tchans, nt, IEEE80211_CHAN_DFS);
if (show4ms)
is4ms |= anychan(tchans, nt, CHANNEL_4MS_LIMIT);
is4ms |= anychan(tchans, nt, IEEE80211_CHAN_4MSXMIT);
}
}
if (modes & HAL_MODE_108G) {
ahp.ah_currentRD = rd;
if (ath_hal_init_channels(&ahp.h,
tgchans, IEEE80211_CHAN_MAX, &ntg,
regids, IEEE80211_REGCLASSIDS_MAX, &nregids,
cc, HAL_MODE_108G, outdoor, extendedChanMode)) {
checkchannels(&ahp.h, tgchans, ntg);
if (ath_hal_getchannels(&ahp.h, tgchans, IEEE80211_CHAN_MAX, &ntg,
HAL_MODE_108G, cc, rd, extendedChanMode) == HAL_OK) {
calctxpower(&ahp.h, ntg, tgchans, tpcReduction, powerLimit, tgtxpow);
if (showdfs)
isdfs |= anychan(tgchans, ntg, CHANNEL_DFS);
isdfs |= anychan(tgchans, ntg, IEEE80211_CHAN_DFS);
if (show4ms)
is4ms |= anychan(tgchans, ntg, CHANNEL_4MS_LIMIT);
is4ms |= anychan(tgchans, ntg, IEEE80211_CHAN_4MSXMIT);
}
}
if (modes & HAL_MODE_HT) {
ahp.ah_currentRD = rd;
if (ath_hal_init_channels(&ahp.h,
nchans, IEEE80211_CHAN_MAX, &nn,
regids, IEEE80211_REGCLASSIDS_MAX, &nregids,
cc, modes & HAL_MODE_HT, outdoor, extendedChanMode)) {
checkchannels(&ahp.h, nchans, nn);
if (ath_hal_getchannels(&ahp.h, nchans, IEEE80211_CHAN_MAX, &nn,
modes & HAL_MODE_HT, cc, rd, extendedChanMode) == HAL_OK) {
calctxpower(&ahp.h, nn, nchans, tpcReduction, powerLimit, ntxpow);
if (showdfs)
isdfs |= anychan(nchans, nn, CHANNEL_DFS);
isdfs |= anychan(nchans, nn, IEEE80211_CHAN_DFS);
if (show4ms)
is4ms |= anychan(nchans, nn, CHANNEL_4MS_LIMIT);
is4ms |= anychan(nchans, nn, IEEE80211_CHAN_4MSXMIT);
}
}
@ -1623,7 +1410,7 @@ interpolate(u_int16_t target, u_int16_t srcLeft, u_int16_t srcRight,
* channel, and number of channels
*/
static void
ar5212GetTargetPowers(struct ath_hal *ah, HAL_CHANNEL *chan,
ar5212GetTargetPowers(struct ath_hal *ah, const struct ieee80211_channel *chan,
TRGT_POWER_INFO *powInfo,
u_int16_t numChannels, TRGT_POWER_INFO *pNewPower)
{
@ -1636,7 +1423,7 @@ ar5212GetTargetPowers(struct ath_hal *ah, HAL_CHANNEL *chan,
for (i = 0; i < numChannels; i++)
tempChannelList[i] = powInfo[i].testChannel;
ar5212GetLowerUpperValues(chan->channel, tempChannelList,
ar5212GetLowerUpperValues(chan->ic_freq, tempChannelList,
numChannels, &clo, &chi);
/* Get the indices for the channel */
@ -1655,13 +1442,13 @@ ar5212GetTargetPowers(struct ath_hal *ah, HAL_CHANNEL *chan,
* Get the lower and upper channels, target powers,
* and interpolate between them.
*/
pNewPower->twicePwr6_24 = interpolate(chan->channel, clo, chi,
pNewPower->twicePwr6_24 = interpolate(chan->ic_freq, clo, chi,
powInfo[ixlo].twicePwr6_24, powInfo[ixhi].twicePwr6_24);
pNewPower->twicePwr36 = interpolate(chan->channel, clo, chi,
pNewPower->twicePwr36 = interpolate(chan->ic_freq, clo, chi,
powInfo[ixlo].twicePwr36, powInfo[ixhi].twicePwr36);
pNewPower->twicePwr48 = interpolate(chan->channel, clo, chi,
pNewPower->twicePwr48 = interpolate(chan->ic_freq, clo, chi,
powInfo[ixlo].twicePwr48, powInfo[ixhi].twicePwr48);
pNewPower->twicePwr54 = interpolate(chan->channel, clo, chi,
pNewPower->twicePwr54 = interpolate(chan->ic_freq, clo, chi,
powInfo[ixlo].twicePwr54, powInfo[ixhi].twicePwr54);
}
@ -1681,7 +1468,7 @@ findEdgePower(struct ath_hal *ah, u_int ctl)
* operating channel and mode.
*/
static HAL_BOOL
setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
setRateTable(struct ath_hal *ah, const struct ieee80211_channel *chan,
int16_t tpcScaleReduction, int16_t powerLimit,
int16_t *pMinPower, int16_t *pMaxPower)
{
@ -1694,7 +1481,7 @@ setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
int16_t scaledPower;
u_int8_t cfgCtl;
twiceMaxRDPower = chan->maxRegTxPower * 2;
twiceMaxRDPower = chan->ic_maxregpower * 2;
*pMaxPower = -MAX_RATE_POWER;
*pMinPower = MAX_RATE_POWER;
@ -1702,16 +1489,16 @@ setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
cfgCtl = ath_hal_getctl(ah, chan);
rep = findEdgePower(ah, cfgCtl);
if (rep != AH_NULL)
twiceMaxEdgePower = ar5212GetMaxEdgePower(chan->channel, rep);
twiceMaxEdgePower = ar5212GetMaxEdgePower(chan->ic_freq, rep);
else
twiceMaxEdgePower = MAX_RATE_POWER;
if (IS_CHAN_G(chan)) {
if (IEEE80211_IS_CHAN_G(chan)) {
/* Check for a CCK CTL for 11G CCK powers */
cfgCtl = (cfgCtl & 0xFC) | 0x01;
rep = findEdgePower(ah, cfgCtl);
if (rep != AH_NULL)
twiceMaxEdgePowerCck = ar5212GetMaxEdgePower(chan->channel, rep);
twiceMaxEdgePowerCck = ar5212GetMaxEdgePower(chan->ic_freq, rep);
else
twiceMaxEdgePowerCck = MAX_RATE_POWER;
} else {
@ -1720,7 +1507,7 @@ setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
}
/* Get Antenna Gain reduction */
if (IS_CHAN_5GHZ(chan)) {
if (IEEE80211_IS_CHAN_5GHZ(chan)) {
twiceAntennaGain = antennaGainMax[0];
} else {
twiceAntennaGain = antennaGainMax[1];
@ -1728,9 +1515,9 @@ setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
twiceAntennaReduction =
ath_hal_getantennareduction(ah, chan, twiceAntennaGain);
if (IS_CHAN_OFDM(chan)) {
if (IEEE80211_IS_CHAN_OFDM(chan)) {
/* Get final OFDM target powers */
if (IS_CHAN_G(chan)) {
if (IEEE80211_IS_CHAN_G(chan)) {
/* TODO - add Turbo 2.4 to this mode check */
ar5212GetTargetPowers(ah, chan, trgtPwr_11g,
numTargetPwr_11g, &targetPowerOfdm);
@ -1750,7 +1537,7 @@ setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
* this unless specially configured. Then we limit
* power only for non-AP operation.
*/
if (IS_CHAN_TURBO(chan)
if (IEEE80211_IS_CHAN_TURBO(chan)
#ifdef AH_ENABLE_AP_SUPPORT
&& AH_PRIVATE(ah)->ah_opmode != HAL_M_HOSTAP
#endif
@ -1767,7 +1554,7 @@ setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
* constraint on 2.4GHz channels.
*/
if (eeversion >= AR_EEPROM_VER4_0 &&
IS_CHAN_2GHZ(chan))
IEEE80211_IS_CHAN_2GHZ(chan))
scaledPower = AH_MIN(scaledPower,
turbo2WMaxPower2);
}
@ -1811,7 +1598,7 @@ setRateTable(struct ath_hal *ah, HAL_CHANNEL *chan,
twiceMaxEdgePower, tpcScaleReduction * 2);
}
if (IS_CHAN_CCK(chan) || IS_CHAN_G(chan)) {
if (IEEE80211_IS_CHAN_CCK(chan)) {
/* Get final CCK target powers */
ar5212GetTargetPowers(ah, chan, trgtPwr_11b,
numTargetPwr_11b, &targetPowerCck);