xref: /netbsd-src/sys/dev/usb/if_rumvar.h (revision 7a9a30c5e763bb556f73924ae04973e33cc385da)
1*7a9a30c5Sthorpej /*	$NetBSD: if_rumvar.h,v 1.12 2020/03/15 23:04:50 thorpej Exp $	*/
23bf7c476Skiyohara /*	$OpenBSD: if_rumvar.h,v 1.7 2006/11/13 20:06:38 damien Exp $	*/
3fc0bc19fSjoerg 
4fc0bc19fSjoerg /*-
5fc0bc19fSjoerg  * Copyright (c) 2005, 2006 Damien Bergamini <damien.bergamini@free.fr>
6fc0bc19fSjoerg  * Copyright (c) 2006 Niall O'Higgins <niallo@openbsd.org>
7fc0bc19fSjoerg  *
8fc0bc19fSjoerg  * Permission to use, copy, modify, and distribute this software for any
9fc0bc19fSjoerg  * purpose with or without fee is hereby granted, provided that the above
10fc0bc19fSjoerg  * copyright notice and this permission notice appear in all copies.
11fc0bc19fSjoerg  *
12fc0bc19fSjoerg  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13fc0bc19fSjoerg  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14fc0bc19fSjoerg  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15fc0bc19fSjoerg  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16fc0bc19fSjoerg  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17fc0bc19fSjoerg  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18fc0bc19fSjoerg  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19fc0bc19fSjoerg  */
20fc0bc19fSjoerg 
213bf7c476Skiyohara #define RUM_RX_LIST_COUNT	1
2287931599Sjmcneill #define RUM_TX_LIST_COUNT	8
23fc0bc19fSjoerg 
24fc0bc19fSjoerg struct rum_rx_radiotap_header {
25fc0bc19fSjoerg 	struct ieee80211_radiotap_header wr_ihdr;
26fc0bc19fSjoerg 	uint8_t		wr_flags;
27fc0bc19fSjoerg 	uint8_t		wr_rate;
28fc0bc19fSjoerg 	uint16_t	wr_chan_freq;
29fc0bc19fSjoerg 	uint16_t	wr_chan_flags;
30fc0bc19fSjoerg 	uint8_t		wr_antenna;
31fc0bc19fSjoerg 	uint8_t		wr_antsignal;
3249e18393Smrg };
33fc0bc19fSjoerg 
34fc0bc19fSjoerg #define RT2573_RX_RADIOTAP_PRESENT					\
35fc0bc19fSjoerg 	((1 << IEEE80211_RADIOTAP_FLAGS) |				\
36fc0bc19fSjoerg 	 (1 << IEEE80211_RADIOTAP_RATE) |				\
37fc0bc19fSjoerg 	 (1 << IEEE80211_RADIOTAP_CHANNEL) |				\
38fc0bc19fSjoerg 	 (1 << IEEE80211_RADIOTAP_ANTENNA) |				\
39fc0bc19fSjoerg 	 (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL))
40fc0bc19fSjoerg 
41fc0bc19fSjoerg struct rum_tx_radiotap_header {
42fc0bc19fSjoerg 	struct ieee80211_radiotap_header wt_ihdr;
43fc0bc19fSjoerg 	uint8_t		wt_flags;
44fc0bc19fSjoerg 	uint8_t		wt_rate;
45fc0bc19fSjoerg 	uint16_t	wt_chan_freq;
46fc0bc19fSjoerg 	uint16_t	wt_chan_flags;
47fc0bc19fSjoerg 	uint8_t		wt_antenna;
4849e18393Smrg };
49fc0bc19fSjoerg 
50fc0bc19fSjoerg #define RT2573_TX_RADIOTAP_PRESENT						\
51fc0bc19fSjoerg 	((1 << IEEE80211_RADIOTAP_FLAGS) |				\
52fc0bc19fSjoerg 	 (1 << IEEE80211_RADIOTAP_RATE) |				\
53fc0bc19fSjoerg 	 (1 << IEEE80211_RADIOTAP_CHANNEL) |				\
54fc0bc19fSjoerg 	 (1 << IEEE80211_RADIOTAP_ANTENNA))
55fc0bc19fSjoerg 
56fc0bc19fSjoerg struct rum_softc;
57fc0bc19fSjoerg 
58fc0bc19fSjoerg struct rum_tx_data {
59fc0bc19fSjoerg 	struct rum_softc	*sc;
604e8e6643Sskrll 	struct usbd_xfer	*xfer;
61fc0bc19fSjoerg 	uint8_t			*buf;
62fc0bc19fSjoerg 	struct mbuf		*m;
63fc0bc19fSjoerg 	struct ieee80211_node	*ni;
64fc0bc19fSjoerg };
65fc0bc19fSjoerg 
66fc0bc19fSjoerg struct rum_rx_data {
67fc0bc19fSjoerg 	struct rum_softc	*sc;
684e8e6643Sskrll 	struct usbd_xfer	*xfer;
69fc0bc19fSjoerg 	uint8_t			*buf;
70fc0bc19fSjoerg 	struct mbuf		*m;
71fc0bc19fSjoerg };
72fc0bc19fSjoerg 
73fc0bc19fSjoerg struct rum_softc {
74e74917f4Sdyoung 	device_t			sc_dev;
75fc0bc19fSjoerg 	struct ethercom			sc_ec;
76fc0bc19fSjoerg #define sc_if	sc_ec.ec_if
77fc0bc19fSjoerg 	struct ieee80211com		sc_ic;
78fc0bc19fSjoerg 	int				(*sc_newstate)(struct ieee80211com *,
79fc0bc19fSjoerg 					    enum ieee80211_state, int);
80fc0bc19fSjoerg 
81*7a9a30c5Sthorpej 	kmutex_t			sc_media_mtx;	/* XXX */
82*7a9a30c5Sthorpej 
834e8e6643Sskrll 	struct usbd_device *		sc_udev;
844e8e6643Sskrll 	struct usbd_interface *		sc_iface;
85fc0bc19fSjoerg 	int				sc_flags;
86fc0bc19fSjoerg #define	RT2573_FWLOADED	(1 << 0)
87fc0bc19fSjoerg 
88fc0bc19fSjoerg 	struct ieee80211_channel	*sc_curchan;
89fc0bc19fSjoerg 
90fc0bc19fSjoerg 	int				sc_rx_no;
91fc0bc19fSjoerg 	int				sc_tx_no;
92fc0bc19fSjoerg 
93fc0bc19fSjoerg 	uint16_t			macbbp_rev;
94fc0bc19fSjoerg 	uint8_t				rf_rev;
95fc0bc19fSjoerg 	uint8_t				rffreq;
96fc0bc19fSjoerg 
974e8e6643Sskrll 	struct usbd_xfer *		amrr_xfer;
98fc0bc19fSjoerg 
994e8e6643Sskrll 	struct usbd_pipe *		sc_rx_pipeh;
1004e8e6643Sskrll 	struct usbd_pipe *		sc_tx_pipeh;
101fc0bc19fSjoerg 
102fc0bc19fSjoerg 	enum ieee80211_state		sc_state;
10387931599Sjmcneill 	int				sc_arg;
104fc0bc19fSjoerg 	struct usb_task			sc_task;
105fc0bc19fSjoerg 
106fc0bc19fSjoerg 	struct ieee80211_amrr		amrr;
107fc0bc19fSjoerg 	struct ieee80211_amrr_node	amn;
108fc0bc19fSjoerg 
1093bf7c476Skiyohara 	struct rum_rx_data		rx_data[RUM_RX_LIST_COUNT];
1103bf7c476Skiyohara 	struct rum_tx_data		tx_data[RUM_TX_LIST_COUNT];
111fc0bc19fSjoerg 	int				tx_queued;
11287931599Sjmcneill 	int				tx_cur;
113fc0bc19fSjoerg 
114fc0bc19fSjoerg 	struct ieee80211_beacon_offsets	sc_bo;
115fc0bc19fSjoerg 
116e74917f4Sdyoung 	struct callout			sc_scan_ch;
117e74917f4Sdyoung 	struct callout			sc_amrr_ch;
118fc0bc19fSjoerg 
119fc0bc19fSjoerg 	int				sc_tx_timer;
120fc0bc19fSjoerg 
121fc0bc19fSjoerg 	uint32_t			sta[6];
122fc0bc19fSjoerg 	uint32_t			rf_regs[4];
123fc0bc19fSjoerg 	uint8_t				txpow[44];
124fc0bc19fSjoerg 
125fc0bc19fSjoerg 	struct {
126fc0bc19fSjoerg 		uint8_t	val;
127fc0bc19fSjoerg 		uint8_t	reg;
128fc0bc19fSjoerg 	} __packed			bbp_prom[16];
129fc0bc19fSjoerg 
130fc0bc19fSjoerg 	int				hw_radio;
131fc0bc19fSjoerg 	int				rx_ant;
132fc0bc19fSjoerg 	int				tx_ant;
133fc0bc19fSjoerg 	int				nb_ant;
134fc0bc19fSjoerg 	int				ext_2ghz_lna;
135fc0bc19fSjoerg 	int				ext_5ghz_lna;
136fc0bc19fSjoerg 	int				rssi_2ghz_corr;
137fc0bc19fSjoerg 	int				rssi_5ghz_corr;
138fc0bc19fSjoerg 	int				sifs;
139fc0bc19fSjoerg 	uint8_t				bbp17;
140fc0bc19fSjoerg 
14164da563dSpooka 	struct bpf_if *			sc_drvbpf;
142fc0bc19fSjoerg 
143fc0bc19fSjoerg 	union {
144fc0bc19fSjoerg 		struct rum_rx_radiotap_header th;
145fc0bc19fSjoerg 		uint8_t	pad[64];
146fc0bc19fSjoerg 	}				sc_rxtapu;
147fc0bc19fSjoerg #define sc_rxtap	sc_rxtapu.th
148fc0bc19fSjoerg 	int				sc_rxtap_len;
149fc0bc19fSjoerg 
150fc0bc19fSjoerg 	union {
151fc0bc19fSjoerg 		struct rum_tx_radiotap_header th;
152fc0bc19fSjoerg 		uint8_t	pad[64];
153fc0bc19fSjoerg 	}				sc_txtapu;
154fc0bc19fSjoerg #define sc_txtap	sc_txtapu.th
155fc0bc19fSjoerg 	int				sc_txtap_len;
156fc0bc19fSjoerg };
157