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/wpi/if_wpivar.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 /*      $FreeBSD: releng/11.2/sys/dev/wpi/if_wpivar.h 297173 2016-03-21 23:25:41Z avos $        */
    2 
    3 /*-
    4  * Copyright (c) 2006,2007
    5  *      Damien Bergamini <damien.bergamini@free.fr>
    6  *
    7  * Permission to use, copy, modify, and distribute this software for any
    8  * purpose with or without fee is hereby granted, provided that the above
    9  * copyright notice and this permission notice appear in all copies.
   10  *
   11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   18  */
   19 struct wpi_rx_radiotap_header {
   20         struct ieee80211_radiotap_header wr_ihdr;
   21         uint64_t        wr_tsft;
   22         uint8_t         wr_flags;
   23         uint8_t         wr_rate;
   24         uint16_t        wr_chan_freq;
   25         uint16_t        wr_chan_flags;
   26         int8_t          wr_dbm_antsignal;
   27         int8_t          wr_dbm_antnoise;
   28         uint8_t         wr_antenna;
   29 } __packed;
   30 
   31 #define WPI_RX_RADIOTAP_PRESENT                                         \
   32         ((1 << IEEE80211_RADIOTAP_TSFT) |                               \
   33          (1 << IEEE80211_RADIOTAP_FLAGS) |                              \
   34          (1 << IEEE80211_RADIOTAP_RATE) |                               \
   35          (1 << IEEE80211_RADIOTAP_CHANNEL) |                            \
   36          (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |                      \
   37          (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) |                       \
   38          (1 << IEEE80211_RADIOTAP_ANTENNA))
   39 
   40 struct wpi_tx_radiotap_header {
   41         struct ieee80211_radiotap_header wt_ihdr;
   42         uint8_t         wt_flags;
   43         uint8_t         wt_rate;
   44         uint16_t        wt_chan_freq;
   45         uint16_t        wt_chan_flags;
   46 } __packed;
   47 
   48 #define WPI_TX_RADIOTAP_PRESENT                                         \
   49         ((1 << IEEE80211_RADIOTAP_FLAGS) |                              \
   50          (1 << IEEE80211_RADIOTAP_RATE) |                               \
   51          (1 << IEEE80211_RADIOTAP_CHANNEL))
   52 
   53 struct wpi_dma_info {
   54         bus_dma_tag_t           tag;
   55         bus_dmamap_t            map;
   56         bus_addr_t              paddr;
   57         caddr_t                 vaddr;
   58         bus_size_t              size;
   59 };
   60 
   61 struct wpi_tx_data {
   62         bus_dmamap_t            map;
   63         bus_addr_t              cmd_paddr;
   64         struct mbuf             *m;
   65         struct ieee80211_node   *ni;
   66 };
   67 
   68 struct wpi_tx_ring {
   69         struct wpi_dma_info     desc_dma;
   70         struct wpi_dma_info     cmd_dma;
   71         struct wpi_tx_desc      *desc;
   72         struct wpi_tx_cmd       *cmd;
   73         struct wpi_tx_data      data[WPI_TX_RING_COUNT];
   74         bus_dma_tag_t           data_dmat;
   75         uint8_t                 qid;
   76         uint8_t                 cur;
   77         uint8_t                 pending;
   78         int16_t                 queued;
   79         int                     update:1;
   80 };
   81 
   82 struct wpi_rx_data {
   83         struct mbuf     *m;
   84         bus_dmamap_t    map;
   85 };
   86 
   87 struct wpi_rx_ring {
   88         struct wpi_dma_info     desc_dma;
   89         uint32_t                *desc;
   90         struct wpi_rx_data      data[WPI_RX_RING_COUNT];
   91         bus_dma_tag_t           data_dmat;
   92         uint16_t                cur;
   93         int                     update;
   94 };
   95 
   96 struct wpi_node {
   97         struct ieee80211_node   ni;     /* must be the first */
   98         uint8_t                 id;
   99 };
  100 #define WPI_NODE(ni)    ((struct wpi_node *)(ni))
  101 
  102 struct wpi_power_sample {
  103         uint8_t index;
  104         int8_t  power;
  105 };
  106 
  107 struct wpi_power_group {
  108 #define WPI_SAMPLES_COUNT       5
  109         struct wpi_power_sample samples[WPI_SAMPLES_COUNT];
  110         uint8_t chan;
  111         int8_t  maxpwr;
  112         int16_t temp;
  113 };
  114 
  115 struct wpi_buf {
  116         uint8_t                 data[56];  /* sizeof(struct wpi_cmd_beacon) */
  117         struct ieee80211_node   *ni;
  118         struct mbuf             *m;
  119         size_t                  size;
  120         uint8_t                 code;
  121         uint16_t                ac;
  122 };
  123 
  124 struct wpi_vap {
  125         struct ieee80211vap     wv_vap;
  126 
  127         struct wpi_buf          wv_bcbuf;
  128         struct mtx              wv_mtx;
  129 
  130         uint8_t                 wv_gtk;
  131 #define WPI_VAP_KEY(kid)        (1 << kid)
  132 
  133         int                     (*wv_newstate)(struct ieee80211vap *,
  134                                     enum ieee80211_state, int);
  135         void                    (*wv_recv_mgmt)(struct ieee80211_node *,
  136                                     struct mbuf *, int,
  137                                     const struct ieee80211_rx_stats *,
  138                                     int, int);
  139 };
  140 #define WPI_VAP(vap)    ((struct wpi_vap *)(vap))
  141 
  142 #define WPI_VAP_LOCK_INIT(_wvp) \
  143         mtx_init(&(_wvp)->wv_mtx, "lock for wv_bcbuf/wv_boff structures", \
  144             NULL, MTX_DEF)
  145 #define WPI_VAP_LOCK(_wvp)              mtx_lock(&(_wvp)->wv_mtx)
  146 #define WPI_VAP_UNLOCK(_wvp)            mtx_unlock(&(_wvp)->wv_mtx)
  147 #define WPI_VAP_LOCK_ASSERT(_wvp)       mtx_assert(&(_wvp)->wv_mtx, MA_OWNED)
  148 #define WPI_VAP_LOCK_DESTROY(_wvp)      mtx_destroy(&(_wvp)->wv_mtx)
  149 
  150 struct wpi_fw_part {
  151         const uint8_t   *text;
  152         uint32_t        textsz;
  153         const uint8_t   *data;
  154         uint32_t        datasz;
  155 };
  156 
  157 struct wpi_fw_info {
  158         const uint8_t           *data;
  159         size_t                  size;
  160         struct wpi_fw_part      init;
  161         struct wpi_fw_part      main;
  162         struct wpi_fw_part      boot;
  163 };
  164 
  165 struct wpi_softc {
  166         device_t                sc_dev;
  167         int                     sc_debug;
  168 
  169         int                     sc_running;
  170 
  171         struct mtx              sc_mtx;
  172         struct ieee80211com     sc_ic;
  173 
  174         struct mtx              tx_mtx;
  175 
  176         /* Shared area. */
  177         struct wpi_dma_info     shared_dma;
  178         struct wpi_shared       *shared;
  179 
  180         struct wpi_tx_ring      txq[WPI_DRV_NTXQUEUES];
  181         struct mtx              txq_mtx;
  182         struct mtx              txq_state_mtx;
  183 
  184         struct wpi_rx_ring      rxq;
  185         uint64_t                rx_tstamp;
  186 
  187         /* TX Thermal Callibration. */
  188         struct callout          calib_to;
  189 
  190         struct callout          scan_timeout;
  191         struct callout          tx_timeout;
  192 
  193         /* Watch dog timer. */
  194         struct callout          watchdog_rfkill;
  195 
  196         /* Firmware image. */
  197         struct wpi_fw_info      fw;
  198         uint32_t                errptr;
  199 
  200         struct resource         *irq;
  201         struct resource         *mem;
  202         bus_space_tag_t         sc_st;
  203         bus_space_handle_t      sc_sh;
  204         void                    *sc_ih;
  205         bus_size_t              sc_sz;
  206         int                     sc_cap_off;     /* PCIe Capabilities. */
  207 
  208         struct wpi_rxon         rxon;
  209         struct mtx              rxon_mtx;
  210 
  211         int                     temp;
  212 
  213         uint32_t                nodesmsk;
  214         struct mtx              nt_mtx;
  215 
  216         void                    (*sc_node_free)(struct ieee80211_node *);
  217         void                    (*sc_update_rx_ring)(struct wpi_softc *);
  218         void                    (*sc_update_tx_ring)(struct wpi_softc *,
  219                                     struct wpi_tx_ring *);
  220 
  221         struct wpi_rx_radiotap_header   sc_rxtap;
  222         struct wpi_tx_radiotap_header   sc_txtap;
  223 
  224         /* Firmware image. */
  225         const struct firmware   *fw_fp;
  226 
  227         /* Firmware DMA transfer. */
  228         struct wpi_dma_info     fw_dma;
  229 
  230         /* Tasks used by the driver. */
  231         struct task             sc_radiooff_task;
  232         struct task             sc_radioon_task;
  233 
  234         /* Eeprom info. */
  235         uint8_t                 cap;
  236         uint16_t                rev;
  237         uint8_t                 type;
  238         struct wpi_eeprom_chan
  239             eeprom_channels[WPI_CHAN_BANDS_COUNT][WPI_MAX_CHAN_PER_BAND];
  240         struct wpi_power_group  groups[WPI_POWER_GROUPS_COUNT];
  241         int8_t                  maxpwr[IEEE80211_CHAN_MAX];
  242         char                    domain[4];      /* Regulatory domain. */
  243 };
  244 
  245 /*
  246  * Locking order:
  247  * 1. WPI_LOCK;
  248  * 2. WPI_RXON_LOCK;
  249  * 3. WPI_TX_LOCK;
  250  * 4. WPI_NT_LOCK / WPI_VAP_LOCK;
  251  * 5. WPI_TXQ_LOCK;
  252  * 6. WPI_TXQ_STATE_LOCK;
  253  */
  254 
  255 #define WPI_LOCK_INIT(_sc) \
  256         mtx_init(&(_sc)->sc_mtx, device_get_nameunit((_sc)->sc_dev), \
  257             MTX_NETWORK_LOCK, MTX_DEF)
  258 #define WPI_LOCK(_sc)           mtx_lock(&(_sc)->sc_mtx)
  259 #define WPI_UNLOCK(_sc)         mtx_unlock(&(_sc)->sc_mtx)
  260 #define WPI_LOCK_ASSERT(_sc)    mtx_assert(&(_sc)->sc_mtx, MA_OWNED)
  261 #define WPI_LOCK_DESTROY(_sc)   mtx_destroy(&(_sc)->sc_mtx)
  262 
  263 #define WPI_RXON_LOCK_INIT(_sc) \
  264         mtx_init(&(_sc)->rxon_mtx, "lock for wpi_rxon structure", NULL, MTX_DEF)
  265 #define WPI_RXON_LOCK(_sc)              mtx_lock(&(_sc)->rxon_mtx)
  266 #define WPI_RXON_UNLOCK(_sc)            mtx_unlock(&(_sc)->rxon_mtx)
  267 #define WPI_RXON_LOCK_ASSERT(_sc)       mtx_assert(&(_sc)->rxon_mtx, MA_OWNED)
  268 #define WPI_RXON_LOCK_DESTROY(_sc)      mtx_destroy(&(_sc)->rxon_mtx)
  269 
  270 #define WPI_TX_LOCK_INIT(_sc) \
  271         mtx_init(&(_sc)->tx_mtx, "tx path lock", NULL, MTX_DEF)
  272 #define WPI_TX_LOCK(_sc)                mtx_lock(&(_sc)->tx_mtx)
  273 #define WPI_TX_UNLOCK(_sc)              mtx_unlock(&(_sc)->tx_mtx)
  274 #define WPI_TX_LOCK_DESTROY(_sc)        mtx_destroy(&(_sc)->tx_mtx)
  275 
  276 #define WPI_NT_LOCK_INIT(_sc) \
  277         mtx_init(&(_sc)->nt_mtx, "node table lock", NULL, MTX_DEF)
  278 #define WPI_NT_LOCK(_sc)                mtx_lock(&(_sc)->nt_mtx)
  279 #define WPI_NT_UNLOCK(_sc)              mtx_unlock(&(_sc)->nt_mtx)
  280 #define WPI_NT_LOCK_DESTROY(_sc)        mtx_destroy(&(_sc)->nt_mtx)
  281 
  282 #define WPI_TXQ_LOCK_INIT(_sc) \
  283         mtx_init(&(_sc)->txq_mtx, "txq/cmdq lock", NULL, MTX_DEF)
  284 #define WPI_TXQ_LOCK(_sc)               mtx_lock(&(_sc)->txq_mtx)
  285 #define WPI_TXQ_UNLOCK(_sc)             mtx_unlock(&(_sc)->txq_mtx)
  286 #define WPI_TXQ_LOCK_DESTROY(_sc)       mtx_destroy(&(_sc)->txq_mtx)
  287 
  288 #define WPI_TXQ_STATE_LOCK_INIT(_sc) \
  289         mtx_init(&(_sc)->txq_state_mtx, "txq state lock", NULL, MTX_DEF)
  290 #define WPI_TXQ_STATE_LOCK(_sc)         mtx_lock(&(_sc)->txq_state_mtx)
  291 #define WPI_TXQ_STATE_UNLOCK(_sc)       mtx_unlock(&(_sc)->txq_state_mtx)
  292 #define WPI_TXQ_STATE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->txq_state_mtx)

Cache object: 61de91639ddd07cac33e292762947f70


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