1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Driver for KeyStream wireless LAN |
4 | * |
5 | * Copyright (c) 2005-2008 KeyStream Corp. |
6 | * Copyright (C) 2009 Renesas Technology Corp. |
7 | */ |
8 | |
9 | #ifndef _KS_HOSTIF_H_ |
10 | #define _KS_HOSTIF_H_ |
11 | |
12 | #include <linux/compiler.h> |
13 | #include <linux/ieee80211.h> |
14 | |
15 | /* |
16 | * HOST-MAC I/F events |
17 | */ |
18 | #define HIF_DATA_REQ 0xE001 |
19 | #define HIF_DATA_IND 0xE801 |
20 | #define HIF_MIB_GET_REQ 0xE002 |
21 | #define HIF_MIB_GET_CONF 0xE802 |
22 | #define HIF_MIB_SET_REQ 0xE003 |
23 | #define HIF_MIB_SET_CONF 0xE803 |
24 | #define HIF_POWER_MGMT_REQ 0xE004 |
25 | #define HIF_POWER_MGMT_CONF 0xE804 |
26 | #define HIF_START_REQ 0xE005 |
27 | #define HIF_START_CONF 0xE805 |
28 | #define HIF_CONNECT_IND 0xE806 |
29 | #define HIF_STOP_REQ 0xE006 |
30 | #define HIF_STOP_CONF 0xE807 |
31 | #define HIF_PS_ADH_SET_REQ 0xE007 |
32 | #define HIF_PS_ADH_SET_CONF 0xE808 |
33 | #define HIF_INFRA_SET_REQ 0xE008 |
34 | #define HIF_INFRA_SET_CONF 0xE809 |
35 | #define HIF_ADH_SET_REQ 0xE009 |
36 | #define HIF_ADH_SET_CONF 0xE80A |
37 | #define HIF_AP_SET_REQ 0xE00A |
38 | #define HIF_AP_SET_CONF 0xE80B |
39 | #define HIF_ASSOC_INFO_IND 0xE80C |
40 | #define HIF_MIC_FAILURE_REQ 0xE00B |
41 | #define HIF_MIC_FAILURE_CONF 0xE80D |
42 | #define HIF_SCAN_REQ 0xE00C |
43 | #define HIF_SCAN_CONF 0xE80E |
44 | #define HIF_PHY_INFO_REQ 0xE00D |
45 | #define HIF_PHY_INFO_CONF 0xE80F |
46 | #define HIF_SLEEP_REQ 0xE00E |
47 | #define HIF_SLEEP_CONF 0xE810 |
48 | #define HIF_PHY_INFO_IND 0xE811 |
49 | #define HIF_SCAN_IND 0xE812 |
50 | #define HIF_INFRA_SET2_REQ 0xE00F |
51 | #define HIF_INFRA_SET2_CONF 0xE813 |
52 | #define HIF_ADH_SET2_REQ 0xE010 |
53 | #define HIF_ADH_SET2_CONF 0xE814 |
54 | |
55 | #define HIF_REQ_MAX 0xE010 |
56 | |
57 | /* |
58 | * HOST-MAC I/F data structure |
59 | * Byte alignment Little Endian |
60 | */ |
61 | |
62 | struct hostif_hdr { |
63 | __le16 size; |
64 | __le16 event; |
65 | } __packed; |
66 | |
67 | struct hostif_data_request { |
68 | struct hostif_hdr ; |
69 | __le16 auth_type; |
70 | #define TYPE_DATA 0x0000 |
71 | #define TYPE_AUTH 0x0001 |
72 | __le16 reserved; |
73 | u8 data[]; |
74 | } __packed; |
75 | |
76 | #define TYPE_PMK1 0x0001 |
77 | #define TYPE_GMK1 0x0002 |
78 | #define TYPE_GMK2 0x0003 |
79 | |
80 | #define CHANNEL_LIST_MAX_SIZE 14 |
81 | struct channel_list { |
82 | u8 size; |
83 | u8 body[CHANNEL_LIST_MAX_SIZE]; |
84 | u8 pad; |
85 | } __packed; |
86 | |
87 | /** |
88 | * enum mib_attribute - Management Information Base attribute |
89 | * Attribute value used for accessing and updating MIB |
90 | * |
91 | * @DOT11_MAC_ADDRESS: MAC Address (R) |
92 | * @DOT11_PRODUCT_VERSION: FirmWare Version (R) |
93 | * @DOT11_RTS_THRESHOLD: RTS Threshold (R/W) |
94 | * @DOT11_FRAGMENTATION_THRESHOLD: Fragment Threshold (R/W) |
95 | * @DOT11_PRIVACY_INVOKED: WEP ON/OFF (W) |
96 | * @DOT11_WEP_DEFAULT_KEY_ID: WEP Index (W) |
97 | * @DOT11_WEP_DEFAULT_KEY_VALUE1: WEP Key#1(TKIP AES: PairwiseTemporalKey) (W) |
98 | * @DOT11_WEP_DEFAULT_KEY_VALUE2: WEP Key#2(TKIP AES: GroupKey1) (W) |
99 | * @DOT11_WEP_DEFAULT_KEY_VALUE3: WEP Key#3(TKIP AES: GroupKey2) (W) |
100 | * @DOT11_WEP_DEFAULT_KEY_VALUE4: WEP Key#4 (W) |
101 | * @DOT11_WEP_LIST: WEP LIST |
102 | * @DOT11_DESIRED_SSID: SSID |
103 | * @DOT11_CURRENT_CHANNEL: channel set |
104 | * @DOT11_OPERATION_RATE_SET: rate set |
105 | * @LOCAL_AP_SEARCH_INTERVAL: AP search interval (R/W) |
106 | * @LOCAL_CURRENTADDRESS: MAC Address change (W) |
107 | * @LOCAL_MULTICAST_ADDRESS: Multicast Address (W) |
108 | * @LOCAL_MULTICAST_FILTER: Multicast Address Filter enable/disable (W) |
109 | * @LOCAL_SEARCHED_AP_LIST: AP list (R) |
110 | * @LOCAL_LINK_AP_STATUS: Link AP status (R) |
111 | * @LOCAL_PACKET_STATISTICS: tx,rx packets statistics |
112 | * @LOCAL_AP_SCAN_LIST_TYPE_SET: AP_SCAN_LIST_TYPE |
113 | * @DOT11_RSN_ENABLED: WPA enable/disable (W) |
114 | * @LOCAL_RSN_MODE: RSN mode WPA/WPA2 (W) |
115 | * @DOT11_RSN_CONFIG_MULTICAST_CIPHER: GroupKeyCipherSuite (W) |
116 | * @DOT11_RSN_CONFIG_UNICAST_CIPHER: PairwiseKeyCipherSuite (W) |
117 | * @DOT11_RSN_CONFIG_AUTH_SUITE: AuthenticationKeyManagementSuite (W) |
118 | * @DOT11_RSN_CONFIG_VERSION: RSN version (W) |
119 | * @LOCAL_RSN_CONFIG_ALL: RSN CONFIG ALL (W) |
120 | * @DOT11_PMK_TSC: PMK_TSC (W) |
121 | * @DOT11_GMK1_TSC: GMK1_TSC (W) |
122 | * @DOT11_GMK2_TSC: GMK2_TSC (W) |
123 | * @DOT11_GMK3_TSC: GMK3_TSC |
124 | * @LOCAL_PMK: Pairwise Master Key cache (W) |
125 | * @LOCAL_REGION: Region setting |
126 | * @LOCAL_WPS_ENABLE: WiFi Protected Setup |
127 | * @LOCAL_WPS_PROBE_REQ: WPS Probe Request |
128 | * @LOCAL_GAIN: Carrer sense threshold for demo ato show |
129 | * @LOCAL_EEPROM_SUM: EEPROM checksum information |
130 | */ |
131 | enum mib_attribute { |
132 | DOT11_MAC_ADDRESS = 0x21010100, |
133 | DOT11_PRODUCT_VERSION = 0x31024100, |
134 | DOT11_RTS_THRESHOLD = 0x21020100, |
135 | DOT11_FRAGMENTATION_THRESHOLD = 0x21050100, |
136 | DOT11_PRIVACY_INVOKED = 0x15010100, |
137 | DOT11_WEP_DEFAULT_KEY_ID = 0x15020100, |
138 | DOT11_WEP_DEFAULT_KEY_VALUE1 = 0x13020101, |
139 | DOT11_WEP_DEFAULT_KEY_VALUE2 = 0x13020102, |
140 | DOT11_WEP_DEFAULT_KEY_VALUE3 = 0x13020103, |
141 | DOT11_WEP_DEFAULT_KEY_VALUE4 = 0x13020104, |
142 | DOT11_WEP_LIST = 0x13020100, |
143 | DOT11_DESIRED_SSID = 0x11090100, |
144 | DOT11_CURRENT_CHANNEL = 0x45010100, |
145 | DOT11_OPERATION_RATE_SET = 0x11110100, |
146 | LOCAL_AP_SEARCH_INTERVAL = 0xF1010100, |
147 | LOCAL_CURRENTADDRESS = 0xF1050100, |
148 | LOCAL_MULTICAST_ADDRESS = 0xF1060100, |
149 | LOCAL_MULTICAST_FILTER = 0xF1060200, |
150 | LOCAL_SEARCHED_AP_LIST = 0xF1030100, |
151 | LOCAL_LINK_AP_STATUS = 0xF1040100, |
152 | LOCAL_PACKET_STATISTICS = 0xF1020100, |
153 | LOCAL_AP_SCAN_LIST_TYPE_SET = 0xF1030200, |
154 | DOT11_RSN_ENABLED = 0x15070100, |
155 | LOCAL_RSN_MODE = 0x56010100, |
156 | DOT11_RSN_CONFIG_MULTICAST_CIPHER = 0x51040100, |
157 | DOT11_RSN_CONFIG_UNICAST_CIPHER = 0x52020100, |
158 | DOT11_RSN_CONFIG_AUTH_SUITE = 0x53020100, |
159 | DOT11_RSN_CONFIG_VERSION = 0x51020100, |
160 | LOCAL_RSN_CONFIG_ALL = 0x5F010100, |
161 | DOT11_PMK_TSC = 0x55010100, |
162 | DOT11_GMK1_TSC = 0x55010101, |
163 | DOT11_GMK2_TSC = 0x55010102, |
164 | DOT11_GMK3_TSC = 0x55010103, |
165 | LOCAL_PMK = 0x58010100, |
166 | LOCAL_REGION = 0xF10A0100, |
167 | LOCAL_WPS_ENABLE = 0xF10B0100, |
168 | LOCAL_WPS_PROBE_REQ = 0xF10C0100, |
169 | LOCAL_GAIN = 0xF10D0100, |
170 | LOCAL_EEPROM_SUM = 0xF10E0100 |
171 | }; |
172 | |
173 | struct hostif_mib_get_request { |
174 | struct hostif_hdr ; |
175 | __le32 mib_attribute; |
176 | } __packed; |
177 | |
178 | /** |
179 | * enum mib_data_type - Message Information Base data type. |
180 | * @MIB_VALUE_TYPE_NULL: NULL type |
181 | * @MIB_VALUE_TYPE_INT: INTEGER type |
182 | * @MIB_VALUE_TYPE_BOOL: BOOL type |
183 | * @MIB_VALUE_TYPE_COUNT32: unused |
184 | * @MIB_VALUE_TYPE_OSTRING: Chunk of memory |
185 | */ |
186 | enum mib_data_type { |
187 | MIB_VALUE_TYPE_NULL = 0, |
188 | MIB_VALUE_TYPE_INT, |
189 | MIB_VALUE_TYPE_BOOL, |
190 | MIB_VALUE_TYPE_COUNT32, |
191 | MIB_VALUE_TYPE_OSTRING |
192 | }; |
193 | |
194 | struct hostif_mib_value { |
195 | __le16 size; |
196 | __le16 type; |
197 | u8 body[]; |
198 | } __packed; |
199 | |
200 | struct hostif_mib_get_confirm_t { |
201 | struct hostif_hdr ; |
202 | __le32 mib_status; |
203 | #define MIB_SUCCESS 0 |
204 | #define MIB_INVALID 1 |
205 | #define MIB_READ_ONLY 2 |
206 | #define MIB_WRITE_ONLY 3 |
207 | __le32 mib_attribute; |
208 | struct hostif_mib_value mib_value; |
209 | } __packed; |
210 | |
211 | struct hostif_mib_set_request_t { |
212 | struct hostif_hdr ; |
213 | __le32 mib_attribute; |
214 | struct hostif_mib_value mib_value; |
215 | } __packed; |
216 | |
217 | struct hostif_power_mgmt_request { |
218 | struct hostif_hdr ; |
219 | __le32 mode; |
220 | #define POWER_ACTIVE 1 |
221 | #define POWER_SAVE 2 |
222 | __le32 wake_up; |
223 | #define SLEEP_FALSE 0 |
224 | #define SLEEP_TRUE 1 /* not used */ |
225 | __le32 receive_dtims; |
226 | #define DTIM_FALSE 0 |
227 | #define DTIM_TRUE 1 |
228 | } __packed; |
229 | |
230 | enum power_mgmt_mode_type { |
231 | POWER_MGMT_ACTIVE, |
232 | POWER_MGMT_SAVE1, |
233 | POWER_MGMT_SAVE2 |
234 | }; |
235 | |
236 | #define RESULT_SUCCESS 0 |
237 | #define RESULT_INVALID_PARAMETERS 1 |
238 | #define RESULT_NOT_SUPPORTED 2 |
239 | /* #define RESULT_ALREADY_RUNNING 3 */ |
240 | #define RESULT_ALREADY_RUNNING 7 |
241 | |
242 | struct hostif_start_request { |
243 | struct hostif_hdr ; |
244 | __le16 mode; |
245 | #define MODE_PSEUDO_ADHOC 0 |
246 | #define MODE_INFRASTRUCTURE 1 |
247 | #define MODE_AP 2 /* not used */ |
248 | #define MODE_ADHOC 3 |
249 | } __packed; |
250 | |
251 | struct ssid { |
252 | u8 size; |
253 | u8 body[IEEE80211_MAX_SSID_LEN]; |
254 | u8 ssid_pad; |
255 | } __packed; |
256 | |
257 | #define RATE_SET_MAX_SIZE 16 |
258 | struct rate_set8 { |
259 | u8 size; |
260 | u8 body[8]; |
261 | u8 rate_pad; |
262 | } __packed; |
263 | |
264 | struct fh_parms { |
265 | __le16 dwell_time; |
266 | u8 hop_set; |
267 | u8 hop_pattern; |
268 | u8 hop_index; |
269 | } __packed; |
270 | |
271 | struct ds_parms { |
272 | u8 channel; |
273 | } __packed; |
274 | |
275 | struct cf_parms { |
276 | u8 count; |
277 | u8 period; |
278 | __le16 max_duration; |
279 | __le16 dur_remaining; |
280 | } __packed; |
281 | |
282 | struct ibss_parms { |
283 | __le16 atim_window; |
284 | } __packed; |
285 | |
286 | struct rsn_t { |
287 | u8 size; |
288 | #define RSN_BODY_SIZE 64 |
289 | u8 body[RSN_BODY_SIZE]; |
290 | } __packed; |
291 | |
292 | struct erp_params_t { |
293 | u8 erp_info; |
294 | } __packed; |
295 | |
296 | struct rate_set16 { |
297 | u8 size; |
298 | u8 body[16]; |
299 | u8 rate_pad; |
300 | } __packed; |
301 | |
302 | struct ap_info { |
303 | u8 bssid[6]; /* +00 */ |
304 | u8 ; /* +06 */ |
305 | u8 sq; /* +07 */ |
306 | u8 noise; /* +08 */ |
307 | u8 pad0; /* +09 */ |
308 | __le16 beacon_period; /* +10 */ |
309 | __le16 capability; /* +12 */ |
310 | u8 frame_type; /* +14 */ |
311 | u8 ch_info; /* +15 */ |
312 | __le16 body_size; /* +16 */ |
313 | u8 body[1024]; /* +18 */ |
314 | /* +1032 */ |
315 | } __packed; |
316 | |
317 | struct link_ap_info { |
318 | u8 bssid[6]; /* +00 */ |
319 | u8 ; /* +06 */ |
320 | u8 sq; /* +07 */ |
321 | u8 noise; /* +08 */ |
322 | u8 pad0; /* +09 */ |
323 | __le16 beacon_period; /* +10 */ |
324 | __le16 capability; /* +12 */ |
325 | struct rate_set8 rate_set; /* +14 */ |
326 | struct fh_parms fh_parameter; /* +24 */ |
327 | struct ds_parms ds_parameter; /* +29 */ |
328 | struct cf_parms cf_parameter; /* +30 */ |
329 | struct ibss_parms ibss_parameter; /* +36 */ |
330 | struct erp_params_t erp_parameter; /* +38 */ |
331 | u8 pad1; /* +39 */ |
332 | struct rate_set8 ext_rate_set; /* +40 */ |
333 | u8 DTIM_period; /* +50 */ |
334 | u8 rsn_mode; /* +51 */ |
335 | #define RSN_MODE_NONE 0 |
336 | #define RSN_MODE_WPA 1 |
337 | #define RSN_MODE_WPA2 2 |
338 | struct { |
339 | u8 size; /* +52 */ |
340 | u8 body[128]; /* +53 */ |
341 | } __packed rsn; |
342 | } __packed; |
343 | |
344 | #define RESULT_CONNECT 0 |
345 | #define RESULT_DISCONNECT 1 |
346 | |
347 | struct hostif_stop_request { |
348 | struct hostif_hdr ; |
349 | } __packed; |
350 | |
351 | #define D_11B_ONLY_MODE 0 |
352 | #define D_11G_ONLY_MODE 1 |
353 | #define D_11BG_COMPATIBLE_MODE 2 |
354 | #define D_11A_ONLY_MODE 3 |
355 | |
356 | #define CTS_MODE_FALSE 0 |
357 | #define CTS_MODE_TRUE 1 |
358 | |
359 | struct hostif_request { |
360 | __le16 phy_type; |
361 | __le16 cts_mode; |
362 | __le16 scan_type; |
363 | __le16 capability; |
364 | struct rate_set16 rate_set; |
365 | } __packed; |
366 | |
367 | /** |
368 | * struct hostif_ps_adhoc_set_request - pseudo adhoc mode |
369 | * @capability: bit5 : preamble |
370 | * bit6 : pbcc - Not supported always 0 |
371 | * bit10 : ShortSlotTime |
372 | * bit13 : DSSS-OFDM - Not supported always 0 |
373 | */ |
374 | struct hostif_ps_adhoc_set_request { |
375 | struct hostif_hdr ; |
376 | struct hostif_request request; |
377 | __le16 channel; |
378 | } __packed; |
379 | |
380 | #define AUTH_TYPE_OPEN_SYSTEM 0 |
381 | #define AUTH_TYPE_SHARED_KEY 1 |
382 | |
383 | /** |
384 | * struct hostif_infrastructure_set_request |
385 | * @capability: bit5 : preamble |
386 | * bit6 : pbcc - Not supported always 0 |
387 | * bit10 : ShortSlotTime |
388 | * bit13 : DSSS-OFDM - Not supported always 0 |
389 | */ |
390 | struct hostif_infrastructure_set_request { |
391 | struct hostif_hdr ; |
392 | struct hostif_request request; |
393 | struct ssid ssid; |
394 | __le16 beacon_lost_count; |
395 | __le16 auth_type; |
396 | struct channel_list channel_list; |
397 | u8 bssid[ETH_ALEN]; |
398 | } __packed; |
399 | |
400 | /** |
401 | * struct hostif_adhoc_set_request |
402 | * @capability: bit5 : preamble |
403 | * bit6 : pbcc - Not supported always 0 |
404 | * bit10 : ShortSlotTime |
405 | * bit13 : DSSS-OFDM - Not supported always 0 |
406 | */ |
407 | struct hostif_adhoc_set_request { |
408 | struct hostif_hdr ; |
409 | struct hostif_request request; |
410 | struct ssid ssid; |
411 | __le16 channel; |
412 | } __packed; |
413 | |
414 | /** |
415 | * struct hostif_adhoc_set2_request |
416 | * @capability: bit5 : preamble |
417 | * bit6 : pbcc - Not supported always 0 |
418 | * bit10 : ShortSlotTime |
419 | * bit13 : DSSS-OFDM - Not supported always 0 |
420 | */ |
421 | struct hostif_adhoc_set2_request { |
422 | struct hostif_hdr ; |
423 | struct hostif_request request; |
424 | __le16 reserved; |
425 | struct ssid ssid; |
426 | struct channel_list channel_list; |
427 | u8 bssid[ETH_ALEN]; |
428 | } __packed; |
429 | |
430 | struct association_request { |
431 | u8 type; |
432 | u8 pad; |
433 | __le16 capability; |
434 | __le16 listen_interval; |
435 | u8 ap_address[6]; |
436 | __le16 req_ies_size; |
437 | } __packed; |
438 | |
439 | struct association_response { |
440 | u8 type; |
441 | u8 pad; |
442 | __le16 capability; |
443 | __le16 status; |
444 | __le16 association_id; |
445 | __le16 resp_ies_size; |
446 | } __packed; |
447 | |
448 | struct hostif_bss_scan_request { |
449 | struct hostif_hdr ; |
450 | u8 scan_type; |
451 | #define ACTIVE_SCAN 0 |
452 | #define PASSIVE_SCAN 1 |
453 | u8 pad[3]; |
454 | __le32 ch_time_min; |
455 | __le32 ch_time_max; |
456 | struct channel_list channel_list; |
457 | struct ssid ssid; |
458 | } __packed; |
459 | |
460 | struct hostif_phy_information_request { |
461 | struct hostif_hdr ; |
462 | __le16 type; |
463 | #define NORMAL_TYPE 0 |
464 | #define TIME_TYPE 1 |
465 | __le16 time; /* unit 100ms */ |
466 | } __packed; |
467 | |
468 | enum sleep_mode_type { |
469 | SLP_ACTIVE, |
470 | SLP_SLEEP |
471 | }; |
472 | |
473 | struct hostif_sleep_request { |
474 | struct hostif_hdr ; |
475 | } __packed; |
476 | |
477 | struct hostif_mic_failure_request { |
478 | struct hostif_hdr ; |
479 | __le16 failure_count; |
480 | __le16 timer; |
481 | } __packed; |
482 | |
483 | #define BASIC_RATE 0x80 |
484 | #define RATE_MASK 0x7F |
485 | |
486 | #define TX_RATE_AUTO 0xff |
487 | #define TX_RATE_1M_FIXED 0 |
488 | #define TX_RATE_2M_FIXED 1 |
489 | #define TX_RATE_1_2M_AUTO 2 |
490 | #define TX_RATE_5M_FIXED 3 |
491 | #define TX_RATE_11M_FIXED 4 |
492 | |
493 | #define TX_RATE_FULL_AUTO 0 |
494 | #define TX_RATE_11_AUTO 1 |
495 | #define TX_RATE_11B_AUTO 2 |
496 | #define TX_RATE_11BG_AUTO 3 |
497 | #define TX_RATE_MANUAL_AUTO 4 |
498 | #define TX_RATE_FIXED 5 |
499 | |
500 | /* 11b rate */ |
501 | #define TX_RATE_1M ((u8)(10 / 5)) /* 11b 11g basic rate */ |
502 | #define TX_RATE_2M ((u8)(20 / 5)) /* 11b 11g basic rate */ |
503 | #define TX_RATE_5M ((u8)(55 / 5)) /* 11g basic rate */ |
504 | #define TX_RATE_11M ((u8)(110 / 5)) /* 11g basic rate */ |
505 | |
506 | /* 11g rate */ |
507 | #define TX_RATE_6M ((u8)(60 / 5)) /* 11g basic rate */ |
508 | #define TX_RATE_12M ((u8)(120 / 5)) /* 11g basic rate */ |
509 | #define TX_RATE_24M ((u8)(240 / 5)) /* 11g basic rate */ |
510 | #define TX_RATE_9M ((u8)(90 / 5)) |
511 | #define TX_RATE_18M ((u8)(180 / 5)) |
512 | #define TX_RATE_36M ((u8)(360 / 5)) |
513 | #define TX_RATE_48M ((u8)(480 / 5)) |
514 | #define TX_RATE_54M ((u8)(540 / 5)) |
515 | |
516 | static inline bool is_11b_rate(u8 rate) |
517 | { |
518 | return (((rate & RATE_MASK) == TX_RATE_1M) || |
519 | ((rate & RATE_MASK) == TX_RATE_2M) || |
520 | ((rate & RATE_MASK) == TX_RATE_5M) || |
521 | ((rate & RATE_MASK) == TX_RATE_11M)); |
522 | } |
523 | |
524 | static inline bool is_ofdm_rate(u8 rate) |
525 | { |
526 | return (((rate & RATE_MASK) == TX_RATE_6M) || |
527 | ((rate & RATE_MASK) == TX_RATE_12M) || |
528 | ((rate & RATE_MASK) == TX_RATE_24M) || |
529 | ((rate & RATE_MASK) == TX_RATE_9M) || |
530 | ((rate & RATE_MASK) == TX_RATE_18M) || |
531 | ((rate & RATE_MASK) == TX_RATE_36M) || |
532 | ((rate & RATE_MASK) == TX_RATE_48M) || |
533 | ((rate & RATE_MASK) == TX_RATE_54M)); |
534 | } |
535 | |
536 | static inline bool is_11bg_rate(u8 rate) |
537 | { |
538 | return (is_11b_rate(rate) || is_ofdm_rate(rate)); |
539 | } |
540 | |
541 | static inline bool is_ofdm_ext_rate(u8 rate) |
542 | { |
543 | return (((rate & RATE_MASK) == TX_RATE_9M) || |
544 | ((rate & RATE_MASK) == TX_RATE_18M) || |
545 | ((rate & RATE_MASK) == TX_RATE_36M) || |
546 | ((rate & RATE_MASK) == TX_RATE_48M) || |
547 | ((rate & RATE_MASK) == TX_RATE_54M)); |
548 | } |
549 | |
550 | enum connect_status_type { |
551 | CONNECT_STATUS, |
552 | DISCONNECT_STATUS |
553 | }; |
554 | |
555 | enum preamble_type { |
556 | LONG_PREAMBLE, |
557 | SHORT_PREAMBLE |
558 | }; |
559 | |
560 | enum multicast_filter_type { |
561 | MCAST_FILTER_MCAST, |
562 | MCAST_FILTER_MCASTALL, |
563 | MCAST_FILTER_PROMISC, |
564 | }; |
565 | |
566 | #define NIC_MAX_MCAST_LIST 32 |
567 | |
568 | #define HIF_EVENT_MASK 0xE800 |
569 | |
570 | static inline bool is_hif_ind(unsigned short event) |
571 | { |
572 | return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) && |
573 | (((event & ~HIF_EVENT_MASK) == 0x0001) || |
574 | ((event & ~HIF_EVENT_MASK) == 0x0006) || |
575 | ((event & ~HIF_EVENT_MASK) == 0x000C) || |
576 | ((event & ~HIF_EVENT_MASK) == 0x0011) || |
577 | ((event & ~HIF_EVENT_MASK) == 0x0012))); |
578 | } |
579 | |
580 | static inline bool is_hif_conf(unsigned short event) |
581 | { |
582 | return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) && |
583 | ((event & ~HIF_EVENT_MASK) > 0x0000) && |
584 | ((event & ~HIF_EVENT_MASK) < 0x0012) && |
585 | !is_hif_ind(event)); |
586 | } |
587 | |
588 | #ifdef __KERNEL__ |
589 | |
590 | #include "ks_wlan.h" |
591 | |
592 | /* function prototype */ |
593 | int hostif_data_request(struct ks_wlan_private *priv, struct sk_buff *skb); |
594 | void hostif_receive(struct ks_wlan_private *priv, unsigned char *p, |
595 | unsigned int size); |
596 | void hostif_sme_enqueue(struct ks_wlan_private *priv, u16 event); |
597 | int hostif_init(struct ks_wlan_private *priv); |
598 | void hostif_exit(struct ks_wlan_private *priv); |
599 | int ks_wlan_hw_tx(struct ks_wlan_private *priv, void *p, unsigned long size, |
600 | void (*complete_handler)(struct ks_wlan_private *priv, |
601 | struct sk_buff *skb), |
602 | struct sk_buff *skb); |
603 | void send_packet_complete(struct ks_wlan_private *priv, struct sk_buff *skb); |
604 | |
605 | void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv); |
606 | int ks_wlan_hw_power_save(struct ks_wlan_private *priv); |
607 | |
608 | #define KS7010_SIZE_ALIGNMENT 32 |
609 | |
610 | static inline size_t hif_align_size(size_t size) |
611 | { |
612 | return ALIGN(size, KS7010_SIZE_ALIGNMENT); |
613 | } |
614 | |
615 | #endif /* __KERNEL__ */ |
616 | |
617 | #endif /* _KS_HOSTIF_H_ */ |
618 | |