1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
36 #define MALO_FW_HELPER_BSIZE 256
37 #define MALO_FW_HELPER_LOADED 0x10
38 #define MALO_FW_MAIN_MAXRETRY 20
39 #define MALO_CMD_BUFFER_SIZE 256
40
41
42 #define MALO_DEVICE_ATTACHED (1 << 0)
43 #define MALO_FW_LOADED (1 << 1)
44 #define MALO_ASSOC_FAILED (1 << 2)
45
46
47
48
49 struct malo_cmd_header {
50 uint16_t cmd;
51 uint16_t size;
52 uint16_t seqnum;
53 uint16_t result;
54
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
76
77
78
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
170
171
172
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
181 } __packed;
182
183 struct malo_cmd_body_80211d {
184 uint16_t action;
185
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
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
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
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
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
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 };