1/*	$FreeBSD: stable/11/sys/dev/ral/rt2560var.h 345636 2019-03-28 09:50:25Z avos $	*/
2
3/*-
4 * Copyright (c) 2005, 2006
5 *	Damien Bergamini <damien.bergamini@free.fr>
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20struct rt2560_rx_radiotap_header {
21	struct ieee80211_radiotap_header wr_ihdr;
22	uint64_t	wr_tsf;
23	uint8_t		wr_flags;
24	uint8_t		wr_rate;
25	uint16_t	wr_chan_freq;
26	uint16_t	wr_chan_flags;
27	int8_t		wr_antsignal;
28	int8_t		wr_antnoise;
29	uint8_t		wr_antenna;
30} __packed __aligned(8);
31
32#define RT2560_RX_RADIOTAP_PRESENT					\
33	((1 << IEEE80211_RADIOTAP_TSFT) |				\
34	 (1 << IEEE80211_RADIOTAP_FLAGS) |				\
35	 (1 << IEEE80211_RADIOTAP_RATE) |				\
36	 (1 << IEEE80211_RADIOTAP_CHANNEL) |				\
37	 (1 << IEEE80211_RADIOTAP_ANTENNA) |				\
38	 (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |			\
39	 (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE))
40
41struct rt2560_tx_radiotap_header {
42	struct ieee80211_radiotap_header wt_ihdr;
43	uint8_t		wt_flags;
44	uint8_t		wt_rate;
45	uint16_t	wt_chan_freq;
46	uint16_t	wt_chan_flags;
47	uint8_t		wt_antenna;
48} __packed;
49
50#define RT2560_TX_RADIOTAP_PRESENT					\
51	((1 << IEEE80211_RADIOTAP_FLAGS) |				\
52	 (1 << IEEE80211_RADIOTAP_RATE) |				\
53	 (1 << IEEE80211_RADIOTAP_CHANNEL) |				\
54	 (1 << IEEE80211_RADIOTAP_ANTENNA))
55
56struct rt2560_tx_data {
57	bus_dmamap_t			map;
58	struct mbuf			*m;
59	struct ieee80211_node		*ni;
60	uint8_t				rix;
61	int8_t				rssi;
62};
63
64struct rt2560_tx_ring {
65	bus_dma_tag_t		desc_dmat;
66	bus_dma_tag_t		data_dmat;
67	bus_dmamap_t		desc_map;
68	bus_addr_t		physaddr;
69	struct rt2560_tx_desc	*desc;
70	struct rt2560_tx_data	*data;
71	int			count;
72	int			queued;
73	int			cur;
74	int			next;
75	int			cur_encrypt;
76	int			next_encrypt;
77};
78
79struct rt2560_rx_data {
80	bus_dmamap_t	map;
81	struct mbuf	*m;
82	int		drop;
83};
84
85struct rt2560_rx_ring {
86	bus_dma_tag_t		desc_dmat;
87	bus_dma_tag_t		data_dmat;
88	bus_dmamap_t		desc_map;
89	bus_addr_t		physaddr;
90	struct rt2560_rx_desc	*desc;
91	struct rt2560_rx_data	*data;
92	int			count;
93	int			cur;
94	int			next;
95	int			cur_decrypt;
96};
97
98struct rt2560_vap {
99	struct ieee80211vap	ral_vap;
100
101	int			(*ral_newstate)(struct ieee80211vap *,
102				    enum ieee80211_state, int);
103};
104#define	RT2560_VAP(vap)		((struct rt2560_vap *)(vap))
105
106struct rt2560_softc {
107	struct ieee80211com	sc_ic;
108	struct mtx		sc_mtx;
109	struct mbufq		sc_snd;
110	device_t		sc_dev;
111	bus_space_tag_t		sc_st;
112	bus_space_handle_t	sc_sh;
113
114	struct callout		watchdog_ch;
115
116	int			sc_tx_timer;
117	int                     sc_invalid;
118	int			sc_debug;
119/*
120 * The same in both up to here
121 * ------------------------------------------------
122 */
123	uint32_t		asic_rev;
124	uint32_t		eeprom_rev;
125	uint8_t			rf_rev;
126	uint8_t			rssi_corr;
127
128	struct rt2560_tx_ring	txq;
129	struct rt2560_tx_ring	prioq;
130	struct rt2560_tx_ring	atimq;
131	struct rt2560_tx_ring	bcnq;
132	struct rt2560_rx_ring	rxq;
133
134	uint32_t		rf_regs[4];
135	uint8_t			txpow[14];
136
137	struct {
138		uint8_t	reg;
139		uint8_t	val;
140	}			bbp_prom[16];
141
142	int			led_mode;
143	int			hw_radio;
144	int			rx_ant;
145	int			tx_ant;
146	int			nb_ant;
147
148	struct rt2560_rx_radiotap_header sc_rxtap;
149	struct rt2560_tx_radiotap_header sc_txtap;
150
151#define RT2560_F_INPUT_RUNNING	0x1
152#define RT2560_F_RUNNING	0x2
153	int			sc_flags;
154};
155
156int	rt2560_attach(device_t, int);
157int	rt2560_detach(void *);
158void	rt2560_stop(void *);
159void	rt2560_resume(void *);
160void	rt2560_intr(void *);
161
162#define RAL_LOCK(sc)		mtx_lock(&(sc)->sc_mtx)
163#define RAL_LOCK_ASSERT(sc)	mtx_assert(&(sc)->sc_mtx, MA_OWNED)
164#define RAL_UNLOCK(sc)		mtx_unlock(&(sc)->sc_mtx)
165