1 /* 2 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* 7 * Copyright (c) 2008 Weongyo Jeong 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer, 15 * without modification. 16 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 17 * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 18 * redistribution must be conditioned upon including a substantially 19 * similar Disclaimer requirement for further binary redistribution. 20 * 21 * NO WARRANTY 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 25 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 26 * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 27 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 30 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 32 * THE POSSIBILITY OF SUCH DAMAGES. 33 */ 34 #ifndef _URTW_VAR_H 35 #define _URTW_VAR_H 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #define URTW_RX_DATA_LIST_COUNT (2) 42 #define URTW_TX_DATA_LIST_COUNT (16) 43 #define URTW_RX_MAXSIZE (0x9c4) 44 #define URTW_TX_MAXSIZE URTW_RX_MAXSIZE 45 46 #define UT_READ_VENDOR_DEVICE (USB_DEV_REQ_TYPE_VENDOR |\ 47 USB_DEV_REQ_DEV_TO_HOST) 48 49 #define UT_WRITE_VENDOR_DEVICE (USB_DEV_REQ_TYPE_VENDOR |\ 50 USB_DEV_REQ_HOST_TO_DEV) 51 52 #define USBD_INVAL (-1) 53 #define URTW_TX_TIMEOUT (5) 54 55 typedef int usbd_status; 56 57 #define URTW_MAX_CHANNELS (15) 58 #define LOW_PRIORITY_PIPE (0) 59 #define NORMAL_PRIORITY_PIPE (1) 60 #define URTW_LED_LINKOFF_BLINK (1000*1000) 61 #define URTW_LED_LINKON_BLINK (300*1000) 62 63 struct urtw_rf { 64 /* RF methods */ 65 usbd_status (*init)(struct urtw_rf *); 66 usbd_status (*set_chan)(struct urtw_rf *, int); 67 usbd_status (*set_sens)(struct urtw_rf *); 68 69 /* RF attributes */ 70 struct urtw_softc *rf_sc; 71 uint32_t max_sens; 72 int32_t sens; 73 }; 74 75 struct urtw_softc { 76 struct ieee80211com sc_ic; 77 dev_info_t *sc_dev; 78 kmutex_t sc_genlock; 79 kmutex_t tx_lock; 80 kmutex_t rx_lock; 81 usb_client_dev_data_t *sc_udev; 82 usb_pipe_handle_t sc_rxpipe; 83 usb_pipe_handle_t sc_txpipe_low; 84 usb_pipe_handle_t sc_txpipe_normal; 85 86 int sc_tx_low_queued; 87 int sc_tx_normal_queued; 88 int rx_queued; 89 timeout_id_t sc_scan_id; 90 uint32_t sc_need_sched; 91 int dwelltime; 92 /* kstats */ 93 uint32_t sc_tx_nobuf; 94 uint32_t sc_rx_nobuf; 95 uint32_t sc_rx_err; 96 97 int sc_flags; 98 int sc_arg; 99 int (*sc_newstate)(struct ieee80211com *, 100 enum ieee80211_state, int); 101 102 int sc_epromtype; 103 #define URTW_EEPROM_93C46 0 104 #define URTW_EEPROM_93C56 1 105 uint8_t sc_crcmon; 106 uint8_t sc_bssid[IEEE80211_ADDR_LEN]; 107 108 struct urtw_rf sc_rf; 109 110 /* for LED */ 111 kmutex_t sc_ledlock; 112 timeout_id_t sc_led_ch; 113 uint8_t sc_psr; 114 uint8_t sc_strategy; 115 uint8_t sc_led_freq; 116 #define URTW_LED_GPIO 1 117 uint8_t sc_gpio_ledon; 118 uint8_t sc_gpio_ledinprogress; 119 uint8_t sc_gpio_ledstate; 120 uint8_t sc_gpio_ledpin; 121 uint8_t sc_gpio_blinktime; 122 uint8_t sc_gpio_blinkstate; 123 uint8_t sc_rts_retry; 124 uint8_t sc_tx_retry; 125 uint8_t sc_preamble_mode; 126 int sc_currate; 127 /* TX power */ 128 uint8_t sc_txpwr_cck[URTW_MAX_CHANNELS]; 129 uint8_t sc_txpwr_cck_base; 130 uint8_t sc_txpwr_ofdm[URTW_MAX_CHANNELS]; 131 uint8_t sc_txpwr_ofdm_base; 132 133 uint8_t sc_hwrev; 134 int (*urtw_init)(void *); 135 }; 136 #define URTW_FLAG_RUNNING (1 << 0) 137 #define URTW_FLAG_SUSPEND (1 << 1) 138 #define URTW_FLAG_PLUGIN_ONLINE (1 << 2) 139 #define URTW_FLAG_HP (1 << 3) 140 141 #define URTW_IS_PLUGIN_ONLINE(_sc) \ 142 ((_sc)->sc_flags & URTW_FLAG_PLUGIN_ONLINE) 143 #define URTW_IS_RUNNING(_sc) \ 144 ((_sc)->sc_flags & URTW_FLAG_RUNNING) 145 #define URTW_IS_NOT_RUNNING(_sc) \ 146 (((_sc)->sc_flags & URTW_FLAG_RUNNING) == 0) 147 #define URTW_IS_SUSPENDING(_sc) ((_sc)->sc_flags & URTW_FLAG_SUSPEND) 148 149 #define URTW_LOCK(sc) mutex_enter(&(sc)->sc_genlock) 150 #define URTW_UNLOCK(sc) mutex_exit(&(sc)->sc_genlock) 151 #define URTW_LEDLOCK(sc) mutex_enter(&(sc)->sc_ledlock) 152 #define URTW_LEDUNLOCK(sc) mutex_exit(&(sc)->sc_ledlock) 153 154 #ifdef __cplusplus 155 } 156 #endif 157 158 #endif /* _URTW_VAR_H */ 159