1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Driver for KeyStream wireless LAN
5 * Copyright (c) 2005-2008 KeyStream Corp.
6 * Copyright (C) 2009 Renesas Technology Corp.
12 #include <linux/compiler.h>
13 #include <linux/ieee80211.h>
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
55 #define HIF_REQ_MAX 0xE010
58 * HOST-MAC I/F data structure
59 * Byte alignment Little Endian
67 struct hostif_data_request {
68 struct hostif_hdr header;
70 #define TYPE_DATA 0x0000
71 #define TYPE_AUTH 0x0001
76 #define TYPE_PMK1 0x0001
77 #define TYPE_GMK1 0x0002
78 #define TYPE_GMK2 0x0003
80 #define CHANNEL_LIST_MAX_SIZE 14
83 u8 body[CHANNEL_LIST_MAX_SIZE];
88 * enum mib_attribute - Management Information Base attribute
89 * Attribute value used for accessing and updating MIB
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
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
173 struct hostif_mib_get_request {
174 struct hostif_hdr header;
175 __le32 mib_attribute;
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
187 MIB_VALUE_TYPE_NULL = 0,
190 MIB_VALUE_TYPE_COUNT32,
191 MIB_VALUE_TYPE_OSTRING
194 struct hostif_mib_value {
200 struct hostif_mib_get_confirm_t {
201 struct hostif_hdr header;
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;
211 struct hostif_mib_set_request_t {
212 struct hostif_hdr header;
213 __le32 mib_attribute;
214 struct hostif_mib_value mib_value;
217 struct hostif_power_mgmt_request {
218 struct hostif_hdr header;
220 #define POWER_ACTIVE 1
223 #define SLEEP_FALSE 0
224 #define SLEEP_TRUE 1 /* not used */
225 __le32 receive_dtims;
230 enum power_mgmt_mode_type {
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
242 struct hostif_start_request {
243 struct hostif_hdr header;
245 #define MODE_PSEUDO_ADHOC 0
246 #define MODE_INFRASTRUCTURE 1
247 #define MODE_AP 2 /* not used */
253 u8 body[IEEE80211_MAX_SSID_LEN];
257 #define RATE_SET_MAX_SIZE 16
279 __le16 dur_remaining;
288 #define RSN_BODY_SIZE 64
289 u8 body[RSN_BODY_SIZE];
292 struct erp_params_t {
303 u8 bssid[6]; /* +00 */
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 */
317 struct link_ap_info {
318 u8 bssid[6]; /* +00 */
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 */
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
340 u8 body[128]; /* +53 */
344 #define RESULT_CONNECT 0
345 #define RESULT_DISCONNECT 1
347 struct hostif_stop_request {
348 struct hostif_hdr header;
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
356 #define CTS_MODE_FALSE 0
357 #define CTS_MODE_TRUE 1
359 struct hostif_request {
364 struct rate_set16 rate_set;
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
374 struct hostif_ps_adhoc_set_request {
375 struct hostif_hdr header;
376 struct hostif_request request;
380 #define AUTH_TYPE_OPEN_SYSTEM 0
381 #define AUTH_TYPE_SHARED_KEY 1
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
390 struct hostif_infrastructure_set_request {
391 struct hostif_hdr header;
392 struct hostif_request request;
394 __le16 beacon_lost_count;
396 struct channel_list channel_list;
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
407 struct hostif_adhoc_set_request {
408 struct hostif_hdr header;
409 struct hostif_request request;
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
421 struct hostif_adhoc_set2_request {
422 struct hostif_hdr header;
423 struct hostif_request request;
426 struct channel_list channel_list;
430 struct association_request {
434 __le16 listen_interval;
439 struct association_response {
444 __le16 association_id;
445 __le16 resp_ies_size;
448 struct hostif_bss_scan_request {
449 struct hostif_hdr header;
451 #define ACTIVE_SCAN 0
452 #define PASSIVE_SCAN 1
456 struct channel_list channel_list;
460 struct hostif_phy_information_request {
461 struct hostif_hdr header;
463 #define NORMAL_TYPE 0
465 __le16 time; /* unit 100ms */
468 enum sleep_mode_type {
473 struct hostif_sleep_request {
474 struct hostif_hdr header;
477 struct hostif_mic_failure_request {
478 struct hostif_hdr header;
479 __le16 failure_count;
483 #define BASIC_RATE 0x80
484 #define RATE_MASK 0x7F
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
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
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 */
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)
516 static inline bool is_11b_rate(u8 rate)
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));
524 static inline bool is_ofdm_rate(u8 rate)
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));
536 static inline bool is_11bg_rate(u8 rate)
538 return (is_11b_rate(rate) || is_ofdm_rate(rate));
541 static inline bool is_ofdm_ext_rate(u8 rate)
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));
550 enum connect_status_type {
560 enum multicast_filter_type {
562 MCAST_FILTER_MCASTALL,
563 MCAST_FILTER_PROMISC,
566 #define NIC_MAX_MCAST_LIST 32
568 #define HIF_EVENT_MASK 0xE800
570 static inline bool is_hif_ind(unsigned short event)
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)));
580 static inline bool is_hif_conf(unsigned short event)
582 return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) &&
583 ((event & ~HIF_EVENT_MASK) > 0x0000) &&
584 ((event & ~HIF_EVENT_MASK) < 0x0012) &&
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,
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);
605 void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv);
606 int ks_wlan_hw_power_save(struct ks_wlan_private *priv);
608 #define KS7010_SIZE_ALIGNMENT 32
610 static inline size_t hif_align_size(size_t size)
612 return ALIGN(size, KS7010_SIZE_ALIGNMENT);
615 #endif /* __KERNEL__ */
617 #endif /* _KS_HOSTIF_H_ */