1 1.9 gson /* $NetBSD: if_runvar.h,v 1.9 2020/06/06 13:53:43 gson Exp $ */ 2 1.1 nonaka /* $OpenBSD: if_runvar.h,v 1.8 2010/02/08 18:46:47 damien Exp $ */ 3 1.1 nonaka 4 1.1 nonaka /*- 5 1.1 nonaka * Copyright (c) 2008,2009 Damien Bergamini <damien.bergamini (at) free.fr> 6 1.1 nonaka * 7 1.1 nonaka * Permission to use, copy, modify, and distribute this software for any 8 1.1 nonaka * purpose with or without fee is hereby granted, provided that the above 9 1.1 nonaka * copyright notice and this permission notice appear in all copies. 10 1.1 nonaka * 11 1.1 nonaka * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 1.1 nonaka * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 1.1 nonaka * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 1.1 nonaka * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 1.1 nonaka * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 1.1 nonaka * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 1.1 nonaka * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 1.1 nonaka */ 19 1.1 nonaka 20 1.1 nonaka #define RUN_MAX_RXSZ \ 21 1.1 nonaka 4096 22 1.1 nonaka #if 0 23 1.2 skrll (sizeof(uint32_t) + \ 24 1.2 skrll sizeof(struct rt2860_rxwi) + \ 25 1.2 skrll sizeof(uint16_t) + \ 26 1.1 nonaka MCLBYTES + \ 27 1.2 skrll sizeof(struct rt2870_rxd)) 28 1.1 nonaka #endif 29 1.1 nonaka /* NB: "11" is the maximum number of padding bytes needed for Tx */ 30 1.1 nonaka #define RUN_MAX_TXSZ \ 31 1.2 skrll (sizeof(struct rt2870_txd) + \ 32 1.6 mlelstv sizeof(struct rt2860_txwi) + \ 33 1.1 nonaka MCLBYTES + 11) 34 1.1 nonaka 35 1.1 nonaka #define RUN_TX_TIMEOUT 5000 /* ms */ 36 1.1 nonaka 37 1.1 nonaka #define RUN_RX_RING_COUNT 1 38 1.1 nonaka #define RUN_TX_RING_COUNT 8 39 1.1 nonaka 40 1.6 mlelstv #define RT2870_WCID_MAX 64 41 1.1 nonaka #define RUN_AID2WCID(aid) ((aid) & 0xff) 42 1.1 nonaka 43 1.1 nonaka struct run_rx_radiotap_header { 44 1.1 nonaka struct ieee80211_radiotap_header wr_ihdr; 45 1.1 nonaka uint8_t wr_flags; 46 1.1 nonaka uint8_t wr_rate; 47 1.1 nonaka uint16_t wr_chan_freq; 48 1.1 nonaka uint16_t wr_chan_flags; 49 1.1 nonaka uint8_t wr_dbm_antsignal; 50 1.1 nonaka uint8_t wr_antenna; 51 1.1 nonaka uint8_t wr_antsignal; 52 1.5 mrg }; 53 1.1 nonaka 54 1.1 nonaka #define RUN_RX_RADIOTAP_PRESENT \ 55 1.1 nonaka (1 << IEEE80211_RADIOTAP_FLAGS | \ 56 1.1 nonaka 1 << IEEE80211_RADIOTAP_RATE | \ 57 1.1 nonaka 1 << IEEE80211_RADIOTAP_CHANNEL | \ 58 1.1 nonaka 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL | \ 59 1.1 nonaka 1 << IEEE80211_RADIOTAP_ANTENNA | \ 60 1.1 nonaka 1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) 61 1.1 nonaka 62 1.1 nonaka struct run_tx_radiotap_header { 63 1.1 nonaka struct ieee80211_radiotap_header wt_ihdr; 64 1.1 nonaka uint8_t wt_flags; 65 1.1 nonaka uint8_t wt_rate; 66 1.1 nonaka uint16_t wt_chan_freq; 67 1.1 nonaka uint16_t wt_chan_flags; 68 1.1 nonaka uint8_t wt_hwqueue; 69 1.5 mrg }; 70 1.1 nonaka 71 1.1 nonaka #define RUN_TX_RADIOTAP_PRESENT \ 72 1.1 nonaka (1 << IEEE80211_RADIOTAP_FLAGS | \ 73 1.1 nonaka 1 << IEEE80211_RADIOTAP_RATE | \ 74 1.1 nonaka 1 << IEEE80211_RADIOTAP_CHANNEL/* | \ 75 1.1 nonaka 1 << IEEE80211_RADIOTAP_HWQUEUE*/) 76 1.1 nonaka 77 1.1 nonaka struct run_softc; 78 1.1 nonaka 79 1.1 nonaka struct run_tx_data { 80 1.1 nonaka struct run_softc *sc; 81 1.2 skrll struct usbd_xfer *xfer; 82 1.1 nonaka uint8_t *buf; 83 1.1 nonaka uint8_t qid; 84 1.1 nonaka }; 85 1.1 nonaka 86 1.1 nonaka struct run_rx_data { 87 1.1 nonaka struct run_softc *sc; 88 1.2 skrll struct usbd_xfer *xfer; 89 1.1 nonaka uint8_t *buf; 90 1.1 nonaka }; 91 1.1 nonaka 92 1.1 nonaka struct run_tx_ring { 93 1.1 nonaka struct run_tx_data data[RUN_TX_RING_COUNT]; 94 1.2 skrll struct usbd_pipe * pipeh; 95 1.1 nonaka int cur; 96 1.7 mlelstv volatile unsigned queued; 97 1.1 nonaka uint8_t pipe_no; 98 1.1 nonaka }; 99 1.1 nonaka 100 1.1 nonaka struct run_rx_ring { 101 1.1 nonaka struct run_rx_data data[RUN_RX_RING_COUNT]; 102 1.2 skrll struct usbd_pipe * pipeh; 103 1.1 nonaka uint8_t pipe_no; 104 1.1 nonaka }; 105 1.1 nonaka 106 1.1 nonaka struct run_host_cmd { 107 1.1 nonaka void (*cb)(struct run_softc *, void *); 108 1.1 nonaka uint8_t data[256]; 109 1.1 nonaka }; 110 1.1 nonaka 111 1.1 nonaka struct run_cmd_newstate { 112 1.1 nonaka enum ieee80211_state state; 113 1.1 nonaka int arg; 114 1.1 nonaka }; 115 1.1 nonaka 116 1.1 nonaka struct run_cmd_key { 117 1.1 nonaka struct ieee80211_key key; 118 1.1 nonaka uint16_t associd; 119 1.1 nonaka }; 120 1.1 nonaka 121 1.1 nonaka #define RUN_HOST_CMD_RING_COUNT 32 122 1.1 nonaka struct run_host_cmd_ring { 123 1.1 nonaka struct run_host_cmd cmd[RUN_HOST_CMD_RING_COUNT]; 124 1.1 nonaka int cur; 125 1.1 nonaka int next; 126 1.1 nonaka int queued; 127 1.1 nonaka }; 128 1.1 nonaka 129 1.1 nonaka struct run_node { 130 1.1 nonaka struct ieee80211_node ni; 131 1.1 nonaka uint8_t ridx[IEEE80211_RATE_MAXSIZE]; 132 1.1 nonaka uint8_t ctl_ridx[IEEE80211_RATE_MAXSIZE]; 133 1.1 nonaka }; 134 1.1 nonaka 135 1.4 skrll #define RUN_MAXEPOUT 4 136 1.4 skrll 137 1.1 nonaka struct run_softc { 138 1.1 nonaka device_t sc_dev; 139 1.1 nonaka struct ethercom sc_ec; 140 1.1 nonaka #define sc_if sc_ec.ec_if 141 1.1 nonaka struct ieee80211com sc_ic; 142 1.1 nonaka int (*sc_newstate)(struct ieee80211com *, 143 1.1 nonaka enum ieee80211_state, int); 144 1.1 nonaka int (*sc_srom_read)(struct run_softc *, 145 1.1 nonaka uint16_t, uint16_t *); 146 1.1 nonaka 147 1.8 thorpej kmutex_t sc_media_mtx; /* XXX */ 148 1.8 thorpej 149 1.2 skrll struct usbd_device * sc_udev; 150 1.2 skrll struct usbd_interface * sc_iface; 151 1.1 nonaka 152 1.1 nonaka uint16_t mac_ver; 153 1.1 nonaka uint16_t mac_rev; 154 1.3 mlelstv uint16_t rf_rev; 155 1.1 nonaka uint8_t freq; 156 1.1 nonaka uint8_t ntxchains; 157 1.1 nonaka uint8_t nrxchains; 158 1.1 nonaka int fixed_ridx; 159 1.1 nonaka 160 1.1 nonaka uint8_t bbp25; 161 1.1 nonaka uint8_t bbp26; 162 1.1 nonaka uint8_t rf24_20mhz; 163 1.1 nonaka uint8_t rf24_40mhz; 164 1.1 nonaka uint8_t patch_dac; 165 1.1 nonaka uint8_t rfswitch; 166 1.1 nonaka uint8_t ext_2ghz_lna; 167 1.1 nonaka uint8_t ext_5ghz_lna; 168 1.1 nonaka uint8_t calib_2ghz; 169 1.1 nonaka uint8_t calib_5ghz; 170 1.1 nonaka uint8_t txmixgain_2ghz; 171 1.1 nonaka uint8_t txmixgain_5ghz; 172 1.1 nonaka int8_t txpow1[54]; 173 1.1 nonaka int8_t txpow2[54]; 174 1.3 mlelstv int8_t txpow3[54]; 175 1.1 nonaka int8_t rssi_2ghz[3]; 176 1.1 nonaka int8_t rssi_5ghz[3]; 177 1.1 nonaka uint8_t lna[4]; 178 1.1 nonaka 179 1.1 nonaka struct { 180 1.1 nonaka uint8_t reg; 181 1.1 nonaka uint8_t val; 182 1.1 nonaka } bbp[10], rf[10]; 183 1.1 nonaka uint8_t leds; 184 1.1 nonaka uint16_t led[3]; 185 1.1 nonaka uint32_t txpow20mhz[5]; 186 1.1 nonaka uint32_t txpow40mhz_2ghz[5]; 187 1.1 nonaka uint32_t txpow40mhz_5ghz[5]; 188 1.1 nonaka 189 1.1 nonaka struct usb_task sc_task; 190 1.1 nonaka 191 1.1 nonaka struct ieee80211_amrr amrr; 192 1.1 nonaka struct ieee80211_amrr_node amn; 193 1.1 nonaka 194 1.1 nonaka callout_t scan_to; 195 1.1 nonaka callout_t calib_to; 196 1.1 nonaka 197 1.1 nonaka struct run_rx_ring rxq; 198 1.4 skrll struct run_tx_ring txq[RUN_MAXEPOUT]; 199 1.1 nonaka struct run_host_cmd_ring cmdq; 200 1.1 nonaka uint8_t qfullmsk; 201 1.1 nonaka int sc_tx_timer; 202 1.1 nonaka struct ieee80211_beacon_offsets sc_bo; 203 1.1 nonaka int sc_flags; 204 1.9 gson #define RUN_FWLOADED (1 << 0) 205 1.9 gson #define RUN_DETACHING (1 << 1) 206 1.9 gson #define RUN_USE_BLOCK_WRITE (1 << 2) 207 1.1 nonaka 208 1.1 nonaka struct bpf_if * sc_drvbpf; 209 1.1 nonaka 210 1.1 nonaka union { 211 1.1 nonaka struct run_rx_radiotap_header th; 212 1.1 nonaka uint8_t pad[64]; 213 1.1 nonaka } sc_rxtapu; 214 1.1 nonaka #define sc_rxtap sc_rxtapu.th 215 1.1 nonaka int sc_rxtap_len; 216 1.1 nonaka 217 1.1 nonaka union { 218 1.1 nonaka struct run_tx_radiotap_header th; 219 1.1 nonaka uint8_t pad[64]; 220 1.1 nonaka } sc_txtapu; 221 1.1 nonaka #define sc_txtap sc_txtapu.th 222 1.1 nonaka int sc_txtap_len; 223 1.1 nonaka }; 224