rt2560var.h revision 192468
1156321Sdamien/* $FreeBSD: head/sys/dev/ral/rt2560var.h 192468 2009-05-20 20:00:40Z sam $ */ 2156321Sdamien 3156321Sdamien/*- 4156321Sdamien * Copyright (c) 2005, 2006 5156321Sdamien * Damien Bergamini <damien.bergamini@free.fr> 6156321Sdamien * 7156321Sdamien * Permission to use, copy, modify, and distribute this software for any 8156321Sdamien * purpose with or without fee is hereby granted, provided that the above 9156321Sdamien * copyright notice and this permission notice appear in all copies. 10156321Sdamien * 11156321Sdamien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12156321Sdamien * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13156321Sdamien * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14156321Sdamien * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15156321Sdamien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16156321Sdamien * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17156321Sdamien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18156321Sdamien */ 19156321Sdamien 20156321Sdamienstruct rt2560_rx_radiotap_header { 21156321Sdamien struct ieee80211_radiotap_header wr_ihdr; 22156321Sdamien uint64_t wr_tsf; 23156321Sdamien uint8_t wr_flags; 24156321Sdamien uint8_t wr_rate; 25156321Sdamien uint16_t wr_chan_freq; 26156321Sdamien uint16_t wr_chan_flags; 27192468Ssam int8_t wr_antsignal; 28192468Ssam int8_t wr_antnoise; 29156321Sdamien uint8_t wr_antenna; 30156321Sdamien}; 31156321Sdamien 32156321Sdamien#define RT2560_RX_RADIOTAP_PRESENT \ 33156321Sdamien ((1 << IEEE80211_RADIOTAP_TSFT) | \ 34156321Sdamien (1 << IEEE80211_RADIOTAP_FLAGS) | \ 35156321Sdamien (1 << IEEE80211_RADIOTAP_RATE) | \ 36156321Sdamien (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 37156321Sdamien (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 38192468Ssam (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \ 39192468Ssam (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE)) 40156321Sdamien 41156321Sdamienstruct rt2560_tx_radiotap_header { 42156321Sdamien struct ieee80211_radiotap_header wt_ihdr; 43156321Sdamien uint8_t wt_flags; 44156321Sdamien uint8_t wt_rate; 45156321Sdamien uint16_t wt_chan_freq; 46156321Sdamien uint16_t wt_chan_flags; 47156321Sdamien uint8_t wt_antenna; 48156321Sdamien}; 49156321Sdamien 50156321Sdamien#define RT2560_TX_RADIOTAP_PRESENT \ 51156321Sdamien ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 52156321Sdamien (1 << IEEE80211_RADIOTAP_RATE) | \ 53156321Sdamien (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 54156321Sdamien (1 << IEEE80211_RADIOTAP_ANTENNA)) 55156321Sdamien 56156321Sdamienstruct rt2560_tx_data { 57156321Sdamien bus_dmamap_t map; 58156321Sdamien struct mbuf *m; 59156321Sdamien struct ieee80211_node *ni; 60178354Ssam uint8_t rix; 61178354Ssam int8_t rssi; 62156321Sdamien}; 63156321Sdamien 64156321Sdamienstruct rt2560_tx_ring { 65156321Sdamien bus_dma_tag_t desc_dmat; 66156321Sdamien bus_dma_tag_t data_dmat; 67156321Sdamien bus_dmamap_t desc_map; 68156321Sdamien bus_addr_t physaddr; 69156321Sdamien struct rt2560_tx_desc *desc; 70156321Sdamien struct rt2560_tx_data *data; 71156321Sdamien int count; 72156321Sdamien int queued; 73156321Sdamien int cur; 74156321Sdamien int next; 75156321Sdamien int cur_encrypt; 76156321Sdamien int next_encrypt; 77156321Sdamien}; 78156321Sdamien 79156321Sdamienstruct rt2560_rx_data { 80156321Sdamien bus_dmamap_t map; 81156321Sdamien struct mbuf *m; 82156321Sdamien int drop; 83156321Sdamien}; 84156321Sdamien 85156321Sdamienstruct rt2560_rx_ring { 86156321Sdamien bus_dma_tag_t desc_dmat; 87156321Sdamien bus_dma_tag_t data_dmat; 88156321Sdamien bus_dmamap_t desc_map; 89156321Sdamien bus_addr_t physaddr; 90156321Sdamien struct rt2560_rx_desc *desc; 91156321Sdamien struct rt2560_rx_data *data; 92156321Sdamien int count; 93156321Sdamien int cur; 94156321Sdamien int next; 95156321Sdamien int cur_decrypt; 96156321Sdamien}; 97156321Sdamien 98156321Sdamienstruct rt2560_node { 99156321Sdamien struct ieee80211_node ni; 100178354Ssam struct ieee80211_amrr_node amrr; 101156321Sdamien}; 102178354Ssam#define RT2560_NODE(ni) ((struct rt2560_node *)(ni)) 103156321Sdamien 104178354Ssamstruct rt2560_vap { 105178354Ssam struct ieee80211vap ral_vap; 106178354Ssam struct ieee80211_beacon_offsets ral_bo; 107178354Ssam struct ieee80211_amrr amrr; 108178354Ssam 109178354Ssam int (*ral_newstate)(struct ieee80211vap *, 110178354Ssam enum ieee80211_state, int); 111178354Ssam}; 112178354Ssam#define RT2560_VAP(vap) ((struct rt2560_vap *)(vap)) 113178354Ssam 114156321Sdamienstruct rt2560_softc { 115156321Sdamien struct ifnet *sc_ifp; 116156321Sdamien device_t sc_dev; 117156321Sdamien bus_space_tag_t sc_st; 118156321Sdamien bus_space_handle_t sc_sh; 119156321Sdamien 120156321Sdamien struct mtx sc_mtx; 121156321Sdamien 122165352Sbms struct callout watchdog_ch; 123156321Sdamien 124156321Sdamien int sc_tx_timer; 125170530Ssam int sc_invalid; 126178354Ssam int sc_debug; 127170530Ssam/* 128170530Ssam * The same in both up to here 129170530Ssam * ------------------------------------------------ 130170530Ssam */ 131156321Sdamien uint32_t asic_rev; 132156321Sdamien uint32_t eeprom_rev; 133156321Sdamien uint8_t rf_rev; 134170530Ssam uint8_t rssi_corr; 135156321Sdamien 136156321Sdamien struct rt2560_tx_ring txq; 137156321Sdamien struct rt2560_tx_ring prioq; 138156321Sdamien struct rt2560_tx_ring atimq; 139156321Sdamien struct rt2560_tx_ring bcnq; 140156321Sdamien struct rt2560_rx_ring rxq; 141156321Sdamien 142156321Sdamien uint32_t rf_regs[4]; 143156321Sdamien uint8_t txpow[14]; 144156321Sdamien 145156321Sdamien struct { 146156321Sdamien uint8_t reg; 147156321Sdamien uint8_t val; 148156321Sdamien } bbp_prom[16]; 149156321Sdamien 150156321Sdamien int led_mode; 151156321Sdamien int hw_radio; 152156321Sdamien int rx_ant; 153156321Sdamien int tx_ant; 154156321Sdamien int nb_ant; 155156321Sdamien 156178354Ssam struct rt2560_rx_radiotap_header sc_rxtap; 157156321Sdamien int sc_rxtap_len; 158156321Sdamien 159178354Ssam struct rt2560_tx_radiotap_header sc_txtap; 160156321Sdamien int sc_txtap_len; 161175938Ssephe#define RT2560_F_INPUT_RUNNING 0x1 162175938Ssephe#define RT2560_F_PRIO_OACTIVE 0x2 163175938Ssephe#define RT2560_F_DATA_OACTIVE 0x4 164175938Ssephe int sc_flags; 165156321Sdamien}; 166156321Sdamien 167156321Sdamienint rt2560_attach(device_t, int); 168156321Sdamienint rt2560_detach(void *); 169170530Ssamvoid rt2560_stop(void *); 170156321Sdamienvoid rt2560_resume(void *); 171156321Sdamienvoid rt2560_intr(void *); 172156321Sdamien 173178354Ssam#define RAL_LOCK(sc) mtx_lock(&(sc)->sc_mtx) 174178354Ssam#define RAL_LOCK_ASSERT(sc) mtx_assert(&(sc)->sc_mtx, MA_OWNED) 175178354Ssam#define RAL_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx) 176