xref: /onnv-gate/usr/src/uts/common/io/ral/rt2560_var.h (revision 9345:59181dd902dd)
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