/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* Copyright (c) 2008 Weongyo Jeong
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
* redistribution must be conditioned upon including a substantially
* similar Disclaimer requirement for further binary redistribution.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*/
#ifndef _URTW_VAR_H
#define _URTW_VAR_H
#ifdef __cplusplus
extern "C" {
#endif
#define URTW_RX_DATA_LIST_COUNT (2)
#define URTW_TX_DATA_LIST_COUNT (16)
#define URTW_RX_MAXSIZE (0x9c4)
#define URTW_TX_MAXSIZE URTW_RX_MAXSIZE
#define UT_READ_VENDOR_DEVICE (USB_DEV_REQ_TYPE_VENDOR |\
USB_DEV_REQ_DEV_TO_HOST)
#define UT_WRITE_VENDOR_DEVICE (USB_DEV_REQ_TYPE_VENDOR |\
USB_DEV_REQ_HOST_TO_DEV)
#define USBD_INVAL (-1)
#define URTW_TX_TIMEOUT (5)
typedef int usbd_status;
#define URTW_MAX_CHANNELS (15)
#define LOW_PRIORITY_PIPE (0)
#define NORMAL_PRIORITY_PIPE (1)
#define URTW_LED_LINKOFF_BLINK (1000*1000)
#define URTW_LED_LINKON_BLINK (300*1000)
struct urtw_rf {
/* RF methods */
usbd_status (*init)(struct urtw_rf *);
usbd_status (*set_chan)(struct urtw_rf *, int);
usbd_status (*set_sens)(struct urtw_rf *);
/* RF attributes */
struct urtw_softc *rf_sc;
uint32_t max_sens;
int32_t sens;
};
struct urtw_softc {
struct ieee80211com sc_ic;
dev_info_t *sc_dev;
kmutex_t sc_genlock;
kmutex_t tx_lock;
kmutex_t rx_lock;
usb_client_dev_data_t *sc_udev;
usb_pipe_handle_t sc_rxpipe;
usb_pipe_handle_t sc_txpipe_low;
usb_pipe_handle_t sc_txpipe_normal;
int sc_tx_low_queued;
int sc_tx_normal_queued;
int rx_queued;
timeout_id_t sc_scan_id;
uint32_t sc_need_sched;
int dwelltime;
/* kstats */
uint32_t sc_tx_nobuf;
uint32_t sc_rx_nobuf;
uint32_t sc_rx_err;
int sc_flags;
int sc_arg;
int (*sc_newstate)(struct ieee80211com *,
enum ieee80211_state, int);
int sc_epromtype;
#define URTW_EEPROM_93C46 0
#define URTW_EEPROM_93C56 1
uint8_t sc_crcmon;
uint8_t sc_bssid[IEEE80211_ADDR_LEN];
struct urtw_rf sc_rf;
/* for LED */
kmutex_t sc_ledlock;
timeout_id_t sc_led_ch;
uint8_t sc_psr;
uint8_t sc_strategy;
uint8_t sc_led_freq;
#define URTW_LED_GPIO 1
uint8_t sc_gpio_ledon;
uint8_t sc_gpio_ledinprogress;
uint8_t sc_gpio_ledstate;
uint8_t sc_gpio_ledpin;
uint8_t sc_gpio_blinktime;
uint8_t sc_gpio_blinkstate;
uint8_t sc_rts_retry;
uint8_t sc_tx_retry;
uint8_t sc_preamble_mode;
int sc_currate;
/* TX power */
uint8_t sc_txpwr_cck[URTW_MAX_CHANNELS];
uint8_t sc_txpwr_cck_base;
uint8_t sc_txpwr_ofdm[URTW_MAX_CHANNELS];
uint8_t sc_txpwr_ofdm_base;
uint8_t sc_hwrev;
int (*urtw_init)(void *);
};
#define URTW_FLAG_RUNNING (1 << 0)
#define URTW_FLAG_SUSPEND (1 << 1)
#define URTW_FLAG_PLUGIN_ONLINE (1 << 2)
#define URTW_FLAG_HP (1 << 3)
#define URTW_IS_PLUGIN_ONLINE(_sc) \
((_sc)->sc_flags & URTW_FLAG_PLUGIN_ONLINE)
#define URTW_IS_RUNNING(_sc) \
((_sc)->sc_flags & URTW_FLAG_RUNNING)
#define URTW_IS_NOT_RUNNING(_sc) \
(((_sc)->sc_flags & URTW_FLAG_RUNNING) == 0)
#define URTW_IS_SUSPENDING(_sc) ((_sc)->sc_flags & URTW_FLAG_SUSPEND)
#define URTW_LOCK(sc) mutex_enter(&(sc)->sc_genlock)
#define URTW_UNLOCK(sc) mutex_exit(&(sc)->sc_genlock)
#define URTW_LEDLOCK(sc) mutex_enter(&(sc)->sc_ledlock)
#define URTW_LEDUNLOCK(sc) mutex_exit(&(sc)->sc_ledlock)
#ifdef __cplusplus
}
#endif
#endif /* _URTW_VAR_H */