1*ab0b1be7Smglocker /* $OpenBSD: if_ralvar.h,v 1.10 2013/04/15 09:23:01 mglocker Exp $ */ 2fe6248e0Sdamien 3fe6248e0Sdamien /*- 4fe6248e0Sdamien * Copyright (c) 2005 5fe6248e0Sdamien * Damien Bergamini <damien.bergamini@free.fr> 6fe6248e0Sdamien * 7fe6248e0Sdamien * Permission to use, copy, modify, and distribute this software for any 8fe6248e0Sdamien * purpose with or without fee is hereby granted, provided that the above 9fe6248e0Sdamien * copyright notice and this permission notice appear in all copies. 10fe6248e0Sdamien * 11fe6248e0Sdamien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12fe6248e0Sdamien * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13fe6248e0Sdamien * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14fe6248e0Sdamien * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15fe6248e0Sdamien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16fe6248e0Sdamien * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17fe6248e0Sdamien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18fe6248e0Sdamien */ 19fe6248e0Sdamien 20fe6248e0Sdamien #define RAL_RX_LIST_COUNT 1 21bc303e9bSdamien #define RAL_TX_LIST_COUNT 8 22fe6248e0Sdamien 23fe6248e0Sdamien struct ural_rx_radiotap_header { 24fe6248e0Sdamien struct ieee80211_radiotap_header wr_ihdr; 25fe6248e0Sdamien uint8_t wr_flags; 266493c683Sdamien uint8_t wr_rate; 27fe6248e0Sdamien uint16_t wr_chan_freq; 28fe6248e0Sdamien uint16_t wr_chan_flags; 29fe6248e0Sdamien uint8_t wr_antenna; 30fe6248e0Sdamien uint8_t wr_antsignal; 31fe6248e0Sdamien } __packed; 32fe6248e0Sdamien 33fe6248e0Sdamien #define RAL_RX_RADIOTAP_PRESENT \ 34fe6248e0Sdamien ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 356493c683Sdamien (1 << IEEE80211_RADIOTAP_RATE) | \ 36fe6248e0Sdamien (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 37fe6248e0Sdamien (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 38fe6248e0Sdamien (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)) 39fe6248e0Sdamien 40fe6248e0Sdamien struct ural_tx_radiotap_header { 41fe6248e0Sdamien struct ieee80211_radiotap_header wt_ihdr; 42fe6248e0Sdamien uint8_t wt_flags; 43fe6248e0Sdamien uint8_t wt_rate; 44fe6248e0Sdamien uint16_t wt_chan_freq; 45fe6248e0Sdamien uint16_t wt_chan_flags; 46fe6248e0Sdamien uint8_t wt_antenna; 47fe6248e0Sdamien } __packed; 48fe6248e0Sdamien 49fe6248e0Sdamien #define RAL_TX_RADIOTAP_PRESENT \ 50fe6248e0Sdamien ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 51fe6248e0Sdamien (1 << IEEE80211_RADIOTAP_RATE) | \ 52fe6248e0Sdamien (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 53fe6248e0Sdamien (1 << IEEE80211_RADIOTAP_ANTENNA)) 54fe6248e0Sdamien 55fe6248e0Sdamien struct ural_softc; 56fe6248e0Sdamien 57fe6248e0Sdamien struct ural_tx_data { 58fe6248e0Sdamien struct ural_softc *sc; 59*ab0b1be7Smglocker struct usbd_xfer *xfer; 60fe6248e0Sdamien uint8_t *buf; 61fe6248e0Sdamien struct ieee80211_node *ni; 62fe6248e0Sdamien }; 63fe6248e0Sdamien 64fe6248e0Sdamien struct ural_rx_data { 65fe6248e0Sdamien struct ural_softc *sc; 66*ab0b1be7Smglocker struct usbd_xfer *xfer; 67fe6248e0Sdamien uint8_t *buf; 68fe6248e0Sdamien struct mbuf *m; 69fe6248e0Sdamien }; 70fe6248e0Sdamien 71fe6248e0Sdamien struct ural_softc { 728c5d01eeSmk struct device sc_dev; 73fe6248e0Sdamien struct ieee80211com sc_ic; 74fe6248e0Sdamien int (*sc_newstate)(struct ieee80211com *, 75fe6248e0Sdamien enum ieee80211_state, int); 76fe6248e0Sdamien 77*ab0b1be7Smglocker struct usbd_device *sc_udev; 78*ab0b1be7Smglocker struct usbd_interface *sc_iface; 79fe6248e0Sdamien 80e62a8d44Sdamien int sc_rx_no; 81e62a8d44Sdamien int sc_tx_no; 82fe6248e0Sdamien 83fe6248e0Sdamien uint32_t asic_rev; 84d3dd35e6Spedro uint16_t macbbp_rev; 85fe6248e0Sdamien uint8_t rf_rev; 86fe6248e0Sdamien 87*ab0b1be7Smglocker struct usbd_xfer *amrr_xfer; 88edf15647Sdamien 89*ab0b1be7Smglocker struct usbd_pipe *sc_rx_pipeh; 90*ab0b1be7Smglocker struct usbd_pipe *sc_tx_pipeh; 91fe6248e0Sdamien 92fe6248e0Sdamien enum ieee80211_state sc_state; 93f719a1f7Sdamien int sc_arg; 94fe6248e0Sdamien struct usb_task sc_task; 95fe6248e0Sdamien 96ae328ba4Sdamien struct ieee80211_amrr amrr; 97ae328ba4Sdamien struct ieee80211_amrr_node amn; 98edf15647Sdamien 99fe6248e0Sdamien struct ural_rx_data rx_data[RAL_RX_LIST_COUNT]; 100fe6248e0Sdamien struct ural_tx_data tx_data[RAL_TX_LIST_COUNT]; 101fe6248e0Sdamien int tx_queued; 102bc303e9bSdamien int tx_cur; 103fe6248e0Sdamien 104bc303e9bSdamien struct timeout scan_to; 105bc303e9bSdamien struct timeout amrr_to; 106fe6248e0Sdamien 107fe6248e0Sdamien int sc_tx_timer; 108fe6248e0Sdamien 109edf15647Sdamien uint16_t sta[11]; 110fe6248e0Sdamien uint32_t rf_regs[4]; 111fe6248e0Sdamien uint8_t txpow[14]; 112fe6248e0Sdamien 113fe6248e0Sdamien struct { 114fe6248e0Sdamien uint8_t val; 115fe6248e0Sdamien uint8_t reg; 116fe6248e0Sdamien } __packed bbp_prom[16]; 117fe6248e0Sdamien 118fe6248e0Sdamien int led_mode; 119fe6248e0Sdamien int hw_radio; 120fe6248e0Sdamien int rx_ant; 121fe6248e0Sdamien int tx_ant; 122fe6248e0Sdamien int nb_ant; 123fe6248e0Sdamien 124fe6248e0Sdamien #if NBPFILTER > 0 125fe6248e0Sdamien caddr_t sc_drvbpf; 126fe6248e0Sdamien 127fe6248e0Sdamien union { 128fe6248e0Sdamien struct ural_rx_radiotap_header th; 129fe6248e0Sdamien uint8_t pad[64]; 130fe6248e0Sdamien } sc_rxtapu; 131fe6248e0Sdamien #define sc_rxtap sc_rxtapu.th 132fe6248e0Sdamien int sc_rxtap_len; 133fe6248e0Sdamien 134fe6248e0Sdamien union { 135fe6248e0Sdamien struct ural_tx_radiotap_header th; 136fe6248e0Sdamien uint8_t pad[64]; 137fe6248e0Sdamien } sc_txtapu; 138fe6248e0Sdamien #define sc_txtap sc_txtapu.th 139fe6248e0Sdamien int sc_txtap_len; 140fe6248e0Sdamien #endif 141fe6248e0Sdamien }; 142