xref: /openbsd-src/sys/dev/usb/if_rumvar.h (revision ab0b1be78a33b04be9f7ec4a3d24ce14843759cb)
1*ab0b1be7Smglocker /*	$OpenBSD: if_rumvar.h,v 1.9 2013/04/15 09:23:01 mglocker Exp $	*/
214761d2dSdamien 
3b9520dbfSniallo /*-
4b9520dbfSniallo  * Copyright (c) 2005, 2006 Damien Bergamini <damien.bergamini@free.fr>
5b9520dbfSniallo  * Copyright (c) 2006 Niall O'Higgins <niallo@openbsd.org>
6b9520dbfSniallo  *
7b9520dbfSniallo  * Permission to use, copy, modify, and distribute this software for any
8b9520dbfSniallo  * purpose with or without fee is hereby granted, provided that the above
9b9520dbfSniallo  * copyright notice and this permission notice appear in all copies.
10b9520dbfSniallo  *
11b9520dbfSniallo  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12b9520dbfSniallo  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13b9520dbfSniallo  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14b9520dbfSniallo  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15b9520dbfSniallo  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16b9520dbfSniallo  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17b9520dbfSniallo  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18b9520dbfSniallo  */
19b9520dbfSniallo 
20bc303e9bSdamien #define RUM_RX_LIST_COUNT	1
21bc303e9bSdamien #define RUM_TX_LIST_COUNT	8
22b9520dbfSniallo 
23b9520dbfSniallo struct rum_rx_radiotap_header {
24b9520dbfSniallo 	struct ieee80211_radiotap_header wr_ihdr;
25b9520dbfSniallo 	uint8_t		wr_flags;
26b9520dbfSniallo 	uint8_t		wr_rate;
27b9520dbfSniallo 	uint16_t	wr_chan_freq;
28b9520dbfSniallo 	uint16_t	wr_chan_flags;
29b9520dbfSniallo 	uint8_t		wr_antenna;
30b9520dbfSniallo 	uint8_t		wr_antsignal;
31b9520dbfSniallo } __packed;
32b9520dbfSniallo 
33b9520dbfSniallo #define RT2573_RX_RADIOTAP_PRESENT					\
34b9520dbfSniallo 	((1 << IEEE80211_RADIOTAP_FLAGS) |				\
35b9520dbfSniallo 	 (1 << IEEE80211_RADIOTAP_RATE) |				\
36b9520dbfSniallo 	 (1 << IEEE80211_RADIOTAP_CHANNEL) |				\
37b9520dbfSniallo 	 (1 << IEEE80211_RADIOTAP_ANTENNA) |				\
38b9520dbfSniallo 	 (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL))
39b9520dbfSniallo 
40b9520dbfSniallo struct rum_tx_radiotap_header {
41b9520dbfSniallo 	struct ieee80211_radiotap_header wt_ihdr;
42b9520dbfSniallo 	uint8_t		wt_flags;
43b9520dbfSniallo 	uint8_t		wt_rate;
44b9520dbfSniallo 	uint16_t	wt_chan_freq;
45b9520dbfSniallo 	uint16_t	wt_chan_flags;
46b9520dbfSniallo 	uint8_t		wt_antenna;
47b9520dbfSniallo } __packed;
48b9520dbfSniallo 
49b9520dbfSniallo #define RT2573_TX_RADIOTAP_PRESENT						\
50b9520dbfSniallo 	((1 << IEEE80211_RADIOTAP_FLAGS) |				\
51b9520dbfSniallo 	 (1 << IEEE80211_RADIOTAP_RATE) |				\
52b9520dbfSniallo 	 (1 << IEEE80211_RADIOTAP_CHANNEL) |				\
53b9520dbfSniallo 	 (1 << IEEE80211_RADIOTAP_ANTENNA))
54b9520dbfSniallo 
55b9520dbfSniallo struct rum_softc;
56b9520dbfSniallo 
57b9520dbfSniallo struct rum_tx_data {
58b9520dbfSniallo 	struct rum_softc	*sc;
59*ab0b1be7Smglocker 	struct usbd_xfer	*xfer;
60b9520dbfSniallo 	uint8_t			*buf;
61b9520dbfSniallo 	struct ieee80211_node	*ni;
62b9520dbfSniallo };
63b9520dbfSniallo 
64b9520dbfSniallo struct rum_rx_data {
65b9520dbfSniallo 	struct rum_softc	*sc;
66*ab0b1be7Smglocker 	struct usbd_xfer	*xfer;
67b9520dbfSniallo 	uint8_t			*buf;
68b9520dbfSniallo 	struct mbuf		*m;
69b9520dbfSniallo };
70b9520dbfSniallo 
71b9520dbfSniallo struct rum_softc {
728c5d01eeSmk 	struct device			sc_dev;
73b9520dbfSniallo 	struct ieee80211com		sc_ic;
74b9520dbfSniallo 	int				(*sc_newstate)(struct ieee80211com *,
75b9520dbfSniallo 					    enum ieee80211_state, int);
76b9520dbfSniallo 
77*ab0b1be7Smglocker 	struct usbd_device		*sc_udev;
78*ab0b1be7Smglocker 	struct usbd_interface		*sc_iface;
79b9520dbfSniallo 
80b9520dbfSniallo 	struct ieee80211_channel	*sc_curchan;
81b9520dbfSniallo 
82b9520dbfSniallo 	int				sc_rx_no;
83b9520dbfSniallo 	int				sc_tx_no;
84b9520dbfSniallo 
85b9520dbfSniallo 	uint16_t			macbbp_rev;
86b9520dbfSniallo 	uint8_t				rf_rev;
87b9520dbfSniallo 	uint8_t				rffreq;
88b9520dbfSniallo 
89*ab0b1be7Smglocker 	struct usbd_xfer		*amrr_xfer;
9014761d2dSdamien 
91*ab0b1be7Smglocker 	struct usbd_pipe		*sc_rx_pipeh;
92*ab0b1be7Smglocker 	struct usbd_pipe		*sc_tx_pipeh;
93b9520dbfSniallo 
94b9520dbfSniallo 	enum ieee80211_state		sc_state;
9574a1cafeSdamien 	int				sc_arg;
96b9520dbfSniallo 	struct usb_task			sc_task;
97b9520dbfSniallo 
9814761d2dSdamien 	struct ieee80211_amrr		amrr;
9914761d2dSdamien 	struct ieee80211_amrr_node	amn;
10014761d2dSdamien 
101bc303e9bSdamien 	struct rum_rx_data		rx_data[RUM_RX_LIST_COUNT];
102bc303e9bSdamien 	struct rum_tx_data		tx_data[RUM_TX_LIST_COUNT];
103b9520dbfSniallo 	int				tx_queued;
104bc303e9bSdamien 	int				tx_cur;
105b9520dbfSniallo 
106bc303e9bSdamien 	struct timeout			scan_to;
107bc303e9bSdamien 	struct timeout			amrr_to;
108b9520dbfSniallo 
109b9520dbfSniallo 	int				sc_tx_timer;
110b9520dbfSniallo 
11114761d2dSdamien 	uint32_t			sta[6];
112b9520dbfSniallo 	uint32_t			rf_regs[4];
11314761d2dSdamien 	uint8_t				txpow[44];
114b9520dbfSniallo 
115b9520dbfSniallo 	struct {
116b9520dbfSniallo 		uint8_t	val;
117b9520dbfSniallo 		uint8_t	reg;
118b9520dbfSniallo 	} __packed			bbp_prom[16];
119b9520dbfSniallo 
120b9520dbfSniallo 	int				hw_radio;
121b9520dbfSniallo 	int				rx_ant;
122b9520dbfSniallo 	int				tx_ant;
123b9520dbfSniallo 	int				nb_ant;
12414761d2dSdamien 	int				ext_2ghz_lna;
12514761d2dSdamien 	int				ext_5ghz_lna;
12614761d2dSdamien 	int				rssi_2ghz_corr;
12714761d2dSdamien 	int				rssi_5ghz_corr;
12814761d2dSdamien 	int				sifs;
12914761d2dSdamien 	uint8_t				bbp17;
130b9520dbfSniallo 
131b9520dbfSniallo #if NBPFILTER > 0
132b9520dbfSniallo 	caddr_t				sc_drvbpf;
133b9520dbfSniallo 
134b9520dbfSniallo 	union {
135b9520dbfSniallo 		struct rum_rx_radiotap_header th;
136b9520dbfSniallo 		uint8_t	pad[64];
137b9520dbfSniallo 	}				sc_rxtapu;
138b9520dbfSniallo #define sc_rxtap	sc_rxtapu.th
139b9520dbfSniallo 	int				sc_rxtap_len;
140b9520dbfSniallo 
141b9520dbfSniallo 	union {
142b9520dbfSniallo 		struct rum_tx_radiotap_header th;
143b9520dbfSniallo 		uint8_t	pad[64];
144b9520dbfSniallo 	}				sc_txtapu;
145b9520dbfSniallo #define sc_txtap	sc_txtapu.th
146b9520dbfSniallo 	int				sc_txtap_len;
147b9520dbfSniallo #endif
148b9520dbfSniallo };
149