/* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * Copyright (c) 2005, 2006 * Damien Bergamini * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _RT2560_VAR_H #define _RT2560_VAR_H #ifdef __cplusplus extern "C" { #endif #define RAL_FLAG_RUNNING (1<<0) #define RAL_FLAG_SUSPENDING (1<<1) #define RAL_RCR_PROMISC (1<<0) #define RAL_RCR_MULTI (2<<0) #ifndef DDI_NT_NET_WIFI #define DDI_NT_NET_WIFI "ddi_network:wifi" #endif /* * Bit flags in the ral_dbg_flags */ #define RAL_DBG_MSG 0x000001 #define RAL_DBG_HW 0x000002 #define RAL_DBG_DMA 0x000004 #define RAL_DBG_INTR 0x000008 #define RAL_DBG_TX 0x000010 #define RAL_DBG_RX 0x000020 #define RAL_DBG_CHAN 0x000040 #define RAL_DBG_IOCTL 0x000080 #define RAL_DBG_MGMT 0x000100 #define RAL_DBG_STAT 0x000200 #define RAL_DBG_GLD 0x000400 #define RAL_DBG_80211 0x000800 #define RAL_DBG_STATE 0x001000 #define RAL_DBG_RXPACKET 0x002000 #define RAL_DBG_TXPACKET 0x004000 #define RAL_DBG_SUSPEND 0x008000 #define RAL_DBG_ALL 0x00ffff #define RT2560_RX_RADIOTAP_PRESENT \ ((1 << IEEE80211_RADIOTAP_TSFT) | \ (1 << IEEE80211_RADIOTAP_FLAGS) | \ (1 << IEEE80211_RADIOTAP_RATE) | \ (1 << IEEE80211_RADIOTAP_CHANNEL) | \ (1 << IEEE80211_RADIOTAP_ANTENNA) | \ (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)) #define RT2560_TX_RADIOTAP_PRESENT \ ((1 << IEEE80211_RADIOTAP_FLAGS) | \ (1 << IEEE80211_RADIOTAP_RATE) | \ (1 << IEEE80211_RADIOTAP_CHANNEL) | \ (1 << IEEE80211_RADIOTAP_ANTENNA)) struct dma_region { ddi_dma_handle_t dr_hnd; ddi_acc_handle_t dr_acc; ddi_dma_cookie_t dr_cookie; uint_t dr_ccnt; uint32_t dr_pbase; caddr_t dr_base; size_t dr_size; }; struct rt2560_tx_data { caddr_t buf; struct ieee80211_node *ni; struct ral_rssdesc id; }; /* * physaddr = dr_desc.dr_pbase * desc = dr_desc.dr_base, desc[i].physaddr = dr_txbuf[i].dr_pbase * data[i]->buf = dr_txbuf[i].dr_bas */ struct rt2560_tx_ring { uint32_t physaddr; struct rt2560_tx_desc *desc; struct rt2560_tx_data *data; struct dma_region dr_desc; struct dma_region *dr_txbuf; int count; int queued; int cur; int next; int cur_encrypt; int next_encrypt; kmutex_t tx_lock; }; struct rt2560_rx_data { caddr_t buf; int drop; }; struct rt2560_rx_ring { uint32_t physaddr; struct rt2560_rx_desc *desc; struct rt2560_rx_data *data; struct dma_region dr_desc; struct dma_region *dr_rxbuf; int count; int cur; int next; int cur_decrypt; kmutex_t rx_lock; }; struct rt2560_node { struct ieee80211_node ni; struct ral_rssadapt rssadapt; }; struct rt2560_softc { struct ieee80211com sc_ic; dev_info_t *sc_dev; /* ddi i/o handler */ ddi_acc_handle_t sc_ioh; caddr_t sc_rbase; /* interrupt */ ddi_iblock_cookie_t sc_iblock; kmutex_t sc_genlock; timeout_id_t sc_scan_id; timeout_id_t sc_rssadapt_id; enum ieee80211_state sc_ostate; timeout_id_t sc_state_id; int sc_tx_timer; uint32_t asic_rev; uint32_t eeprom_rev; uint8_t rf_rev; struct rt2560_tx_ring txq; struct rt2560_tx_ring prioq; struct rt2560_rx_ring rxq; uint32_t sc_need_sched; uint32_t sc_flags; uint32_t sc_rcr; /* RAL RCR */ uint16_t sc_cachelsz; ddi_softintr_t sc_softint_id; uint32_t sc_rx_pend; uint32_t rf_regs[4]; uint8_t txpow[14]; struct { uint8_t reg; uint8_t val; } bbp_prom[16]; int led_mode; int hw_radio; int rx_ant; int tx_ant; int nb_ant; int dwelltime; /* kstats */ uint32_t sc_tx_nobuf; uint32_t sc_rx_nobuf; uint32_t sc_tx_err; uint32_t sc_rx_err; uint32_t sc_tx_retries; int (*sc_newstate)(struct ieee80211com *, enum ieee80211_state, int); }; #define RAL_IS_RUNNING(_sc) (((_sc)->sc_flags & RAL_FLAG_RUNNING) && \ !((_sc)->sc_flags & RAL_FLAG_SUSPENDING)) #define RAL_IS_INITED(_sc) ((_sc)->sc_flags & RAL_FLAG_RUNNING) #define RAL_LOCK(sc) mutex_enter(&(sc)->sc_genlock) #define RAL_UNLOCK(sc) mutex_exit(&(sc)->sc_genlock) #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] #define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" #ifdef __cplusplus } #endif #endif /* _RT2560_VAR_H */