This source file includes following definitions.
- is_11b_rate
- is_ofdm_rate
- is_11bg_rate
- is_ofdm_ext_rate
- is_hif_ind
- is_hif_conf
- hif_align_size
1
2
3
4
5
6
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
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
59
60
61
62 struct hostif_hdr {
63 __le16 size;
64 __le16 event;
65 } __packed;
66
67 struct hostif_data_request {
68 struct hostif_hdr header;
69 __le16 auth_type;
70 #define TYPE_DATA 0x0000
71 #define TYPE_AUTH 0x0001
72 __le16 reserved;
73 u8 data[0];
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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 header;
175 __le32 mib_attribute;
176 } __packed;
177
178
179
180
181
182
183
184
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[0];
198 } __packed;
199
200 struct hostif_mib_get_confirm_t {
201 struct hostif_hdr header;
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 header;
213 __le32 mib_attribute;
214 struct hostif_mib_value mib_value;
215 } __packed;
216
217 struct hostif_power_mgmt_request {
218 struct hostif_hdr header;
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
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
240 #define RESULT_ALREADY_RUNNING 7
241
242 struct hostif_start_request {
243 struct hostif_hdr header;
244 __le16 mode;
245 #define MODE_PSEUDO_ADHOC 0
246 #define MODE_INFRASTRUCTURE 1
247 #define MODE_AP 2
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];
304 u8 rssi;
305 u8 sq;
306 u8 noise;
307 u8 pad0;
308 __le16 beacon_period;
309 __le16 capability;
310 u8 frame_type;
311 u8 ch_info;
312 __le16 body_size;
313 u8 body[1024];
314
315 } __packed;
316
317 struct link_ap_info {
318 u8 bssid[6];
319 u8 rssi;
320 u8 sq;
321 u8 noise;
322 u8 pad0;
323 __le16 beacon_period;
324 __le16 capability;
325 struct rate_set8 rate_set;
326 struct fh_parms fh_parameter;
327 struct ds_parms ds_parameter;
328 struct cf_parms cf_parameter;
329 struct ibss_parms ibss_parameter;
330 struct erp_params_t erp_parameter;
331 u8 pad1;
332 struct rate_set8 ext_rate_set;
333 u8 DTIM_period;
334 u8 rsn_mode;
335 #define RSN_MODE_NONE 0
336 #define RSN_MODE_WPA 1
337 #define RSN_MODE_WPA2 2
338 struct {
339 u8 size;
340 u8 body[128];
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 header;
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
369
370
371
372
373
374 struct hostif_ps_adhoc_set_request {
375 struct hostif_hdr header;
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
385
386
387
388
389
390 struct hostif_infrastructure_set_request {
391 struct hostif_hdr header;
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
402
403
404
405
406
407 struct hostif_adhoc_set_request {
408 struct hostif_hdr header;
409 struct hostif_request request;
410 struct ssid ssid;
411 __le16 channel;
412 } __packed;
413
414
415
416
417
418
419
420
421 struct hostif_adhoc_set2_request {
422 struct hostif_hdr header;
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 header;
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 header;
462 __le16 type;
463 #define NORMAL_TYPE 0
464 #define TIME_TYPE 1
465 __le16 time;
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 header;
475 } __packed;
476
477 struct hostif_mic_failure_request {
478 struct hostif_hdr header;
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
501 #define TX_RATE_1M (u8)(10 / 5)
502 #define TX_RATE_2M (u8)(20 / 5)
503 #define TX_RATE_5M (u8)(55 / 5)
504 #define TX_RATE_11M (u8)(110 / 5)
505
506
507 #define TX_RATE_6M (u8)(60 / 5)
508 #define TX_RATE_12M (u8)(120 / 5)
509 #define TX_RATE_24M (u8)(240 / 5)
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
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
616
617 #endif