1*ab0b1be7Smglocker /* $OpenBSD: if_rumvar.h,v 1.9 2013/04/15 09:23:01 mglocker Exp $ */ 214761d2dSdamien 3b9520dbfSniallo /*- 4b9520dbfSniallo * Copyright (c) 2005, 2006 Damien Bergamini <damien.bergamini@free.fr> 5b9520dbfSniallo * Copyright (c) 2006 Niall O'Higgins <niallo@openbsd.org> 6b9520dbfSniallo * 7b9520dbfSniallo * Permission to use, copy, modify, and distribute this software for any 8b9520dbfSniallo * purpose with or without fee is hereby granted, provided that the above 9b9520dbfSniallo * copyright notice and this permission notice appear in all copies. 10b9520dbfSniallo * 11b9520dbfSniallo * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12b9520dbfSniallo * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13b9520dbfSniallo * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14b9520dbfSniallo * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15b9520dbfSniallo * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16b9520dbfSniallo * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17b9520dbfSniallo * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18b9520dbfSniallo */ 19b9520dbfSniallo 20bc303e9bSdamien #define RUM_RX_LIST_COUNT 1 21bc303e9bSdamien #define RUM_TX_LIST_COUNT 8 22b9520dbfSniallo 23b9520dbfSniallo struct rum_rx_radiotap_header { 24b9520dbfSniallo struct ieee80211_radiotap_header wr_ihdr; 25b9520dbfSniallo uint8_t wr_flags; 26b9520dbfSniallo uint8_t wr_rate; 27b9520dbfSniallo uint16_t wr_chan_freq; 28b9520dbfSniallo uint16_t wr_chan_flags; 29b9520dbfSniallo uint8_t wr_antenna; 30b9520dbfSniallo uint8_t wr_antsignal; 31b9520dbfSniallo } __packed; 32b9520dbfSniallo 33b9520dbfSniallo #define RT2573_RX_RADIOTAP_PRESENT \ 34b9520dbfSniallo ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 35b9520dbfSniallo (1 << IEEE80211_RADIOTAP_RATE) | \ 36b9520dbfSniallo (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 37b9520dbfSniallo (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 38b9520dbfSniallo (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)) 39b9520dbfSniallo 40b9520dbfSniallo struct rum_tx_radiotap_header { 41b9520dbfSniallo struct ieee80211_radiotap_header wt_ihdr; 42b9520dbfSniallo uint8_t wt_flags; 43b9520dbfSniallo uint8_t wt_rate; 44b9520dbfSniallo uint16_t wt_chan_freq; 45b9520dbfSniallo uint16_t wt_chan_flags; 46b9520dbfSniallo uint8_t wt_antenna; 47b9520dbfSniallo } __packed; 48b9520dbfSniallo 49b9520dbfSniallo #define RT2573_TX_RADIOTAP_PRESENT \ 50b9520dbfSniallo ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 51b9520dbfSniallo (1 << IEEE80211_RADIOTAP_RATE) | \ 52b9520dbfSniallo (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 53b9520dbfSniallo (1 << IEEE80211_RADIOTAP_ANTENNA)) 54b9520dbfSniallo 55b9520dbfSniallo struct rum_softc; 56b9520dbfSniallo 57b9520dbfSniallo struct rum_tx_data { 58b9520dbfSniallo struct rum_softc *sc; 59*ab0b1be7Smglocker struct usbd_xfer *xfer; 60b9520dbfSniallo uint8_t *buf; 61b9520dbfSniallo struct ieee80211_node *ni; 62b9520dbfSniallo }; 63b9520dbfSniallo 64b9520dbfSniallo struct rum_rx_data { 65b9520dbfSniallo struct rum_softc *sc; 66*ab0b1be7Smglocker struct usbd_xfer *xfer; 67b9520dbfSniallo uint8_t *buf; 68b9520dbfSniallo struct mbuf *m; 69b9520dbfSniallo }; 70b9520dbfSniallo 71b9520dbfSniallo struct rum_softc { 728c5d01eeSmk struct device sc_dev; 73b9520dbfSniallo struct ieee80211com sc_ic; 74b9520dbfSniallo int (*sc_newstate)(struct ieee80211com *, 75b9520dbfSniallo enum ieee80211_state, int); 76b9520dbfSniallo 77*ab0b1be7Smglocker struct usbd_device *sc_udev; 78*ab0b1be7Smglocker struct usbd_interface *sc_iface; 79b9520dbfSniallo 80b9520dbfSniallo struct ieee80211_channel *sc_curchan; 81b9520dbfSniallo 82b9520dbfSniallo int sc_rx_no; 83b9520dbfSniallo int sc_tx_no; 84b9520dbfSniallo 85b9520dbfSniallo uint16_t macbbp_rev; 86b9520dbfSniallo uint8_t rf_rev; 87b9520dbfSniallo uint8_t rffreq; 88b9520dbfSniallo 89*ab0b1be7Smglocker struct usbd_xfer *amrr_xfer; 9014761d2dSdamien 91*ab0b1be7Smglocker struct usbd_pipe *sc_rx_pipeh; 92*ab0b1be7Smglocker struct usbd_pipe *sc_tx_pipeh; 93b9520dbfSniallo 94b9520dbfSniallo enum ieee80211_state sc_state; 9574a1cafeSdamien int sc_arg; 96b9520dbfSniallo struct usb_task sc_task; 97b9520dbfSniallo 9814761d2dSdamien struct ieee80211_amrr amrr; 9914761d2dSdamien struct ieee80211_amrr_node amn; 10014761d2dSdamien 101bc303e9bSdamien struct rum_rx_data rx_data[RUM_RX_LIST_COUNT]; 102bc303e9bSdamien struct rum_tx_data tx_data[RUM_TX_LIST_COUNT]; 103b9520dbfSniallo int tx_queued; 104bc303e9bSdamien int tx_cur; 105b9520dbfSniallo 106bc303e9bSdamien struct timeout scan_to; 107bc303e9bSdamien struct timeout amrr_to; 108b9520dbfSniallo 109b9520dbfSniallo int sc_tx_timer; 110b9520dbfSniallo 11114761d2dSdamien uint32_t sta[6]; 112b9520dbfSniallo uint32_t rf_regs[4]; 11314761d2dSdamien uint8_t txpow[44]; 114b9520dbfSniallo 115b9520dbfSniallo struct { 116b9520dbfSniallo uint8_t val; 117b9520dbfSniallo uint8_t reg; 118b9520dbfSniallo } __packed bbp_prom[16]; 119b9520dbfSniallo 120b9520dbfSniallo int hw_radio; 121b9520dbfSniallo int rx_ant; 122b9520dbfSniallo int tx_ant; 123b9520dbfSniallo int nb_ant; 12414761d2dSdamien int ext_2ghz_lna; 12514761d2dSdamien int ext_5ghz_lna; 12614761d2dSdamien int rssi_2ghz_corr; 12714761d2dSdamien int rssi_5ghz_corr; 12814761d2dSdamien int sifs; 12914761d2dSdamien uint8_t bbp17; 130b9520dbfSniallo 131b9520dbfSniallo #if NBPFILTER > 0 132b9520dbfSniallo caddr_t sc_drvbpf; 133b9520dbfSniallo 134b9520dbfSniallo union { 135b9520dbfSniallo struct rum_rx_radiotap_header th; 136b9520dbfSniallo uint8_t pad[64]; 137b9520dbfSniallo } sc_rxtapu; 138b9520dbfSniallo #define sc_rxtap sc_rxtapu.th 139b9520dbfSniallo int sc_rxtap_len; 140b9520dbfSniallo 141b9520dbfSniallo union { 142b9520dbfSniallo struct rum_tx_radiotap_header th; 143b9520dbfSniallo uint8_t pad[64]; 144b9520dbfSniallo } sc_txtapu; 145b9520dbfSniallo #define sc_txtap sc_txtapu.th 146b9520dbfSniallo int sc_txtap_len; 147b9520dbfSniallo #endif 148b9520dbfSniallo }; 149