Home | History | Annotate | Line # | Download | only in usb
if_urtwnvar.h revision 1.10.16.6
      1  1.10.16.6       nat /*	$NetBSD: if_urtwnvar.h,v 1.10.16.6 2020/04/16 15:32:24 nat Exp $	*/
      2        1.1    nonaka /*	$OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $	*/
      3        1.1    nonaka 
      4        1.1    nonaka /*-
      5        1.1    nonaka  * Copyright (c) 2010 Damien Bergamini <damien.bergamini (at) free.fr>
      6        1.1    nonaka  *
      7        1.1    nonaka  * Permission to use, copy, modify, and distribute this software for any
      8        1.1    nonaka  * purpose with or without fee is hereby granted, provided that the above
      9        1.1    nonaka  * copyright notice and this permission notice appear in all copies.
     10        1.1    nonaka  *
     11        1.1    nonaka  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     12        1.1    nonaka  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     13        1.1    nonaka  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     14        1.1    nonaka  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     15        1.1    nonaka  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     16        1.1    nonaka  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     17        1.1    nonaka  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     18        1.1    nonaka  */
     19        1.4  christos #ifndef _IF_URTWNVAR_H_
     20        1.4  christos #define _IF_URTWNVAR_H_
     21        1.1    nonaka 
     22  1.10.16.6       nat #include <sys/rndsource.h>
     23  1.10.16.6       nat 
     24        1.1    nonaka /*
     25        1.1    nonaka  * Driver definitions.
     26        1.1    nonaka  */
     27        1.1    nonaka #define URTWN_RX_LIST_COUNT		1
     28        1.1    nonaka #define URTWN_TX_LIST_COUNT		8
     29        1.6     skrll 
     30        1.1    nonaka #define URTWN_HOST_CMD_RING_COUNT	32
     31        1.1    nonaka 
     32        1.1    nonaka #define URTWN_RXBUFSZ	(16 * 1024)
     33  1.10.16.3  christos #define URTWN_TXBUFSZ	(sizeof(struct r92c_tx_desc_usb) + IEEE80211_MAX_LEN + 8)
     34        1.1    nonaka 
     35        1.1    nonaka #define URTWN_RIDX_COUNT	28
     36        1.1    nonaka 
     37        1.1    nonaka #define URTWN_TX_TIMEOUT	5000	/* ms */
     38        1.1    nonaka 
     39        1.1    nonaka #define URTWN_LED_LINK	0
     40        1.1    nonaka #define URTWN_LED_DATA	1
     41        1.1    nonaka 
     42        1.1    nonaka struct urtwn_rx_radiotap_header {
     43        1.1    nonaka 	struct ieee80211_radiotap_header wr_ihdr;
     44        1.1    nonaka 	uint8_t		wr_flags;
     45        1.1    nonaka 	uint8_t		wr_rate;
     46        1.1    nonaka 	uint16_t	wr_chan_freq;
     47        1.1    nonaka 	uint16_t	wr_chan_flags;
     48        1.1    nonaka 	uint8_t		wr_dbm_antsignal;
     49  1.10.16.5    martin };
     50        1.1    nonaka 
     51        1.1    nonaka #define URTWN_RX_RADIOTAP_PRESENT			\
     52        1.1    nonaka 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
     53        1.1    nonaka 	 1 << IEEE80211_RADIOTAP_RATE |			\
     54        1.1    nonaka 	 1 << IEEE80211_RADIOTAP_CHANNEL |		\
     55        1.1    nonaka 	 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL)
     56        1.1    nonaka 
     57        1.1    nonaka struct urtwn_tx_radiotap_header {
     58        1.1    nonaka 	struct ieee80211_radiotap_header wt_ihdr;
     59        1.1    nonaka 	uint8_t		wt_flags;
     60        1.1    nonaka 	uint16_t	wt_chan_freq;
     61        1.1    nonaka 	uint16_t	wt_chan_flags;
     62  1.10.16.5    martin };
     63        1.1    nonaka 
     64        1.1    nonaka #define URTWN_TX_RADIOTAP_PRESENT			\
     65        1.1    nonaka 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
     66        1.1    nonaka 	 1 << IEEE80211_RADIOTAP_CHANNEL)
     67        1.1    nonaka 
     68        1.1    nonaka struct urtwn_softc;
     69        1.1    nonaka 
     70        1.1    nonaka struct urtwn_rx_data {
     71       1.10       nat 	struct urtwn_softc		*sc;
     72       1.10       nat 	size_t				pidx;
     73       1.10       nat 	struct usbd_xfer		*xfer;
     74       1.10       nat 	uint8_t				*buf;
     75       1.10       nat 	TAILQ_ENTRY(urtwn_rx_data)	next;
     76        1.1    nonaka };
     77        1.1    nonaka 
     78        1.1    nonaka struct urtwn_tx_data {
     79        1.1    nonaka 	struct urtwn_softc		*sc;
     80        1.9     skrll 	size_t				pidx;
     81        1.9     skrll 	struct usbd_xfer		*xfer;
     82        1.1    nonaka 	uint8_t				*buf;
     83        1.1    nonaka 	TAILQ_ENTRY(urtwn_tx_data)	next;
     84        1.1    nonaka };
     85        1.1    nonaka 
     86        1.1    nonaka struct urtwn_host_cmd {
     87        1.1    nonaka 	void	(*cb)(struct urtwn_softc *, void *);
     88        1.1    nonaka 	uint8_t	data[256];
     89        1.1    nonaka };
     90        1.1    nonaka 
     91        1.1    nonaka struct urtwn_cmd_newstate {
     92        1.1    nonaka 	enum ieee80211_state	state;
     93        1.1    nonaka 	int			arg;
     94        1.1    nonaka };
     95        1.1    nonaka 
     96        1.1    nonaka struct urtwn_host_cmd_ring {
     97        1.1    nonaka 	struct urtwn_host_cmd	cmd[URTWN_HOST_CMD_RING_COUNT];
     98        1.1    nonaka 	int			cur;
     99        1.1    nonaka 	int			next;
    100        1.1    nonaka 	int			queued;
    101        1.1    nonaka };
    102        1.1    nonaka 
    103        1.1    nonaka #if 1	/* XXX: sys/net80211/ieee80211.h */
    104        1.1    nonaka 
    105        1.1    nonaka #define	IEEE80211_HTINFO_2NDCHAN	0x03	/* secondary/ext chan offset */
    106        1.1    nonaka #define	IEEE80211_HTINFO_2NDCHAN_S	0
    107        1.1    nonaka #define	IEEE80211_HTINFO_2NDCHAN_NONE	0x00	/* no secondary/ext channel */
    108        1.1    nonaka #define	IEEE80211_HTINFO_2NDCHAN_ABOVE	0x01	/* above private channel */
    109        1.1    nonaka /* NB: 2 is reserved */
    110        1.1    nonaka #define	IEEE80211_HTINFO_2NDCHAN_BELOW	0x03	/* below primary channel */
    111        1.1    nonaka #endif	/* XXX: 1 */
    112        1.1    nonaka 
    113        1.1    nonaka struct urtwn_softc {
    114        1.1    nonaka 	device_t			sc_dev;
    115        1.1    nonaka 	struct ieee80211com		sc_ic;
    116  1.10.16.2      phil 	struct ifqueue			sc_sendq;
    117  1.10.16.1      phil 	int				(*sc_newstate)(struct ieee80211vap *,
    118        1.1    nonaka 					    enum ieee80211_state, int);
    119        1.1    nonaka 
    120        1.9     skrll 	struct usbd_device *		sc_udev;
    121        1.9     skrll 	struct usbd_interface *		sc_iface;
    122        1.1    nonaka 	u_int				sc_flags;
    123        1.1    nonaka #define URTWN_FLAG_CCK_HIPWR	__BIT(0)
    124        1.1    nonaka #define	URTWN_FLAG_ATTACHED	__BIT(1)
    125        1.1    nonaka #define	URTWN_FLAG_FWREADY	__BIT(2)
    126        1.1    nonaka 	int				sc_dying;
    127        1.1    nonaka 
    128        1.1    nonaka 	struct usb_task			sc_task;
    129        1.1    nonaka 	callout_t			sc_scan_to;
    130        1.1    nonaka 	callout_t			sc_calib_to;
    131        1.1    nonaka 
    132  1.10.16.4    martin 	kcondvar_t			sc_task_cv;
    133        1.1    nonaka 	kmutex_t			sc_task_mtx;
    134        1.1    nonaka 	kmutex_t			sc_fwcmd_mtx;
    135        1.1    nonaka 	kmutex_t			sc_tx_mtx;
    136       1.10       nat 	kmutex_t			sc_rx_mtx;
    137        1.4  christos 	kmutex_t			sc_write_mtx;
    138  1.10.16.4    martin 	kmutex_t			sc_media_mtx;	/* XXX */
    139        1.1    nonaka 
    140       1.10       nat 	struct usbd_pipe *		rx_pipe[R92C_MAX_EPIN];
    141        1.1    nonaka 	int				rx_npipe;
    142        1.9     skrll 	struct usbd_pipe *		tx_pipe[R92C_MAX_EPOUT];
    143        1.1    nonaka 	int				tx_npipe;
    144        1.1    nonaka 	int				ac2idx[WME_NUM_AC];
    145        1.1    nonaka 
    146        1.1    nonaka 	u_int				chip;
    147        1.1    nonaka #define URTWN_CHIP_92C		0x01
    148        1.1    nonaka #define URTWN_CHIP_92C_1T2R	0x02
    149        1.1    nonaka #define URTWN_CHIP_UMC		0x04
    150        1.1    nonaka #define URTWN_CHIP_UMC_A_CUT	0x08
    151        1.8    nonaka #define URTWN_CHIP_88E		0x10
    152       1.10       nat #define URTWN_CHIP_92EU		0x20
    153        1.8    nonaka 
    154        1.8    nonaka 	void				(*sc_rf_write)(struct urtwn_softc *,
    155        1.8    nonaka 					    int, uint8_t, uint32_t);
    156        1.8    nonaka 	int				(*sc_power_on)(struct urtwn_softc *);
    157        1.8    nonaka 	int				(*sc_dma_init)(struct urtwn_softc *);
    158        1.1    nonaka 
    159        1.1    nonaka 	uint8_t				board_type;
    160        1.1    nonaka 	uint8_t				regulatory;
    161        1.1    nonaka 	uint8_t				pa_setting;
    162        1.1    nonaka 	int				avg_pwdb;
    163        1.1    nonaka 	int				thcal_state;
    164        1.1    nonaka 	int				thcal_lctemp;
    165        1.5  christos 	size_t				ntxchains;
    166        1.5  christos 	size_t				nrxchains;
    167        1.1    nonaka 	int				ledlink;
    168        1.1    nonaka 	bool				iqk_inited;
    169        1.1    nonaka 
    170        1.1    nonaka 	int				tx_timer;
    171        1.1    nonaka 
    172        1.1    nonaka 	struct urtwn_host_cmd_ring	cmdq;
    173        1.1    nonaka 	int				fwcur;
    174       1.10       nat 	struct urtwn_rx_data		rx_data[R92C_MAX_EPIN][URTWN_RX_LIST_COUNT];
    175        1.9     skrll 	struct urtwn_tx_data		tx_data[R92C_MAX_EPOUT][URTWN_TX_LIST_COUNT];
    176        1.9     skrll 	TAILQ_HEAD(, urtwn_tx_data)	tx_free_list[R92C_MAX_EPOUT];
    177       1.10       nat 	TAILQ_HEAD(, urtwn_rx_data)	rx_free_list[R92C_MAX_EPIN];
    178        1.1    nonaka 
    179        1.1    nonaka 	struct r92c_rom			rom;
    180       1.10       nat 	uint8_t				r88e_rom[4096];
    181        1.8    nonaka 	uint8_t				cck_tx_pwr[6];
    182        1.8    nonaka 	uint8_t				ht40_tx_pwr[5];
    183        1.8    nonaka 	int8_t				bw20_tx_pwr_diff;
    184        1.8    nonaka 	int8_t				ofdm_tx_pwr_diff;
    185        1.1    nonaka 
    186        1.1    nonaka 	uint32_t			rf_chnlbw[R92C_MAX_CHAINS];
    187        1.1    nonaka 
    188        1.1    nonaka 	struct bpf_if *			sc_drvbpf;
    189        1.1    nonaka 	union {
    190        1.1    nonaka 		struct urtwn_rx_radiotap_header th;
    191        1.1    nonaka 		uint8_t	pad[64];
    192        1.1    nonaka 	}				sc_rxtapu;
    193        1.1    nonaka #define sc_rxtap	sc_rxtapu.th
    194        1.1    nonaka 	int				sc_rxtap_len;
    195        1.1    nonaka 	union {
    196        1.1    nonaka 		struct urtwn_tx_radiotap_header th;
    197        1.1    nonaka 		uint8_t	pad[64];
    198        1.1    nonaka 	}				sc_txtapu;
    199        1.1    nonaka #define sc_txtap	sc_txtapu.th
    200        1.1    nonaka 	int				sc_txtap_len;
    201       1.10       nat 	bool				sc_running;
    202  1.10.16.3  christos 
    203  1.10.16.3  christos 	struct ieee80211_beacon_offsets sc_bo;
    204  1.10.16.5    martin 	krndsource_t rnd_source;	/* random source */
    205        1.1    nonaka };
    206        1.4  christos 
    207        1.4  christos #endif /* _IF_URTWNVAR_H_ */
    208