1156321Sdamien/* $FreeBSD: stable/11/sys/dev/ral/rt2560var.h 345636 2019-03-28 09:50:25Z avos $ */ 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; 30345636Savos} __packed __aligned(8); 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; 48345636Savos} __packed; 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 98178354Ssamstruct rt2560_vap { 99178354Ssam struct ieee80211vap ral_vap; 100178354Ssam 101178354Ssam int (*ral_newstate)(struct ieee80211vap *, 102178354Ssam enum ieee80211_state, int); 103178354Ssam}; 104178354Ssam#define RT2560_VAP(vap) ((struct rt2560_vap *)(vap)) 105178354Ssam 106156321Sdamienstruct rt2560_softc { 107287197Sglebius struct ieee80211com sc_ic; 108287197Sglebius struct mtx sc_mtx; 109287197Sglebius struct mbufq sc_snd; 110156321Sdamien device_t sc_dev; 111156321Sdamien bus_space_tag_t sc_st; 112156321Sdamien bus_space_handle_t sc_sh; 113156321Sdamien 114165352Sbms struct callout watchdog_ch; 115156321Sdamien 116156321Sdamien int sc_tx_timer; 117170530Ssam int sc_invalid; 118178354Ssam int sc_debug; 119170530Ssam/* 120170530Ssam * The same in both up to here 121170530Ssam * ------------------------------------------------ 122170530Ssam */ 123156321Sdamien uint32_t asic_rev; 124156321Sdamien uint32_t eeprom_rev; 125156321Sdamien uint8_t rf_rev; 126170530Ssam uint8_t rssi_corr; 127156321Sdamien 128156321Sdamien struct rt2560_tx_ring txq; 129156321Sdamien struct rt2560_tx_ring prioq; 130156321Sdamien struct rt2560_tx_ring atimq; 131156321Sdamien struct rt2560_tx_ring bcnq; 132156321Sdamien struct rt2560_rx_ring rxq; 133156321Sdamien 134156321Sdamien uint32_t rf_regs[4]; 135156321Sdamien uint8_t txpow[14]; 136156321Sdamien 137156321Sdamien struct { 138156321Sdamien uint8_t reg; 139156321Sdamien uint8_t val; 140156321Sdamien } bbp_prom[16]; 141156321Sdamien 142156321Sdamien int led_mode; 143156321Sdamien int hw_radio; 144156321Sdamien int rx_ant; 145156321Sdamien int tx_ant; 146156321Sdamien int nb_ant; 147156321Sdamien 148178354Ssam struct rt2560_rx_radiotap_header sc_rxtap; 149289168Sadrian struct rt2560_tx_radiotap_header sc_txtap; 150156321Sdamien 151175938Ssephe#define RT2560_F_INPUT_RUNNING 0x1 152287197Sglebius#define RT2560_F_RUNNING 0x2 153175938Ssephe int sc_flags; 154156321Sdamien}; 155156321Sdamien 156156321Sdamienint rt2560_attach(device_t, int); 157156321Sdamienint rt2560_detach(void *); 158170530Ssamvoid rt2560_stop(void *); 159156321Sdamienvoid rt2560_resume(void *); 160156321Sdamienvoid rt2560_intr(void *); 161156321Sdamien 162178354Ssam#define RAL_LOCK(sc) mtx_lock(&(sc)->sc_mtx) 163178354Ssam#define RAL_LOCK_ASSERT(sc) mtx_assert(&(sc)->sc_mtx, MA_OWNED) 164178354Ssam#define RAL_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx) 165