1*37ecb596Sderaadt /* $OpenBSD: rt2560var.h,v 1.11 2013/12/06 21:03:03 deraadt Exp $ */ 2189ff541Sdamien 3189ff541Sdamien /*- 4189ff541Sdamien * Copyright (c) 2005, 2006 5189ff541Sdamien * Damien Bergamini <damien.bergamini@free.fr> 6189ff541Sdamien * 7189ff541Sdamien * Permission to use, copy, modify, and distribute this software for any 8189ff541Sdamien * purpose with or without fee is hereby granted, provided that the above 9189ff541Sdamien * copyright notice and this permission notice appear in all copies. 10189ff541Sdamien * 11189ff541Sdamien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12189ff541Sdamien * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13189ff541Sdamien * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14189ff541Sdamien * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15189ff541Sdamien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16189ff541Sdamien * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17189ff541Sdamien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18189ff541Sdamien */ 19189ff541Sdamien 20189ff541Sdamien struct rt2560_rx_radiotap_header { 21189ff541Sdamien struct ieee80211_radiotap_header wr_ihdr; 22189ff541Sdamien uint64_t wr_tsf; 23189ff541Sdamien uint8_t wr_flags; 242a5f0c51Sdamien uint8_t wr_rate; 25189ff541Sdamien uint16_t wr_chan_freq; 26189ff541Sdamien uint16_t wr_chan_flags; 27189ff541Sdamien uint8_t wr_antenna; 28189ff541Sdamien uint8_t wr_antsignal; 29189ff541Sdamien } __packed; 30189ff541Sdamien 31189ff541Sdamien #define RT2560_RX_RADIOTAP_PRESENT \ 32189ff541Sdamien ((1 << IEEE80211_RADIOTAP_TSFT) | \ 33189ff541Sdamien (1 << IEEE80211_RADIOTAP_FLAGS) | \ 342a5f0c51Sdamien (1 << IEEE80211_RADIOTAP_RATE) | \ 35189ff541Sdamien (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 36189ff541Sdamien (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 37189ff541Sdamien (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)) 38189ff541Sdamien 39189ff541Sdamien struct rt2560_tx_radiotap_header { 40189ff541Sdamien struct ieee80211_radiotap_header wt_ihdr; 41189ff541Sdamien uint8_t wt_flags; 42189ff541Sdamien uint8_t wt_rate; 43189ff541Sdamien uint16_t wt_chan_freq; 44189ff541Sdamien uint16_t wt_chan_flags; 45189ff541Sdamien uint8_t wt_antenna; 46189ff541Sdamien } __packed; 47189ff541Sdamien 48189ff541Sdamien #define RT2560_TX_RADIOTAP_PRESENT \ 49189ff541Sdamien ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 50189ff541Sdamien (1 << IEEE80211_RADIOTAP_RATE) | \ 51189ff541Sdamien (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 52189ff541Sdamien (1 << IEEE80211_RADIOTAP_ANTENNA)) 53189ff541Sdamien 54189ff541Sdamien struct rt2560_tx_data { 55189ff541Sdamien bus_dmamap_t map; 56189ff541Sdamien struct mbuf *m; 57189ff541Sdamien struct ieee80211_node *ni; 58189ff541Sdamien }; 59189ff541Sdamien 60189ff541Sdamien struct rt2560_tx_ring { 61189ff541Sdamien bus_dmamap_t map; 62189ff541Sdamien bus_dma_segment_t seg; 63189ff541Sdamien bus_addr_t physaddr; 64189ff541Sdamien struct rt2560_tx_desc *desc; 65189ff541Sdamien struct rt2560_tx_data *data; 66189ff541Sdamien int count; 67189ff541Sdamien int queued; 68189ff541Sdamien int cur; 69189ff541Sdamien int next; 70189ff541Sdamien int cur_encrypt; 71189ff541Sdamien int next_encrypt; 72189ff541Sdamien }; 73189ff541Sdamien 74189ff541Sdamien struct rt2560_rx_data { 75189ff541Sdamien bus_dmamap_t map; 76189ff541Sdamien struct mbuf *m; 77189ff541Sdamien int drop; 78189ff541Sdamien }; 79189ff541Sdamien 80189ff541Sdamien struct rt2560_rx_ring { 81189ff541Sdamien bus_dmamap_t map; 82189ff541Sdamien bus_dma_segment_t seg; 83189ff541Sdamien bus_addr_t physaddr; 84189ff541Sdamien struct rt2560_rx_desc *desc; 85189ff541Sdamien struct rt2560_rx_data *data; 86189ff541Sdamien int count; 87189ff541Sdamien int cur; 88189ff541Sdamien int next; 89189ff541Sdamien int cur_decrypt; 90189ff541Sdamien }; 91189ff541Sdamien 92189ff541Sdamien struct rt2560_node { 93189ff541Sdamien struct ieee80211_node ni; 948c71b0d2Sdamien struct ieee80211_amrr_node amn; 95189ff541Sdamien }; 96189ff541Sdamien 97189ff541Sdamien struct rt2560_softc { 98189ff541Sdamien struct device sc_dev; 99189ff541Sdamien 100189ff541Sdamien struct ieee80211com sc_ic; 101189ff541Sdamien int (*sc_newstate)(struct ieee80211com *, 102189ff541Sdamien enum ieee80211_state, int); 1038c71b0d2Sdamien struct ieee80211_amrr amrr; 104189ff541Sdamien 105189ff541Sdamien int (*sc_enable)(struct rt2560_softc *); 106189ff541Sdamien void (*sc_disable)(struct rt2560_softc *); 107189ff541Sdamien 108189ff541Sdamien bus_dma_tag_t sc_dmat; 109189ff541Sdamien bus_space_tag_t sc_st; 110189ff541Sdamien bus_space_handle_t sc_sh; 111189ff541Sdamien 1128c71b0d2Sdamien struct timeout scan_to; 1138c71b0d2Sdamien struct timeout amrr_to; 114189ff541Sdamien 115189ff541Sdamien int sc_flags; 116189ff541Sdamien #define RT2560_ENABLED (1 << 0) 1171aa65ad1Sdamien #define RT2560_UPDATE_SLOT (1 << 1) 1181aa65ad1Sdamien #define RT2560_SET_SLOTTIME (1 << 2) 119ef9ee4cbSstsp #define RT2560_PRIO_OACTIVE (1 << 3) 120ef9ee4cbSstsp #define RT2560_DATA_OACTIVE (1 << 4) 121189ff541Sdamien 122189ff541Sdamien int sc_tx_timer; 123189ff541Sdamien 124189ff541Sdamien uint32_t asic_rev; 125189ff541Sdamien uint8_t rf_rev; 126189ff541Sdamien 127189ff541Sdamien struct rt2560_tx_ring txq; 128189ff541Sdamien struct rt2560_tx_ring prioq; 129189ff541Sdamien struct rt2560_tx_ring atimq; 130189ff541Sdamien struct rt2560_tx_ring bcnq; 131189ff541Sdamien struct rt2560_rx_ring rxq; 132189ff541Sdamien 133189ff541Sdamien uint32_t rf_regs[4]; 134189ff541Sdamien uint8_t txpow[14]; 135189ff541Sdamien 136189ff541Sdamien struct { 137189ff541Sdamien uint8_t reg; 138189ff541Sdamien uint8_t val; 139189ff541Sdamien } bbp_prom[16]; 140189ff541Sdamien 141189ff541Sdamien int led_mode; 142189ff541Sdamien int hw_radio; 143189ff541Sdamien int rx_ant; 144189ff541Sdamien int tx_ant; 145189ff541Sdamien int nb_ant; 146189ff541Sdamien 1471aa65ad1Sdamien uint8_t *erp; 1481aa65ad1Sdamien 149189ff541Sdamien #if NBPFILTER > 0 150189ff541Sdamien caddr_t sc_drvbpf; 151189ff541Sdamien 152189ff541Sdamien union { 153189ff541Sdamien struct rt2560_rx_radiotap_header th; 154189ff541Sdamien uint8_t pad[64]; 155189ff541Sdamien } sc_rxtapu; 156189ff541Sdamien #define sc_rxtap sc_rxtapu.th 157189ff541Sdamien int sc_rxtap_len; 158189ff541Sdamien 159189ff541Sdamien union { 160189ff541Sdamien struct rt2560_tx_radiotap_header th; 161189ff541Sdamien uint8_t pad[64]; 162189ff541Sdamien } sc_txtapu; 163189ff541Sdamien #define sc_txtap sc_txtapu.th 164189ff541Sdamien int sc_txtap_len; 165189ff541Sdamien #endif 166189ff541Sdamien }; 167189ff541Sdamien 168189ff541Sdamien int rt2560_attach(void *, int); 169189ff541Sdamien int rt2560_detach(void *); 1700727ce2fSdamien void rt2560_suspend(void *); 171*37ecb596Sderaadt void rt2560_wakeup(void *); 172189ff541Sdamien int rt2560_intr(void *); 173