1*5fdff524SSepherosa Ziehau /* 2*5fdff524SSepherosa Ziehau * Copyright (c) 2005 3*5fdff524SSepherosa Ziehau * Damien Bergamini <damien.bergamini@free.fr> 4*5fdff524SSepherosa Ziehau * 5*5fdff524SSepherosa Ziehau * Permission to use, copy, modify, and distribute this software for any 6*5fdff524SSepherosa Ziehau * purpose with or without fee is hereby granted, provided that the above 7*5fdff524SSepherosa Ziehau * copyright notice and this permission notice appear in all copies. 8*5fdff524SSepherosa Ziehau * 9*5fdff524SSepherosa Ziehau * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*5fdff524SSepherosa Ziehau * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*5fdff524SSepherosa Ziehau * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*5fdff524SSepherosa Ziehau * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*5fdff524SSepherosa Ziehau * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*5fdff524SSepherosa Ziehau * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*5fdff524SSepherosa Ziehau * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*5fdff524SSepherosa Ziehau * 17*5fdff524SSepherosa Ziehau * $FreeBSD: src/sys/dev/ral/rt2661var.h,v 1.1 2006/03/05 20:36:56 damien Exp $ 18*5fdff524SSepherosa Ziehau * $DragonFly: src/sys/dev/netif/ral/rt2661var.h,v 1.1 2006/05/20 09:13:09 sephe Exp $ 19*5fdff524SSepherosa Ziehau */ 20*5fdff524SSepherosa Ziehau 21*5fdff524SSepherosa Ziehau struct rt2661_rx_radiotap_header { 22*5fdff524SSepherosa Ziehau struct ieee80211_radiotap_header wr_ihdr; 23*5fdff524SSepherosa Ziehau uint64_t wr_tsf; 24*5fdff524SSepherosa Ziehau uint8_t wr_flags; 25*5fdff524SSepherosa Ziehau uint8_t wr_rate; 26*5fdff524SSepherosa Ziehau uint16_t wr_chan_freq; 27*5fdff524SSepherosa Ziehau uint16_t wr_chan_flags; 28*5fdff524SSepherosa Ziehau uint8_t wr_antsignal; 29*5fdff524SSepherosa Ziehau } __packed; 30*5fdff524SSepherosa Ziehau 31*5fdff524SSepherosa Ziehau #define RT2661_RX_RADIOTAP_PRESENT \ 32*5fdff524SSepherosa Ziehau ((1 << IEEE80211_RADIOTAP_TSFT) | \ 33*5fdff524SSepherosa Ziehau (1 << IEEE80211_RADIOTAP_FLAGS) | \ 34*5fdff524SSepherosa Ziehau (1 << IEEE80211_RADIOTAP_RATE) | \ 35*5fdff524SSepherosa Ziehau (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 36*5fdff524SSepherosa Ziehau (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)) 37*5fdff524SSepherosa Ziehau 38*5fdff524SSepherosa Ziehau struct rt2661_tx_radiotap_header { 39*5fdff524SSepherosa Ziehau struct ieee80211_radiotap_header wt_ihdr; 40*5fdff524SSepherosa Ziehau uint8_t wt_flags; 41*5fdff524SSepherosa Ziehau uint8_t wt_rate; 42*5fdff524SSepherosa Ziehau uint16_t wt_chan_freq; 43*5fdff524SSepherosa Ziehau uint16_t wt_chan_flags; 44*5fdff524SSepherosa Ziehau } __packed; 45*5fdff524SSepherosa Ziehau 46*5fdff524SSepherosa Ziehau #define RT2661_TX_RADIOTAP_PRESENT \ 47*5fdff524SSepherosa Ziehau ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 48*5fdff524SSepherosa Ziehau (1 << IEEE80211_RADIOTAP_RATE) | \ 49*5fdff524SSepherosa Ziehau (1 << IEEE80211_RADIOTAP_CHANNEL)) 50*5fdff524SSepherosa Ziehau 51*5fdff524SSepherosa Ziehau struct rt2661_tx_data { 52*5fdff524SSepherosa Ziehau bus_dmamap_t map; 53*5fdff524SSepherosa Ziehau struct mbuf *m; 54*5fdff524SSepherosa Ziehau struct ieee80211_node *ni; 55*5fdff524SSepherosa Ziehau struct ral_rssdesc id; 56*5fdff524SSepherosa Ziehau }; 57*5fdff524SSepherosa Ziehau 58*5fdff524SSepherosa Ziehau struct rt2661_tx_ring { 59*5fdff524SSepherosa Ziehau bus_dma_tag_t desc_dmat; 60*5fdff524SSepherosa Ziehau bus_dma_tag_t data_dmat; 61*5fdff524SSepherosa Ziehau bus_dmamap_t desc_map; 62*5fdff524SSepherosa Ziehau bus_addr_t physaddr; 63*5fdff524SSepherosa Ziehau struct rt2661_tx_desc *desc; 64*5fdff524SSepherosa Ziehau struct rt2661_tx_data *data; 65*5fdff524SSepherosa Ziehau int count; 66*5fdff524SSepherosa Ziehau int queued; 67*5fdff524SSepherosa Ziehau int cur; 68*5fdff524SSepherosa Ziehau int next; 69*5fdff524SSepherosa Ziehau int stat; 70*5fdff524SSepherosa Ziehau }; 71*5fdff524SSepherosa Ziehau 72*5fdff524SSepherosa Ziehau struct rt2661_rx_data { 73*5fdff524SSepherosa Ziehau bus_dmamap_t map; 74*5fdff524SSepherosa Ziehau struct mbuf *m; 75*5fdff524SSepherosa Ziehau }; 76*5fdff524SSepherosa Ziehau 77*5fdff524SSepherosa Ziehau struct rt2661_rx_ring { 78*5fdff524SSepherosa Ziehau bus_dma_tag_t desc_dmat; 79*5fdff524SSepherosa Ziehau bus_dma_tag_t data_dmat; 80*5fdff524SSepherosa Ziehau bus_dmamap_t desc_map; 81*5fdff524SSepherosa Ziehau bus_addr_t physaddr; 82*5fdff524SSepherosa Ziehau struct rt2661_rx_desc *desc; 83*5fdff524SSepherosa Ziehau struct rt2661_rx_data *data; 84*5fdff524SSepherosa Ziehau int count; 85*5fdff524SSepherosa Ziehau int cur; 86*5fdff524SSepherosa Ziehau int next; 87*5fdff524SSepherosa Ziehau }; 88*5fdff524SSepherosa Ziehau 89*5fdff524SSepherosa Ziehau struct rt2661_node { 90*5fdff524SSepherosa Ziehau struct ieee80211_node ni; 91*5fdff524SSepherosa Ziehau struct ral_rssadapt rssadapt; 92*5fdff524SSepherosa Ziehau }; 93*5fdff524SSepherosa Ziehau 94*5fdff524SSepherosa Ziehau struct rt2661_softc { 95*5fdff524SSepherosa Ziehau struct ieee80211com sc_ic; 96*5fdff524SSepherosa Ziehau bus_space_tag_t sc_st; 97*5fdff524SSepherosa Ziehau bus_space_handle_t sc_sh; 98*5fdff524SSepherosa Ziehau device_t sc_dev; 99*5fdff524SSepherosa Ziehau 100*5fdff524SSepherosa Ziehau int sc_irq_rid; 101*5fdff524SSepherosa Ziehau struct resource *sc_irq; 102*5fdff524SSepherosa Ziehau void *sc_ih; 103*5fdff524SSepherosa Ziehau 104*5fdff524SSepherosa Ziehau int (*sc_newstate)(struct ieee80211com *, 105*5fdff524SSepherosa Ziehau enum ieee80211_state, int); 106*5fdff524SSepherosa Ziehau 107*5fdff524SSepherosa Ziehau struct callout scan_ch; 108*5fdff524SSepherosa Ziehau struct callout rssadapt_ch; 109*5fdff524SSepherosa Ziehau 110*5fdff524SSepherosa Ziehau int sc_tx_timer; 111*5fdff524SSepherosa Ziehau 112*5fdff524SSepherosa Ziehau struct ieee80211_channel *sc_curchan; 113*5fdff524SSepherosa Ziehau 114*5fdff524SSepherosa Ziehau uint8_t rf_rev; 115*5fdff524SSepherosa Ziehau 116*5fdff524SSepherosa Ziehau uint8_t rfprog; 117*5fdff524SSepherosa Ziehau uint8_t rffreq; 118*5fdff524SSepherosa Ziehau 119*5fdff524SSepherosa Ziehau struct rt2661_tx_ring txq[4]; 120*5fdff524SSepherosa Ziehau struct rt2661_tx_ring mgtq; 121*5fdff524SSepherosa Ziehau struct rt2661_rx_ring rxq; 122*5fdff524SSepherosa Ziehau 123*5fdff524SSepherosa Ziehau uint32_t rf_regs[4]; 124*5fdff524SSepherosa Ziehau int8_t txpow[38]; 125*5fdff524SSepherosa Ziehau 126*5fdff524SSepherosa Ziehau struct { 127*5fdff524SSepherosa Ziehau uint8_t reg; 128*5fdff524SSepherosa Ziehau uint8_t val; 129*5fdff524SSepherosa Ziehau } bbp_prom[16]; 130*5fdff524SSepherosa Ziehau 131*5fdff524SSepherosa Ziehau int hw_radio; 132*5fdff524SSepherosa Ziehau int rx_ant; 133*5fdff524SSepherosa Ziehau int tx_ant; 134*5fdff524SSepherosa Ziehau int nb_ant; 135*5fdff524SSepherosa Ziehau int ext_2ghz_lna; 136*5fdff524SSepherosa Ziehau int ext_5ghz_lna; 137*5fdff524SSepherosa Ziehau int rssi_2ghz_corr; 138*5fdff524SSepherosa Ziehau int rssi_5ghz_corr; 139*5fdff524SSepherosa Ziehau 140*5fdff524SSepherosa Ziehau uint8_t bbp18; 141*5fdff524SSepherosa Ziehau uint8_t bbp21; 142*5fdff524SSepherosa Ziehau uint8_t bbp22; 143*5fdff524SSepherosa Ziehau uint8_t bbp16; 144*5fdff524SSepherosa Ziehau uint8_t bbp17; 145*5fdff524SSepherosa Ziehau uint8_t bbp64; 146*5fdff524SSepherosa Ziehau 147*5fdff524SSepherosa Ziehau int dwelltime; 148*5fdff524SSepherosa Ziehau 149*5fdff524SSepherosa Ziehau struct bpf_if *sc_drvbpf; 150*5fdff524SSepherosa Ziehau 151*5fdff524SSepherosa Ziehau union { 152*5fdff524SSepherosa Ziehau struct rt2661_rx_radiotap_header th; 153*5fdff524SSepherosa Ziehau uint8_t pad[64]; 154*5fdff524SSepherosa Ziehau } sc_rxtapu; 155*5fdff524SSepherosa Ziehau #define sc_rxtap sc_rxtapu.th 156*5fdff524SSepherosa Ziehau int sc_rxtap_len; 157*5fdff524SSepherosa Ziehau 158*5fdff524SSepherosa Ziehau union { 159*5fdff524SSepherosa Ziehau struct rt2661_tx_radiotap_header th; 160*5fdff524SSepherosa Ziehau uint8_t pad[64]; 161*5fdff524SSepherosa Ziehau } sc_txtapu; 162*5fdff524SSepherosa Ziehau #define sc_txtap sc_txtapu.th 163*5fdff524SSepherosa Ziehau int sc_txtap_len; 164*5fdff524SSepherosa Ziehau 165*5fdff524SSepherosa Ziehau struct sysctl_ctx_list sysctl_ctx; 166*5fdff524SSepherosa Ziehau struct sysctl_oid *sysctl_tree; 167*5fdff524SSepherosa Ziehau }; 168*5fdff524SSepherosa Ziehau 169*5fdff524SSepherosa Ziehau int rt2661_attach(device_t, int); 170*5fdff524SSepherosa Ziehau int rt2661_detach(void *); 171*5fdff524SSepherosa Ziehau void rt2661_shutdown(void *); 172*5fdff524SSepherosa Ziehau void rt2661_suspend(void *); 173*5fdff524SSepherosa Ziehau void rt2661_resume(void *); 174