84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx/*
6f12def440a1ce798ab128210a43414d173669f0pengcheng chen - Sun Microsystems - Beijing China * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * Use is subject to license terms.
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx/*
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * Copyright (c) 2006
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * Damien Bergamini <damien.bergamini@free.fr>
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx *
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * Permission to use, copy, modify, and distribute this software for any
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * purpose with or without fee is hereby granted, provided that the above
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * copyright notice and this permission notice appear in all copies.
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx *
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#ifndef _WPIVAR_H
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define _WPIVAR_H
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#ifdef __cplusplus
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxextern "C" {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#endif
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#ifdef WPI_BPF
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_rx_radiotap_header {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx struct ieee80211_radiotap_header wr_ihdr;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint64_t wr_tsft;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t wr_flags;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t wr_rate;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint16_t wr_chan_freq;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint16_t wr_chan_flags;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int8_t wr_dbm_antsignal;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int8_t wr_dbm_antnoise;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t wr_antenna;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_rx_radiotap_header_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_RX_RADIOTAP_PRESENT \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ((1 << IEEE80211_RADIOTAP_TSFT) | \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (1 << IEEE80211_RADIOTAP_FLAGS) | \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (1 << IEEE80211_RADIOTAP_RATE) | \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (1 << IEEE80211_RADIOTAP_CHANNEL) | \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) | \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (1 << IEEE80211_RADIOTAP_ANTENNA))
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_tx_radiotap_header {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx struct ieee80211_radiotap_header wt_ihdr;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t wt_flags;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t wt_rate;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint16_t wt_chan_freq;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint16_t wt_chan_flags;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_tx_radiotap_header_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_TX_RADIOTAP_PRESENT \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ((1 << IEEE80211_RADIOTAP_FLAGS) | \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (1 << IEEE80211_RADIOTAP_RATE) | \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (1 << IEEE80211_RADIOTAP_CHANNEL))
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#endif
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_DMA_SYNC(area, flag) \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (void) ddi_dma_sync((area).dma_hdl, (area).offset, \
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx (area).alength, (flag))
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
6f12def440a1ce798ab128210a43414d173669f0pengcheng chen - Sun Microsystems - Beijing China#define WPI_CHK_FAST_RECOVER(sc) \
6f12def440a1ce798ab128210a43414d173669f0pengcheng chen - Sun Microsystems - Beijing China (sc->sc_ic.ic_state == IEEE80211_S_RUN && \
6f12def440a1ce798ab128210a43414d173669f0pengcheng chen - Sun Microsystems - Beijing China sc->sc_ic.ic_opmode == IEEE80211_M_STA)
6f12def440a1ce798ab128210a43414d173669f0pengcheng chen - Sun Microsystems - Beijing China
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_dma_area {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ddi_acc_handle_t acc_hdl; /* handle for memory */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx caddr_t mem_va; /* CPU VA of memory */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t nslots; /* number of slots */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t size; /* size per slot */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx size_t alength; /* allocated size */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx /* >= product of above */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ddi_dma_handle_t dma_hdl; /* DMA handle */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx offset_t offset; /* relative to handle */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ddi_dma_cookie_t cookie; /* associated cookie */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t ncookies;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t token; /* arbitrary identifier */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_dma_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_tx_data {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_dma_t dma_data;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_tx_desc_t *desc;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t paddr_desc;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_tx_cmd_t *cmd;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t paddr_cmd;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_tx_data_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_tx_ring {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_dma_t dma_desc;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_dma_t dma_cmd;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_tx_data_t *data;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int qid;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int count;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int queued;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int cur;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_tx_ring_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_rx_data {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_dma_t dma_data;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_rx_data_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_rx_ring {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_dma_t dma_desc;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t *desc;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_rx_data_t data[WPI_RX_RING_COUNT];
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int cur;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_rx_ring_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_amrr {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ieee80211_node_t in; /* must be the first */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int txcnt;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int retrycnt;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int success;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int success_threshold;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int recovery;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_amrr_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hxtypedef struct wpi_softc {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx struct ieee80211com sc_ic;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx dev_info_t *sc_dip;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int (*sc_newstate)(struct ieee80211com *,
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx enum ieee80211_state, int);
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx enum ieee80211_state sc_ostate;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx kmutex_t sc_glock;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx kmutex_t sc_mt_lock;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx kmutex_t sc_tx_lock;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx kcondvar_t sc_mt_cv;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx kcondvar_t sc_tx_cv;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx kcondvar_t sc_cmd_cv;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx kcondvar_t sc_fw_cv;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx kthread_t *sc_mf_thread;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_mf_thread_switch;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_flags;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_dmabuf_sz;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint16_t sc_clsz;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t sc_rev;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t sc_resv;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx /* shared area */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_dma_t sc_dma_sh;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_shared_t *sc_shared;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_tx_ring_t sc_txq[4];
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_tx_ring_t sc_cmdq;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_tx_ring_t sc_svcq;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_rx_ring_t sc_rxq;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx /* dma */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx const wpi_firmware_hdr_t *sc_hdr;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx const char *sc_boot;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx const char *sc_text;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx const char *sc_data;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_dma_t sc_dma_fw_text;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ddi_dma_cookie_t sc_fw_text_cookie[4];
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_dma_t sc_dma_fw_data;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ddi_dma_cookie_t sc_fw_data_cookie[4];
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ddi_acc_handle_t sc_handle;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx caddr_t sc_base;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ddi_iblock_cookie_t sc_iblk;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx wpi_config_t sc_config;
6f12def440a1ce798ab128210a43414d173669f0pengcheng chen - Sun Microsystems - Beijing China wpi_config_t sc_config_save;
6f12def440a1ce798ab128210a43414d173669f0pengcheng chen - Sun Microsystems - Beijing China
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint16_t sc_pwr1[14];
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint16_t sc_pwr2[14];
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_tx_timer;
626dff7950e2fd00077128f6e79bacf668f45cf7pengcheng chen - Sun Microsystems - Beijing China uint32_t sc_scan_next;
626dff7950e2fd00077128f6e79bacf668f45cf7pengcheng chen - Sun Microsystems - Beijing China uint32_t sc_scan_pending;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t *sc_fw_bin;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx ddi_softintr_t sc_notif_softint_id;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_notif_softint_pending;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_need_reschedule;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx clock_t sc_clk;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx /* kstats */
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_tx_nobuf;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_rx_nobuf;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_tx_err;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_rx_err;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint32_t sc_tx_retries;
19b23afcc35b3926d062efc1930e65c5fed1084dhx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#ifdef WPI_BPF
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx struct bpf_if *sc_drvbpf;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx union {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx struct wpi_rx_radiotap_header th;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t pad[64];
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx } sc_rxtapu;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define sc_rxtap sc_rxtapu.th
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int sc_rxtap_len;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx union {
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx struct wpi_tx_radiotap_header th;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx uint8_t pad[64];
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx } sc_txtapu;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define sc_txtap sc_txtapu.th
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx int sc_txtap_len;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#endif
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx} wpi_sc_t;
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_F_ATTACHED (1 << 0)
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_F_CMD_DONE (1 << 1)
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_F_FW_INIT (1 << 2)
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_F_HW_ERR_RECOVER (1 << 3)
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_F_RATE_AUTO_CTL (1 << 4)
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_F_RUNNING (1 << 5)
19b23afcc35b3926d062efc1930e65c5fed1084dhx#define WPI_F_SUSPEND (1 << 6)
19b23afcc35b3926d062efc1930e65c5fed1084dhx#define WPI_F_RADIO_OFF (1 << 7)
626dff7950e2fd00077128f6e79bacf668f45cf7pengcheng chen - Sun Microsystems - Beijing China#define WPI_F_SCANNING (1 << 8)
faceed938d6ba7344a332694084d213905e93375fei feng - Sun Microsystems - Beijing China#define WPI_F_QUIESCED (1 << 9)
d40f4da491abdcae192eb797766f5f44772a832fpengcheng chen - Sun Microsystems - Beijing China#define WPI_F_LAZY_RESUME (1 << 10)
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#define WPI_SUCCESS 0
40db2e2b777b79f3dd0d6d9629593a07f86b9c0azf#define WPI_FAIL (EIO)
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#ifdef __cplusplus
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx}
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#endif
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx
84f7a9b9dca4f23b5f50edef0e59d7eb44301114hx#endif /* _WPIVAR_H */