root/dev/pci/if_wpivar.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: if_wpivar.h,v 1.12 2007/06/16 14:15:37 damien Exp $   */
    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 
   20 struct wpi_rx_radiotap_header {
   21         struct ieee80211_radiotap_header wr_ihdr;
   22         uint64_t        wr_tsft;
   23         uint8_t         wr_flags;
   24         uint8_t         wr_rate;
   25         uint16_t        wr_chan_freq;
   26         uint16_t        wr_chan_flags;
   27         int8_t          wr_dbm_antsignal;
   28         int8_t          wr_dbm_antnoise;
   29         uint8_t         wr_antenna;
   30 } __packed;
   31 
   32 #define WPI_RX_RADIOTAP_PRESENT                                         \
   33         ((1 << IEEE80211_RADIOTAP_TSFT) |                               \
   34          (1 << IEEE80211_RADIOTAP_FLAGS) |                              \
   35          (1 << IEEE80211_RADIOTAP_RATE) |                               \
   36          (1 << IEEE80211_RADIOTAP_CHANNEL) |                            \
   37          (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |                      \
   38          (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) |                       \
   39          (1 << IEEE80211_RADIOTAP_ANTENNA))
   40 
   41 struct wpi_tx_radiotap_header {
   42         struct ieee80211_radiotap_header wt_ihdr;
   43         uint8_t         wt_flags;
   44         uint8_t         wt_rate;
   45         uint16_t        wt_chan_freq;
   46         uint16_t        wt_chan_flags;
   47         uint8_t         wt_hwqueue;
   48 } __packed;
   49 
   50 #define WPI_TX_RADIOTAP_PRESENT                                         \
   51         ((1 << IEEE80211_RADIOTAP_FLAGS) |                              \
   52          (1 << IEEE80211_RADIOTAP_RATE) |                               \
   53          (1 << IEEE80211_RADIOTAP_CHANNEL) |                            \
   54          (1 << IEEE80211_RADIOTAP_HWQUEUE))
   55 
   56 struct wpi_dma_info {
   57         bus_dma_tag_t           tag;
   58         bus_dmamap_t            map;
   59         bus_dma_segment_t       seg;
   60         bus_addr_t              paddr;
   61         caddr_t                 vaddr;
   62         bus_size_t              size;
   63 };
   64 
   65 struct wpi_tx_data {
   66         bus_dmamap_t            map;
   67         struct mbuf             *m;
   68         struct ieee80211_node   *ni;
   69 };
   70 
   71 struct wpi_tx_ring {
   72         struct wpi_dma_info     desc_dma;
   73         struct wpi_dma_info     cmd_dma;
   74         struct wpi_tx_desc      *desc;
   75         struct wpi_tx_cmd       *cmd;
   76         struct wpi_tx_data      *data;
   77         int                     qid;
   78         int                     count;
   79         int                     queued;
   80         int                     cur;
   81 };
   82 
   83 #define WPI_RBUF_COUNT  (WPI_RX_RING_COUNT + 16)
   84 
   85 struct wpi_softc;
   86 
   87 struct wpi_rbuf {
   88         struct wpi_softc        *sc;
   89         caddr_t                 vaddr;
   90         bus_addr_t              paddr;
   91         SLIST_ENTRY(wpi_rbuf)   next;
   92 };
   93 
   94 struct wpi_rx_data {
   95         struct mbuf     *m;
   96 };
   97 
   98 struct wpi_rx_ring {
   99         struct wpi_dma_info     desc_dma;
  100         struct wpi_dma_info     buf_dma;
  101         uint32_t                *desc;
  102         struct wpi_rx_data      data[WPI_RX_RING_COUNT];
  103         struct wpi_rbuf         rbuf[WPI_RBUF_COUNT];
  104         SLIST_HEAD(, wpi_rbuf)  freelist;
  105         int                     cur;
  106 };
  107 
  108 struct wpi_node {
  109         struct  ieee80211_node          ni;     /* must be the first */
  110         struct  ieee80211_amrr_node     amn;
  111 };
  112 
  113 struct wpi_power_sample {
  114         uint8_t index;
  115         int8_t  power;
  116 };
  117 
  118 struct wpi_power_group {
  119 #define WPI_SAMPLES_COUNT       5
  120         struct  wpi_power_sample samples[WPI_SAMPLES_COUNT];
  121         uint8_t chan;
  122         int8_t  maxpwr;
  123         int16_t temp;
  124 };
  125 
  126 struct wpi_softc {
  127         struct device           sc_dev;
  128 
  129         struct ieee80211com     sc_ic;
  130         int                     (*sc_newstate)(struct ieee80211com *,
  131                                     enum ieee80211_state, int);
  132         struct ieee80211_amrr   amrr;
  133 
  134         bus_dma_tag_t           sc_dmat;
  135 
  136         /* shared area */
  137         struct wpi_dma_info     shared_dma;
  138         struct wpi_shared       *shared;
  139 
  140         /* firmware DMA transfer */
  141         struct wpi_dma_info     fw_dma;
  142 
  143         /* rings */
  144         struct wpi_tx_ring      txq[4];
  145         struct wpi_tx_ring      cmdq;
  146         struct wpi_rx_ring      rxq;
  147 
  148         bus_space_tag_t         sc_st;
  149         bus_space_handle_t      sc_sh;
  150         void                    *sc_ih;
  151         pci_chipset_tag_t       sc_pct;
  152         pcitag_t                sc_pcitag;
  153         bus_size_t              sc_sz;
  154 
  155         struct ksensordev       sensordev;
  156         struct ksensor          sensor;
  157         struct timeout          calib_to;
  158         int                     calib_cnt;
  159 
  160         struct wpi_config       config;
  161         int                     temp;
  162 
  163         uint8_t                 cap;
  164         uint16_t                rev;
  165         uint8_t                 type;
  166         struct wpi_power_group  groups[WPI_POWER_GROUPS_COUNT];
  167         int8_t                  maxpwr[IEEE80211_CHAN_MAX];
  168 
  169         int                     sc_tx_timer;
  170         void                    *powerhook;
  171 
  172 #if NBPFILTER > 0
  173         caddr_t                 sc_drvbpf;
  174 
  175         union {
  176                 struct wpi_rx_radiotap_header th;
  177                 uint8_t pad[IEEE80211_RADIOTAP_HDRLEN];
  178         } sc_rxtapu;
  179 #define sc_rxtap        sc_rxtapu.th
  180         int                     sc_rxtap_len;
  181 
  182         union {
  183                 struct wpi_tx_radiotap_header th;
  184                 uint8_t pad[IEEE80211_RADIOTAP_HDRLEN];
  185         } sc_txtapu;
  186 #define sc_txtap        sc_txtapu.th
  187         int                     sc_txtap_len;
  188 #endif
  189 };

/* [<][>][^][v][top][bottom][index][help] */