if_rumvar.h revision 288619
1188417Sthompsa/* $FreeBSD: head/sys/dev/usb/wlan/if_rumvar.h 288619 2015-10-03 17:18:35Z adrian $ */ 2184610Salfred 3184610Salfred/*- 4184610Salfred * Copyright (c) 2005, 2006 Damien Bergamini <damien.bergamini@free.fr> 5184610Salfred * Copyright (c) 2006 Niall O'Higgins <niallo@openbsd.org> 6184610Salfred * 7184610Salfred * Permission to use, copy, modify, and distribute this software for any 8184610Salfred * purpose with or without fee is hereby granted, provided that the above 9184610Salfred * copyright notice and this permission notice appear in all copies. 10184610Salfred * 11184610Salfred * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12184610Salfred * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13184610Salfred * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14184610Salfred * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15184610Salfred * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16184610Salfred * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17184610Salfred * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18184610Salfred */ 19184610Salfred 20188417Sthompsa#define RUM_TX_LIST_COUNT 8 21188969Sthompsa#define RUM_TX_MINFREE 2 22184610Salfred 23184610Salfredstruct rum_rx_radiotap_header { 24184610Salfred struct ieee80211_radiotap_header wr_ihdr; 25288604Sadrian uint64_t wr_tsf; 26188417Sthompsa uint8_t wr_flags; 27188417Sthompsa uint8_t wr_rate; 28188417Sthompsa uint16_t wr_chan_freq; 29188417Sthompsa uint16_t wr_chan_flags; 30192468Ssam int8_t wr_antsignal; 31192468Ssam int8_t wr_antnoise; 32188417Sthompsa uint8_t wr_antenna; 33253757Shselasky} __packed __aligned(8); 34184610Salfred 35188417Sthompsa#define RT2573_RX_RADIOTAP_PRESENT \ 36288604Sadrian ((1 << IEEE80211_RADIOTAP_TSFT) | \ 37288604Sadrian (1 << IEEE80211_RADIOTAP_FLAGS) | \ 38184610Salfred (1 << IEEE80211_RADIOTAP_RATE) | \ 39184610Salfred (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 40192468Ssam (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \ 41192468Ssam (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) | \ 42184610Salfred (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 43192468Ssam 0) 44184610Salfred 45184610Salfredstruct rum_tx_radiotap_header { 46184610Salfred struct ieee80211_radiotap_header wt_ihdr; 47288604Sadrian uint64_t wt_tsf; 48188417Sthompsa uint8_t wt_flags; 49188417Sthompsa uint8_t wt_rate; 50188417Sthompsa uint16_t wt_chan_freq; 51188417Sthompsa uint16_t wt_chan_flags; 52188417Sthompsa uint8_t wt_antenna; 53253757Shselasky} __packed __aligned(8); 54184610Salfred 55188417Sthompsa#define RT2573_TX_RADIOTAP_PRESENT \ 56288604Sadrian ((1 << IEEE80211_RADIOTAP_TSFT) | \ 57288604Sadrian (1 << IEEE80211_RADIOTAP_FLAGS) | \ 58184610Salfred (1 << IEEE80211_RADIOTAP_RATE) | \ 59184610Salfred (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 60184610Salfred (1 << IEEE80211_RADIOTAP_ANTENNA)) 61184610Salfred 62188417Sthompsastruct rum_softc; 63184610Salfred 64188417Sthompsastruct rum_tx_data { 65188417Sthompsa STAILQ_ENTRY(rum_tx_data) next; 66188417Sthompsa struct rum_softc *sc; 67188417Sthompsa struct rum_tx_desc desc; 68188417Sthompsa struct mbuf *m; 69188417Sthompsa struct ieee80211_node *ni; 70188417Sthompsa int rate; 71188417Sthompsa}; 72188417Sthompsatypedef STAILQ_HEAD(, rum_tx_data) rum_txdhead; 73188417Sthompsa 74288532Sadrianunion sec_param { 75288532Sadrian struct ieee80211_key key; 76288532Sadrian uint8_t macaddr[IEEE80211_ADDR_LEN]; 77288532Sadrian struct ieee80211vap *vap; 78288532Sadrian}; 79288532Sadrian#define CMD_FUNC_PROTO void (*func)(struct rum_softc *, \ 80288532Sadrian union sec_param *, uint8_t, \ 81288532Sadrian uint8_t) 82288532Sadrian 83288532Sadrianstruct rum_cmdq { 84288532Sadrian union sec_param data; 85288532Sadrian 86288532Sadrian uint8_t rn_id; 87288532Sadrian uint8_t rvp_id; 88288532Sadrian 89288532Sadrian CMD_FUNC_PROTO; 90288532Sadrian}; 91288532Sadrian#define RUM_CMDQ_SIZE 16 92288532Sadrian 93188417Sthompsastruct rum_vap { 94188417Sthompsa struct ieee80211vap vap; 95206358Srpaulo struct usb_callout ratectl_ch; 96206358Srpaulo struct task ratectl_task; 97188417Sthompsa 98188417Sthompsa int (*newstate)(struct ieee80211vap *, 99188417Sthompsa enum ieee80211_state, int); 100188417Sthompsa}; 101188417Sthompsa#define RUM_VAP(vap) ((struct rum_vap *)(vap)) 102188417Sthompsa 103187259Sthompsaenum { 104188417Sthompsa RUM_BULK_WR, 105188417Sthompsa RUM_BULK_RD, 106188417Sthompsa RUM_N_TRANSFER = 2, 107187259Sthompsa}; 108187259Sthompsa 109184610Salfredstruct rum_softc { 110287197Sglebius struct ieee80211com sc_ic; 111287197Sglebius struct mbufq sc_snd; 112188417Sthompsa device_t sc_dev; 113192984Sthompsa struct usb_device *sc_udev; 114184610Salfred 115288531Sadrian struct usb_xfer *sc_xfer[RUM_N_TRANSFER]; 116184610Salfred 117188417Sthompsa uint8_t rf_rev; 118188417Sthompsa uint8_t rffreq; 119184610Salfred 120188419Sthompsa struct rum_tx_data tx_data[RUM_TX_LIST_COUNT]; 121188417Sthompsa rum_txdhead tx_q; 122188417Sthompsa rum_txdhead tx_free; 123188417Sthompsa int tx_nfree; 124188417Sthompsa struct rum_rx_desc sc_rx_desc; 125184610Salfred 126188417Sthompsa struct mtx sc_mtx; 127184610Salfred 128288532Sadrian struct rum_cmdq cmdq[RUM_CMDQ_SIZE]; 129288532Sadrian struct mtx cmdq_mtx; 130288532Sadrian struct task cmdq_task; 131288532Sadrian uint8_t cmdq_first; 132288532Sadrian uint8_t cmdq_last; 133288532Sadrian 134188417Sthompsa uint32_t sta[6]; 135188417Sthompsa uint32_t rf_regs[4]; 136188417Sthompsa uint8_t txpow[44]; 137287197Sglebius u_int sc_detached:1, 138287197Sglebius sc_running:1; 139184610Salfred 140288619Sadrian uint8_t sc_bssid[IEEE80211_ADDR_LEN]; 141288619Sadrian 142188417Sthompsa struct { 143188417Sthompsa uint8_t val; 144188417Sthompsa uint8_t reg; 145188417Sthompsa } __packed bbp_prom[16]; 146188417Sthompsa 147188417Sthompsa int hw_radio; 148188417Sthompsa int rx_ant; 149188417Sthompsa int tx_ant; 150188417Sthompsa int nb_ant; 151188417Sthompsa int ext_2ghz_lna; 152188417Sthompsa int ext_5ghz_lna; 153188417Sthompsa int rssi_2ghz_corr; 154188417Sthompsa int rssi_5ghz_corr; 155188417Sthompsa uint8_t bbp17; 156188417Sthompsa 157188417Sthompsa struct rum_rx_radiotap_header sc_rxtap; 158188417Sthompsa struct rum_tx_radiotap_header sc_txtap; 159184610Salfred}; 160188417Sthompsa 161288532Sadrian#define RUM_LOCK_INIT(sc) \ 162288532Sadrian mtx_init(&(sc)->sc_mtx, device_get_nameunit((sc)->sc_dev), \ 163288532Sadrian MTX_NETWORK_LOCK, MTX_DEF); 164288532Sadrian#define RUM_LOCK(sc) mtx_lock(&(sc)->sc_mtx) 165288532Sadrian#define RUM_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx) 166288532Sadrian#define RUM_LOCK_ASSERT(sc) mtx_assert(&(sc)->sc_mtx, MA_OWNED) 167288532Sadrian#define RUM_LOCK_DESTROY(sc) mtx_destroy(&(sc)->sc_mtx) 168288532Sadrian 169288532Sadrian#define RUM_CMDQ_LOCK_INIT(sc) \ 170288532Sadrian mtx_init(&(sc)->cmdq_mtx, "cmdq lock", NULL, MTX_DEF) 171288532Sadrian#define RUM_CMDQ_LOCK(sc) mtx_lock(&(sc)->cmdq_mtx) 172288532Sadrian#define RUM_CMDQ_UNLOCK(sc) mtx_unlock(&(sc)->cmdq_mtx) 173288532Sadrian#define RUM_CMDQ_LOCK_DESTROY(sc) mtx_destroy(&(sc)->cmdq_mtx) 174