1*9983SFei.Feng@Sun.COM /* 2*9983SFei.Feng@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 3*9983SFei.Feng@Sun.COM * Use is subject to license terms. 4*9983SFei.Feng@Sun.COM */ 5*9983SFei.Feng@Sun.COM 6*9983SFei.Feng@Sun.COM /* 7*9983SFei.Feng@Sun.COM * Copyright (c) 2006 8*9983SFei.Feng@Sun.COM * Damien Bergamini <damien.bergamini@free.fr> 9*9983SFei.Feng@Sun.COM * 10*9983SFei.Feng@Sun.COM * Permission to use, copy, modify, and distribute this software for any 11*9983SFei.Feng@Sun.COM * purpose with or without fee is hereby granted, provided that the above 12*9983SFei.Feng@Sun.COM * copyright notice and this permission notice appear in all copies. 13*9983SFei.Feng@Sun.COM * 14*9983SFei.Feng@Sun.COM * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 15*9983SFei.Feng@Sun.COM * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 16*9983SFei.Feng@Sun.COM * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 17*9983SFei.Feng@Sun.COM * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 18*9983SFei.Feng@Sun.COM * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19*9983SFei.Feng@Sun.COM * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20*9983SFei.Feng@Sun.COM * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21*9983SFei.Feng@Sun.COM */ 22*9983SFei.Feng@Sun.COM 23*9983SFei.Feng@Sun.COM #ifndef _RT2661_VAR_H 24*9983SFei.Feng@Sun.COM #define _RT2661_VAR_H 25*9983SFei.Feng@Sun.COM 26*9983SFei.Feng@Sun.COM #ifdef __cplusplus 27*9983SFei.Feng@Sun.COM extern "C" { 28*9983SFei.Feng@Sun.COM #endif 29*9983SFei.Feng@Sun.COM 30*9983SFei.Feng@Sun.COM struct dma_area { 31*9983SFei.Feng@Sun.COM ddi_acc_handle_t acc_hdl; /* handle for memory */ 32*9983SFei.Feng@Sun.COM caddr_t mem_va; /* CPU VA of memory */ 33*9983SFei.Feng@Sun.COM uint32_t nslots; /* number of slots */ 34*9983SFei.Feng@Sun.COM uint32_t size; /* size per slot */ 35*9983SFei.Feng@Sun.COM size_t alength; /* allocated size */ 36*9983SFei.Feng@Sun.COM 37*9983SFei.Feng@Sun.COM ddi_dma_handle_t dma_hdl; /* DMA handle */ 38*9983SFei.Feng@Sun.COM offset_t offset; /* relative to handle */ 39*9983SFei.Feng@Sun.COM ddi_dma_cookie_t cookie; /* associated cookie */ 40*9983SFei.Feng@Sun.COM uint32_t ncookies; /* must be 1 */ 41*9983SFei.Feng@Sun.COM uint32_t token; /* arbitrary identifier */ 42*9983SFei.Feng@Sun.COM }; 43*9983SFei.Feng@Sun.COM 44*9983SFei.Feng@Sun.COM struct rt2661_tx_data { 45*9983SFei.Feng@Sun.COM struct dma_area txdata_dma; 46*9983SFei.Feng@Sun.COM caddr_t buf; 47*9983SFei.Feng@Sun.COM uint32_t paddr; 48*9983SFei.Feng@Sun.COM struct ieee80211_node *ni; 49*9983SFei.Feng@Sun.COM }; 50*9983SFei.Feng@Sun.COM 51*9983SFei.Feng@Sun.COM struct rt2661_tx_ring { 52*9983SFei.Feng@Sun.COM struct dma_area txdesc_dma; 53*9983SFei.Feng@Sun.COM uint32_t paddr; 54*9983SFei.Feng@Sun.COM struct rt2661_tx_desc *desc; 55*9983SFei.Feng@Sun.COM struct rt2661_tx_data *data; 56*9983SFei.Feng@Sun.COM int count; 57*9983SFei.Feng@Sun.COM int queued; 58*9983SFei.Feng@Sun.COM int cur; 59*9983SFei.Feng@Sun.COM int next; 60*9983SFei.Feng@Sun.COM int stat; 61*9983SFei.Feng@Sun.COM }; 62*9983SFei.Feng@Sun.COM 63*9983SFei.Feng@Sun.COM struct rt2661_rx_data { 64*9983SFei.Feng@Sun.COM struct dma_area rxdata_dma; 65*9983SFei.Feng@Sun.COM caddr_t buf; 66*9983SFei.Feng@Sun.COM uint32_t paddr; 67*9983SFei.Feng@Sun.COM }; 68*9983SFei.Feng@Sun.COM 69*9983SFei.Feng@Sun.COM struct rt2661_rx_ring { 70*9983SFei.Feng@Sun.COM struct dma_area rxdesc_dma; 71*9983SFei.Feng@Sun.COM uint32_t paddr; 72*9983SFei.Feng@Sun.COM struct rt2661_rx_desc *desc; 73*9983SFei.Feng@Sun.COM struct rt2661_rx_data *data; 74*9983SFei.Feng@Sun.COM int count; 75*9983SFei.Feng@Sun.COM int cur; 76*9983SFei.Feng@Sun.COM int next; 77*9983SFei.Feng@Sun.COM }; 78*9983SFei.Feng@Sun.COM 79*9983SFei.Feng@Sun.COM struct rt2661_amrr { 80*9983SFei.Feng@Sun.COM uint_t amrr_min_success_threshold; 81*9983SFei.Feng@Sun.COM uint_t amrr_max_success_threshold; 82*9983SFei.Feng@Sun.COM }; 83*9983SFei.Feng@Sun.COM 84*9983SFei.Feng@Sun.COM struct rt2661_amrr_node { 85*9983SFei.Feng@Sun.COM int amn_success; 86*9983SFei.Feng@Sun.COM int amn_recovery; 87*9983SFei.Feng@Sun.COM int amn_success_threshold; 88*9983SFei.Feng@Sun.COM int amn_txcnt; 89*9983SFei.Feng@Sun.COM int amn_retrycnt; 90*9983SFei.Feng@Sun.COM }; 91*9983SFei.Feng@Sun.COM 92*9983SFei.Feng@Sun.COM struct rt2661_node { 93*9983SFei.Feng@Sun.COM struct ieee80211_node ni; 94*9983SFei.Feng@Sun.COM struct rt2661_amrr_node amn; 95*9983SFei.Feng@Sun.COM }; 96*9983SFei.Feng@Sun.COM 97*9983SFei.Feng@Sun.COM struct rt2661_softc { 98*9983SFei.Feng@Sun.COM struct ieee80211com sc_ic; 99*9983SFei.Feng@Sun.COM dev_info_t *sc_dev; 100*9983SFei.Feng@Sun.COM 101*9983SFei.Feng@Sun.COM /* ddi reg handler */ 102*9983SFei.Feng@Sun.COM ddi_acc_handle_t sc_cfg_handle; 103*9983SFei.Feng@Sun.COM caddr_t sc_cfg_base; 104*9983SFei.Feng@Sun.COM 105*9983SFei.Feng@Sun.COM /* ddi i/o handler */ 106*9983SFei.Feng@Sun.COM ddi_acc_handle_t sc_io_handle; 107*9983SFei.Feng@Sun.COM caddr_t sc_io_base; 108*9983SFei.Feng@Sun.COM 109*9983SFei.Feng@Sun.COM uint16_t sc_cachelsz; 110*9983SFei.Feng@Sun.COM uint32_t sc_dmabuf_size; 111*9983SFei.Feng@Sun.COM 112*9983SFei.Feng@Sun.COM struct rt2661_amrr amrr; 113*9983SFei.Feng@Sun.COM 114*9983SFei.Feng@Sun.COM struct rt2661_tx_ring txq[4]; 115*9983SFei.Feng@Sun.COM struct rt2661_tx_ring mgtq; 116*9983SFei.Feng@Sun.COM struct rt2661_rx_ring rxq; 117*9983SFei.Feng@Sun.COM 118*9983SFei.Feng@Sun.COM /* interrupt */ 119*9983SFei.Feng@Sun.COM ddi_iblock_cookie_t sc_iblock; 120*9983SFei.Feng@Sun.COM ddi_softint_handle_t sc_softintr_hdl; 121*9983SFei.Feng@Sun.COM ddi_intr_handle_t *sc_intr_htable; 122*9983SFei.Feng@Sun.COM uint_t sc_intr_pri; 123*9983SFei.Feng@Sun.COM 124*9983SFei.Feng@Sun.COM kmutex_t sc_genlock; 125*9983SFei.Feng@Sun.COM kmutex_t sc_txlock; 126*9983SFei.Feng@Sun.COM kmutex_t sc_rxlock; 127*9983SFei.Feng@Sun.COM 128*9983SFei.Feng@Sun.COM int sc_tx_timer; 129*9983SFei.Feng@Sun.COM uint32_t sc_rx_pend; 130*9983SFei.Feng@Sun.COM timeout_id_t sc_scan_id; 131*9983SFei.Feng@Sun.COM timeout_id_t sc_rssadapt_id; 132*9983SFei.Feng@Sun.COM timeout_id_t sc_stat_id; 133*9983SFei.Feng@Sun.COM enum ieee80211_state sc_ostate; 134*9983SFei.Feng@Sun.COM 135*9983SFei.Feng@Sun.COM struct ieee80211_channel *sc_curchan; 136*9983SFei.Feng@Sun.COM 137*9983SFei.Feng@Sun.COM uint8_t rf_rev; 138*9983SFei.Feng@Sun.COM uint8_t rfprog; 139*9983SFei.Feng@Sun.COM uint8_t rffreq; 140*9983SFei.Feng@Sun.COM 141*9983SFei.Feng@Sun.COM uint32_t rf_regs[4]; 142*9983SFei.Feng@Sun.COM int8_t txpow[38]; 143*9983SFei.Feng@Sun.COM 144*9983SFei.Feng@Sun.COM struct { 145*9983SFei.Feng@Sun.COM uint8_t reg; 146*9983SFei.Feng@Sun.COM uint8_t val; 147*9983SFei.Feng@Sun.COM } bbp_prom[16]; 148*9983SFei.Feng@Sun.COM 149*9983SFei.Feng@Sun.COM 150*9983SFei.Feng@Sun.COM int hw_radio; 151*9983SFei.Feng@Sun.COM int rx_ant; 152*9983SFei.Feng@Sun.COM int tx_ant; 153*9983SFei.Feng@Sun.COM int nb_ant; 154*9983SFei.Feng@Sun.COM int ext_2ghz_lna; 155*9983SFei.Feng@Sun.COM int ext_5ghz_lna; 156*9983SFei.Feng@Sun.COM int rssi_2ghz_corr; 157*9983SFei.Feng@Sun.COM int rssi_5ghz_corr; 158*9983SFei.Feng@Sun.COM 159*9983SFei.Feng@Sun.COM int ncalls; 160*9983SFei.Feng@Sun.COM int avg_rssi; 161*9983SFei.Feng@Sun.COM int sifs; 162*9983SFei.Feng@Sun.COM uint8_t bbp18; 163*9983SFei.Feng@Sun.COM uint8_t bbp21; 164*9983SFei.Feng@Sun.COM uint8_t bbp22; 165*9983SFei.Feng@Sun.COM uint8_t bbp16; 166*9983SFei.Feng@Sun.COM uint8_t bbp17; 167*9983SFei.Feng@Sun.COM uint8_t bbp64; 168*9983SFei.Feng@Sun.COM 169*9983SFei.Feng@Sun.COM /* kstats */ 170*9983SFei.Feng@Sun.COM uint32_t sc_tx_nobuf; 171*9983SFei.Feng@Sun.COM uint32_t sc_rx_nobuf; 172*9983SFei.Feng@Sun.COM uint32_t sc_tx_err; 173*9983SFei.Feng@Sun.COM uint32_t sc_rx_err; 174*9983SFei.Feng@Sun.COM uint32_t sc_tx_retries; 175*9983SFei.Feng@Sun.COM 176*9983SFei.Feng@Sun.COM uint32_t sc_need_sched; 177*9983SFei.Feng@Sun.COM uint32_t sc_flags; 178*9983SFei.Feng@Sun.COM uint32_t sc_rcr; 179*9983SFei.Feng@Sun.COM int (*sc_newstate)(struct ieee80211com *, 180*9983SFei.Feng@Sun.COM enum ieee80211_state, int); 181*9983SFei.Feng@Sun.COM }; 182*9983SFei.Feng@Sun.COM 183*9983SFei.Feng@Sun.COM #define RT2661_GLOCK(_sc) mutex_enter(&(_sc)->sc_genlock) 184*9983SFei.Feng@Sun.COM #define RT2661_GUNLOCK(_sc) mutex_exit(&(_sc)->sc_genlock) 185*9983SFei.Feng@Sun.COM 186*9983SFei.Feng@Sun.COM #define RT2661_INPUT_RUNNING (1 << 0) 187*9983SFei.Feng@Sun.COM #define RT2661_F_RUNNING (1 << 1) 188*9983SFei.Feng@Sun.COM #define RT2661_F_SUSPEND (1 << 2) 189*9983SFei.Feng@Sun.COM #define RT2661_F_FWLOADED (1 << 3) 190*9983SFei.Feng@Sun.COM #define RT2661_F_QUIESCE (1 << 4) 191*9983SFei.Feng@Sun.COM 192*9983SFei.Feng@Sun.COM #define RT2661_RCR_PROMISC (1 << 0) 193*9983SFei.Feng@Sun.COM #define RT2661_RCR_MULTI (1 << 1) 194*9983SFei.Feng@Sun.COM 195*9983SFei.Feng@Sun.COM #define RT2661_IS_RUNNING(_sc) (((_sc)->sc_flags & RT2661_F_RUNNING)) 196*9983SFei.Feng@Sun.COM #define RT2661_IS_SUSPEND(_sc) (((_sc)->sc_flags & RT2661_F_SUSPEND)) 197*9983SFei.Feng@Sun.COM #define RT2661_IS_FWLOADED(_sc) (((_sc)->sc_flags & RT2661_F_FWLOADED)) 198*9983SFei.Feng@Sun.COM #define RT2661_IS_FASTREBOOT(_sc) (((_sc)->sc_flags & RT2661_F_QUIESCE)) 199*9983SFei.Feng@Sun.COM 200*9983SFei.Feng@Sun.COM #define RT2661_DMA_SYNC(area, flag) ((void) ddi_dma_sync((area).dma_hdl,\ 201*9983SFei.Feng@Sun.COM (area).offset, (area).alength, (flag))) 202*9983SFei.Feng@Sun.COM 203*9983SFei.Feng@Sun.COM #define RT2661_SUCCESS 0 204*9983SFei.Feng@Sun.COM #define RT2661_FAILURE -1 205*9983SFei.Feng@Sun.COM 206*9983SFei.Feng@Sun.COM #ifdef __cplusplus 207*9983SFei.Feng@Sun.COM } 208*9983SFei.Feng@Sun.COM #endif 209*9983SFei.Feng@Sun.COM 210*9983SFei.Feng@Sun.COM #endif /* _RT2661_VAR_H */ 211