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/rtwn/if_rtwnvar.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  * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr>
    3  * Copyright (c) 2015-2016 Andriy Voskoboinyk <avos@FreeBSD.org>
    4  *
    5  * Permission to use, copy, modify, and distribute this software for any
    6  * purpose with or without fee is hereby granted, provided that the above
    7  * copyright notice and this permission notice appear in all copies.
    8  *
    9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   16  *
   17  * $OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $
   18  * $FreeBSD$
   19  */
   20 
   21 #ifndef IF_RTWNVAR_H
   22 #define IF_RTWNVAR_H
   23 
   24 #include "opt_rtwn.h"
   25 
   26 #define RTWN_TX_DESC_SIZE       64
   27 
   28 #define RTWN_BCN_MAX_SIZE       512
   29 #define RTWN_CAM_ENTRY_LIMIT    64
   30 
   31 #define RTWN_MACID_BC           1       /* Broadcast. */
   32 #define RTWN_MACID_UNDEFINED    0x7fff
   33 #define RTWN_MACID_VALID        0x8000
   34 #define RTWN_MACID_LIMIT        128
   35 
   36 #define RTWN_TX_TIMEOUT         5000    /* ms */
   37 #define RTWN_MAX_EPOUT          4
   38 #define RTWN_PORT_COUNT         2
   39 
   40 #define RTWN_LED_LINK           0
   41 #define RTWN_LED_DATA           1
   42 
   43 struct rtwn_rx_radiotap_header {
   44         struct ieee80211_radiotap_header wr_ihdr;
   45         uint64_t        wr_tsft;
   46         uint8_t         wr_flags;
   47         uint8_t         wr_rate;
   48         uint16_t        wr_chan_freq;
   49         uint16_t        wr_chan_flags;
   50         int8_t          wr_dbm_antsignal;
   51         int8_t          wr_dbm_antnoise;
   52 } __packed __aligned(8);
   53 
   54 #define RTWN_RX_RADIOTAP_PRESENT                        \
   55         (1 << IEEE80211_RADIOTAP_TSFT |                 \
   56          1 << IEEE80211_RADIOTAP_FLAGS |                \
   57          1 << IEEE80211_RADIOTAP_RATE |                 \
   58          1 << IEEE80211_RADIOTAP_CHANNEL |              \
   59          1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL |        \
   60          1 << IEEE80211_RADIOTAP_DBM_ANTNOISE)
   61 
   62 struct rtwn_tx_radiotap_header {
   63         struct ieee80211_radiotap_header wt_ihdr;
   64         uint8_t         wt_flags;
   65         uint8_t         wt_pad;
   66         uint16_t        wt_chan_freq;
   67         uint16_t        wt_chan_flags;
   68 } __packed;
   69 
   70 #define RTWN_TX_RADIOTAP_PRESENT                        \
   71         (1 << IEEE80211_RADIOTAP_FLAGS |                \
   72          1 << IEEE80211_RADIOTAP_CHANNEL)
   73 
   74 struct rtwn_tx_buf {
   75         uint8_t         txd[RTWN_TX_DESC_SIZE];
   76 } __attribute__((aligned(4)));
   77 
   78 #define RTWN_PHY_STATUS_SIZE    32
   79 struct rtwn_tx_phystat {
   80         uint32_t        phydw[RTWN_PHY_STATUS_SIZE / sizeof(uint32_t)];
   81 };
   82 
   83 struct rtwn_softc;
   84 
   85 union sec_param {
   86         struct ieee80211_key    key;
   87         int                     macid;
   88 };
   89 
   90 #define CMD_FUNC_PROTO          void (*func)(struct rtwn_softc *, \
   91                                     union sec_param *)
   92 
   93 struct rtwn_cmdq {
   94         union sec_param         data;
   95         CMD_FUNC_PROTO;
   96 };
   97 #define RTWN_CMDQ_SIZE          16
   98 
   99 struct rtwn_node {
  100         struct ieee80211_node   ni;     /* must be the first */
  101         int                     id;
  102 
  103         struct rtwn_tx_phystat  last_physt;
  104         int                     avg_pwdb;
  105 };
  106 #define RTWN_NODE(ni)           ((struct rtwn_node *)(ni))
  107 
  108 struct rtwn_vap {
  109         struct ieee80211vap     vap;
  110         int                     id;
  111 #define RTWN_VAP_ID_INVALID     -1
  112         int                     curr_mode;
  113 
  114         struct rtwn_tx_buf      bcn_desc;
  115         struct mbuf             *bcn_mbuf;
  116         struct timeout_task     tx_beacon_csa;
  117 
  118         struct callout          tsf_sync_adhoc;
  119         struct task             tsf_sync_adhoc_task;
  120 
  121         const struct ieee80211_key      *keys[IEEE80211_WEP_NKID];
  122 
  123         int                     (*newstate)(struct ieee80211vap *,
  124                                     enum ieee80211_state, int);
  125         void                    (*recv_mgmt)(struct ieee80211_node *,
  126                                     struct mbuf *, int,
  127                                     const struct ieee80211_rx_stats *,
  128                                     int, int);
  129 };
  130 #define RTWN_VAP(vap)           ((struct rtwn_vap *)(vap))
  131 
  132 /*
  133  * Rx data types.
  134  */
  135 enum {
  136         RTWN_RX_DATA,
  137         RTWN_RX_TX_REPORT,
  138         RTWN_RX_OTHER
  139 };
  140 
  141 /*
  142  * Firmware reset reasons.
  143  */
  144 enum {
  145         RTWN_FW_RESET_DOWNLOAD,
  146         RTWN_FW_RESET_CHECKSUM,
  147         RTWN_FW_RESET_SHUTDOWN
  148 };
  149 
  150 /*
  151  * Rate control algorithm selection.
  152  */
  153 enum {
  154         RTWN_RATECTL_NONE,
  155         RTWN_RATECTL_NET80211,
  156         RTWN_RATECTL_FW,
  157         RTWN_RATECTL_MAX
  158 };
  159 
  160 /*
  161  * Control h/w crypto usage.
  162  */
  163 enum {
  164         RTWN_CRYPTO_SW,
  165         RTWN_CRYPTO_PAIR,
  166         RTWN_CRYPTO_FULL,
  167         RTWN_CRYPTO_MAX,
  168 };
  169 
  170 struct rtwn_softc {
  171         struct ieee80211com     sc_ic;
  172         struct mbufq            sc_snd;
  173         device_t                sc_dev;
  174 
  175 #if 1
  176         int                     sc_ht40;
  177 #endif
  178         uint32_t                sc_debug;
  179         int                     sc_hwcrypto;
  180         int                     sc_ratectl_sysctl;
  181         int                     sc_ratectl;
  182 
  183         uint8_t                 sc_detached;
  184         uint8_t                 sc_flags;
  185 /* Device flags */
  186 #define RTWN_FLAG_CCK_HIPWR     0x01
  187 #define RTWN_FLAG_EXT_HDR       0x02
  188 #define RTWN_FLAG_CAM_FIXED     0x04
  189 /* Driver state */
  190 #define RTWN_STARTED            0x08
  191 #define RTWN_RUNNING            0x10
  192 #define RTWN_FW_LOADED          0x20
  193 #define RTWN_TEMP_MEASURED      0x40
  194 #define RTWN_RCR_LOCKED         0x80
  195 
  196 #define RTWN_CHIP_HAS_BCNQ1(_sc)        \
  197         ((_sc)->bcn_status_reg[0] != (_sc)->bcn_status_reg[1])
  198 
  199         void                    *sc_priv;
  200         const char              *name;
  201         int                     sc_ant;
  202 
  203         struct rtwn_tx_phystat  last_physt;
  204         uint8_t                 thcal_temp;
  205         int                     cur_bcnq_id;
  206 
  207         int                     nvaps;
  208         int                     ap_vaps;
  209         int                     bcn_vaps;
  210         int                     mon_vaps;
  211 
  212         int                     vaps_running;
  213         int                     monvaps_running;
  214 
  215         uint16_t                next_rom_addr;
  216         uint8_t                 keys_bmap[howmany(RTWN_CAM_ENTRY_LIMIT, NBBY)];
  217 
  218         struct rtwn_vap         *vaps[RTWN_PORT_COUNT];
  219         struct ieee80211_node   *node_list[RTWN_MACID_LIMIT];
  220         struct mtx              nt_mtx;
  221 
  222         struct callout          sc_calib_to;
  223         struct callout          sc_pwrmode_init;
  224 #ifndef D4054
  225         struct callout          sc_watchdog_to;
  226         int                     sc_tx_timer;
  227 #endif
  228 
  229         struct mtx              sc_mtx;
  230 
  231         struct rtwn_cmdq        cmdq[RTWN_CMDQ_SIZE];
  232         struct mtx              cmdq_mtx;
  233         struct task             cmdq_task;
  234         uint8_t                 cmdq_first;
  235         uint8_t                 cmdq_last;
  236 
  237         struct wmeParams        cap_wmeParams[WME_NUM_AC];
  238 
  239         struct rtwn_rx_radiotap_header  sc_rxtap;
  240         struct rtwn_tx_radiotap_header  sc_txtap;
  241 
  242         int                     ntxchains;
  243         int                     nrxchains;
  244 
  245         int                     ledlink;
  246         uint8_t                 thermal_meter;
  247 
  248         int                     sc_tx_n_active;
  249         uint8_t                 qfullmsk;
  250 
  251         /* Firmware-specific */
  252         const char              *fwname;
  253         uint16_t                fwver;
  254         uint16_t                fwsig;
  255         int                     fwcur;
  256 
  257         void            (*sc_node_free)(struct ieee80211_node *);
  258         void            (*sc_scan_curchan)(struct ieee80211_scan_state *,
  259                             unsigned long);
  260 
  261         /* Interface-specific. */
  262         int             (*sc_write_1)(struct rtwn_softc *, uint16_t,
  263                             uint8_t);
  264         int             (*sc_write_2)(struct rtwn_softc *, uint16_t,
  265                             uint16_t);
  266         int             (*sc_write_4)(struct rtwn_softc *, uint16_t,
  267                             uint32_t);
  268         uint8_t         (*sc_read_1)(struct rtwn_softc *, uint16_t);
  269         uint16_t        (*sc_read_2)(struct rtwn_softc *, uint16_t);
  270         uint32_t        (*sc_read_4)(struct rtwn_softc *, uint16_t);
  271         /* XXX eliminate */
  272         void            (*sc_delay)(struct rtwn_softc *, int);
  273         int             (*sc_tx_start)(struct rtwn_softc *,
  274                             struct ieee80211_node *, struct mbuf *, uint8_t *,
  275                             uint8_t, int);
  276         void            (*sc_start_xfers)(struct rtwn_softc *);
  277         void            (*sc_reset_lists)(struct rtwn_softc *,
  278                             struct ieee80211vap *);
  279         void            (*sc_abort_xfers)(struct rtwn_softc *);
  280         int             (*sc_fw_write_block)(struct rtwn_softc *,
  281                             const uint8_t *, uint16_t, int);
  282         uint16_t        (*sc_get_qmap)(struct rtwn_softc *);
  283         void            (*sc_set_desc_addr)(struct rtwn_softc *);
  284         void            (*sc_drop_incorrect_tx)(struct rtwn_softc *);
  285         void            (*sc_beacon_update_begin)(struct rtwn_softc *,
  286                             struct ieee80211vap *);
  287         void            (*sc_beacon_update_end)(struct rtwn_softc *,
  288                             struct ieee80211vap *);
  289         void            (*sc_beacon_unload)(struct rtwn_softc *, int);
  290 
  291         /* XXX drop checks for PCIe? */
  292         int             bcn_check_interval;
  293 
  294         /* Device-specific. */
  295         uint32_t        (*sc_rf_read)(struct rtwn_softc *, int, uint8_t);
  296         void            (*sc_rf_write)(struct rtwn_softc *, int, uint8_t,
  297                             uint32_t);
  298         int             (*sc_check_condition)(struct rtwn_softc *,
  299                             const uint8_t[]);
  300         void            (*sc_efuse_postread)(struct rtwn_softc *);
  301         void            (*sc_parse_rom)(struct rtwn_softc *, uint8_t *);
  302         void            (*sc_set_led)(struct rtwn_softc *, int, int);
  303         int             (*sc_power_on)(struct rtwn_softc *);
  304         void            (*sc_power_off)(struct rtwn_softc *);
  305 #ifndef RTWN_WITHOUT_UCODE
  306         void            (*sc_fw_reset)(struct rtwn_softc *, int);
  307         void            (*sc_fw_download_enable)(struct rtwn_softc *, int);
  308 #endif
  309         int             (*sc_llt_init)(struct rtwn_softc *);
  310         int             (*sc_set_page_size)(struct rtwn_softc *);
  311         void            (*sc_lc_calib)(struct rtwn_softc *);
  312         void            (*sc_iq_calib)(struct rtwn_softc *);
  313         void            (*sc_read_chipid_vendor)(struct rtwn_softc *,
  314                             uint32_t);
  315         void            (*sc_adj_devcaps)(struct rtwn_softc *);
  316         void            (*sc_vap_preattach)(struct rtwn_softc *,
  317                             struct ieee80211vap *);
  318         void            (*sc_postattach)(struct rtwn_softc *);
  319         void            (*sc_detach_private)(struct rtwn_softc *);
  320         void            (*sc_fill_tx_desc)(struct rtwn_softc *,
  321                             struct ieee80211_node *, struct mbuf *,
  322                             void *, uint8_t, int);
  323         void            (*sc_fill_tx_desc_raw)(struct rtwn_softc *,
  324                             struct ieee80211_node *, struct mbuf *,
  325                             void *, const struct ieee80211_bpf_params *);
  326         void            (*sc_fill_tx_desc_null)(struct rtwn_softc *,
  327                             void *, int, int, int);
  328         void            (*sc_dump_tx_desc)(struct rtwn_softc *, const void *);
  329         uint8_t         (*sc_tx_radiotap_flags)(const void *);
  330         uint8_t         (*sc_rx_radiotap_flags)(const void *);
  331         void            (*sc_beacon_init)(struct rtwn_softc *, void *, int);
  332         void            (*sc_beacon_enable)(struct rtwn_softc *, int, int);
  333         void            (*sc_beacon_set_rate)(void *, int);
  334         void            (*sc_beacon_select)(struct rtwn_softc *, int);
  335         void            (*sc_set_chan)(struct rtwn_softc *,
  336                             struct ieee80211_channel *);
  337         void            (*sc_set_media_status)(struct rtwn_softc *, int);
  338 #ifndef RTWN_WITHOUT_UCODE
  339         int             (*sc_set_rsvd_page)(struct rtwn_softc *, int, int,
  340                             int);
  341         int             (*sc_set_pwrmode)(struct rtwn_softc *,
  342                             struct ieee80211vap *, int);
  343         void            (*sc_set_rssi)(struct rtwn_softc *);
  344 #endif
  345         void            (*sc_get_rx_stats)(struct rtwn_softc *,
  346                             struct ieee80211_rx_stats *, const void *,
  347                             const void *);
  348         int8_t          (*sc_get_rssi_cck)(struct rtwn_softc *, void *);
  349         int8_t          (*sc_get_rssi_ofdm)(struct rtwn_softc *, void *);
  350         int             (*sc_classify_intr)(struct rtwn_softc *, void *, int);
  351         void            (*sc_handle_tx_report)(struct rtwn_softc *, uint8_t *,
  352                             int);
  353         void            (*sc_handle_c2h_report)(struct rtwn_softc *,
  354                             uint8_t *, int);
  355         int             (*sc_check_frame)(struct rtwn_softc *, struct mbuf *);
  356         void            (*sc_temp_measure)(struct rtwn_softc *);
  357         uint8_t         (*sc_temp_read)(struct rtwn_softc *);
  358         void            (*sc_init_tx_agg)(struct rtwn_softc *);
  359         void            (*sc_init_rx_agg)(struct rtwn_softc *);
  360         void            (*sc_init_intr)(struct rtwn_softc *);
  361         void            (*sc_init_ampdu)(struct rtwn_softc *);
  362         void            (*sc_init_edca)(struct rtwn_softc *);
  363         void            (*sc_init_bb)(struct rtwn_softc *);
  364         void            (*sc_init_rf)(struct rtwn_softc *);
  365         void            (*sc_init_antsel)(struct rtwn_softc *);
  366         void            (*sc_post_init)(struct rtwn_softc *);
  367         int             (*sc_init_bcnq1_boundary)(struct rtwn_softc *);
  368 
  369         const uint8_t                   *chan_list_5ghz[3];
  370         int                             chan_num_5ghz[3];
  371 
  372         const struct rtwn_mac_prog      *mac_prog;
  373         int                             mac_size;
  374         const struct rtwn_bb_prog       *bb_prog;
  375         int                             bb_size;
  376         const struct rtwn_agc_prog      *agc_prog;
  377         int                             agc_size;
  378         const struct rtwn_rf_prog       *rf_prog;
  379 
  380         int                             page_count;
  381         int                             pktbuf_count;
  382 
  383         int                             ackto;
  384 
  385         int                             npubqpages;
  386         int                             nhqpages;
  387         int                             nnqpages;
  388         int                             nlqpages;
  389         int                             page_size;
  390 
  391         int                             txdesc_len;
  392         int                             efuse_maxlen;
  393         int                             efuse_maplen;
  394 
  395         uint16_t                        rx_dma_size;
  396 
  397         int                             macid_limit;
  398         int                             cam_entry_limit;
  399         int                             fwsize_limit;
  400         int                             temp_delta;
  401 
  402         uint16_t                        bcn_status_reg[RTWN_PORT_COUNT];
  403         uint32_t                        rcr;    /* Rx filter */
  404 };
  405 MALLOC_DECLARE(M_RTWN_PRIV);
  406 
  407 #define RTWN_LOCK(sc)                   mtx_lock(&(sc)->sc_mtx)
  408 #define RTWN_UNLOCK(sc)         mtx_unlock(&(sc)->sc_mtx)
  409 #define RTWN_ASSERT_LOCKED(sc)          mtx_assert(&(sc)->sc_mtx, MA_OWNED)
  410 
  411 #define RTWN_CMDQ_LOCK_INIT(sc) \
  412         mtx_init(&(sc)->cmdq_mtx, "cmdq lock", NULL, MTX_DEF)
  413 #define RTWN_CMDQ_LOCK(sc)              mtx_lock(&(sc)->cmdq_mtx)
  414 #define RTWN_CMDQ_UNLOCK(sc)            mtx_unlock(&(sc)->cmdq_mtx)
  415 #define RTWN_CMDQ_LOCK_INITIALIZED(sc)  mtx_initialized(&(sc)->cmdq_mtx)
  416 #define RTWN_CMDQ_LOCK_DESTROY(sc)      mtx_destroy(&(sc)->cmdq_mtx)
  417 
  418 #define RTWN_NT_LOCK_INIT(sc) \
  419         mtx_init(&(sc)->nt_mtx, "node table lock", NULL, MTX_DEF)
  420 #define RTWN_NT_LOCK(sc)                mtx_lock(&(sc)->nt_mtx)
  421 #define RTWN_NT_UNLOCK(sc)              mtx_unlock(&(sc)->nt_mtx)
  422 #define RTWN_NT_LOCK_INITIALIZED(sc)    mtx_initialized(&(sc)->nt_mtx)
  423 #define RTWN_NT_LOCK_DESTROY(sc)        mtx_destroy(&(sc)->nt_mtx)
  424 
  425 void    rtwn_sysctlattach(struct rtwn_softc *);
  426 
  427 int     rtwn_attach(struct rtwn_softc *);
  428 void    rtwn_detach(struct rtwn_softc *);
  429 void    rtwn_resume(struct rtwn_softc *);
  430 void    rtwn_suspend(struct rtwn_softc *);
  431 
  432 /* Interface-specific. */
  433 #define rtwn_write_1(_sc, _addr, _val) \
  434         (((_sc)->sc_write_1)((_sc), (_addr), (_val)))
  435 #define rtwn_write_2(_sc, _addr, _val) \
  436         (((_sc)->sc_write_2)((_sc), (_addr), (_val)))
  437 #define rtwn_write_4(_sc, _addr, _val) \
  438         (((_sc)->sc_write_4)((_sc), (_addr), (_val)))
  439 #define rtwn_read_1(_sc, _addr) \
  440         (((_sc)->sc_read_1)((_sc), (_addr)))
  441 #define rtwn_read_2(_sc, _addr) \
  442         (((_sc)->sc_read_2)((_sc), (_addr)))
  443 #define rtwn_read_4(_sc, _addr) \
  444         (((_sc)->sc_read_4)((_sc), (_addr)))
  445 #define rtwn_delay(_sc, _usec) \
  446         (((_sc)->sc_delay)((_sc), (_usec)))
  447 #define rtwn_tx_start(_sc, _ni, _m, _desc, _type, _id) \
  448         (((_sc)->sc_tx_start)((_sc), (_ni), (_m), (_desc), (_type), (_id)))
  449 #define rtwn_start_xfers(_sc) \
  450         (((_sc)->sc_start_xfers)((_sc)))
  451 #define rtwn_reset_lists(_sc, _vap) \
  452         (((_sc)->sc_reset_lists)((_sc), (_vap)))
  453 #define rtwn_abort_xfers(_sc) \
  454         (((_sc)->sc_abort_xfers)((_sc)))
  455 #define rtwn_fw_write_block(_sc, _buf, _reg, _len) \
  456         (((_sc)->sc_fw_write_block)((_sc), (_buf), (_reg), (_len)))
  457 #define rtwn_get_qmap(_sc) \
  458         (((_sc)->sc_get_qmap)((_sc)))
  459 #define rtwn_set_desc_addr(_sc) \
  460         (((_sc)->sc_set_desc_addr)((_sc)))
  461 #define rtwn_drop_incorrect_tx(_sc) \
  462         (((_sc)->sc_drop_incorrect_tx)((_sc)))
  463 #define rtwn_beacon_update_begin(_sc, _vap) \
  464         (((_sc)->sc_beacon_update_begin)((_sc), (_vap)))
  465 #define rtwn_beacon_update_end(_sc, _vap) \
  466         (((_sc)->sc_beacon_update_end)((_sc), (_vap)))
  467 #define rtwn_beacon_unload(_sc, _id) \
  468         (((_sc)->sc_beacon_unload)((_sc), (_id)))
  469 
  470 /* Aliases. */
  471 #define rtwn_bb_write           rtwn_write_4
  472 #define rtwn_bb_read            rtwn_read_4
  473 #define rtwn_bb_setbits         rtwn_setbits_4
  474 
  475 /* Device-specific. */
  476 #define rtwn_rf_read(_sc, _chain, _addr) \
  477         (((_sc)->sc_rf_read)((_sc), (_chain), (_addr)))
  478 #define rtwn_rf_write(_sc, _chain, _addr, _val) \
  479         (((_sc)->sc_rf_write)((_sc), (_chain), (_addr), (_val)))
  480 #define rtwn_check_condition(_sc, _cond) \
  481         (((_sc)->sc_check_condition)((_sc), (_cond)))
  482 #define rtwn_efuse_postread(_sc) \
  483         (((_sc)->sc_efuse_postread)((_sc)))
  484 #define rtwn_parse_rom(_sc, _rom) \
  485         (((_sc)->sc_parse_rom)((_sc), (_rom)))
  486 #define rtwn_set_led(_sc, _led, _on) \
  487         (((_sc)->sc_set_led)((_sc), (_led), (_on)))
  488 #define rtwn_get_rx_stats(_sc, _rxs, _desc, _physt) \
  489         (((_sc)->sc_get_rx_stats((_sc), (_rxs), (_desc), (_physt))))
  490 #define rtwn_get_rssi_cck(_sc, _physt) \
  491         (((_sc)->sc_get_rssi_cck)((_sc), (_physt)))
  492 #define rtwn_get_rssi_ofdm(_sc, _physt) \
  493         (((_sc)->sc_get_rssi_ofdm)((_sc), (_physt)))
  494 #define rtwn_power_on(_sc) \
  495         (((_sc)->sc_power_on)((_sc)))
  496 #define rtwn_power_off(_sc) \
  497         (((_sc)->sc_power_off)((_sc)))
  498 #ifndef RTWN_WITHOUT_UCODE
  499 #define rtwn_fw_reset(_sc, _reason) \
  500         (((_sc)->sc_fw_reset)((_sc), (_reason)))
  501 #define rtwn_fw_download_enable(_sc, _enable) \
  502         (((_sc)->sc_fw_download_enable)((_sc), (_enable)))
  503 #endif
  504 #define rtwn_llt_init(_sc) \
  505         (((_sc)->sc_llt_init)((_sc)))
  506 #define rtwn_set_page_size(_sc) \
  507         (((_sc)->sc_set_page_size)((_sc)))
  508 #define rtwn_lc_calib(_sc) \
  509         (((_sc)->sc_lc_calib)((_sc)))
  510 #define rtwn_iq_calib(_sc) \
  511         (((_sc)->sc_iq_calib)((_sc)))
  512 #define rtwn_read_chipid_vendor(_sc, _reg) \
  513         (((_sc)->sc_read_chipid_vendor)((_sc), (_reg)))
  514 #define rtwn_adj_devcaps(_sc) \
  515         (((_sc)->sc_adj_devcaps)((_sc)))
  516 #define rtwn_vap_preattach(_sc, _vap) \
  517         (((_sc)->sc_vap_preattach)((_sc), (_vap)))
  518 #define rtwn_postattach(_sc) \
  519         (((_sc)->sc_postattach)((_sc)))
  520 #define rtwn_detach_private(_sc) \
  521         (((_sc)->sc_detach_private)((_sc)))
  522 #define rtwn_fill_tx_desc(_sc, _ni, _m, \
  523             _buf, _ridx, _maxretry) \
  524         (((_sc)->sc_fill_tx_desc)((_sc), (_ni), \
  525             (_m), (_buf), (_ridx), (_maxretry)))
  526 #define rtwn_fill_tx_desc_raw(_sc, _ni, _m, \
  527             _buf, _params) \
  528         (((_sc)->sc_fill_tx_desc_raw)((_sc), (_ni), \
  529             (_m), (_buf), (_params)))
  530 #define rtwn_fill_tx_desc_null(_sc, _buf, _11b, _qos, _id) \
  531         (((_sc)->sc_fill_tx_desc_null)((_sc), \
  532             (_buf), (_11b), (_qos), (_id)))
  533 #define rtwn_dump_tx_desc(_sc, _desc) \
  534         (((_sc)->sc_dump_tx_desc)((_sc), (_desc)))
  535 #define rtwn_tx_radiotap_flags(_sc, _buf) \
  536         (((_sc)->sc_tx_radiotap_flags)((_buf)))
  537 #define rtwn_rx_radiotap_flags(_sc, _buf) \
  538         (((_sc)->sc_rx_radiotap_flags)((_buf)))
  539 #define rtwn_set_chan(_sc, _c) \
  540         (((_sc)->sc_set_chan)((_sc), (_c)))
  541 #ifndef RTWN_WITHOUT_UCODE
  542 #define rtwn_set_rsvd_page(_sc, _resp, _null, _qos_null) \
  543         (((_sc)->sc_set_rsvd_page)((_sc), \
  544             (_resp), (_null), (_qos_null)))
  545 #define rtwn_set_pwrmode(_sc, _vap, _off) \
  546         (((_sc)->sc_set_pwrmode)((_sc), (_vap), (_off)))
  547 #define rtwn_set_rssi(_sc) \
  548         (((_sc)->sc_set_rssi)((_sc)))
  549 #endif
  550 #define rtwn_classify_intr(_sc, _buf, _len) \
  551         (((_sc)->sc_classify_intr)((_sc), (_buf), (_len)))
  552 #define rtwn_handle_tx_report(_sc, _buf, _len) \
  553         (((_sc)->sc_handle_tx_report)((_sc), (_buf), (_len)))
  554 #define rtwn_handle_c2h_report(_sc, _buf, _len) \
  555         (((_sc)->sc_handle_c2h_report)((_sc), (_buf), (_len)))
  556 #define rtwn_check_frame(_sc, _m) \
  557         (((_sc)->sc_check_frame)((_sc), (_m)))
  558 #define rtwn_beacon_init(_sc, _buf, _id) \
  559         (((_sc)->sc_beacon_init)((_sc), (_buf), (_id)))
  560 #define rtwn_beacon_enable(_sc, _id, _enable) \
  561         (((_sc)->sc_beacon_enable)((_sc), (_id), (_enable)))
  562 #define rtwn_beacon_set_rate(_sc, _buf, _is5ghz) \
  563         (((_sc)->sc_beacon_set_rate)((_buf), (_is5ghz)))
  564 #define rtwn_beacon_select(_sc, _id) \
  565         (((_sc)->sc_beacon_select)((_sc), (_id)))
  566 #define rtwn_temp_measure(_sc) \
  567         (((_sc)->sc_temp_measure)((_sc)))
  568 #define rtwn_temp_read(_sc) \
  569         (((_sc)->sc_temp_read)((_sc)))
  570 #define rtwn_init_tx_agg(_sc) \
  571         (((_sc)->sc_init_tx_agg)((_sc)))
  572 #define rtwn_init_rx_agg(_sc) \
  573         (((_sc)->sc_init_rx_agg)((_sc)))
  574 #define rtwn_init_intr(_sc) \
  575         (((_sc)->sc_init_intr)((_sc)))
  576 #define rtwn_init_ampdu(_sc) \
  577         (((_sc)->sc_init_ampdu)((_sc)))
  578 #define rtwn_init_edca(_sc) \
  579         (((_sc)->sc_init_edca)((_sc)))
  580 #define rtwn_init_bb(_sc) \
  581         (((_sc)->sc_init_bb)((_sc)))
  582 #define rtwn_init_rf(_sc) \
  583         (((_sc)->sc_init_rf)((_sc)))
  584 #define rtwn_init_antsel(_sc) \
  585         (((_sc)->sc_init_antsel)((_sc)))
  586 #define rtwn_post_init(_sc) \
  587         (((_sc)->sc_post_init)((_sc)))
  588 #define rtwn_init_bcnq1_boundary(_sc) \
  589         (((_sc)->sc_init_bcnq1_boundary)((_sc)))
  590 
  591 /*
  592  * Methods to access subfields in registers.
  593  */
  594 static __inline int
  595 rtwn_setbits_1(struct rtwn_softc *sc, uint16_t addr, uint8_t clr,
  596     uint8_t set)
  597 {
  598         return (rtwn_write_1(sc, addr,
  599             (rtwn_read_1(sc, addr) & ~clr) | set));
  600 }
  601 
  602 static __inline int
  603 rtwn_setbits_1_shift(struct rtwn_softc *sc, uint16_t addr, uint32_t clr,
  604     uint32_t set, int shift)
  605 {
  606         return (rtwn_setbits_1(sc, addr + shift, clr >> shift * NBBY,
  607             set >> shift * NBBY));
  608 }
  609 
  610 static __inline int
  611 rtwn_setbits_2(struct rtwn_softc *sc, uint16_t addr, uint16_t clr,
  612     uint16_t set)
  613 {
  614         return (rtwn_write_2(sc, addr,
  615             (rtwn_read_2(sc, addr) & ~clr) | set));
  616 }
  617 
  618 static __inline int
  619 rtwn_setbits_4(struct rtwn_softc *sc, uint16_t addr, uint32_t clr,
  620     uint32_t set)
  621 {
  622         return (rtwn_write_4(sc, addr,
  623             (rtwn_read_4(sc, addr) & ~clr) | set));
  624 }
  625 
  626 static __inline void
  627 rtwn_rf_setbits(struct rtwn_softc *sc, int chain, uint8_t addr,
  628     uint32_t clr, uint32_t set)
  629 {
  630         rtwn_rf_write(sc, chain, addr,
  631             (rtwn_rf_read(sc, chain, addr) & ~clr) | set);
  632 }
  633 
  634 #endif  /* IF_RTWNVAR_H */

Cache object: e235698dcfa9e64f80e682d33c7e4799


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