Home | History | Annotate | Line # | Download | only in pci
if_rtwnreg.h revision 1.4.16.1
      1  1.4.16.1  christos /*	$NetBSD: if_rtwnreg.h,v 1.4.16.1 2019/06/10 22:07:16 christos Exp $	*/
      2       1.1    nonaka /*	$OpenBSD: if_rtwnreg.h,v 1.3 2015/06/14 08:02:47 stsp 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  * Copyright (c) 2015 Stefan Sperling <stsp (at) openbsd.org>
      7       1.1    nonaka  *
      8       1.1    nonaka  * Permission to use, copy, modify, and distribute this software for any
      9       1.1    nonaka  * purpose with or without fee is hereby granted, provided that the above
     10       1.1    nonaka  * copyright notice and this permission notice appear in all copies.
     11       1.1    nonaka  *
     12       1.1    nonaka  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     13       1.1    nonaka  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     14       1.1    nonaka  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     15       1.1    nonaka  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     16       1.1    nonaka  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     17       1.1    nonaka  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     18       1.1    nonaka  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     19       1.1    nonaka  */
     20       1.1    nonaka 
     21  1.4.16.1  christos #ifndef _DEV_PCI_RTWNREG_H_
     22  1.4.16.1  christos #define	_DEV_PCI_RTWNREG_H_
     23       1.1    nonaka 
     24       1.1    nonaka /* Maximum number of output pipes is 3. */
     25       1.1    nonaka #define R92C_MAX_EPOUT	3
     26       1.1    nonaka 
     27       1.1    nonaka #define R92C_PUBQ_NPAGES	176
     28       1.1    nonaka #define R92C_HPQ_NPAGES		41
     29       1.1    nonaka #define R92C_LPQ_NPAGES		28
     30       1.1    nonaka #define R92C_TXPKTBUF_COUNT	256
     31       1.1    nonaka #define R92C_TX_PAGE_COUNT	\
     32       1.1    nonaka 	(R92C_PUBQ_NPAGES + R92C_HPQ_NPAGES + R92C_LPQ_NPAGES)
     33       1.1    nonaka #define R92C_TX_PAGE_BOUNDARY	(R92C_TX_PAGE_COUNT + 1)
     34       1.1    nonaka 
     35       1.1    nonaka /* USB Requests. */
     36       1.1    nonaka #define R92C_REQ_REGS	0x05
     37       1.1    nonaka 
     38       1.1    nonaka /*
     39       1.1    nonaka  * Driver definitions.
     40       1.1    nonaka  */
     41       1.1    nonaka #define RTWN_NTXQUEUES			9
     42       1.1    nonaka #define RTWN_RX_LIST_COUNT		256
     43       1.1    nonaka #define RTWN_TX_LIST_COUNT		256
     44       1.3    nonaka #define RTWN_TX_LIST_LOMARK		192
     45       1.3    nonaka #define RTWN_TX_LIST_HIMARK		255
     46       1.1    nonaka #define RTWN_HOST_CMD_RING_COUNT	32
     47       1.1    nonaka 
     48       1.1    nonaka /* TX queue indices. */
     49       1.1    nonaka #define RTWN_BK_QUEUE			0
     50       1.1    nonaka #define RTWN_BE_QUEUE			1
     51       1.1    nonaka #define RTWN_VI_QUEUE			2
     52       1.1    nonaka #define RTWN_VO_QUEUE			3
     53       1.1    nonaka #define RTWN_BEACON_QUEUE		4
     54       1.1    nonaka #define RTWN_TXCMD_QUEUE		5
     55       1.1    nonaka #define RTWN_MGNT_QUEUE			6
     56       1.1    nonaka #define RTWN_HIGH_QUEUE			7
     57       1.1    nonaka #define RTWN_HCCA_QUEUE			8
     58       1.1    nonaka 
     59       1.1    nonaka /* RX queue indices. */
     60       1.1    nonaka #define RTWN_RX_QUEUE			0
     61       1.1    nonaka 
     62       1.1    nonaka #define RTWN_RXBUFSZ	(16 * 1024)
     63       1.1    nonaka #define RTWN_TXBUFSZ	(sizeof(struct r92c_tx_desc) + IEEE80211_MAX_LEN)
     64       1.1    nonaka 
     65       1.1    nonaka #define RTWN_RIDX_COUNT	28
     66       1.1    nonaka 
     67       1.1    nonaka #define RTWN_TX_TIMEOUT	5000	/* ms */
     68       1.1    nonaka 
     69       1.1    nonaka #define RTWN_LED_LINK	0
     70       1.1    nonaka #define RTWN_LED_DATA	1
     71       1.1    nonaka 
     72       1.1    nonaka struct rtwn_rx_radiotap_header {
     73       1.1    nonaka 	struct ieee80211_radiotap_header wr_ihdr;
     74       1.1    nonaka 	uint8_t		wr_flags;
     75       1.1    nonaka 	uint8_t		wr_rate;
     76       1.1    nonaka 	uint16_t	wr_chan_freq;
     77       1.1    nonaka 	uint16_t	wr_chan_flags;
     78       1.1    nonaka 	uint8_t		wr_dbm_antsignal;
     79       1.1    nonaka } __packed;
     80       1.1    nonaka 
     81       1.1    nonaka #define RTWN_RX_RADIOTAP_PRESENT			\
     82       1.1    nonaka 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
     83       1.1    nonaka 	 1 << IEEE80211_RADIOTAP_RATE |			\
     84       1.1    nonaka 	 1 << IEEE80211_RADIOTAP_CHANNEL |		\
     85       1.1    nonaka 	 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL)
     86       1.1    nonaka 
     87       1.1    nonaka struct rtwn_tx_radiotap_header {
     88       1.1    nonaka 	struct ieee80211_radiotap_header wt_ihdr;
     89       1.1    nonaka 	uint8_t		wt_flags;
     90       1.1    nonaka 	uint16_t	wt_chan_freq;
     91       1.1    nonaka 	uint16_t	wt_chan_flags;
     92       1.1    nonaka } __packed;
     93       1.1    nonaka 
     94       1.1    nonaka #define RTWN_TX_RADIOTAP_PRESENT			\
     95       1.1    nonaka 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
     96       1.1    nonaka 	 1 << IEEE80211_RADIOTAP_CHANNEL)
     97       1.1    nonaka 
     98       1.1    nonaka struct rtwn_softc;
     99       1.1    nonaka 
    100       1.1    nonaka struct rtwn_rx_data {
    101       1.1    nonaka 	bus_dmamap_t		map;
    102       1.1    nonaka 	struct mbuf		*m;
    103       1.1    nonaka };
    104       1.1    nonaka 
    105       1.1    nonaka struct rtwn_rx_ring {
    106  1.4.16.1  christos 	struct r92c_rx_desc_pci	*desc;
    107       1.1    nonaka 	bus_dmamap_t		map;
    108       1.1    nonaka 	bus_dma_segment_t	seg;
    109       1.1    nonaka 	int			nsegs;
    110       1.1    nonaka 	struct rtwn_rx_data	rx_data[RTWN_RX_LIST_COUNT];
    111       1.1    nonaka 
    112       1.1    nonaka };
    113       1.1    nonaka struct rtwn_tx_data {
    114       1.1    nonaka 	bus_dmamap_t			map;
    115       1.1    nonaka 	struct mbuf			*m;
    116       1.1    nonaka 	struct ieee80211_node		*ni;
    117       1.1    nonaka };
    118       1.1    nonaka 
    119       1.1    nonaka struct rtwn_tx_ring {
    120       1.1    nonaka 	bus_dmamap_t		map;
    121       1.1    nonaka 	bus_dma_segment_t	seg;
    122       1.1    nonaka 	int			nsegs;
    123  1.4.16.1  christos 	struct r92c_tx_desc_pci	*desc;
    124       1.1    nonaka 	struct rtwn_tx_data	tx_data[RTWN_TX_LIST_COUNT];
    125       1.1    nonaka 	int			queued;
    126       1.1    nonaka 	int			cur;
    127       1.1    nonaka };
    128       1.1    nonaka 
    129       1.1    nonaka struct rtwn_host_cmd {
    130       1.1    nonaka 	void	(*cb)(struct rtwn_softc *, void *);
    131       1.1    nonaka 	uint8_t	data[256];
    132       1.1    nonaka };
    133       1.1    nonaka 
    134       1.1    nonaka struct rtwn_cmd_key {
    135       1.1    nonaka 	struct ieee80211_key	key;
    136       1.1    nonaka 	uint16_t		associd;
    137       1.1    nonaka };
    138       1.1    nonaka 
    139       1.1    nonaka struct rtwn_host_cmd_ring {
    140       1.1    nonaka 	struct rtwn_host_cmd	cmd[RTWN_HOST_CMD_RING_COUNT];
    141       1.1    nonaka 	int			cur;
    142       1.1    nonaka 	int			next;
    143       1.1    nonaka 	int			queued;
    144       1.1    nonaka };
    145       1.1    nonaka 
    146       1.1    nonaka struct rtwn_softc {
    147       1.1    nonaka 	device_t			sc_dev;
    148       1.1    nonaka 	struct ethercom			sc_ec;
    149       1.1    nonaka 	struct ieee80211com		sc_ic;
    150       1.1    nonaka 	int				(*sc_newstate)(struct ieee80211com *,
    151       1.1    nonaka 					    enum ieee80211_state, int);
    152       1.1    nonaka 
    153       1.1    nonaka 	/* PCI specific goo. */
    154       1.1    nonaka 	bus_dma_tag_t 			sc_dmat;
    155       1.1    nonaka 	pci_chipset_tag_t		sc_pc;
    156       1.1    nonaka 	pcitag_t			sc_tag;
    157       1.1    nonaka 	void				*sc_ih;
    158       1.1    nonaka 	pci_intr_handle_t		*sc_pihp;
    159       1.1    nonaka 	bus_space_tag_t			sc_st;
    160       1.1    nonaka 	bus_space_handle_t		sc_sh;
    161       1.1    nonaka 	bus_size_t			sc_mapsize;
    162       1.1    nonaka 	int				sc_cap_off;
    163       1.4    nonaka 	void				*sc_soft_ih;
    164       1.1    nonaka 
    165       1.1    nonaka 	struct callout			scan_to;
    166       1.1    nonaka 	struct callout			calib_to;
    167       1.1    nonaka 	void				*init_task;
    168       1.1    nonaka 	int				ac2idx[WME_NUM_AC];
    169       1.1    nonaka 	uint32_t			sc_flags;
    170       1.1    nonaka #define RTWN_FLAG_FW_LOADED	__BIT(0)
    171       1.1    nonaka #define RTWN_FLAG_CCK_HIPWR	__BIT(1)
    172       1.1    nonaka 
    173       1.1    nonaka 	uint32_t			chip;
    174       1.1    nonaka #define RTWN_CHIP_88C		__BIT(0)
    175       1.1    nonaka #define RTWN_CHIP_92C		__BIT(1)
    176       1.1    nonaka #define RTWN_CHIP_92C_1T2R	__BIT(2)
    177       1.1    nonaka #define RTWN_CHIP_UMC		__BIT(3)
    178       1.1    nonaka #define RTWN_CHIP_UMC_A_CUT	__BIT(4)
    179       1.1    nonaka #define RTWN_CHIP_UMC_B_CUT	__BIT(5)
    180       1.1    nonaka 
    181       1.1    nonaka 	uint8_t				board_type;
    182       1.1    nonaka 	uint8_t				regulatory;
    183       1.1    nonaka 	uint8_t				pa_setting;
    184       1.1    nonaka 	int				avg_pwdb;
    185       1.1    nonaka 	int				thcal_state;
    186       1.1    nonaka 	int				thcal_lctemp;
    187       1.1    nonaka 	int				ntxchains;
    188       1.1    nonaka 	int				nrxchains;
    189       1.1    nonaka 	int				ledlink;
    190       1.1    nonaka 
    191       1.1    nonaka 	int				sc_tx_timer;
    192       1.1    nonaka 	int				fwcur;
    193       1.1    nonaka 	struct rtwn_rx_ring		rx_ring;
    194       1.1    nonaka 	struct rtwn_tx_ring		tx_ring[RTWN_NTXQUEUES];
    195       1.1    nonaka 	uint32_t			qfullmsk;
    196       1.1    nonaka 	struct r92c_rom			rom;
    197       1.1    nonaka 
    198       1.1    nonaka 	uint32_t			rf_chnlbw[R92C_MAX_CHAINS];
    199       1.1    nonaka 	struct bpf_if			*sc_drvbpf;
    200       1.1    nonaka 
    201       1.1    nonaka 	union {
    202       1.1    nonaka 		struct rtwn_rx_radiotap_header th;
    203       1.1    nonaka 		uint8_t	pad[64];
    204       1.1    nonaka 	}				sc_rxtapu;
    205       1.1    nonaka #define sc_rxtap	sc_rxtapu.th
    206       1.1    nonaka 	int				sc_rxtap_len;
    207       1.1    nonaka 
    208       1.1    nonaka 	union {
    209       1.1    nonaka 		struct rtwn_tx_radiotap_header th;
    210       1.1    nonaka 		uint8_t	pad[64];
    211       1.1    nonaka 	}				sc_txtapu;
    212       1.1    nonaka #define sc_txtap	sc_txtapu.th
    213       1.1    nonaka 	int				sc_txtap_len;
    214       1.1    nonaka };
    215       1.1    nonaka 
    216       1.1    nonaka #define	sc_if		sc_ec.ec_if
    217       1.1    nonaka #define	GET_IFP(sc)	(&(sc)->sc_if)
    218       1.1    nonaka #define	IC2IFP(ic)	((ic)->ic_ifp)
    219       1.1    nonaka 
    220  1.4.16.1  christos #endif /* _DEV_PCI_RTWNREG_H_ */
    221