Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso...
[cascardo/linux.git] / drivers / staging / ks7010 / ks_hostif.h
1 /*
2  *   Driver for KeyStream wireless LAN
3  *   
4  *   Copyright (c) 2005-2008 KeyStream Corp.
5  *   Copyright (C) 2009 Renesas Technology Corp.
6  *
7  *   This program is free software; you can redistribute it and/or modify
8  *   it under the terms of the GNU General Public License version 2 as
9  *   published by the Free Software Foundation.
10  */
11
12 #ifndef _KS_HOSTIF_H_
13 #define _KS_HOSTIF_H_
14 /*
15  * HOST-MAC I/F events
16  */
17 #define HIF_DATA_REQ            0xE001
18 #define HIF_DATA_IND            0xE801
19 #define HIF_MIB_GET_REQ         0xE002
20 #define HIF_MIB_GET_CONF        0xE802
21 #define HIF_MIB_SET_REQ         0xE003
22 #define HIF_MIB_SET_CONF        0xE803
23 #define HIF_POWERMGT_REQ        0xE004
24 #define HIF_POWERMGT_CONF       0xE804
25 #define HIF_START_REQ           0xE005
26 #define HIF_START_CONF          0xE805
27 #define HIF_CONNECT_IND         0xE806
28 #define HIF_STOP_REQ            0xE006
29 #define HIF_STOP_CONF           0xE807
30 #define HIF_PS_ADH_SET_REQ      0xE007
31 #define HIF_PS_ADH_SET_CONF     0xE808
32 #define HIF_INFRA_SET_REQ       0xE008
33 #define HIF_INFRA_SET_CONF      0xE809
34 #define HIF_ADH_SET_REQ         0xE009
35 #define HIF_ADH_SET_CONF        0xE80A
36 #define HIF_AP_SET_REQ          0xE00A
37 #define HIF_AP_SET_CONF         0xE80B
38 #define HIF_ASSOC_INFO_IND      0xE80C
39 #define HIF_MIC_FAILURE_REQ     0xE00B
40 #define HIF_MIC_FAILURE_CONF    0xE80D
41 #define HIF_SCAN_REQ            0xE00C
42 #define HIF_SCAN_CONF           0xE80E
43 #define HIF_PHY_INFO_REQ        0xE00D
44 #define HIF_PHY_INFO_CONF       0xE80F
45 #define HIF_SLEEP_REQ           0xE00E
46 #define HIF_SLEEP_CONF          0xE810
47 #define HIF_PHY_INFO_IND        0xE811
48 #define HIF_SCAN_IND            0xE812
49 #define HIF_INFRA_SET2_REQ      0xE00F
50 #define HIF_INFRA_SET2_CONF     0xE813
51 #define HIF_ADH_SET2_REQ        0xE010
52 #define HIF_ADH_SET2_CONF       0xE814
53
54 #define HIF_REQ_MAX             0xE010
55
56 /*
57  * HOST-MAC I/F data structure
58  * Byte alignmet Little Endian
59  */
60
61 struct hostif_hdr {
62         uint16_t size;
63         uint16_t event;
64 } __attribute__ ((packed));
65
66 struct hostif_data_request_t {
67         struct hostif_hdr header;
68         uint16_t auth_type;
69 #define TYPE_DATA 0x0000
70 #define TYPE_AUTH 0x0001
71         uint16_t reserved;
72         uint8_t data[0];
73 } __attribute__ ((packed));
74
75 struct hostif_data_indication_t {
76         struct hostif_hdr header;
77         uint16_t auth_type;
78 /* #define TYPE_DATA 0x0000 */
79 #define TYPE_PMK1 0x0001
80 #define TYPE_GMK1 0x0002
81 #define TYPE_GMK2 0x0003
82         uint16_t reserved;
83         uint8_t data[0];
84 } __attribute__ ((packed));
85
86 #define CHANNEL_LIST_MAX_SIZE 14
87 struct channel_list_t {
88         uint8_t size;
89         uint8_t body[CHANNEL_LIST_MAX_SIZE];
90         uint8_t pad;
91 } __attribute__ ((packed));
92
93 /* MIB Attribute */
94 #define DOT11_MAC_ADDRESS                 0x21010100    /* MAC Address (R) */
95 #define DOT11_PRODUCT_VERSION             0x31024100    /* FirmWare Version (R) */
96 #define DOT11_RTS_THRESHOLD               0x21020100    /* RTS Threshold (R/W) */
97 #define DOT11_FRAGMENTATION_THRESHOLD     0x21050100    /* Fragment Threshold (R/W) */
98 #define DOT11_PRIVACY_INVOKED             0x15010100    /* WEP ON/OFF (W) */
99 #define DOT11_WEP_DEFAULT_KEY_ID          0x15020100    /* WEP Index (W) */
100 #define DOT11_WEP_DEFAULT_KEY_VALUE1      0x13020101    /* WEP Key#1(TKIP AES: PairwiseTemporalKey) (W) */
101 #define DOT11_WEP_DEFAULT_KEY_VALUE2      0x13020102    /* WEP Key#2(TKIP AES: GroupKey1) (W) */
102 #define DOT11_WEP_DEFAULT_KEY_VALUE3      0x13020103    /* WEP Key#3(TKIP AES: GroupKey2) (W) */
103 #define DOT11_WEP_DEFAULT_KEY_VALUE4      0x13020104    /* WEP Key#4 (W) */
104 #define DOT11_WEP_LIST                    0x13020100    /* WEP LIST */
105 #define DOT11_DESIRED_SSID                0x11090100    /* SSID */
106 #define DOT11_CURRENT_CHANNEL             0x45010100    /* channel set */
107 #define DOT11_OPERATION_RATE_SET          0x11110100    /* rate set */
108
109 #define LOCAL_AP_SEARCH_INTEAVAL          0xF1010100    /* AP search interval (R/W) */
110 #define LOCAL_CURRENTADDRESS              0xF1050100    /* MAC Adress change (W) */
111 #define LOCAL_MULTICAST_ADDRESS           0xF1060100    /* Multicast Adress (W) */
112 #define LOCAL_MULTICAST_FILTER            0xF1060200    /* Multicast Adress Filter enable/disable (W) */
113 #define LOCAL_SEARCHED_AP_LIST            0xF1030100    /* AP list (R) */
114 #define LOCAL_LINK_AP_STATUS              0xF1040100    /* Link AP status (R) */
115 #define LOCAL_PACKET_STATISTICS           0xF1020100    /* tx,rx packets statistics */
116 #define LOCAL_AP_SCAN_LIST_TYPE_SET       0xF1030200    /* AP_SCAN_LIST_TYPE */
117
118 #define DOT11_RSN_ENABLED                 0x15070100    /* WPA enable/disable (W) */
119 #define LOCAL_RSN_MODE                    0x56010100    /* RSN mode WPA/WPA2 (W) */
120 #define DOT11_RSN_CONFIG_MULTICAST_CIPHER 0x51040100    /* GroupKeyCipherSuite (W) */
121 #define DOT11_RSN_CONFIG_UNICAST_CIPHER   0x52020100    /* PairwiseKeyCipherSuite (W) */
122 #define DOT11_RSN_CONFIG_AUTH_SUITE       0x53020100    /* AuthenticationKeyManagementSuite (W) */
123 #define DOT11_RSN_CONFIG_VERSION          0x51020100    /* RSN version (W) */
124 #define LOCAL_RSN_CONFIG_ALL              0x5F010100    /* RSN CONFIG ALL (W) */
125 #define DOT11_PMK_TSC                     0x55010100    /* PMK_TSC (W) */
126 #define DOT11_GMK1_TSC                    0x55010101    /* GMK1_TSC (W) */
127 #define DOT11_GMK2_TSC                    0x55010102    /* GMK2_TSC (W) */
128 #define DOT11_GMK3_TSC                    0x55010103    /* GMK3_TSC */
129 #define LOCAL_PMK                         0x58010100    /* Pairwise Master Key cache (W) */
130
131 #define LOCAL_REGION                      0xF10A0100    /* Region setting */
132
133 #ifdef WPS
134 #define LOCAL_WPS_ENABLE                  0xF10B0100    /* WiFi Protected Setup */
135 #define LOCAL_WPS_PROBE_REQ               0xF10C0100    /* WPS Probe Request */
136 #endif /* WPS */
137
138 #define LOCAL_GAIN                        0xF10D0100    /* Carrer sense threshold for demo ato show */
139 #define LOCAL_EEPROM_SUM                  0xF10E0100    /* EEPROM checksum information */
140
141 struct hostif_mib_get_request_t {
142         struct hostif_hdr header;
143         uint32_t mib_attribute;
144 } __attribute__ ((packed));
145
146 struct hostif_mib_value_t {
147         uint16_t size;
148         uint16_t type;
149 #define MIB_VALUE_TYPE_NULL     0
150 #define MIB_VALUE_TYPE_INT      1
151 #define MIB_VALUE_TYPE_BOOL     2
152 #define MIB_VALUE_TYPE_COUNT32  3
153 #define MIB_VALUE_TYPE_OSTRING  4
154         uint8_t body[0];
155 } __attribute__ ((packed));
156
157 struct hostif_mib_get_confirm_t {
158         struct hostif_hdr header;
159         uint32_t mib_status;
160 #define MIB_SUCCESS    0
161 #define MIB_INVALID    1
162 #define MIB_READ_ONLY  2
163 #define MIB_WRITE_ONLY 3
164         uint32_t mib_attribute;
165         struct hostif_mib_value_t mib_value;
166 } __attribute__ ((packed));
167
168 struct hostif_mib_set_request_t {
169         struct hostif_hdr header;
170         uint32_t mib_attribute;
171         struct hostif_mib_value_t mib_value;
172 } __attribute__ ((packed));
173
174 struct hostif_mib_set_confirm_t {
175         struct hostif_hdr header;
176         uint32_t mib_status;
177         uint32_t mib_attribute;
178 } __attribute__ ((packed));
179
180 struct hostif_power_mngmt_request_t {
181         struct hostif_hdr header;
182         uint32_t mode;
183 #define POWER_ACTIVE  1
184 #define POWER_SAVE    2
185         uint32_t wake_up;
186 #define SLEEP_FALSE 0
187 #define SLEEP_TRUE  1   /* not used */
188         uint32_t receiveDTIMs;
189 #define DTIM_FALSE 0
190 #define DTIM_TRUE  1
191 } __attribute__ ((packed));
192
193 /* power management mode */
194 enum {
195         POWMGT_ACTIVE_MODE = 0,
196         POWMGT_SAVE1_MODE,
197         POWMGT_SAVE2_MODE
198 };
199
200 #define RESULT_SUCCESS            0
201 #define RESULT_INVALID_PARAMETERS 1
202 #define RESULT_NOT_SUPPORTED      2
203 /* #define      RESULT_ALREADY_RUNNING    3 */
204 #define RESULT_ALREADY_RUNNING    7
205
206 struct hostif_power_mngmt_confirm_t {
207         struct hostif_hdr header;
208         uint16_t result_code;
209 } __attribute__ ((packed));
210
211 struct hostif_start_request_t {
212         struct hostif_hdr header;
213         uint16_t mode;
214 #define MODE_PSEUDO_ADHOC   0
215 #define MODE_INFRASTRUCTURE 1
216 #define MODE_AP             2   /* not used */
217 #define MODE_ADHOC          3
218 } __attribute__ ((packed));
219
220 struct hostif_start_confirm_t {
221         struct hostif_hdr header;
222         uint16_t result_code;
223 } __attribute__ ((packed));
224
225 #define SSID_MAX_SIZE 32
226 struct ssid_t {
227         uint8_t size;
228         uint8_t body[SSID_MAX_SIZE];
229         uint8_t ssid_pad;
230 } __attribute__ ((packed));
231
232 #define RATE_SET_MAX_SIZE 16
233 struct rate_set8_t {
234         uint8_t size;
235         uint8_t body[8];
236         uint8_t rate_pad;
237 } __attribute__ ((packed));
238
239 struct FhParms_t {
240         uint16_t dwellTime;
241         uint8_t hopSet;
242         uint8_t hopPattern;
243         uint8_t hopIndex;
244 } __attribute__ ((packed));
245
246 struct DsParms_t {
247         uint8_t channel;
248 } __attribute__ ((packed));
249
250 struct CfParms_t {
251         uint8_t count;
252         uint8_t period;
253         uint16_t maxDuration;
254         uint16_t durRemaining;
255 } __attribute__ ((packed));
256
257 struct IbssParms_t {
258         uint16_t atimWindow;
259 } __attribute__ ((packed));
260
261 struct rsn_t {
262         uint8_t size;
263 #define RSN_BODY_SIZE 64
264         uint8_t body[RSN_BODY_SIZE];
265 } __attribute__ ((packed));
266
267 struct ErpParams_t {
268         uint8_t erp_info;
269 } __attribute__ ((packed));
270
271 struct rate_set16_t {
272         uint8_t size;
273         uint8_t body[16];
274         uint8_t rate_pad;
275 } __attribute__ ((packed));
276
277 struct ap_info_t {
278         uint8_t bssid[6];       /* +00 */
279         uint8_t rssi;   /* +06 */
280         uint8_t sq;     /* +07 */
281         uint8_t noise;  /* +08 */
282         uint8_t pad0;   /* +09 */
283         uint16_t beacon_period; /* +10 */
284         uint16_t capability;    /* +12 */
285 #define BSS_CAP_ESS             (1<<0)
286 #define BSS_CAP_IBSS            (1<<1)
287 #define BSS_CAP_CF_POLABLE      (1<<2)
288 #define BSS_CAP_CF_POLL_REQ     (1<<3)
289 #define BSS_CAP_PRIVACY         (1<<4)
290 #define BSS_CAP_SHORT_PREAMBLE  (1<<5)
291 #define BSS_CAP_PBCC            (1<<6)
292 #define BSS_CAP_CHANNEL_AGILITY (1<<7)
293 #define BSS_CAP_SHORT_SLOT_TIME (1<<10)
294 #define BSS_CAP_DSSS_OFDM       (1<<13)
295         uint8_t frame_type;     /* +14 */
296         uint8_t ch_info;        /* +15 */
297 #define FRAME_TYPE_BEACON       0x80
298 #define FRAME_TYPE_PROBE_RESP   0x50
299         uint16_t body_size;     /* +16 */
300         uint8_t body[1024];     /* +18 */
301         /* +1032 */
302 } __attribute__ ((packed));
303
304 struct link_ap_info_t {
305         uint8_t bssid[6];       /* +00 */
306         uint8_t rssi;   /* +06 */
307         uint8_t sq;     /* +07 */
308         uint8_t noise;  /* +08 */
309         uint8_t pad0;   /* +09 */
310         uint16_t beacon_period; /* +10 */
311         uint16_t capability;    /* +12 */
312         struct rate_set8_t rate_set;    /* +14 */
313         struct FhParms_t fh_parameter;  /* +24 */
314         struct DsParms_t ds_parameter;  /* +29 */
315         struct CfParms_t cf_parameter;  /* +30 */
316         struct IbssParms_t ibss_parameter;      /* +36 */
317         struct ErpParams_t erp_parameter;       /* +38 */
318         uint8_t pad1;   /* +39 */
319         struct rate_set8_t ext_rate_set;        /* +40 */
320         uint8_t DTIM_period;    /* +50 */
321         uint8_t rsn_mode;       /* +51 */
322 #define RSN_MODE_NONE   0
323 #define RSN_MODE_WPA    1
324 #define RSN_MODE_WPA2   2
325         struct {
326                 uint8_t size;   /* +52 */
327                 uint8_t body[128];      /* +53 */
328         } __attribute__ ((packed)) rsn;
329 } __attribute__ ((packed));
330
331 struct hostif_connect_indication_t {
332         struct hostif_hdr header;
333         uint16_t connect_code;
334 #define RESULT_CONNECT    0
335 #define RESULT_DISCONNECT 1
336         struct link_ap_info_t link_ap_info;
337 } __attribute__ ((packed));
338
339 struct hostif_stop_request_t {
340         struct hostif_hdr header;
341 } __attribute__ ((packed));
342
343 struct hostif_stop_confirm_t {
344         struct hostif_hdr header;
345         uint16_t result_code;
346 } __attribute__ ((packed));
347
348 struct hostif_ps_adhoc_set_request_t {
349         struct hostif_hdr header;
350         uint16_t phy_type;
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         uint16_t cts_mode;
356 #define CTS_MODE_FALSE  0
357 #define CTS_MODE_TRUE   1
358         uint16_t channel;
359         struct rate_set16_t rate_set;
360         uint16_t capability;    /* bit5:preamble bit6:pbcc pbcc not supported always 0 
361                                  * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
362         uint16_t scan_type;
363 } __attribute__ ((packed));
364
365 struct hostif_ps_adhoc_set_confirm_t {
366         struct hostif_hdr header;
367         uint16_t result_code;
368 } __attribute__ ((packed));
369
370 struct hostif_infrastructure_set_request_t {
371         struct hostif_hdr header;
372         uint16_t phy_type;
373         uint16_t cts_mode;
374         struct rate_set16_t rate_set;
375         struct ssid_t ssid;
376         uint16_t capability;    /* bit5:preamble bit6:pbcc pbcc not supported always 0 
377                                  * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
378         uint16_t beacon_lost_count;
379         uint16_t auth_type;
380 #define AUTH_TYPE_OPEN_SYSTEM 0
381 #define AUTH_TYPE_SHARED_KEY  1
382         struct channel_list_t channel_list;
383         uint16_t scan_type;
384 } __attribute__ ((packed));
385
386 struct hostif_infrastructure_set2_request_t {
387         struct hostif_hdr header;
388         uint16_t phy_type;
389         uint16_t cts_mode;
390         struct rate_set16_t rate_set;
391         struct ssid_t ssid;
392         uint16_t capability;    /* bit5:preamble bit6:pbcc pbcc not supported always 0 
393                                  * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
394         uint16_t beacon_lost_count;
395         uint16_t auth_type;
396 #define AUTH_TYPE_OPEN_SYSTEM 0
397 #define AUTH_TYPE_SHARED_KEY  1
398         struct channel_list_t channel_list;
399         uint16_t scan_type;
400         uint8_t bssid[ETH_ALEN];
401 } __attribute__ ((packed));
402
403 struct hostif_infrastructure_set_confirm_t {
404         struct hostif_hdr header;
405         uint16_t result_code;
406 } __attribute__ ((packed));
407
408 struct hostif_adhoc_set_request_t {
409         struct hostif_hdr header;
410         uint16_t phy_type;
411         uint16_t cts_mode;
412         uint16_t channel;
413         struct rate_set16_t rate_set;
414         struct ssid_t ssid;
415         uint16_t capability;    /* bit5:preamble bit6:pbcc pbcc not supported always 0 
416                                  * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
417         uint16_t scan_type;
418 } __attribute__ ((packed));
419
420 struct hostif_adhoc_set2_request_t {
421         struct hostif_hdr header;
422         uint16_t phy_type;
423         uint16_t cts_mode;
424         uint16_t reserved;
425         struct rate_set16_t rate_set;
426         struct ssid_t ssid;
427         uint16_t capability;    /* bit5:preamble bit6:pbcc pbcc not supported always 0 
428                                  * bit10:ShortSlotTime bit13:DSSS-OFDM DSSS-OFDM not supported always 0 */
429         uint16_t scan_type;
430         struct channel_list_t channel_list;
431         uint8_t bssid[ETH_ALEN];
432 } __attribute__ ((packed));
433
434 struct hostif_adhoc_set_confirm_t {
435         struct hostif_hdr header;
436         uint16_t result_code;
437 } __attribute__ ((packed));
438
439 struct last_associate_t {
440         uint8_t type;
441         uint8_t status;
442 } __attribute__ ((packed));
443
444 struct association_request_t {
445         uint8_t type;
446 #define FRAME_TYPE_ASSOC_REQ    0x00
447 #define FRAME_TYPE_REASSOC_REQ  0x20
448         uint8_t pad;
449         uint16_t capability;
450         uint16_t listen_interval;
451         uint8_t ap_address[6];
452         uint16_t reqIEs_size;
453 } __attribute__ ((packed));
454
455 struct association_response_t {
456         uint8_t type;
457 #define FRAME_TYPE_ASSOC_RESP   0x10
458 #define FRAME_TYPE_REASSOC_RESP 0x30
459         uint8_t pad;
460         uint16_t capability;
461         uint16_t status;
462         uint16_t association_id;
463         uint16_t respIEs_size;
464 } __attribute__ ((packed));
465
466 struct hostif_associate_indication_t {
467         struct hostif_hdr header;
468         struct association_request_t assoc_req;
469         struct association_response_t assoc_resp;
470         /* followed by (reqIEs_size + respIEs_size) octets of data */
471         /* reqIEs data *//* respIEs data */
472 } __attribute__ ((packed));
473
474 struct hostif_bss_scan_request_t {
475         struct hostif_hdr header;
476         uint8_t scan_type;
477 #define ACTIVE_SCAN  0
478 #define PASSIVE_SCAN 1
479         uint8_t pad[3];
480         uint32_t ch_time_min;
481         uint32_t ch_time_max;
482         struct channel_list_t channel_list;
483         struct ssid_t ssid;
484 } __attribute__ ((packed));
485
486 struct hostif_bss_scan_confirm_t {
487         struct hostif_hdr header;
488         uint16_t result_code;
489         uint16_t reserved;
490 } __attribute__ ((packed));
491
492 struct hostif_phy_information_request_t {
493         struct hostif_hdr header;
494         uint16_t type;
495 #define NORMAL_TYPE     0
496 #define TIME_TYPE       1
497         uint16_t time;  /* unit 100ms */
498 } __attribute__ ((packed));
499
500 struct hostif_phy_information_confirm_t {
501         struct hostif_hdr header;
502         uint8_t rssi;
503         uint8_t sq;
504         uint8_t noise;
505         uint8_t link_speed;
506         uint32_t tx_frame;
507         uint32_t rx_frame;
508         uint32_t tx_error;
509         uint32_t rx_error;
510 } __attribute__ ((packed));
511
512 /* sleep mode */
513 #define SLP_ACTIVE  0
514 #define SLP_SLEEP   1
515 struct hostif_sleep_request_t {
516         struct hostif_hdr header;
517 } __attribute__ ((packed));
518
519 struct hostif_sleep_confirm_t {
520         struct hostif_hdr header;
521         uint16_t result_code;
522 } __attribute__ ((packed));
523
524 struct hostif_mic_failure_request_t {
525         struct hostif_hdr header;
526         uint16_t failure_count;
527         uint16_t timer;
528 } __attribute__ ((packed));
529
530 struct hostif_mic_failure_confirm_t {
531         struct hostif_hdr header;
532         uint16_t result_code;
533 } __attribute__ ((packed));
534
535 #define BASIC_RATE      0x80
536 #define RATE_MASK       0x7F
537
538 #define TX_RATE_AUTO      0xff
539 #define TX_RATE_1M_FIXED  0
540 #define TX_RATE_2M_FIXED  1
541 #define TX_RATE_1_2M_AUTO 2
542 #define TX_RATE_5M_FIXED  3
543 #define TX_RATE_11M_FIXED 4
544
545 #define TX_RATE_FULL_AUTO       0
546 #define TX_RATE_11_AUTO         1
547 #define TX_RATE_11B_AUTO        2
548 #define TX_RATE_11BG_AUTO       3
549 #define TX_RATE_MANUAL_AUTO     4
550 #define TX_RATE_FIXED           5
551
552 /* 11b rate */
553 #define TX_RATE_1M      (uint8_t)(10/5) /* 11b 11g basic rate */
554 #define TX_RATE_2M      (uint8_t)(20/5) /* 11b 11g basic rate */
555 #define TX_RATE_5M      (uint8_t)(55/5) /* 11g basic rate */
556 #define TX_RATE_11M     (uint8_t)(110/5)        /* 11g basic rate */
557
558 /* 11g rate */
559 #define TX_RATE_6M      (uint8_t)(60/5) /* 11g basic rate */
560 #define TX_RATE_12M     (uint8_t)(120/5)        /* 11g basic rate */
561 #define TX_RATE_24M     (uint8_t)(240/5)        /* 11g basic rate */
562 #define TX_RATE_9M      (uint8_t)(90/5)
563 #define TX_RATE_18M     (uint8_t)(180/5)
564 #define TX_RATE_36M     (uint8_t)(360/5)
565 #define TX_RATE_48M     (uint8_t)(480/5)
566 #define TX_RATE_54M     (uint8_t)(540/5)
567
568 #define IS_11B_RATE(A) (((A&RATE_MASK)==TX_RATE_1M)||((A&RATE_MASK)==TX_RATE_2M)||\
569                         ((A&RATE_MASK)==TX_RATE_5M)||((A&RATE_MASK)==TX_RATE_11M))
570
571 #define IS_OFDM_RATE(A) (((A&RATE_MASK)==TX_RATE_6M)||((A&RATE_MASK)==TX_RATE_12M)||\
572                         ((A&RATE_MASK)==TX_RATE_24M)||((A&RATE_MASK)==TX_RATE_9M)||\
573                         ((A&RATE_MASK)==TX_RATE_18M)||((A&RATE_MASK)==TX_RATE_36M)||\
574                         ((A&RATE_MASK)==TX_RATE_48M)||((A&RATE_MASK)==TX_RATE_54M))
575
576 #define IS_11BG_RATE(A) (IS_11B_RATE(A)||IS_OFDM_RATE(A))
577
578 #define IS_OFDM_EXT_RATE(A)  (((A&RATE_MASK)==TX_RATE_9M)||((A&RATE_MASK)==TX_RATE_18M)||\
579                              ((A&RATE_MASK)==TX_RATE_36M)||((A&RATE_MASK)==TX_RATE_48M)||\
580                              ((A&RATE_MASK)==TX_RATE_54M))
581
582 enum {
583         CONNECT_STATUS = 0,
584         DISCONNECT_STATUS
585 };
586
587 /* preamble type */
588 enum {
589         LONG_PREAMBLE = 0,
590         SHORT_PREAMBLE
591 };
592
593 /* multicast filter */
594 #define MCAST_FILTER_MCAST    0
595 #define MCAST_FILTER_MCASTALL 1
596 #define MCAST_FILTER_PROMISC  2
597
598 #define NIC_MAX_MCAST_LIST 32
599
600 /* macro function */
601 #define HIF_EVENT_MASK 0xE800
602 #define IS_HIF_IND(_EVENT)  ((_EVENT&HIF_EVENT_MASK)==0xE800  && \
603                              ((_EVENT&~HIF_EVENT_MASK)==0x0001 || \
604                               (_EVENT&~HIF_EVENT_MASK)==0x0006 || \
605                               (_EVENT&~HIF_EVENT_MASK)==0x000C || \
606                               (_EVENT&~HIF_EVENT_MASK)==0x0011 || \
607                               (_EVENT&~HIF_EVENT_MASK)==0x0012))
608
609 #define IS_HIF_CONF(_EVENT) ((_EVENT&HIF_EVENT_MASK)==0xE800  && \
610                              (_EVENT&~HIF_EVENT_MASK)>0x0000  && \
611                              (_EVENT&~HIF_EVENT_MASK)<0x0012  && \
612                              !IS_HIF_IND(_EVENT) )
613
614 #ifdef __KERNEL__
615
616 #include "ks_wlan.h"
617
618 /* function prototype */
619 extern int hostif_data_request(struct ks_wlan_private *priv,
620                                struct sk_buff *packet);
621 extern void hostif_receive(struct ks_wlan_private *priv, unsigned char *p,
622                            unsigned int size);
623 extern void hostif_sme_enqueue(struct ks_wlan_private *priv, uint16_t event);
624 extern int hostif_init(struct ks_wlan_private *priv);
625 extern void hostif_exit(struct ks_wlan_private *priv);
626
627 static
628 inline int hif_align_size(int size)
629 {
630 #ifdef  KS_ATOM
631         if (size < 1024)
632                 size = 1024;
633 #endif
634 #ifdef  DEVICE_ALIGNMENT
635         return (size % DEVICE_ALIGNMENT) ? size + DEVICE_ALIGNMENT -
636             (size % DEVICE_ALIGNMENT) : size;
637 #else
638         return size;
639 #endif
640 }
641
642 #endif /* __KERNEL__ */
643
644 #endif /* _KS_HOSTIF_H_ */