The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net80211/_ieee80211.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    3  *
    4  * Copyright (c) 2001 Atsushi Onoe
    5  * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  *
   17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   20  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   22  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   27  *
   28  * $FreeBSD$
   29  */
   30 #ifndef _NET80211__IEEE80211_H_
   31 #define _NET80211__IEEE80211_H_
   32 
   33 /*
   34  * 802.11 implementation definitions.
   35  *
   36  * NB: this file is used by applications.
   37  */
   38 
   39 /*
   40  * PHY type; mostly used to identify FH phys.
   41  */
   42 enum ieee80211_phytype {
   43         IEEE80211_T_DS,                 /* direct sequence spread spectrum */
   44         IEEE80211_T_FH,                 /* frequency hopping */
   45         IEEE80211_T_OFDM,               /* frequency division multiplexing */
   46         IEEE80211_T_TURBO,              /* high rate OFDM, aka turbo mode */
   47         IEEE80211_T_HT,                 /* high throughput */
   48         IEEE80211_T_OFDM_HALF,          /* 1/2 rate OFDM */
   49         IEEE80211_T_OFDM_QUARTER,       /* 1/4 rate OFDM */
   50         IEEE80211_T_VHT,                /* VHT PHY */
   51 };
   52 #define IEEE80211_T_CCK IEEE80211_T_DS  /* more common nomenclature */
   53 
   54 /*
   55  * PHY mode; this is not really a mode as multi-mode devices
   56  * have multiple PHY's.  Mode is mostly used as a shorthand
   57  * for constraining which channels to consider in setting up
   58  * operation.  Modes used to be used more extensively when
   59  * channels were identified as IEEE channel numbers.
   60  */
   61 enum ieee80211_phymode {
   62         IEEE80211_MODE_AUTO     = 0,    /* autoselect */
   63         IEEE80211_MODE_11A      = 1,    /* 5GHz, OFDM */
   64         IEEE80211_MODE_11B      = 2,    /* 2GHz, CCK */
   65         IEEE80211_MODE_11G      = 3,    /* 2GHz, OFDM */
   66         IEEE80211_MODE_FH       = 4,    /* 2GHz, GFSK */
   67         IEEE80211_MODE_TURBO_A  = 5,    /* 5GHz, OFDM, 2x clock */
   68         IEEE80211_MODE_TURBO_G  = 6,    /* 2GHz, OFDM, 2x clock */
   69         IEEE80211_MODE_STURBO_A = 7,    /* 5GHz, OFDM, 2x clock, static */
   70         IEEE80211_MODE_11NA     = 8,    /* 5GHz, w/ HT */
   71         IEEE80211_MODE_11NG     = 9,    /* 2GHz, w/ HT */
   72         IEEE80211_MODE_HALF     = 10,   /* OFDM, 1/2x clock */
   73         IEEE80211_MODE_QUARTER  = 11,   /* OFDM, 1/4x clock */
   74         IEEE80211_MODE_VHT_2GHZ = 12,   /* 2GHz, VHT */
   75         IEEE80211_MODE_VHT_5GHZ = 13,   /* 5GHz, VHT */
   76 };
   77 #define IEEE80211_MODE_MAX      (IEEE80211_MODE_VHT_5GHZ+1)
   78 #define IEEE80211_MODE_BYTES    howmany(IEEE80211_MODE_MAX, NBBY)
   79 
   80 /*
   81  * Operating mode.  Devices do not necessarily support
   82  * all modes; they indicate which are supported in their
   83  * capabilities.
   84  */
   85 enum ieee80211_opmode {
   86         IEEE80211_M_IBSS        = 0,    /* IBSS (adhoc) station */
   87         IEEE80211_M_STA         = 1,    /* infrastructure station */
   88         IEEE80211_M_WDS         = 2,    /* WDS link */
   89         IEEE80211_M_AHDEMO      = 3,    /* Old lucent compatible adhoc demo */
   90         IEEE80211_M_HOSTAP      = 4,    /* Software Access Point */
   91         IEEE80211_M_MONITOR     = 5,    /* Monitor mode */
   92         IEEE80211_M_MBSS        = 6,    /* MBSS (Mesh Point) link */
   93 };
   94 #define IEEE80211_OPMODE_MAX    (IEEE80211_M_MBSS+1)
   95 
   96 /*
   97  * 802.11g/802.11n protection mode.
   98  */
   99 enum ieee80211_protmode {
  100         IEEE80211_PROT_NONE     = 0,    /* no protection */
  101         IEEE80211_PROT_CTSONLY  = 1,    /* CTS to self */
  102         IEEE80211_PROT_RTSCTS   = 2,    /* RTS-CTS */
  103 };
  104 
  105 /*
  106  * Authentication mode.  The open and shared key authentication
  107  * modes are implemented within the 802.11 layer.  802.1x and
  108  * WPA/802.11i are implemented in user mode by setting the
  109  * 802.11 layer into IEEE80211_AUTH_8021X and deferring
  110  * authentication to user space programs.
  111  */
  112 enum ieee80211_authmode {
  113         IEEE80211_AUTH_NONE     = 0,
  114         IEEE80211_AUTH_OPEN     = 1,            /* open */
  115         IEEE80211_AUTH_SHARED   = 2,            /* shared-key */
  116         IEEE80211_AUTH_8021X    = 3,            /* 802.1x */
  117         IEEE80211_AUTH_AUTO     = 4,            /* auto-select/accept */
  118         /* NB: these are used only for ioctls */
  119         IEEE80211_AUTH_WPA      = 5,            /* WPA/RSN w/ 802.1x/PSK */
  120 };
  121 
  122 /*
  123  * Roaming mode is effectively who controls the operation
  124  * of the 802.11 state machine when operating as a station.
  125  * State transitions are controlled either by the driver
  126  * (typically when management frames are processed by the
  127  * hardware/firmware), the host (auto/normal operation of
  128  * the 802.11 layer), or explicitly through ioctl requests
  129  * when applications like wpa_supplicant want control.
  130  */
  131 enum ieee80211_roamingmode {
  132         IEEE80211_ROAMING_DEVICE= 0,    /* driver/hardware control */
  133         IEEE80211_ROAMING_AUTO  = 1,    /* 802.11 layer control */
  134         IEEE80211_ROAMING_MANUAL= 2,    /* application control */
  135 };
  136 
  137 /*
  138  * Channels are specified by frequency and attributes.
  139  */
  140 struct ieee80211_channel {
  141         uint32_t        ic_flags;       /* see below */
  142         uint16_t        ic_freq;        /* primary centre frequency in MHz */
  143         uint8_t         ic_ieee;        /* IEEE channel number */
  144         int8_t          ic_maxregpower; /* maximum regulatory tx power in dBm */
  145         int8_t          ic_maxpower;    /* maximum tx power in .5 dBm */
  146         int8_t          ic_minpower;    /* minimum tx power in .5 dBm */
  147         uint8_t         ic_state;       /* dynamic state */
  148         uint8_t         ic_extieee;     /* HT40 extension channel number */
  149         int8_t          ic_maxantgain;  /* maximum antenna gain in .5 dBm */
  150         uint8_t         ic_pad;
  151         uint16_t        ic_devdata;     /* opaque device/driver data */
  152         uint8_t         ic_vht_ch_freq1; /* VHT primary freq1 IEEE value */
  153         uint8_t         ic_vht_ch_freq2; /* VHT secondary 80MHz freq2 IEEE value */
  154         uint16_t        ic_freq2;       /* VHT secondary 80MHz freq2 MHz */
  155 };
  156 
  157 /*
  158  * Note: for VHT operation we will need significantly more than
  159  * IEEE80211_CHAN_MAX channels because of the combinations of
  160  * VHT20, VHT40, VHT80, VHT160, and VHT80+80.
  161  */
  162 #define IEEE80211_CHAN_MAX      1024
  163 #define IEEE80211_CHAN_BYTES    howmany(IEEE80211_CHAN_MAX, NBBY)
  164 #define IEEE80211_CHAN_ANY      0xffff  /* token for ``any channel'' */
  165 #define IEEE80211_CHAN_ANYC \
  166         ((struct ieee80211_channel *) IEEE80211_CHAN_ANY)
  167 
  168 /* channel attributes */
  169 #define IEEE80211_CHAN_PRIV0    0x00000001 /* driver private bit 0 */
  170 #define IEEE80211_CHAN_PRIV1    0x00000002 /* driver private bit 1 */
  171 #define IEEE80211_CHAN_PRIV2    0x00000004 /* driver private bit 2 */
  172 #define IEEE80211_CHAN_PRIV3    0x00000008 /* driver private bit 3 */
  173 #define IEEE80211_CHAN_TURBO    0x00000010 /* Turbo channel */
  174 #define IEEE80211_CHAN_CCK      0x00000020 /* CCK channel */
  175 #define IEEE80211_CHAN_OFDM     0x00000040 /* OFDM channel */
  176 #define IEEE80211_CHAN_2GHZ     0x00000080 /* 2 GHz spectrum channel. */
  177 #define IEEE80211_CHAN_5GHZ     0x00000100 /* 5 GHz spectrum channel */
  178 #define IEEE80211_CHAN_PASSIVE  0x00000200 /* Only passive scan allowed */
  179 #define IEEE80211_CHAN_DYN      0x00000400 /* Dynamic CCK-OFDM channel */
  180 #define IEEE80211_CHAN_GFSK     0x00000800 /* GFSK channel (FHSS PHY) */
  181 #define IEEE80211_CHAN_GSM      0x00001000 /* 900 MHz spectrum channel */
  182 #define IEEE80211_CHAN_STURBO   0x00002000 /* 11a static turbo channel only */
  183 #define IEEE80211_CHAN_HALF     0x00004000 /* Half rate channel */
  184 #define IEEE80211_CHAN_QUARTER  0x00008000 /* Quarter rate channel */
  185 #define IEEE80211_CHAN_HT20     0x00010000 /* HT 20 channel */
  186 #define IEEE80211_CHAN_HT40U    0x00020000 /* HT 40 channel w/ ext above */
  187 #define IEEE80211_CHAN_HT40D    0x00040000 /* HT 40 channel w/ ext below */
  188 #define IEEE80211_CHAN_DFS      0x00080000 /* DFS required */
  189 #define IEEE80211_CHAN_4MSXMIT  0x00100000 /* 4ms limit on frame length */
  190 #define IEEE80211_CHAN_NOADHOC  0x00200000 /* adhoc mode not allowed */
  191 #define IEEE80211_CHAN_NOHOSTAP 0x00400000 /* hostap mode not allowed */
  192 #define IEEE80211_CHAN_11D      0x00800000 /* 802.11d required */
  193 #define IEEE80211_CHAN_VHT20    0x01000000 /* VHT20 channel */
  194 #define IEEE80211_CHAN_VHT40U   0x02000000 /* VHT40 channel, ext above */
  195 #define IEEE80211_CHAN_VHT40D   0x04000000 /* VHT40 channel, ext below */
  196 #define IEEE80211_CHAN_VHT80    0x08000000 /* VHT80 channel */
  197 #define IEEE80211_CHAN_VHT160   0x10000000 /* VHT160 channel */
  198 #define IEEE80211_CHAN_VHT80P80 0x20000000 /* VHT80+80 channel */
  199 /* XXX note: 0x80000000 is used in src/sbin/ifconfig/ifieee80211.c :( */
  200 
  201 #define IEEE80211_CHAN_HT40     (IEEE80211_CHAN_HT40U | IEEE80211_CHAN_HT40D)
  202 #define IEEE80211_CHAN_HT       (IEEE80211_CHAN_HT20 | IEEE80211_CHAN_HT40)
  203 
  204 #define IEEE80211_CHAN_VHT40    (IEEE80211_CHAN_VHT40U | IEEE80211_CHAN_VHT40D)
  205 #define IEEE80211_CHAN_VHT      (IEEE80211_CHAN_VHT20 | IEEE80211_CHAN_VHT40 \
  206                                 | IEEE80211_CHAN_VHT80 | IEEE80211_CHAN_VHT160 \
  207                                 | IEEE80211_CHAN_VHT80P80)
  208 
  209 #define IEEE80211_CHAN_BITS \
  210         "\2\1PRIV0\2PRIV2\3PRIV3\4PRIV4\5TURBO\6CCK\7OFDM\0102GHZ\0115GHZ" \
  211         "\12PASSIVE\13DYN\14GFSK\15GSM\16STURBO\17HALF\20QUARTER\21HT20" \
  212         "\22HT40U\23HT40D\24DFS\0254MSXMIT\26NOADHOC\27NOHOSTAP\03011D" \
  213         "\031VHT20\032VHT40U\033VHT40D\034VHT80\035VHT160\036VHT80P80"
  214 
  215 /*
  216  * Useful combinations of channel characteristics.
  217  */
  218 #define IEEE80211_CHAN_FHSS \
  219         (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK)
  220 #define IEEE80211_CHAN_A \
  221         (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
  222 #define IEEE80211_CHAN_B \
  223         (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
  224 #define IEEE80211_CHAN_PUREG \
  225         (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
  226 #define IEEE80211_CHAN_G \
  227         (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
  228 #define IEEE80211_CHAN_108A \
  229         (IEEE80211_CHAN_A | IEEE80211_CHAN_TURBO)
  230 #define IEEE80211_CHAN_108G \
  231         (IEEE80211_CHAN_PUREG | IEEE80211_CHAN_TURBO)
  232 #define IEEE80211_CHAN_ST \
  233         (IEEE80211_CHAN_108A | IEEE80211_CHAN_STURBO)
  234 
  235 #define IEEE80211_CHAN_ALL \
  236         (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_GFSK | \
  237          IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN | \
  238          IEEE80211_CHAN_HALF | IEEE80211_CHAN_QUARTER | \
  239          IEEE80211_CHAN_HT | IEEE80211_CHAN_VHT)
  240 #define IEEE80211_CHAN_ALLTURBO \
  241         (IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO)
  242 
  243 #define IEEE80211_IS_CHAN_FHSS(_c) \
  244         (((_c)->ic_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
  245 #define IEEE80211_IS_CHAN_A(_c) \
  246         (((_c)->ic_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
  247 #define IEEE80211_IS_CHAN_B(_c) \
  248         (((_c)->ic_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
  249 #define IEEE80211_IS_CHAN_PUREG(_c) \
  250         (((_c)->ic_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
  251 #define IEEE80211_IS_CHAN_G(_c) \
  252         (((_c)->ic_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
  253 #define IEEE80211_IS_CHAN_ANYG(_c) \
  254         (IEEE80211_IS_CHAN_PUREG(_c) || IEEE80211_IS_CHAN_G(_c))
  255 #define IEEE80211_IS_CHAN_ST(_c) \
  256         (((_c)->ic_flags & IEEE80211_CHAN_ST) == IEEE80211_CHAN_ST)
  257 #define IEEE80211_IS_CHAN_108A(_c) \
  258         (((_c)->ic_flags & IEEE80211_CHAN_108A) == IEEE80211_CHAN_108A)
  259 #define IEEE80211_IS_CHAN_108G(_c) \
  260         (((_c)->ic_flags & IEEE80211_CHAN_108G) == IEEE80211_CHAN_108G)
  261 
  262 #define IEEE80211_IS_CHAN_2GHZ(_c) \
  263         (((_c)->ic_flags & IEEE80211_CHAN_2GHZ) != 0)
  264 #define IEEE80211_IS_CHAN_5GHZ(_c) \
  265         (((_c)->ic_flags & IEEE80211_CHAN_5GHZ) != 0)
  266 #define IEEE80211_IS_CHAN_PASSIVE(_c) \
  267         (((_c)->ic_flags & IEEE80211_CHAN_PASSIVE) != 0)
  268 #define IEEE80211_IS_CHAN_OFDM(_c) \
  269         (((_c)->ic_flags & (IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN)) != 0)
  270 #define IEEE80211_IS_CHAN_CCK(_c) \
  271         (((_c)->ic_flags & (IEEE80211_CHAN_CCK | IEEE80211_CHAN_DYN)) != 0)
  272 #define IEEE80211_IS_CHAN_DYN(_c) \
  273         (((_c)->ic_flags & IEEE80211_CHAN_DYN) == IEEE80211_CHAN_DYN)
  274 #define IEEE80211_IS_CHAN_GFSK(_c) \
  275         (((_c)->ic_flags & IEEE80211_CHAN_GFSK) != 0)
  276 #define IEEE80211_IS_CHAN_TURBO(_c) \
  277         (((_c)->ic_flags & IEEE80211_CHAN_TURBO) != 0)
  278 #define IEEE80211_IS_CHAN_STURBO(_c) \
  279         (((_c)->ic_flags & IEEE80211_CHAN_STURBO) != 0)
  280 #define IEEE80211_IS_CHAN_DTURBO(_c) \
  281         (((_c)->ic_flags & \
  282         (IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO)) == IEEE80211_CHAN_TURBO)
  283 #define IEEE80211_IS_CHAN_HALF(_c) \
  284         (((_c)->ic_flags & IEEE80211_CHAN_HALF) != 0)
  285 #define IEEE80211_IS_CHAN_QUARTER(_c) \
  286         (((_c)->ic_flags & IEEE80211_CHAN_QUARTER) != 0)
  287 #define IEEE80211_IS_CHAN_FULL(_c) \
  288         (((_c)->ic_flags & (IEEE80211_CHAN_QUARTER | IEEE80211_CHAN_HALF)) == 0)
  289 #define IEEE80211_IS_CHAN_GSM(_c) \
  290         (((_c)->ic_flags & IEEE80211_CHAN_GSM) != 0)
  291 #define IEEE80211_IS_CHAN_HT(_c) \
  292         (((_c)->ic_flags & IEEE80211_CHAN_HT) != 0)
  293 #define IEEE80211_IS_CHAN_HT20(_c) \
  294         (((_c)->ic_flags & IEEE80211_CHAN_HT20) != 0)
  295 #define IEEE80211_IS_CHAN_HT40(_c) \
  296         (((_c)->ic_flags & IEEE80211_CHAN_HT40) != 0)
  297 #define IEEE80211_IS_CHAN_HT40U(_c) \
  298         (((_c)->ic_flags & IEEE80211_CHAN_HT40U) != 0)
  299 #define IEEE80211_IS_CHAN_HT40D(_c) \
  300         (((_c)->ic_flags & IEEE80211_CHAN_HT40D) != 0)
  301 #define IEEE80211_IS_CHAN_HTA(_c) \
  302         (IEEE80211_IS_CHAN_5GHZ(_c) && \
  303          ((_c)->ic_flags & IEEE80211_CHAN_HT) != 0)
  304 #define IEEE80211_IS_CHAN_HTG(_c) \
  305         (IEEE80211_IS_CHAN_2GHZ(_c) && \
  306          ((_c)->ic_flags & IEEE80211_CHAN_HT) != 0)
  307 #define IEEE80211_IS_CHAN_DFS(_c) \
  308         (((_c)->ic_flags & IEEE80211_CHAN_DFS) != 0)
  309 #define IEEE80211_IS_CHAN_NOADHOC(_c) \
  310         (((_c)->ic_flags & IEEE80211_CHAN_NOADHOC) != 0)
  311 #define IEEE80211_IS_CHAN_NOHOSTAP(_c) \
  312         (((_c)->ic_flags & IEEE80211_CHAN_NOHOSTAP) != 0)
  313 #define IEEE80211_IS_CHAN_11D(_c) \
  314         (((_c)->ic_flags & IEEE80211_CHAN_11D) != 0)
  315 
  316 #define IEEE80211_IS_CHAN_VHT(_c) \
  317         (((_c)->ic_flags & IEEE80211_CHAN_VHT) != 0)
  318 #define IEEE80211_IS_CHAN_VHT_2GHZ(_c) \
  319         (IEEE80211_IS_CHAN_2GHZ(_c) && \
  320          ((_c)->ic_flags & IEEE80211_CHAN_VHT) != 0)
  321 #define IEEE80211_IS_CHAN_VHT_5GHZ(_c) \
  322         (IEEE80211_IS_CHAN_5GHZ(_c) && \
  323          ((_c)->ic_flags & IEEE80211_CHAN_VHT) != 0)
  324 #define IEEE80211_IS_CHAN_VHT20(_c) \
  325         (((_c)->ic_flags & IEEE80211_CHAN_VHT20) != 0)
  326 #define IEEE80211_IS_CHAN_VHT40(_c) \
  327         (((_c)->ic_flags & IEEE80211_CHAN_VHT40) != 0)
  328 #define IEEE80211_IS_CHAN_VHT40U(_c) \
  329         (((_c)->ic_flags & IEEE80211_CHAN_VHT40U) != 0)
  330 #define IEEE80211_IS_CHAN_VHT40D(_c) \
  331         (((_c)->ic_flags & IEEE80211_CHAN_VHT40D) != 0)
  332 #define IEEE80211_IS_CHAN_VHTA(_c) \
  333         (IEEE80211_IS_CHAN_5GHZ(_c) && \
  334          ((_c)->ic_flags & IEEE80211_CHAN_VHT) != 0)
  335 #define IEEE80211_IS_CHAN_VHTG(_c) \
  336         (IEEE80211_IS_CHAN_2GHZ(_c) && \
  337          ((_c)->ic_flags & IEEE80211_CHAN_VHT) != 0)
  338 #define IEEE80211_IS_CHAN_VHT80(_c) \
  339         (((_c)->ic_flags & IEEE80211_CHAN_VHT80) != 0)
  340 #define IEEE80211_IS_CHAN_VHT160(_c) \
  341         (((_c)->ic_flags & IEEE80211_CHAN_VHT160) != 0)
  342 #define IEEE80211_IS_CHAN_VHT80P80(_c) \
  343         (((_c)->ic_flags & IEEE80211_CHAN_VHT80P80) != 0)
  344 
  345 #define IEEE80211_CHAN2IEEE(_c)         (_c)->ic_ieee
  346 
  347 /* dynamic state */
  348 #define IEEE80211_CHANSTATE_RADAR       0x01    /* radar detected */
  349 #define IEEE80211_CHANSTATE_CACDONE     0x02    /* CAC completed */
  350 #define IEEE80211_CHANSTATE_CWINT       0x04    /* interference detected */
  351 #define IEEE80211_CHANSTATE_NORADAR     0x10    /* post notify on radar clear */
  352 
  353 #define IEEE80211_IS_CHAN_RADAR(_c) \
  354         (((_c)->ic_state & IEEE80211_CHANSTATE_RADAR) != 0)
  355 #define IEEE80211_IS_CHAN_CACDONE(_c) \
  356         (((_c)->ic_state & IEEE80211_CHANSTATE_CACDONE) != 0)
  357 #define IEEE80211_IS_CHAN_CWINT(_c) \
  358         (((_c)->ic_state & IEEE80211_CHANSTATE_CWINT) != 0)
  359 
  360 /* ni_chan encoding for FH phy */
  361 #define IEEE80211_FH_CHANMOD    80
  362 #define IEEE80211_FH_CHAN(set,pat)      (((set)-1)*IEEE80211_FH_CHANMOD+(pat))
  363 #define IEEE80211_FH_CHANSET(chan)      ((chan)/IEEE80211_FH_CHANMOD+1)
  364 #define IEEE80211_FH_CHANPAT(chan)      ((chan)%IEEE80211_FH_CHANMOD)
  365 
  366 #define IEEE80211_TID_SIZE      (WME_NUM_TID+1) /* WME TID's +1 for non-QoS */
  367 #define IEEE80211_NONQOS_TID    WME_NUM_TID     /* index for non-QoS sta */
  368 
  369 /*
  370  * The 802.11 spec says at most 2007 stations may be
  371  * associated at once.  For most AP's this is way more
  372  * than is feasible so we use a default of 128.  This
  373  * number may be overridden by the driver and/or by
  374  * user configuration but may not be less than IEEE80211_AID_MIN.
  375  */
  376 #define IEEE80211_AID_DEF               128
  377 #define IEEE80211_AID_MIN               16
  378 
  379 /*
  380  * 802.11 rate set.
  381  */
  382 #define IEEE80211_RATE_SIZE     8               /* 802.11 standard */
  383 #define IEEE80211_RATE_MAXSIZE  15              /* max rates we'll handle */
  384 
  385 struct ieee80211_rateset {
  386         uint8_t         rs_nrates;
  387         uint8_t         rs_rates[IEEE80211_RATE_MAXSIZE];
  388 };
  389 
  390 /*
  391  * 802.11n variant of ieee80211_rateset.  Instead of
  392  * legacy rates the entries are MCS rates.  We define
  393  * the structure such that it can be used interchangeably
  394  * with an ieee80211_rateset (modulo structure size).
  395  */
  396 #define IEEE80211_HTRATE_MAXSIZE        77
  397 
  398 struct ieee80211_htrateset {
  399         uint8_t         rs_nrates;
  400         uint8_t         rs_rates[IEEE80211_HTRATE_MAXSIZE];
  401 };
  402 
  403 #define IEEE80211_RATE_MCS      0x80
  404 
  405 /*
  406  * Per-mode transmit parameters/controls visible to user space.
  407  * These can be used to set fixed transmit rate for all operating
  408  * modes or on a per-client basis according to the capabilities
  409  * of the client (e.g. an 11b client associated to an 11g ap).
  410  *
  411  * MCS are distinguished from legacy rates by or'ing in 0x80.
  412  */
  413 struct ieee80211_txparam {
  414         uint8_t         ucastrate;      /* ucast data rate (legacy/MCS|0x80) */
  415         uint8_t         mgmtrate;       /* mgmt frame rate (legacy/MCS|0x80) */
  416         uint8_t         mcastrate;      /* multicast rate (legacy/MCS|0x80) */
  417         uint8_t         maxretry;       /* max unicast data retry count */
  418 };
  419 
  420 /*
  421  * Per-mode roaming state visible to user space.  There are two
  422  * thresholds that control whether roaming is considered; when
  423  * either is exceeded the 802.11 layer will check the scan cache
  424  * for another AP.  If the cache is stale then a scan may be
  425  * triggered.
  426  */
  427 struct ieee80211_roamparam {
  428         int8_t          rssi;           /* rssi thresh (.5 dBm) */
  429         uint8_t         rate;           /* tx rate thresh (.5 Mb/s or MCS) */
  430         uint16_t        pad;            /* reserve */
  431 };
  432 
  433 /*
  434  * Regulatory Information.
  435  */
  436 struct ieee80211_regdomain {
  437         uint16_t        regdomain;      /* SKU */
  438         uint16_t        country;        /* ISO country code */
  439         uint8_t         location;       /* I (indoor), O (outdoor), other */
  440         uint8_t         ecm;            /* Extended Channel Mode */
  441         char            isocc[2];       /* country code string */
  442         short           pad[2];
  443 };
  444 
  445 /*
  446  * MIMO antenna/radio state.
  447  */
  448 #define IEEE80211_MAX_CHAINS            4
  449 /*
  450  * This is the number of sub-channels for a channel.
  451  * 0 - pri20
  452  * 1 - sec20 (HT40, VHT40)
  453  * 2 - sec40 (VHT80)
  454  * 3 - sec80 (VHT80+80, VHT160)
  455  */
  456 #define IEEE80211_MAX_CHAIN_PRISEC      4
  457 #define IEEE80211_MAX_EVM_DWORDS        16      /* 16 pilots, 4 chains */
  458 #define IEEE80211_MAX_EVM_PILOTS        16      /* 468 subcarriers, 16 pilots */
  459 
  460 struct ieee80211_mimo_chan_info {
  461         int8_t  rssi[IEEE80211_MAX_CHAIN_PRISEC];
  462         int8_t  noise[IEEE80211_MAX_CHAIN_PRISEC];
  463 };
  464 
  465 struct ieee80211_mimo_info {
  466         struct ieee80211_mimo_chan_info ch[IEEE80211_MAX_CHAINS];
  467         uint32_t        evm[IEEE80211_MAX_EVM_DWORDS];
  468 };
  469 
  470 /*
  471  * ic_caps/iv_caps: device driver capabilities
  472  */
  473 /* 0x2e available */
  474 #define IEEE80211_C_STA         0x00000001      /* CAPABILITY: STA available */
  475 #define IEEE80211_C_8023ENCAP   0x00000002      /* CAPABILITY: 802.3 encap */
  476 #define IEEE80211_C_FF          0x00000040      /* CAPABILITY: ATH FF avail */
  477 #define IEEE80211_C_TURBOP      0x00000080      /* CAPABILITY: ATH Turbo avail*/
  478 #define IEEE80211_C_IBSS        0x00000100      /* CAPABILITY: IBSS available */
  479 #define IEEE80211_C_PMGT        0x00000200      /* CAPABILITY: Power mgmt */
  480 #define IEEE80211_C_HOSTAP      0x00000400      /* CAPABILITY: HOSTAP avail */
  481 #define IEEE80211_C_AHDEMO      0x00000800      /* CAPABILITY: Old Adhoc Demo */
  482 #define IEEE80211_C_SWRETRY     0x00001000      /* CAPABILITY: sw tx retry */
  483 #define IEEE80211_C_TXPMGT      0x00002000      /* CAPABILITY: tx power mgmt */
  484 #define IEEE80211_C_SHSLOT      0x00004000      /* CAPABILITY: short slottime */
  485 #define IEEE80211_C_SHPREAMBLE  0x00008000      /* CAPABILITY: short preamble */
  486 #define IEEE80211_C_MONITOR     0x00010000      /* CAPABILITY: monitor mode */
  487 #define IEEE80211_C_DFS         0x00020000      /* CAPABILITY: DFS/radar avail*/
  488 #define IEEE80211_C_MBSS        0x00040000      /* CAPABILITY: MBSS available */
  489 #define IEEE80211_C_SWSLEEP     0x00080000      /* CAPABILITY: do sleep here */
  490 #define IEEE80211_C_SWAMSDUTX   0x00100000      /* CAPABILITY: software A-MSDU TX */
  491 #define IEEE80211_C_UAPSD       0x00200000      /* CAPABILITY: U-APSD */
  492 /* 0x7c0000 available */
  493 #define IEEE80211_C_WPA1        0x00800000      /* CAPABILITY: WPA1 avail */
  494 #define IEEE80211_C_WPA2        0x01000000      /* CAPABILITY: WPA2 avail */
  495 #define IEEE80211_C_WPA         0x01800000      /* CAPABILITY: WPA1+WPA2 avail*/
  496 #define IEEE80211_C_BURST       0x02000000      /* CAPABILITY: frame bursting */
  497 #define IEEE80211_C_WME         0x04000000      /* CAPABILITY: WME avail */
  498 #define IEEE80211_C_WDS         0x08000000      /* CAPABILITY: 4-addr support */
  499 /* 0x10000000 reserved */
  500 #define IEEE80211_C_BGSCAN      0x20000000      /* CAPABILITY: bg scanning */
  501 #define IEEE80211_C_TXFRAG      0x40000000      /* CAPABILITY: tx fragments */
  502 #define IEEE80211_C_TDMA        0x80000000      /* CAPABILITY: TDMA avail */
  503 /* XXX protection/barker? */
  504 
  505 #define IEEE80211_C_OPMODE \
  506         (IEEE80211_C_STA | IEEE80211_C_IBSS | IEEE80211_C_HOSTAP | \
  507          IEEE80211_C_AHDEMO | IEEE80211_C_MONITOR | IEEE80211_C_WDS | \
  508          IEEE80211_C_TDMA | IEEE80211_C_MBSS)
  509 
  510 #define IEEE80211_C_BITS \
  511         "\2\1STA\002803ENCAP\7FF\10TURBOP\11IBSS\12PMGT" \
  512         "\13HOSTAP\14AHDEMO\15SWRETRY\16TXPMGT\17SHSLOT\20SHPREAMBLE" \
  513         "\21MONITOR\22DFS\23MBSS\30WPA1\31WPA2\32BURST\33WME\34WDS\36BGSCAN" \
  514         "\37TXFRAG\40TDMA"
  515 
  516 /*
  517  * ic_htcaps/iv_htcaps: HT-specific device/driver capabilities
  518  *
  519  * NB: the low 16-bits are the 802.11 definitions, the upper
  520  *     16-bits are used to define s/w/driver capabilities.
  521  */
  522 #define IEEE80211_HTC_AMPDU     0x00010000      /* CAPABILITY: A-MPDU tx */
  523 #define IEEE80211_HTC_AMSDU     0x00020000      /* CAPABILITY: A-MSDU tx */
  524 /* NB: HT40 is implied by IEEE80211_HTCAP_CHWIDTH40 */
  525 #define IEEE80211_HTC_HT        0x00040000      /* CAPABILITY: HT operation */
  526 #define IEEE80211_HTC_SMPS      0x00080000      /* CAPABILITY: MIMO power save*/
  527 #define IEEE80211_HTC_RIFS      0x00100000      /* CAPABILITY: RIFS support */
  528 #define IEEE80211_HTC_RXUNEQUAL 0x00200000      /* CAPABILITY: RX unequal MCS */
  529 #define IEEE80211_HTC_RXMCS32   0x00400000      /* CAPABILITY: MCS32 support */
  530 #define IEEE80211_HTC_TXUNEQUAL 0x00800000      /* CAPABILITY: TX unequal MCS */
  531 #define IEEE80211_HTC_TXMCS32   0x01000000      /* CAPABILITY: MCS32 support */
  532 #define IEEE80211_HTC_TXLDPC    0x02000000      /* CAPABILITY: TX using LDPC */
  533 #define IEEE80211_HTC_RX_AMSDU_AMPDU    0x04000000      /* CAPABILITY: RX A-MSDU in A-MPDU */
  534 #define IEEE80211_HTC_TX_AMSDU_AMPDU    0x08000000      /* CAPABILITY: TX A-MSDU in A-MPDU */
  535 
  536 #define IEEE80211_C_HTCAP_BITS \
  537         "\2\1LDPC\2CHWIDTH40\5GREENFIELD\6SHORTGI20\7SHORTGI40\10TXSTBC" \
  538         "\21AMPDU\22AMSDU\23HT\24SMPS\25RIFS\32TXLDPC\33RXAMSDUAMPDU" \
  539         "\34TXAMSDUAMPDU"
  540 
  541 /*
  542  * RX status notification - which fields are valid.
  543  */
  544 #define IEEE80211_R_NF          0x00000001      /* global NF value valid */
  545 #define IEEE80211_R_RSSI        0x00000002      /* global RSSI value valid */
  546 #define IEEE80211_R_C_CHAIN     0x00000004      /* RX chain count valid */
  547 #define IEEE80211_R_C_NF        0x00000008      /* per-chain NF value valid */
  548 #define IEEE80211_R_C_RSSI      0x00000010      /* per-chain RSSI value valid */
  549 #define IEEE80211_R_C_EVM       0x00000020      /* per-chain EVM valid */
  550 #define IEEE80211_R_C_HT40      0x00000040      /* RX'ed packet is 40mhz, pilots 4,5 valid */
  551 #define IEEE80211_R_FREQ        0x00000080      /* Freq value populated, MHz */
  552 #define IEEE80211_R_IEEE        0x00000100      /* IEEE value populated */
  553 #define IEEE80211_R_BAND        0x00000200      /* Frequency band populated */
  554 #define IEEE80211_R_TSF32       0x00004000      /* 32 bit TSF */
  555 #define IEEE80211_R_TSF64       0x00008000      /* 64 bit TSF */
  556 #define IEEE80211_R_TSF_START   0x00010000      /* TSF is sampled at start of frame */
  557 #define IEEE80211_R_TSF_END     0x00020000      /* TSF is sampled at end of frame */
  558 
  559 /*
  560  * RX status notification - describe the packet.
  561  */
  562 #define IEEE80211_RX_F_STBC             0x00000001
  563 #define IEEE80211_RX_F_LDPC             0x00000002
  564 #define IEEE80211_RX_F_AMSDU            0x00000004 /* This is the start of an decap AMSDU list */
  565 #define IEEE80211_RX_F_AMSDU_MORE       0x00000008 /* This is another decap AMSDU frame in the batch */
  566 #define IEEE80211_RX_F_AMPDU            0x00000010 /* This is the start of an decap AMPDU list */
  567 #define IEEE80211_RX_F_AMPDU_MORE       0x00000020 /* This is another decap AMPDU frame in the batch */
  568 #define IEEE80211_RX_F_FAIL_FCSCRC      0x00000040 /* Failed CRC/FCS */
  569 #define IEEE80211_RX_F_FAIL_MIC         0x00000080 /* Failed MIC check */
  570 #define IEEE80211_RX_F_DECRYPTED        0x00000100 /* Hardware decrypted */
  571 #define IEEE80211_RX_F_IV_STRIP         0x00000200 /* Decrypted; IV stripped */
  572 #define IEEE80211_RX_F_MMIC_STRIP       0x00000400 /* Decrypted; MMIC stripped */
  573 #define IEEE80211_RX_F_SHORTGI          0x00000800 /* This is a short-GI frame */
  574 #define IEEE80211_RX_F_CCK              0x00001000
  575 #define IEEE80211_RX_F_OFDM             0x00002000
  576 #define IEEE80211_RX_F_HT               0x00004000
  577 #define IEEE80211_RX_F_VHT              0x00008000
  578 
  579 /* Channel width */
  580 #define IEEE80211_RX_FW_20MHZ           1
  581 #define IEEE80211_RX_FW_40MHZ           2
  582 #define IEEE80211_RX_FW_80MHZ           3
  583 
  584 /* PHY type */
  585 #define IEEE80211_RX_FP_11B             1
  586 #define IEEE80211_RX_FP_11G             2
  587 #define IEEE80211_RX_FP_11A             3
  588 #define IEEE80211_RX_FP_11NA            4
  589 #define IEEE80211_RX_FP_11NG            5
  590 
  591 struct ieee80211_rx_stats {
  592         uint32_t r_flags;               /* IEEE80211_R_* flags */
  593         uint32_t c_pktflags;            /* IEEE80211_RX_F_* flags */
  594 
  595         uint64_t c_rx_tsf;              /* 32 or 64 bit TSF */
  596 
  597         /* All DWORD aligned */
  598         int16_t c_nf_ctl[IEEE80211_MAX_CHAINS]; /* per-chain NF */
  599         int16_t c_nf_ext[IEEE80211_MAX_CHAINS]; /* per-chain NF */
  600         int16_t c_rssi_ctl[IEEE80211_MAX_CHAINS];       /* per-chain RSSI */
  601         int16_t c_rssi_ext[IEEE80211_MAX_CHAINS];       /* per-chain RSSI */
  602 
  603         /* 32 bits */
  604         uint8_t c_nf;                   /* global NF */
  605         uint8_t c_rssi;                 /* global RSSI */
  606         uint8_t c_chain;                /* number of RX chains involved */
  607         uint8_t c_rate;                 /* legacy; 11n rate code; VHT MCS */
  608 
  609         /* 32 bits */
  610         uint16_t c_freq;                /* Frequency, MHz */
  611         uint8_t c_ieee;                 /* Channel */
  612         uint8_t c_width;                /* channel width, FW flags above */
  613 
  614         /* Force alignment to DWORD */
  615         union {
  616                 uint8_t evm[IEEE80211_MAX_CHAINS][IEEE80211_MAX_EVM_PILOTS];
  617                     /* per-chain, per-pilot EVM values */
  618                 uint32_t __aln[8];
  619         } evm;
  620 
  621         /* 32 bits */
  622         uint8_t c_phytype;              /* PHY type, FP flags above */
  623         uint8_t c_vhtnss;               /* VHT - number of spatial streams */
  624         uint8_t c_pad2[2];
  625 };
  626 
  627 struct ieee80211_rx_params {
  628         struct ieee80211_rx_stats params;
  629 };
  630 
  631 #endif /* _NET80211__IEEE80211_H_ */

Cache object: 28cd5b818718370d91661a846bb7a014


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.