14609Szf162725 /* 2*9345SQuaker.Fang@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 34609Szf162725 * Use is subject to license terms. 44609Szf162725 */ 54609Szf162725 64609Szf162725 /* 74609Szf162725 * Copyright (c) 2005, 2006 84609Szf162725 * Damien Bergamini <damien.bergamini@free.fr> 94609Szf162725 * 104609Szf162725 * Permission to use, copy, modify, and distribute this software for any 114609Szf162725 * purpose with or without fee is hereby granted, provided that the above 124609Szf162725 * copyright notice and this permission notice appear in all copies. 134609Szf162725 * 144609Szf162725 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 154609Szf162725 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 164609Szf162725 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 174609Szf162725 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 184609Szf162725 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 194609Szf162725 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 204609Szf162725 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 214609Szf162725 */ 224609Szf162725 #ifndef _RT2560_VAR_H 234609Szf162725 #define _RT2560_VAR_H 244609Szf162725 254609Szf162725 #ifdef __cplusplus 264609Szf162725 extern "C" { 274609Szf162725 #endif 284609Szf162725 294609Szf162725 #define RAL_FLAG_RUNNING (1<<0) 308230SQuaker.Fang@Sun.COM #define RAL_FLAG_SUSPENDING (1<<1) 314609Szf162725 324609Szf162725 #define RAL_RCR_PROMISC (1<<0) 334609Szf162725 #define RAL_RCR_MULTI (2<<0) 344609Szf162725 354609Szf162725 #ifndef DDI_NT_NET_WIFI 364609Szf162725 #define DDI_NT_NET_WIFI "ddi_network:wifi" 374609Szf162725 #endif 384609Szf162725 394609Szf162725 /* 404609Szf162725 * Bit flags in the ral_dbg_flags 414609Szf162725 */ 424609Szf162725 #define RAL_DBG_MSG 0x000001 434609Szf162725 #define RAL_DBG_HW 0x000002 444609Szf162725 #define RAL_DBG_DMA 0x000004 454609Szf162725 #define RAL_DBG_INTR 0x000008 464609Szf162725 #define RAL_DBG_TX 0x000010 474609Szf162725 #define RAL_DBG_RX 0x000020 484609Szf162725 #define RAL_DBG_CHAN 0x000040 494609Szf162725 #define RAL_DBG_IOCTL 0x000080 504609Szf162725 #define RAL_DBG_MGMT 0x000100 514609Szf162725 #define RAL_DBG_STAT 0x000200 524609Szf162725 #define RAL_DBG_GLD 0x000400 534609Szf162725 #define RAL_DBG_80211 0x000800 544609Szf162725 #define RAL_DBG_STATE 0x001000 554609Szf162725 #define RAL_DBG_RXPACKET 0x002000 564609Szf162725 #define RAL_DBG_TXPACKET 0x004000 578230SQuaker.Fang@Sun.COM #define RAL_DBG_SUSPEND 0x008000 588230SQuaker.Fang@Sun.COM #define RAL_DBG_ALL 0x00ffff 594609Szf162725 604609Szf162725 #define RT2560_RX_RADIOTAP_PRESENT \ 614609Szf162725 ((1 << IEEE80211_RADIOTAP_TSFT) | \ 624609Szf162725 (1 << IEEE80211_RADIOTAP_FLAGS) | \ 634609Szf162725 (1 << IEEE80211_RADIOTAP_RATE) | \ 644609Szf162725 (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 654609Szf162725 (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 664609Szf162725 (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)) 674609Szf162725 684609Szf162725 #define RT2560_TX_RADIOTAP_PRESENT \ 694609Szf162725 ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 704609Szf162725 (1 << IEEE80211_RADIOTAP_RATE) | \ 714609Szf162725 (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 724609Szf162725 (1 << IEEE80211_RADIOTAP_ANTENNA)) 734609Szf162725 744609Szf162725 struct dma_region { 754609Szf162725 ddi_dma_handle_t dr_hnd; 764609Szf162725 ddi_acc_handle_t dr_acc; 774609Szf162725 ddi_dma_cookie_t dr_cookie; 784609Szf162725 uint_t dr_ccnt; 794609Szf162725 uint32_t dr_pbase; 804609Szf162725 caddr_t dr_base; 814609Szf162725 size_t dr_size; 824609Szf162725 }; 834609Szf162725 844609Szf162725 struct rt2560_tx_data { 854609Szf162725 caddr_t buf; 864609Szf162725 struct ieee80211_node *ni; 874609Szf162725 struct ral_rssdesc id; 884609Szf162725 }; 894609Szf162725 904609Szf162725 /* 914609Szf162725 * physaddr = dr_desc.dr_pbase 924609Szf162725 * desc = dr_desc.dr_base, desc[i].physaddr = dr_txbuf[i].dr_pbase 934609Szf162725 * data[i]->buf = dr_txbuf[i].dr_bas 944609Szf162725 */ 954609Szf162725 struct rt2560_tx_ring { 964609Szf162725 uint32_t physaddr; 974609Szf162725 struct rt2560_tx_desc *desc; 984609Szf162725 struct rt2560_tx_data *data; 994609Szf162725 1004609Szf162725 struct dma_region dr_desc; 1014609Szf162725 struct dma_region *dr_txbuf; 1024609Szf162725 1034609Szf162725 int count; 1044609Szf162725 int queued; 1054609Szf162725 int cur; 1064609Szf162725 int next; 1074609Szf162725 int cur_encrypt; 1084609Szf162725 int next_encrypt; 1094609Szf162725 kmutex_t tx_lock; 1104609Szf162725 }; 1114609Szf162725 1124609Szf162725 struct rt2560_rx_data { 1134609Szf162725 caddr_t buf; 1144609Szf162725 int drop; 1154609Szf162725 }; 1164609Szf162725 1174609Szf162725 struct rt2560_rx_ring { 1184609Szf162725 uint32_t physaddr; 1194609Szf162725 struct rt2560_rx_desc *desc; 1204609Szf162725 struct rt2560_rx_data *data; 1214609Szf162725 1224609Szf162725 struct dma_region dr_desc; 1234609Szf162725 struct dma_region *dr_rxbuf; 1244609Szf162725 1254609Szf162725 int count; 1264609Szf162725 int cur; 1274609Szf162725 int next; 1284609Szf162725 int cur_decrypt; 1294609Szf162725 kmutex_t rx_lock; 1304609Szf162725 }; 1314609Szf162725 1324609Szf162725 struct rt2560_node { 1334609Szf162725 struct ieee80211_node ni; 1344609Szf162725 struct ral_rssadapt rssadapt; 1354609Szf162725 }; 1364609Szf162725 1374609Szf162725 struct rt2560_softc { 1384609Szf162725 struct ieee80211com sc_ic; 1394609Szf162725 dev_info_t *sc_dev; 1404609Szf162725 1414609Szf162725 /* ddi i/o handler */ 1424609Szf162725 ddi_acc_handle_t sc_ioh; 1434609Szf162725 caddr_t sc_rbase; 1444609Szf162725 1454609Szf162725 /* interrupt */ 1464609Szf162725 ddi_iblock_cookie_t sc_iblock; 1474609Szf162725 1484609Szf162725 kmutex_t sc_genlock; 1494609Szf162725 1504609Szf162725 timeout_id_t sc_scan_id; 1514609Szf162725 timeout_id_t sc_rssadapt_id; 1524609Szf162725 1534609Szf162725 enum ieee80211_state sc_ostate; 1544609Szf162725 timeout_id_t sc_state_id; 1554609Szf162725 1564609Szf162725 int sc_tx_timer; 1574609Szf162725 1584609Szf162725 uint32_t asic_rev; 1594609Szf162725 uint32_t eeprom_rev; 1604609Szf162725 uint8_t rf_rev; 1614609Szf162725 1624609Szf162725 struct rt2560_tx_ring txq; 1634609Szf162725 struct rt2560_tx_ring prioq; 1644609Szf162725 struct rt2560_rx_ring rxq; 1654609Szf162725 1664609Szf162725 uint32_t sc_need_sched; 1674609Szf162725 uint32_t sc_flags; 1684609Szf162725 uint32_t sc_rcr; /* RAL RCR */ 1694609Szf162725 1704609Szf162725 uint16_t sc_cachelsz; 1714609Szf162725 ddi_softintr_t sc_softint_id; 1724609Szf162725 1734609Szf162725 uint32_t sc_rx_pend; 1744609Szf162725 1754609Szf162725 uint32_t rf_regs[4]; 1764609Szf162725 uint8_t txpow[14]; 1774609Szf162725 1784609Szf162725 struct { 1794609Szf162725 uint8_t reg; 1804609Szf162725 uint8_t val; 1814609Szf162725 } bbp_prom[16]; 1824609Szf162725 1834609Szf162725 int led_mode; 1844609Szf162725 int hw_radio; 1854609Szf162725 int rx_ant; 1864609Szf162725 int tx_ant; 1874609Szf162725 int nb_ant; 1884609Szf162725 1894609Szf162725 int dwelltime; 1904609Szf162725 1914609Szf162725 /* kstats */ 1924609Szf162725 uint32_t sc_tx_nobuf; 1934609Szf162725 uint32_t sc_rx_nobuf; 1944609Szf162725 uint32_t sc_tx_err; 1954609Szf162725 uint32_t sc_rx_err; 1964609Szf162725 uint32_t sc_tx_retries; 1974609Szf162725 1984609Szf162725 int (*sc_newstate)(struct ieee80211com *, 1994609Szf162725 enum ieee80211_state, int); 2004609Szf162725 }; 2014609Szf162725 2028230SQuaker.Fang@Sun.COM #define RAL_IS_RUNNING(_sc) (((_sc)->sc_flags & RAL_FLAG_RUNNING) && \ 2038230SQuaker.Fang@Sun.COM !((_sc)->sc_flags & RAL_FLAG_SUSPENDING)) 2048230SQuaker.Fang@Sun.COM #define RAL_IS_INITED(_sc) ((_sc)->sc_flags & RAL_FLAG_RUNNING) 2054609Szf162725 #define RAL_LOCK(sc) mutex_enter(&(sc)->sc_genlock) 2064609Szf162725 #define RAL_UNLOCK(sc) mutex_exit(&(sc)->sc_genlock) 2074609Szf162725 2084609Szf162725 #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] 2094609Szf162725 #define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" 2104609Szf162725 2114609Szf162725 #ifdef __cplusplus 2124609Szf162725 } 2134609Szf162725 #endif 2144609Szf162725 2154609Szf162725 #endif /* _RT2560_VAR_H */ 216