root/usr/src/uts/common/io/urtw/urtw_var.h
/*
 * 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 */