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/dev/ic/wivar.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 /*      $NetBSD: wivar.h,v 1.43.2.1 2004/07/23 23:27:11 he Exp $        */
    2 
    3 /*
    4  * Copyright (c) 1997, 1998, 1999
    5  *      Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. All advertising materials mentioning features or use of this software
   16  *    must display the following acknowledgement:
   17  *      This product includes software developed by Bill Paul.
   18  * 4. Neither the name of the author nor the names of any co-contributors
   19  *    may be used to endorse or promote products derived from this software
   20  *    without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
   23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   25  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
   26  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   27  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   28  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   29  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   30  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   31  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
   32  * THE POSSIBILITY OF SUCH DAMAGE.
   33  */
   34 
   35 /* Radio capture format for Prism. */
   36 
   37 #define WI_RX_RADIOTAP_PRESENT  ((1 << IEEE80211_RADIOTAP_FLAGS) | \
   38                                  (1 << IEEE80211_RADIOTAP_RATE) | \
   39                                  (1 << IEEE80211_RADIOTAP_CHANNEL) | \
   40                                  (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \
   41                                  (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE))
   42 
   43 struct wi_rx_radiotap_header {
   44         struct ieee80211_radiotap_header        wr_ihdr;
   45         u_int8_t                                wr_flags;
   46         u_int8_t                                wr_rate;
   47         u_int16_t                               wr_chan_freq;
   48         u_int16_t                               wr_chan_flags;
   49         int8_t                                  wr_antsignal;
   50         int8_t                                  wr_antnoise;
   51 } __attribute__((__packed__));
   52 
   53 #define WI_TX_RADIOTAP_PRESENT  ((1 << IEEE80211_RADIOTAP_FLAGS) | \
   54                                  (1 << IEEE80211_RADIOTAP_RATE) | \
   55                                  (1 << IEEE80211_RADIOTAP_CHANNEL))
   56 
   57 struct wi_tx_radiotap_header {
   58         struct ieee80211_radiotap_header        wt_ihdr;
   59         u_int8_t                                wt_flags;
   60         u_int8_t                                wt_rate;
   61         u_int16_t                               wt_chan_freq;
   62         u_int16_t                               wt_chan_flags;
   63 } __attribute__((__packed__));
   64 
   65 struct wi_rssdesc {
   66         struct ieee80211_rssdesc        rd_desc;
   67         SLIST_ENTRY(wi_rssdesc)         rd_next;
   68 };
   69 
   70 typedef SLIST_HEAD(,wi_rssdesc) wi_rssdescq_t;
   71 
   72 /*
   73  * FreeBSD driver ported to NetBSD by Bill Sommerfeld in the back of the
   74  * Oslo IETF plenary meeting.
   75  */
   76 struct wi_softc {
   77         struct device           sc_dev;
   78         struct ieee80211com     sc_ic;
   79         void                    *sc_ih;         /* interrupt handler */
   80         int                     (*sc_enable)(struct wi_softc *);
   81         void                    (*sc_disable)(struct wi_softc *);
   82         void                    (*sc_reset)(struct wi_softc *);
   83 
   84         int                     (*sc_newstate)(struct ieee80211com *,
   85                                     enum ieee80211_state, int);
   86 
   87         int                     sc_attached;
   88         int                     sc_enabled;
   89         int                     sc_invalid;
   90         int                     sc_firmware_type;
   91 #define WI_NOTYPE       0
   92 #define WI_LUCENT       1
   93 #define WI_INTERSIL     2
   94 #define WI_SYMBOL       3
   95         int                     sc_pri_firmware_ver;    /* Primary firm vers */
   96         int                     sc_sta_firmware_ver;    /* Station firm vers */
   97         int                     sc_pci;                 /* attach to PCI-Bus */
   98 
   99         bus_space_tag_t         sc_iot;                 /* bus cookie */
  100         bus_space_handle_t      sc_ioh;                 /* bus i/o handle */
  101 
  102         caddr_t                 sc_drvbpf;
  103         int                     sc_flags;
  104         int                     sc_bap_id;
  105         int                     sc_bap_off;
  106 
  107         u_int16_t               sc_portnum;
  108 
  109         /* RSSI interpretation */
  110         u_int16_t               sc_dbm_offset;  /* dBm ~ RSSI - sc_dbm_offset */
  111         u_int16_t               sc_max_datalen;
  112         u_int16_t               sc_frag_thresh;
  113         u_int16_t               sc_rts_thresh;
  114         u_int16_t               sc_system_scale;
  115         u_int16_t               sc_tx_rate;
  116         u_int16_t               sc_cnfauthmode;
  117         u_int16_t               sc_roaming_mode;
  118         u_int16_t               sc_microwave_oven;
  119 
  120         int                     sc_nodelen;
  121         char                    sc_nodename[IEEE80211_NWID_LEN];
  122 
  123         int                     sc_buflen;
  124 #define WI_NTXBUF       3
  125 #define WI_NTXRSS       10
  126         struct {
  127                 int                             d_fid;
  128         }                       sc_txd[WI_NTXBUF];
  129         int                     sc_txalloc;     /* next FID to allocate */
  130         int                     sc_txalloced;   /* FIDs currently allocated */
  131         int                     sc_txqueue;     /* next FID to queue */
  132         int                     sc_txqueued;    /* FIDs currently queued */
  133         int                     sc_txstart;     /* next FID to start */
  134         int                     sc_txstarted;   /* FIDs currently started */
  135         struct wi_rssdesc       sc_rssd[WI_NTXRSS];
  136         wi_rssdescq_t           sc_rssdfree;
  137         int                     sc_tx_timer;
  138         int                     sc_scan_timer;
  139         int                     sc_syn_timer;
  140 
  141         struct wi_counters      sc_stats;
  142         u_int16_t               sc_ibss_port;
  143 
  144         struct wi_apinfo        sc_aps[MAXAPINFO];
  145         int                     sc_naps;
  146 
  147         int                     sc_false_syns;
  148         int                     sc_alt_retry;
  149 
  150         union {
  151                 struct wi_rx_radiotap_header    tap;
  152                 u_int8_t                        pad[64];
  153         } sc_rxtapu;
  154         union {
  155                 struct wi_tx_radiotap_header    tap;
  156                 u_int8_t                        pad[64];
  157         } sc_txtapu;
  158         u_int16_t               sc_txbuf[IEEE80211_MAX_LEN/2];
  159         /* number of transmissions pending at each data rate */
  160         u_int8_t                sc_txpending[IEEE80211_RATE_MAXSIZE];
  161         struct callout          sc_rssadapt_ch;
  162 };
  163 
  164 #define sc_rxtap        sc_rxtapu.tap
  165 #define sc_txtap        sc_txtapu.tap
  166 
  167 #define sc_if                   sc_ic.ic_if
  168 
  169 struct wi_node {
  170         struct ieee80211_node           wn_node;
  171         struct ieee80211_rssadapt       wn_rssadapt;
  172 };
  173 
  174 /* maximum consecutive false change-of-BSSID indications */
  175 #define WI_MAX_FALSE_SYNS               10      
  176 
  177 #define WI_PRISM_DBM_OFFSET     100     /* XXX */
  178 
  179 #define WI_LUCENT_DBM_OFFSET    149
  180 
  181 #define WI_RSSI_TO_DBM(sc, rssi) ((rssi) - (sc)->sc_dbm_offset)
  182 
  183 #define WI_SCAN_INQWAIT                 3       /* wait sec before inquire */
  184 #define WI_SCAN_WAIT                    5       /* maximum scan wait */
  185 
  186 /* Values for wi_flags. */
  187 #define WI_FLAGS_ATTACHED               0x0001
  188 #define WI_FLAGS_INITIALIZED            0x0002
  189 #define WI_FLAGS_OUTRANGE               0x0004
  190 #define WI_FLAGS_RSSADAPTSTA            0x0008
  191 #define WI_FLAGS_HAS_MOR                0x0010
  192 #define WI_FLAGS_HAS_ROAMING            0x0020
  193 #define WI_FLAGS_HAS_DIVERSITY          0x0040
  194 #define WI_FLAGS_HAS_SYSSCALE           0x0080
  195 #define WI_FLAGS_BUG_AUTOINC            0x0100
  196 #define WI_FLAGS_HAS_FRAGTHR            0x0200
  197 #define WI_FLAGS_HAS_DBMADJUST          0x0400
  198 
  199 struct wi_card_ident {
  200         u_int16_t       card_id;
  201         char            *card_name;
  202         u_int8_t        firm_type;
  203 };
  204 
  205 /*
  206  * register space access macros
  207  */
  208 #ifdef WI_AT_BIGENDIAN_BUS_HACK
  209         /*
  210          * XXX - ugly hack for sparc bus_space_* macro deficiencies:
  211          *       assume the bus we are accessing is big endian.
  212          */
  213 
  214 #define CSR_WRITE_4(sc, reg, val)       \
  215         bus_space_write_4(sc->sc_iot, sc->sc_ioh,       \
  216                         (sc->sc_pci? reg * 2: reg) , htole32(val))
  217 #define CSR_WRITE_2(sc, reg, val)       \
  218         bus_space_write_2(sc->sc_iot, sc->sc_ioh,       \
  219                         (sc->sc_pci? reg * 2: reg), htole16(val))
  220 #define CSR_WRITE_1(sc, reg, val)       \
  221         bus_space_write_1(sc->sc_iot, sc->sc_ioh,       \
  222                         (sc->sc_pci? reg * 2: reg), val)
  223 
  224 #define CSR_READ_4(sc, reg)             \
  225         le32toh(bus_space_read_4(sc->sc_iot, sc->sc_ioh,        \
  226                         (sc->sc_pci? reg * 2: reg)))
  227 #define CSR_READ_2(sc, reg)             \
  228         le16toh(bus_space_read_2(sc->sc_iot, sc->sc_ioh,        \
  229                         (sc->sc_pci? reg * 2: reg)))
  230 #define CSR_READ_1(sc, reg)             \
  231         bus_space_read_1(sc->sc_iot, sc->sc_ioh,        \
  232                         (sc->sc_pci? reg * 2: reg))
  233 
  234 #else
  235 
  236 #define CSR_WRITE_4(sc, reg, val)       \
  237         bus_space_write_4(sc->sc_iot, sc->sc_ioh,       \
  238                         (sc->sc_pci? reg * 2: reg) , val)
  239 #define CSR_WRITE_2(sc, reg, val)       \
  240         bus_space_write_2(sc->sc_iot, sc->sc_ioh,       \
  241                         (sc->sc_pci? reg * 2: reg), val)
  242 #define CSR_WRITE_1(sc, reg, val)       \
  243         bus_space_write_1(sc->sc_iot, sc->sc_ioh,       \
  244                         (sc->sc_pci? reg * 2: reg), val)
  245 
  246 #define CSR_READ_4(sc, reg)             \
  247         bus_space_read_4(sc->sc_iot, sc->sc_ioh,        \
  248                         (sc->sc_pci? reg * 2: reg))
  249 #define CSR_READ_2(sc, reg)             \
  250         bus_space_read_2(sc->sc_iot, sc->sc_ioh,        \
  251                         (sc->sc_pci? reg * 2: reg))
  252 #define CSR_READ_1(sc, reg)             \
  253         bus_space_read_1(sc->sc_iot, sc->sc_ioh,        \
  254                         (sc->sc_pci? reg * 2: reg))
  255 #endif
  256 
  257 #ifndef __BUS_SPACE_HAS_STREAM_METHODS
  258 #define bus_space_write_stream_2        bus_space_write_2
  259 #define bus_space_write_multi_stream_2  bus_space_write_multi_2
  260 #define bus_space_read_stream_2         bus_space_read_2
  261 #define bus_space_read_multi_stream_2           bus_space_read_multi_2
  262 #endif
  263 
  264 #define CSR_WRITE_STREAM_2(sc, reg, val)        \
  265         bus_space_write_stream_2(sc->sc_iot, sc->sc_ioh,        \
  266                         (sc->sc_pci? reg * 2: reg), val)
  267 #define CSR_WRITE_MULTI_STREAM_2(sc, reg, val, count)   \
  268         bus_space_write_multi_stream_2(sc->sc_iot, sc->sc_ioh,  \
  269                         (sc->sc_pci? reg * 2: reg), val, count)
  270 #define CSR_READ_STREAM_2(sc, reg)              \
  271         bus_space_read_stream_2(sc->sc_iot, sc->sc_ioh, \
  272                         (sc->sc_pci? reg * 2: reg))
  273 #define CSR_READ_MULTI_STREAM_2(sc, reg, buf, count)            \
  274         bus_space_read_multi_stream_2(sc->sc_iot, sc->sc_ioh,   \
  275                         (sc->sc_pci? reg * 2: reg), buf, count)
  276 
  277 
  278 int     wi_attach(struct wi_softc *);
  279 int     wi_detach(struct wi_softc *);
  280 int     wi_activate(struct device *, enum devact);
  281 int     wi_intr(void *arg);
  282 void    wi_power(struct wi_softc *, int);
  283 void    wi_shutdown(struct wi_softc *);

Cache object: 7921a150e7c04625d28314a2cf22b94d


[ 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.