mailer.conf - Add missing send-mail for dma.
[dragonfly.git] / sys / dev / netif / acx / acxcmd.h
1 /*
2  * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
3  * 
4  * This code is derived from software contributed to The DragonFly Project
5  * by Sepherosa Ziehau <sepherosa@gmail.com>
6  * 
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in
15  *    the documentation and/or other materials provided with the
16  *    distribution.
17  * 3. Neither the name of The DragonFly Project nor the names of its
18  *    contributors may be used to endorse or promote products derived
19  *    from this software without specific, prior written permission.
20  * 
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
25  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  * 
34  * $DragonFly: src/sys/dev/netif/acx/acxcmd.h,v 1.6 2007/02/17 07:05:53 sephe Exp $
35  */
36
37 #ifndef _ACXCMD_H
38 #define _ACXCMD_H
39
40 #include "_acxcmd.h"
41
42 void    acx_init_cmd_reg(struct acx_softc *);
43
44 int     acx_enable_txchan(struct acx_softc *, uint8_t);
45 int     acx_enable_rxchan(struct acx_softc *, uint8_t);
46 int     acx_init_radio(struct acx_softc *, uint32_t, uint32_t);
47 int     acx_join_bss(struct acx_softc *, uint8_t,
48                      struct ieee80211_node *, struct ieee80211_channel *);
49
50 /*
51  * Possible values for the second parameter of acx_join_bss()
52  */
53 #define ACX_MODE_ADHOC  0
54 #define ACX_MODE_UNUSED 1
55 #define ACX_MODE_STA    2
56 #define ACX_MODE_AP     3
57
58 /*
59  * Do not use following functions directly
60  */
61 int     acx_get_conf(struct acx_softc *, uint16_t, void *, uint16_t);
62 int     acx_set_conf(struct acx_softc *, uint16_t, void *, uint16_t);
63 int     acx_set_tmplt(struct acx_softc *, uint16_t, void *, uint16_t);
64 int     acx_exec_command(struct acx_softc *, uint16_t, void *, uint16_t,
65                          void *, uint16_t);
66
67
68 /*
69  * NOTE:
70  * Following structs' fields are little endian
71  */
72
73 struct acx_conf {
74         uint16_t        conf_id;        /* see ACXCONF_ (_acxcmd.h) */
75         uint16_t        conf_data_len;
76 } __packed;
77
78 struct acx_conf_mmap {
79         struct acx_conf confcom;
80         uint32_t        code_start;
81         uint32_t        code_end;
82         uint32_t        wep_cache_start;
83         uint32_t        wep_cache_end;
84         uint32_t        pkt_tmplt_start;
85         uint32_t        pkt_tmplt_end;
86         uint32_t        fw_desc_start;
87         uint32_t        fw_desc_end;
88         uint32_t        memblk_start;
89         uint32_t        memblk_end;
90 } __packed;
91
92 struct acx_conf_wepopt {
93         struct acx_conf confcom;
94         uint16_t        nkey;
95         uint8_t         opt;    /* see WEPOPT_ */
96 } __packed;
97
98 #define WEPOPT_HDWEP    0       /* hardware WEP */
99
100 struct acx_conf_eaddr {
101         struct acx_conf confcom;
102         uint8_t         eaddr[IEEE80211_ADDR_LEN];
103 } __packed;
104
105 struct acx_conf_regdom {
106         struct acx_conf confcom;
107         uint8_t         regdom;
108         uint8_t         unknown;
109 } __packed;
110
111 struct acx_conf_antenna {
112         struct acx_conf confcom;
113         uint8_t         antenna;
114 } __packed;
115
116 struct acx_conf_fwrev {
117         struct acx_conf confcom;
118 #define ACX_FWREV_LEN   20
119         /*
120          * "Rev xx.xx.xx.xx"
121          * '\0' terminated
122          */
123         char            fw_rev[ACX_FWREV_LEN];
124         uint32_t        hw_id;
125 } __packed;
126
127 struct acx_conf_nretry_long {
128         struct acx_conf confcom;
129         uint8_t         nretry;
130 } __packed;
131
132 struct acx_conf_nretry_short {
133         struct acx_conf confcom;
134         uint8_t         nretry;
135 } __packed;
136
137 struct acx_conf_msdu_lifetime {
138         struct acx_conf confcom;
139         uint32_t        lifetime;
140 } __packed;
141
142 struct acx_conf_rate_fallback {
143         struct acx_conf confcom;
144         uint8_t         ratefb_enable;  /* 0/1 */
145 } __packed;
146
147 struct acx_conf_rxopt {
148         struct acx_conf confcom;
149         uint16_t        opt1;   /* see RXOPT1_ */
150         uint16_t        opt2;   /* see RXOPT2_ */
151 } __packed;
152
153 #define RXOPT1_INCL_RXBUF_HDR   0x2000  /* rxbuf with acx_rxbuf_hdr */
154 #define RXOPT1_RECV_SSID        0x0400  /* recv frame for joined SSID */
155 #define RXOPT1_FILT_BCAST       0x0200  /* filt broadcast pkt */
156 #define RXOPT1_RECV_MCAST1      0x0100  /* recv pkt for multicast addr1 */
157 #define RXOPT1_RECV_MCAST0      0x0080  /* recv pkt for multicast addr0 */
158 #define RXOPT1_FILT_ALLMULTI    0x0040  /* filt allmulti pkt */
159 #define RXOPT1_FILT_FSSID       0x0020  /* filt frame for foreign SSID */
160 #define RXOPT1_FILT_FDEST       0x0010  /* filt frame for foreign dest addr */
161 #define RXOPT1_PROMISC          0x0008  /* promisc mode */
162 #define RXOPT1_INCL_FCS         0x0004
163 #define RXOPT1_INCL_PHYHDR      0x0000  /* XXX 0x0002 */
164
165 #define RXOPT2_RECV_ASSOC_REQ   0x0800
166 #define RXOPT2_RECV_AUTH        0x0400
167 #define RXOPT2_RECV_BEACON      0x0200
168 #define RXOPT2_RECV_CF          0x0100
169 #define RXOPT2_RECV_CTRL        0x0080
170 #define RXOPT2_RECV_DATA        0x0040
171 #define RXOPT2_RECV_BROKEN      0x0020  /* broken frame */
172 #define RXOPT2_RECV_MGMT        0x0010
173 #define RXOPT2_RECV_PROBE_REQ   0x0008
174 #define RXOPT2_RECV_PROBE_RESP  0x0004
175 #define RXOPT2_RECV_ACK         0x0002  /* RTS/CTS/ACK */
176 #define RXOPT2_RECV_OTHER       0x0001
177
178 struct acx_conf_wep_txkey {
179         struct acx_conf confcom;
180         uint8_t         wep_txkey;
181 } __packed;
182
183
184 struct acx_tmplt_null_data {
185         uint16_t        size;
186         struct ieee80211_frame data;
187 } __packed;
188
189 struct acx_tmplt_probe_req {
190         uint16_t        size;
191         union {
192                 struct {
193                         struct ieee80211_frame f;
194                         uint8_t         var[1];
195                 } __packed      u_data;
196                 uint8_t         u_mem[0x44];
197         }               data;
198 } __packed;
199
200 #define ACX_TMPLT_PROBE_REQ_SIZ(var_len)        \
201         (sizeof(uint16_t) + sizeof(struct ieee80211_frame) + (var_len))
202
203 struct acx_tmplt_probe_resp {
204         uint16_t        size;
205         union {
206                 struct {
207                         struct ieee80211_frame f;
208                         uint8_t         time_stamp[8];
209                         uint16_t        beacon_intvl;
210                         uint16_t        cap;
211                         uint8_t         var[1];
212                 } __packed      u_data;
213                 uint8_t         u_mem[0x100];
214         }               data;
215 } __packed;
216
217 /* XXX same as acx_tmplt_probe_resp */
218 struct acx_tmplt_beacon {
219         uint16_t        size;
220         union {
221                 struct {
222                         struct ieee80211_frame f;
223                         uint8_t         time_stamp[8];
224                         uint16_t        beacon_intvl;
225                         uint16_t        cap;
226                         uint8_t         var[1];
227                 } __packed      u_data;
228                 uint8_t         u_mem[0x100];
229         }               data;
230 } __packed;
231
232 struct acx_tmplt_tim {
233         uint16_t        size;
234         union {
235                 struct ieee80211_tim_ie u_tim;
236                 uint8_t                 u_mem[0x100];
237         }               data;
238 } __packed;
239
240 #define ACX_INIT_TMPLT_FUNC(name)                       \
241 static __inline int                                     \
242 acx_init_##name##_tmplt(struct acx_softc *_sc)          \
243 {                                                       \
244         struct acx_tmplt_##name _tmplt;                 \
245                                                         \
246         bzero(&_tmplt, sizeof(_tmplt));                 \
247         return acx_set_tmplt(_sc, ACXCMD_TMPLT_##name,  \
248                              &_tmplt, sizeof(_tmplt));  \
249 }                                                       \
250 struct __hack
251
252 #define ACX_SET_TMPLT_FUNC(name)                        \
253 static __inline int                                     \
254 _acx_set_##name##_tmplt(struct acx_softc *_sc,          \
255                        struct acx_tmplt_##name *_tmplt, \
256                        uint16_t _tmplt_len)             \
257 {                                                       \
258         return acx_set_tmplt(_sc, ACXCMD_TMPLT_##name,  \
259                              _tmplt, _tmplt_len);       \
260 }                                                       \
261 struct __hack
262
263 #define _ACX_CONF_FUNC(sg, name, chip)                  \
264 static __inline int                                     \
265 acx##chip##_##sg##_##name##_conf(struct acx_softc *_sc, \
266         struct acx##chip##_conf_##name *_conf)          \
267 {                                                       \
268         return acx_##sg##_conf(_sc, ACX_CONF_##name,    \
269                                _conf, sizeof(*_conf));  \
270 }                                                       \
271 struct __hack
272
273 #define ACX_NOARG_FUNC(name)                            \
274 static __inline int                                     \
275 acx_##name(struct acx_softc *_sc)                       \
276 {                                                       \
277         return acx_exec_command(_sc, ACXCMD_##name,     \
278                                 NULL, 0, NULL, 0);      \
279 }                                                       \
280 struct __hack
281
282
283 #define ACXCMD_TMPLT_tim        ACXCMD_TMPLT_TIM
284 #define ACXCMD_TMPLT_beacon     ACXCMD_TMPLT_BEACON
285 #define ACXCMD_TMPLT_probe_resp ACXCMD_TMPLT_PROBE_RESP
286 #define ACXCMD_TMPLT_null_data  ACXCMD_TMPLT_NULL_DATA
287 #define ACXCMD_TMPLT_probe_req  ACXCMD_TMPLT_PROBE_REQ
288 ACX_INIT_TMPLT_FUNC(tim);
289 ACX_INIT_TMPLT_FUNC(null_data);
290 ACX_INIT_TMPLT_FUNC(beacon);
291 ACX_INIT_TMPLT_FUNC(probe_req);
292 ACX_INIT_TMPLT_FUNC(probe_resp);
293 ACX_SET_TMPLT_FUNC(tim);
294 ACX_SET_TMPLT_FUNC(null_data);
295 ACX_SET_TMPLT_FUNC(beacon);
296 ACX_SET_TMPLT_FUNC(probe_req);
297 ACX_SET_TMPLT_FUNC(probe_resp);
298
299 #define ACX_CONF_FUNC(sg, name) _ACX_CONF_FUNC(sg, name,)
300 #define ACX_CONF_wepopt         ACX_CONF_WEPOPT
301 #define ACX_CONF_mmap           ACX_CONF_MMAP
302 #define ACX_CONF_eaddr          ACX_CONF_EADDR
303 #define ACX_CONF_regdom         ACX_CONF_REGDOM
304 #define ACX_CONF_antenna        ACX_CONF_ANTENNA
305 #define ACX_CONF_fwrev          ACX_CONF_FWREV
306 #define ACX_CONF_nretry_long    ACX_CONF_NRETRY_LONG
307 #define ACX_CONF_nretry_short   ACX_CONF_NRETRY_SHORT
308 #define ACX_CONF_msdu_lifetime  ACX_CONF_MSDU_LIFETIME
309 #define ACX_CONF_rate_fallback  ACX_CONF_RATE_FALLBACK
310 #define ACX_CONF_rxopt          ACX_CONF_RXOPT
311 #define ACX_CONF_wep_txkey      ACX_CONF_WEP_TXKEY
312 ACX_CONF_FUNC(get, mmap);
313 ACX_CONF_FUNC(set, mmap);
314 ACX_CONF_FUNC(set, wepopt);
315 ACX_CONF_FUNC(get, eaddr);
316 ACX_CONF_FUNC(get, regdom);
317 ACX_CONF_FUNC(set, regdom);
318 ACX_CONF_FUNC(get, antenna);
319 ACX_CONF_FUNC(set, antenna);
320 ACX_CONF_FUNC(get, fwrev);
321 ACX_CONF_FUNC(set, nretry_long);
322 ACX_CONF_FUNC(set, nretry_short);
323 ACX_CONF_FUNC(set, msdu_lifetime);
324 ACX_CONF_FUNC(set, rate_fallback);
325 ACX_CONF_FUNC(set, rxopt);
326 ACX_CONF_FUNC(set, wep_txkey);
327
328 #define ACXCMD_sleep            ACXCMD_SLEEP
329 #define ACXCMD_wakeup           ACXCMD_WAKEUP
330 ACX_NOARG_FUNC(sleep);
331 ACX_NOARG_FUNC(wakeup);
332
333 #endif  /* !_ACXCMD_H */