FreeBSD kernel ATH device code
ah_regdomain.h
Go to the documentation of this file.
1/*-
2 * SPDX-License-Identifier: ISC
3 *
4 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5 * Copyright (c) 2005-2006 Atheros Communications, Inc.
6 * All rights reserved.
7 *
8 * Permission to use, copy, modify, and/or distribute this software for any
9 * purpose with or without fee is hereby granted, provided that the above
10 * copyright notice and this permission notice appear in all copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 *
20 * $FreeBSD$
21 */
22#ifndef __AH_REGDOMAIN_H__
23#define __AH_REGDOMAIN_H__
24
25/*
26 * BMLEN defines the size of the bitmask used to hold frequency
27 * band specifications. Note this must agree with the BM macro
28 * definition that's used to setup initializers. See also further
29 * comments below.
30 */
31#define BMLEN 2 /* 2 x 64 bits in each channel bitmask */
32typedef uint64_t chanbmask_t[BMLEN];
33
34/*
35 * The following describe the bit masks for different passive scan
36 * capability/requirements per regdomain.
37 */
38#define NO_PSCAN 0x0ULL /* NB: must be zero */
39#define PSCAN_FCC 0x0000000000000001ULL
40#define PSCAN_FCC_T 0x0000000000000002ULL
41#define PSCAN_ETSI 0x0000000000000004ULL
42#define PSCAN_MKK1 0x0000000000000008ULL
43#define PSCAN_MKK2 0x0000000000000010ULL
44#define PSCAN_MKKA 0x0000000000000020ULL
45#define PSCAN_MKKA_G 0x0000000000000040ULL
46#define PSCAN_ETSIA 0x0000000000000080ULL
47#define PSCAN_ETSIB 0x0000000000000100ULL
48#define PSCAN_ETSIC 0x0000000000000200ULL
49#define PSCAN_WWR 0x0000000000000400ULL
50#define PSCAN_MKKA1 0x0000000000000800ULL
51#define PSCAN_MKKA1_G 0x0000000000001000ULL
52#define PSCAN_MKKA2 0x0000000000002000ULL
53#define PSCAN_MKKA2_G 0x0000000000004000ULL
54#define PSCAN_MKK3 0x0000000000008000ULL
55#define PSCAN_DEFER 0x7FFFFFFFFFFFFFFFULL
56#define IS_ECM_CHAN 0x8000000000000000ULL
57
58/*
59 * The following are flags for different requirements per reg domain.
60 * These requirements are either inhereted from the reg domain pair or
61 * from the unitary reg domain if the reg domain pair flags value is 0
62 */
63enum {
64 NO_REQ = 0x00000000, /* NB: must be zero */
65 DISALLOW_ADHOC_11A = 0x00000001, /* adhoc not allowed in 5GHz */
66 DISALLOW_ADHOC_11A_TURB = 0x00000002, /* not allowed w/ 5GHz turbo */
67 NEED_NFC = 0x00000004, /* need noise floor check */
68 ADHOC_PER_11D = 0x00000008, /* must receive 11d beacon */
69 LIMIT_FRAME_4MS = 0x00000020, /* 4msec tx burst limit */
70 NO_HOSTAP = 0x00000040, /* No HOSTAP mode opereation */
71};
72
73/* Bit masks for DFS per regdomain */
74enum {
75 NO_DFS = 0x0000000000000000ULL, /* NB: must be zero */
76 DFS_FCC3 = 0x0000000000000001ULL,
77 DFS_ETSI = 0x0000000000000002ULL,
78 DFS_MKK4 = 0x0000000000000004ULL,
79};
80
81enum { /* conformance test limits */
82 FCC = 0x10,
83 MKK = 0x40,
84 ETSI = 0x30,
85};
86
87/*
88 * THE following table is the mapping of regdomain pairs specified by
89 * an 8 bit regdomain value to the individual unitary reg domains
90 */
91typedef struct regDomainPair {
92 HAL_REG_DOMAIN regDmnEnum; /* 16 bit reg domain pair */
93 HAL_REG_DOMAIN regDmn5GHz; /* 5GHz reg domain */
94 HAL_REG_DOMAIN regDmn2GHz; /* 2GHz reg domain */
95 uint32_t flags5GHz; /* Requirements flags (AdHoc
96 disallow, noise floor cal needed,
97 etc) */
98 uint32_t flags2GHz; /* Requirements flags (AdHoc
99 disallow, noise floor cal needed,
100 etc) */
101 uint64_t pscanMask; /* Passive Scan flags which
102 can override unitary domain
103 passive scan flags. This
104 value is used as a mask on
105 the unitary flags*/
106 uint16_t singleCC; /* Country code of single country if
107 a one-on-one mapping exists */
109
110typedef struct {
114
115/*
116 * Frequency band collections are defined using bitmasks. Each bit
117 * in a mask is the index of an entry in one of the following tables.
118 * Bitmasks are BMLEN*64 bits so if a table grows beyond that the bit
119 * vectors must be enlarged or the tables split somehow (e.g. split
120 * 1/2 and 1/4 rate channels into a separate table).
121 *
122 * Beware of ordering; the indices are defined relative to the preceding
123 * entry so if things get off there will be confusion. A good way to
124 * check the indices is to collect them in a switch statement in a stub
125 * function so the compiler checks for duplicates.
126 */
127typedef struct {
128 uint16_t lowChannel; /* Low channel center in MHz */
129 uint16_t highChannel; /* High Channel center in MHz */
130 uint8_t powerDfs; /* Max power (dBm) for channel
131 range when using DFS */
132 uint8_t antennaMax; /* Max allowed antenna gain */
133 uint8_t channelBW; /* Bandwidth of the channel */
134 uint8_t channelSep; /* Channel separation within
135 the band */
136 uint64_t useDfs; /* Use DFS in the RegDomain
137 if corresponding bit is set */
138 uint64_t usePassScan; /* Use Passive Scan in the RegDomain
139 if corresponding bit is set */
141
142typedef struct regDomain {
143 uint16_t regDmnEnum; /* value from EnumRd table */
145 uint32_t flags; /* Requirement flags (AdHoc disallow,
146 noise floor cal needed, etc) */
147 uint64_t dfsMask; /* DFS bitmask for 5Ghz tables */
148 uint64_t pscan; /* Bitmask for passive scan */
149 chanbmask_t chan11a; /* 11a channels */
150 chanbmask_t chan11a_turbo; /* 11a static turbo channels */
151 chanbmask_t chan11a_dyn_turbo; /* 11a dynamic turbo channels */
152 chanbmask_t chan11a_half; /* 11a 1/2 width channels */
153 chanbmask_t chan11a_quarter; /* 11a 1/4 width channels */
154 chanbmask_t chan11b; /* 11b channels */
155 chanbmask_t chan11g; /* 11g channels */
156 chanbmask_t chan11g_turbo; /* 11g dynamic turbo channels */
157 chanbmask_t chan11g_half; /* 11g 1/2 width channels */
158 chanbmask_t chan11g_quarter; /* 11g 1/4 width channels */
160
161struct cmode {
162 u_int mode;
163 u_int flags;
165};
166#endif
uint16_t HAL_CTRY_CODE
Definition: ah.h:628
uint16_t HAL_REG_DOMAIN
Definition: ah.h:629
#define BMLEN
Definition: ah_regdomain.h:31
struct regDomainPair REG_DMN_PAIR_MAPPING
uint64_t chanbmask_t[BMLEN]
Definition: ah_regdomain.h:32
@ MKK
Definition: ah_regdomain.h:83
@ ETSI
Definition: ah_regdomain.h:84
@ FCC
Definition: ah_regdomain.h:82
@ DFS_FCC3
Definition: ah_regdomain.h:76
@ DFS_ETSI
Definition: ah_regdomain.h:77
@ NO_DFS
Definition: ah_regdomain.h:75
@ DFS_MKK4
Definition: ah_regdomain.h:78
struct regDomain REG_DOMAIN
@ ADHOC_PER_11D
Definition: ah_regdomain.h:68
@ NO_REQ
Definition: ah_regdomain.h:64
@ DISALLOW_ADHOC_11A_TURB
Definition: ah_regdomain.h:66
@ LIMIT_FRAME_4MS
Definition: ah_regdomain.h:69
@ NO_HOSTAP
Definition: ah_regdomain.h:70
@ DISALLOW_ADHOC_11A
Definition: ah_regdomain.h:65
@ NEED_NFC
Definition: ah_regdomain.h:67
HAL_REG_DOMAIN regDmnEnum
Definition: ah_regdomain.h:112
HAL_CTRY_CODE countryCode
Definition: ah_regdomain.h:111
uint16_t highChannel
Definition: ah_regdomain.h:129
uint64_t usePassScan
Definition: ah_regdomain.h:138
u_int mode
Definition: ah_regdomain.h:162
REG_DMN_FREQ_BAND * freqs
Definition: ah_regdomain.h:164
u_int flags
Definition: ah_regdomain.h:163
uint64_t pscanMask
Definition: ah_regdomain.h:101
uint32_t flags2GHz
Definition: ah_regdomain.h:98
HAL_REG_DOMAIN regDmnEnum
Definition: ah_regdomain.h:92
HAL_REG_DOMAIN regDmn5GHz
Definition: ah_regdomain.h:93
uint16_t singleCC
Definition: ah_regdomain.h:106
uint32_t flags5GHz
Definition: ah_regdomain.h:95
HAL_REG_DOMAIN regDmn2GHz
Definition: ah_regdomain.h:94
chanbmask_t chan11a_dyn_turbo
Definition: ah_regdomain.h:151
uint64_t dfsMask
Definition: ah_regdomain.h:147
chanbmask_t chan11a_turbo
Definition: ah_regdomain.h:150
chanbmask_t chan11b
Definition: ah_regdomain.h:154
uint32_t flags
Definition: ah_regdomain.h:145
chanbmask_t chan11g_half
Definition: ah_regdomain.h:157
chanbmask_t chan11a_half
Definition: ah_regdomain.h:152
chanbmask_t chan11g_quarter
Definition: ah_regdomain.h:158
uint16_t regDmnEnum
Definition: ah_regdomain.h:143
chanbmask_t chan11a
Definition: ah_regdomain.h:149
chanbmask_t chan11a_quarter
Definition: ah_regdomain.h:153
chanbmask_t chan11g
Definition: ah_regdomain.h:155
uint8_t conformanceTestLimit
Definition: ah_regdomain.h:144
uint64_t pscan
Definition: ah_regdomain.h:148
chanbmask_t chan11g_turbo
Definition: ah_regdomain.h:156