xref: /netbsd/sys/dev/ic/anvar.h (revision bf9ec67e)
1 /*	$NetBSD: anvar.h,v 1.7 2001/06/29 11:24:42 onoe Exp $	*/
2 /*
3  * Copyright (c) 1997, 1998, 1999
4  *	Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. All advertising materials mentioning features or use of this software
15  *    must display the following acknowledgement:
16  *	This product includes software developed by Bill Paul.
17  * 4. Neither the name of the author nor the names of any co-contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
25  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31  * THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  * $FreeBSD: src/sys/dev/an/if_aironet_ieee.h,v 1.2 2000/11/13 23:04:12 wpaul Exp $
34  */
35 
36 #ifndef _DEV_IC_ANVAR_H
37 #define _DEV_IC_ANVAR_H
38 
39 /*
40  * This header defines a simple command interface to the FreeBSD
41  * Aironet driver (an) driver, which is used to set certain
42  * device-specific parameters which can't be easily managed through
43  * ifconfig(8). No, sysctl(2) is not the answer. I said a _simple_
44  * interface, didn't I.
45  */
46 
47 #ifndef SIOCSAIRONET
48 #define SIOCSAIRONET	SIOCSIFGENERIC
49 #endif
50 
51 #ifndef SIOCGAIRONET
52 #define SIOCGAIRONET	SIOCGIFGENERIC
53 #endif
54 
55 #define AN_TIMEOUT	65536
56 
57 /* Default network name: ANY */
58 #define AN_DEFAULT_NETNAME	""
59 
60 /* The nodename must be less than 16 bytes */
61 #define AN_DEFAULT_NODENAME	"NetBSD"
62 
63 #define AN_DEFAULT_IBSS		"NetBSD IBSS"
64 
65 /* The interrupts we will handle */
66 #define AN_INTRS	\
67 	(AN_EV_RX|AN_EV_TX|AN_EV_TX_EXC|AN_EV_ALLOC|AN_EV_LINKSTAT)
68 
69 /*
70  * register space access macros
71  */
72 #define CSR_WRITE_2(sc, reg, val)	\
73 	bus_space_write_2(sc->an_btag, sc->an_bhandle, reg, val)
74 
75 #define CSR_READ_2(sc, reg)		\
76 	bus_space_read_2(sc->an_btag, sc->an_bhandle, reg)
77 
78 #define CSR_WRITE_1(sc, reg, val)	\
79 	bus_space_write_1(sc->an_btag, sc->an_bhandle, reg, val)
80 
81 #define CSR_READ_1(sc, reg)		\
82 	bus_space_read_1(sc->an_btag, sc->an_bhandle, reg)
83 
84 /*
85  * Technically I don't think there's a limit to a record
86  * length. The largest record is the one that contains the CIS
87  * data, which is 240 words long, so 256 should be a safe
88  * value.
89  */
90 #define AN_MAX_DATALEN	512
91 
92 struct an_req {
93 	u_int16_t	an_len;
94 	u_int16_t	an_type;
95 	u_int16_t	an_val[AN_MAX_DATALEN];
96 };
97 
98 /*
99  * Private LTV records (interpreted only by the driver). This is
100  * a minor kludge to allow reading the interface statistics from
101  * the driver.
102  */
103 #define AN_RID_IFACE_STATS	0x0100
104 #define AN_RID_MGMT_XMIT	0x0200
105 #define AN_RID_ZERO_CACHE	0x0300
106 #define AN_RID_READ_CACHE	0x0400
107 #define AN_RID_TX_SPEED		0x1234
108 
109 /*
110  * Aironet IEEE signal strength cache
111  *
112  * driver keeps cache of last
113  * MAXANCACHE packets to arrive including signal strength info.
114  * daemons may read this via ioctl
115  *
116  * Each entry in the wi_sigcache has a unique macsrc.
117  */
118 #define MAXANCACHE      10
119 
120 struct an_sigcache {
121 	char	macsrc[6];	/* unique MAC address for entry */
122 	int	ipsrc;		/* ip address associated with packet */
123 	int	signal;		/* signal strength of the packet */
124 	int	noise;		/* noise value */
125 	int	quality;	/* quality of the packet */
126 };
127 
128 #define AN_TXGAP_80211		0
129 #define AN_TXGAP_8023		0
130 
131 #define AN_TX_RING_CNT		4
132 #define AN_INC(x, y)		(x) = (x + 1) % y
133 
134 struct an_tx_ring_data {
135 	u_int16_t		an_tx_fids[AN_TX_RING_CNT];
136 	u_int16_t		an_tx_ring[AN_TX_RING_CNT];
137 	int			an_tx_prod;
138 	int			an_tx_cons;
139 };
140 
141 struct an_wepkey {
142 	int			an_wep_key[16];
143 	int			an_wep_keylen;
144 };
145 
146 struct an_softc	{
147 	struct device		an_dev;
148 	struct ethercom		arpcom;
149 	int			(*sc_enable) __P((struct an_softc *));
150 	void			(*sc_disable) __P((struct an_softc *));
151 	int			sc_enabled;
152 	int			sc_invalid;
153 	struct ifmedia		sc_media;
154 
155 	bus_space_handle_t	an_bhandle;
156 	bus_space_tag_t		an_btag;
157 	struct an_ltv_genconfig	an_config;
158 	struct an_ltv_caps	an_caps;
159 	struct an_ltv_ssidlist	an_ssidlist;
160 	struct an_ltv_aplist	an_aplist;
161 	struct an_wepkey 	an_wepkeys[IEEE80211_WEP_NKID];
162 	int			an_tx_key;
163 	int			an_perskeylen[IEEE80211_WEP_NKID];
164 	int			an_tx_perskey;
165 	int			an_tx_rate;
166 	struct an_tx_ring_data	an_rdata;
167 	struct an_ltv_status	an_status;
168 	u_int8_t		an_associated;
169 	int			an_sigitems;
170 	struct an_sigcache	an_sigcache[MAXANCACHE];
171 	int			an_nextitem;
172 	struct callout		an_stat_ch;
173 	struct an_req		an_reqbuf;
174 };
175 
176 int	an_attach		__P((struct an_softc *));
177 int	an_detach		__P((struct an_softc *));
178 int	an_activate		__P((struct device *, enum devact));
179 void	an_power	        __P((int, void *));
180 void	an_shutdown	        __P((void *));
181 int	an_intr			__P((void *));
182 
183 #endif	/* _DEV_IC_ANVAR_H */
184