if_uralvar.h revision 189123
1169695Skan/* $FreeBSD: head/sys/dev/usb/wlan/if_uralvar.h 189123 2009-02-27 21:14:29Z thompsa $ */ 2169695Skan 3169695Skan/*- 4169695Skan * Copyright (c) 2005 5169695Skan * Damien Bergamini <damien.bergamini@free.fr> 6169695Skan * 7169695Skan * Permission to use, copy, modify, and distribute this software for any 8169695Skan * purpose with or without fee is hereby granted, provided that the above 9169695Skan * copyright notice and this permission notice appear in all copies. 10169695Skan * 11169695Skan * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12169695Skan * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13169695Skan * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14169695Skan * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15169695Skan * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16169695Skan * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17169695Skan * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18169695Skan */ 19169695Skan 20169695Skan#define RAL_TX_LIST_COUNT 8 21169695Skan#define RAL_TX_MINFREE 2 22169695Skan 23169695Skan#define URAL_SCAN_START 1 24169695Skan#define URAL_SCAN_END 2 25169695Skan#define URAL_SET_CHANNEL 3 26169695Skan 27169695Skan 28169695Skanstruct ural_rx_radiotap_header { 29169695Skan struct ieee80211_radiotap_header wr_ihdr; 30169695Skan uint8_t wr_flags; 31169695Skan uint8_t wr_rate; 32169695Skan uint16_t wr_chan_freq; 33169695Skan uint16_t wr_chan_flags; 34169695Skan uint8_t wr_antenna; 35169695Skan uint8_t wr_antsignal; 36169695Skan}; 37169695Skan 38169695Skan#define RAL_RX_RADIOTAP_PRESENT \ 39169695Skan ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 40169695Skan (1 << IEEE80211_RADIOTAP_RATE) | \ 41169695Skan (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 42169695Skan (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 43169695Skan (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)) 44169695Skan 45169695Skanstruct ural_tx_radiotap_header { 46169695Skan struct ieee80211_radiotap_header wt_ihdr; 47169695Skan uint8_t wt_flags; 48169695Skan uint8_t wt_rate; 49169695Skan uint16_t wt_chan_freq; 50169695Skan uint16_t wt_chan_flags; 51169695Skan uint8_t wt_antenna; 52169695Skan}; 53169695Skan 54169695Skan#define RAL_TX_RADIOTAP_PRESENT \ 55169695Skan ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 56169695Skan (1 << IEEE80211_RADIOTAP_RATE) | \ 57169695Skan (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 58169695Skan (1 << IEEE80211_RADIOTAP_ANTENNA)) 59169695Skan 60169695Skanstruct ural_softc; 61169695Skan 62169695Skanstruct ural_task { 63169695Skan struct usb2_proc_msg hdr; 64169695Skan usb2_proc_callback_t *func; 65169695Skan struct ural_softc *sc; 66169695Skan}; 67169695Skan 68169695Skanstruct ural_tx_data { 69169695Skan STAILQ_ENTRY(ural_tx_data) next; 70169695Skan struct ural_softc *sc; 71169695Skan struct ural_tx_desc desc; 72169695Skan struct mbuf *m; 73169695Skan struct ieee80211_node *ni; 74169695Skan int rate; 75169695Skan}; 76169695Skantypedef STAILQ_HEAD(, ural_tx_data) ural_txdhead; 77169695Skan 78169695Skanstruct ural_node { 79169695Skan struct ieee80211_node ni; 80169695Skan struct ieee80211_amrr_node amn; 81169695Skan}; 82169695Skan#define URAL_NODE(ni) ((struct ural_node *)(ni)) 83169695Skan 84169695Skanstruct ural_vap { 85169695Skan struct ieee80211vap vap; 86169695Skan struct ural_softc *sc; 87169695Skan struct ieee80211_beacon_offsets bo; 88169695Skan struct ieee80211_amrr amrr; 89169695Skan struct usb2_callout amrr_ch; 90169695Skan struct ural_task amrr_task[2]; 91169695Skan 92169695Skan int (*newstate)(struct ieee80211vap *, 93169695Skan enum ieee80211_state, int); 94169695Skan}; 95169695Skan#define URAL_VAP(vap) ((struct ural_vap *)(vap)) 96169695Skan 97169695Skanenum { 98169695Skan URAL_BULK_WR, 99169695Skan URAL_BULK_RD, 100169695Skan URAL_N_TRANSFER = 2, 101169695Skan}; 102169695Skan 103169695Skanstruct ural_softc { 104169695Skan struct ifnet *sc_ifp; 105169695Skan device_t sc_dev; 106169695Skan struct usb2_device *sc_udev; 107169695Skan struct usb2_process sc_tq; 108169695Skan 109169695Skan const struct ieee80211_rate_table *sc_rates; 110169695Skan 111169695Skan uint32_t asic_rev; 112169695Skan uint8_t rf_rev; 113169695Skan 114169695Skan struct usb2_xfer *sc_xfer[URAL_N_TRANSFER]; 115169695Skan struct ural_task *sc_last_task; 116169695Skan 117169695Skan enum ieee80211_state sc_state; 118169695Skan int sc_arg; 119169695Skan int sc_scan_action; /* should be an enum */ 120169695Skan struct ural_task sc_synctask[2]; 121169695Skan struct ural_task sc_task[2]; 122169695Skan struct ural_task sc_promisctask[2]; 123169695Skan struct ural_task sc_scantask[2]; 124169695Skan 125169695Skan struct ural_tx_data tx_data[RAL_TX_LIST_COUNT]; 126169695Skan ural_txdhead tx_q; 127169695Skan ural_txdhead tx_free; 128169695Skan int tx_nfree; 129169695Skan struct ural_rx_desc sc_rx_desc; 130169695Skan 131169695Skan struct mtx sc_mtx; 132169695Skan struct cv sc_cmd_cv; 133169695Skan 134169695Skan uint16_t sta[11]; 135169695Skan uint32_t rf_regs[4]; 136169695Skan uint8_t txpow[14]; 137169695Skan uint8_t sc_bssid[6]; 138169695Skan 139169695Skan struct { 140169695Skan uint8_t val; 141169695Skan uint8_t reg; 142169695Skan } __packed bbp_prom[16]; 143169695Skan 144169695Skan int led_mode; 145169695Skan int hw_radio; 146169695Skan int rx_ant; 147169695Skan int tx_ant; 148169695Skan int nb_ant; 149169695Skan 150169695Skan struct ural_rx_radiotap_header sc_rxtap; 151169695Skan int sc_rxtap_len; 152169695Skan 153169695Skan struct ural_tx_radiotap_header sc_txtap; 154169695Skan int sc_txtap_len; 155169695Skan}; 156169695Skan 157169695Skan#define RAL_LOCK(sc) mtx_lock(&(sc)->sc_mtx) 158169695Skan#define RAL_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx) 159169695Skan#define RAL_LOCK_ASSERT(sc, t) mtx_assert(&(sc)->sc_mtx, t) 160169695Skan