Annotation of sys/dev/pcmcia/if_malovar.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: if_malovar.h,v 1.24 2007/08/09 21:24:02 mglocker Exp $ */
2:
3: /*
4: * Copyright (c) 2007 Marcus Glocker <mglocker@openbsd.org>
5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: */
18:
19: /* simplify bus space access */
20: #define MALO_READ_1(sc, reg) \
21: bus_space_read_1((sc)->sc_iot, (sc)->sc_ioh, (reg))
22: #define MALO_READ_2(sc, reg) \
23: bus_space_read_2((sc)->sc_iot, (sc)->sc_ioh, (reg))
24: #define MALO_READ_MULTI_2(sc, reg, off, size) \
25: bus_space_read_raw_multi_2((sc)->sc_iot, (sc)->sc_ioh, (reg), (off), \
26: (size))
27: #define MALO_WRITE_1(sc, reg, val) \
28: bus_space_write_1((sc)->sc_iot, (sc)->sc_ioh, (reg), (val))
29: #define MALO_WRITE_2(sc, reg, val) \
30: bus_space_write_2((sc)->sc_iot, (sc)->sc_ioh, (reg), (val))
31: #define MALO_WRITE_MULTI_2(sc, reg, off, size) \
32: bus_space_write_raw_multi_2((sc)->sc_iot, (sc)->sc_ioh, (reg), (off), \
33: (size))
34:
35: /* miscellaneous */
36: #define MALO_FW_HELPER_BSIZE 256 /* helper FW block size */
37: #define MALO_FW_HELPER_LOADED 0x10 /* helper FW loaded */
38: #define MALO_FW_MAIN_MAXRETRY 20 /* main FW block resend max retry */
39: #define MALO_CMD_BUFFER_SIZE 256 /* cmd buffer */
40:
41: /* device flags */
42: #define MALO_DEVICE_ATTACHED (1 << 0)
43: #define MALO_FW_LOADED (1 << 1)
44: #define MALO_ASSOC_FAILED (1 << 2)
45:
46: /*
47: * FW command structures
48: */
49: struct malo_cmd_header {
50: uint16_t cmd;
51: uint16_t size;
52: uint16_t seqnum;
53: uint16_t result;
54: /* malo_cmd_body */
55: };
56:
57: struct malo_cmd_body_spec {
58: uint16_t hw_if_version;
59: uint16_t hw_version;
60: uint16_t num_of_wcb;
61: uint16_t num_of_mcast;
62: uint8_t macaddr[ETHER_ADDR_LEN];
63: uint16_t regioncode;
64: uint16_t num_of_antenna;
65: uint32_t fw_version;
66: uint32_t wcbbase;
67: uint32_t rxpdrdptr;
68: uint32_t rxpdwrptr;
69: uint32_t fw_capinfo;
70: } __packed;
71:
72: struct malo_cmd_body_scan {
73: uint8_t bsstype;
74: uint8_t bssid[ETHER_ADDR_LEN];
75: /* malo_cmd_tlv_ssid */
76: /* malo_cmd_tlv_chanlist */
77: /* malo_cmd_tlv_rates */
78: /* malo_cmd_tlv_numprobes */
79: } __packed;
80:
81: struct malo_cmd_body_rsp_scan {
82: uint16_t bufsize;
83: uint8_t numofset;
84: } __packed;
85: struct malo_cmd_body_rsp_scan_set {
86: uint16_t size;
87: uint8_t bssid[ETHER_ADDR_LEN];
88: uint8_t rssi;
89: uint8_t timestamp[8];
90: uint16_t beaconintvl;
91: uint16_t capinfo;
92: } __packed;
93:
94: struct malo_cmd_body_auth {
95: uint8_t peermac[ETHER_ADDR_LEN];
96: uint8_t authtype;
97: } __packed;
98:
99: #define MALO_WEP_ACTION_TYPE_ADD 0x02
100: #define MALO_WEP_ACTION_TYPE_REMOVE 0x04
101: #define MALO_WEP_ACTION_TYPE_DEFAULT 0x08
102: #define MALO_WEP_KEY_TYPE_40BIT 0x01
103: #define MALO_WEP_KEY_TYPE_104BIT 0x02
104: struct malo_cmd_body_wep {
105: uint16_t action;
106: uint16_t key_index;
107: uint8_t key_type_1;
108: uint8_t key_type_2;
109: uint8_t key_type_3;
110: uint8_t key_type_4;
111: uint8_t key_value_1[16];
112: uint8_t key_value_2[16];
113: uint8_t key_value_3[16];
114: uint8_t key_value_4[16];
115: } __packed;
116:
117: #define MALO_OID_BSS 0x00
118: #define MALO_OID_RATE 0x01
119: #define MALO_OID_BCNPERIOD 0x02
120: #define MALO_OID_DTIMPERIOD 0x03
121: #define MALO_OID_ASSOCTIMEOUT 0x04
122: #define MALO_OID_RTSTRESH 0x05
123: #define MALO_OID_SHORTRETRY 0x06
124: #define MALO_OID_LONGRETRY 0x07
125: #define MALO_OID_FRAGTRESH 0x08
126: #define MALO_OID_80211D 0x09
127: #define MALO_OID_80211H 0x0a
128: struct malo_cmd_body_snmp {
129: uint16_t action;
130: uint16_t oid;
131: uint16_t size;
132: uint8_t data[128];
133: } __packed;
134:
135: struct malo_cmd_body_radio {
136: uint16_t action;
137: uint16_t control;
138: } __packed;
139:
140: struct malo_cmd_body_channel {
141: uint16_t action;
142: uint16_t channel;
143: uint16_t rftype;
144: uint16_t reserved;
145: uint8_t channel_list[32];
146: } __packed;
147:
148: struct malo_cmd_body_txpower {
149: uint16_t action;
150: int16_t txpower;
151: } __packed;
152:
153: struct malo_cmd_body_antenna {
154: uint16_t action;
155: uint16_t antenna_mode;
156: } __packed;
157:
158: struct malo_cmd_body_macctrl {
159: uint16_t action;
160: uint16_t reserved;
161: } __packed;
162:
163: struct malo_cmd_body_assoc {
164: uint8_t peermac[ETHER_ADDR_LEN];
165: uint16_t capinfo;
166: uint16_t listenintrv;
167: uint16_t bcnperiod;
168: uint8_t dtimperiod;
169: /* malo_cmd_tlv_ssid */
170: /* malo_cmd_tlv_phy */
171: /* malo_cmd_tlv_cf */
172: /* malo_cmd_tlv_rate */
173: } __packed;
174:
175: struct malo_cmd_body_rsp_assoc {
176: uint16_t capinfo;
177: uint16_t status;
178: uint16_t assoc_id;
179: uint16_t info_len;
180: /* uint8_t info[270] */
181: } __packed;
182:
183: struct malo_cmd_body_80211d {
184: uint16_t action;
185: /* malo_cmd_tlv_80211d */
186: } __packed;
187:
188: struct malo_cmd_body_bgscan_config {
189: uint16_t action;
190: uint8_t enable;
191: uint8_t bsstype;
192: uint8_t chperscan;
193: uint8_t discard;
194: uint16_t reserved;
195: uint32_t scanintvl;
196: uint32_t storecond;
197: uint32_t reportcond;
198: uint16_t maxscanres;
199: } __packed;
200:
201: struct malo_cmd_body_bgscan_query {
202: uint8_t flush;
203: } __packed;
204:
205: struct malo_cmd_body_rate {
206: uint16_t action;
207: uint16_t hwauto;
208: uint16_t ratebitmap;
209: } __packed;
210:
211: /*
212: * FW command TLV structures
213: */
214: #define MALO_TLV_TYPE_SSID 0x0000
215: #define MALO_TLV_TYPE_RATES 0x0001
216: #define MALO_TLV_TYPE_PHY 0x0003
217: #define MALO_TLV_TYPE_CF 0x0004
218: #define MALO_TLV_TYPE_80211D 0x0007
219: #define MALO_TLV_TYPE_CHANLIST 0x0101
220: #define MALO_TLV_TYPE_NUMPROBES 0x0102
221: #define MALO_TLV_TYPE_PASSEID 0x010a
222:
223: struct malo_cmd_tlv_ssid {
224: uint16_t type;
225: uint16_t size;
226: uint8_t data[1];
227: } __packed;
228:
229: struct malo_cmd_tlv_rates {
230: uint16_t type;
231: uint16_t size;
232: uint8_t data[1];
233: } __packed;
234:
235: struct malo_cmd_tlv_phy {
236: uint16_t type;
237: uint16_t size;
238: uint8_t data[1];
239: } __packed;
240:
241: struct malo_cmd_tlv_cf {
242: uint16_t type;
243: uint16_t size;
244: uint8_t data[1];
245: } __packed;
246:
247: struct malo_cmd_tlv_80211d_param {
248: uint8_t firstchannel;
249: uint8_t numchannels;
250: uint8_t maxtxpower;
251: } __packed;
252: struct malo_cmd_tlv_80211d {
253: uint16_t type;
254: uint16_t size;
255: uint8_t countrycode[3];
256: struct malo_cmd_tlv_80211d_param data[12];
257: } __packed;
258:
259: struct malo_cmd_tlv_chanlist_param {
260: uint8_t radiotype;
261: uint8_t channumber;
262: uint8_t scantype;
263: uint16_t minscantime;
264: uint16_t maxscantime;
265: } __packed;
266: #define CHANNELS 12
267: struct malo_cmd_tlv_chanlist {
268: uint16_t type;
269: uint16_t size;
270: struct malo_cmd_tlv_chanlist_param data[CHANNELS];
271: } __packed;
272:
273: struct malo_cmd_tlv_numprobes {
274: uint16_t type;
275: uint16_t size;
276: uint16_t numprobes;
277: } __packed;
278:
279: struct malo_cmd_tlv_passeid {
280: uint16_t type;
281: uint16_t size;
282: uint8_t data[1];
283: } __packed;
284:
285: /* RX descriptor */
286: #define MALO_RX_STATUS_OK 0x0001
287: struct malo_rx_desc {
288: uint16_t status;
289: uint8_t snr;
290: uint8_t control;
291: uint16_t pkglen;
292: uint8_t nf;
293: uint8_t rate;
294: uint32_t pkgoffset;
295: uint32_t reserved1;
296: uint8_t priority;
297: uint8_t reserved2[3];
298: } __packed;
299:
300: /* TX descriptor */
301: struct malo_tx_desc {
302: uint32_t status;
303: uint32_t control;
304: uint32_t pkgoffset;
305: uint16_t pkglen;
306: uint8_t dstaddrhigh[2];
307: uint8_t dstaddrlow[4];
308: uint8_t priority;
309: uint8_t flags;
310: uint8_t reserved[2];
311: } __packed;
312:
313: /* scanned network */
314: struct malo_networks {
315: uint8_t bssid[ETHER_ADDR_LEN];
316: uint8_t rssi;
317: uint8_t timestamp[8];
318: uint16_t beaconintvl;
319: uint16_t capinfo;
320: uint8_t ssid[32];
321: uint8_t rates[14];
322: uint8_t channel;
323: } __packed;
324:
325: /*
326: * Softc
327: */
328: struct malo_softc {
329: struct device sc_dev;
330: struct ieee80211com sc_ic;
331: bus_space_tag_t sc_iot;
332: bus_space_handle_t sc_ioh;
333: int (*sc_newstate)
334: (struct ieee80211com *, enum ieee80211_state,
335: int);
336:
337: int sc_flags;
338: int sc_cmd_ctxsave;
339: void *sc_cmd;
340: void *sc_data;
341: uint8_t sc_curchan;
342: int sc_net_num;
343: int sc_net_cur;
344: struct malo_networks sc_net[12];
345: struct timeout sc_scan_to;
346: };
CVSweb