Commit | Line | Data |
---|---|---|
c5c77ba1 JK |
1 | #ifndef HOST_INT_H |
2 | #define HOST_INT_H | |
3 | ||
4 | #include "coreconfigurator.h" | |
c5c77ba1 JK |
5 | |
6 | #define IP_ALEN 4 | |
7 | ||
c590b9a4 | 8 | #define IDLE_MODE 0x00 |
c5c77ba1 JK |
9 | #define AP_MODE 0x01 |
10 | #define STATION_MODE 0x02 | |
568ab197 | 11 | #define GO_MODE 0x03 |
c5c77ba1 | 12 | #define CLIENT_MODE 0x04 |
c81f7de8 LK |
13 | #define ACTION 0xD0 |
14 | #define PROBE_REQ 0x40 | |
15 | #define PROBE_RESP 0x50 | |
c5c77ba1 | 16 | |
c81f7de8 LK |
17 | #define ACTION_FRM_IDX 0 |
18 | #define PROBE_REQ_IDX 1 | |
568ab197 | 19 | #define MAX_NUM_STA 9 |
c5c77ba1 JK |
20 | #define ACTIVE_SCAN_TIME 10 |
21 | #define PASSIVE_SCAN_TIME 1200 | |
22 | #define MIN_SCAN_TIME 10 | |
23 | #define MAX_SCAN_TIME 1200 | |
24 | #define DEFAULT_SCAN 0 | |
af080e04 CL |
25 | #define USER_SCAN BIT(0) |
26 | #define OBSS_PERIODIC_SCAN BIT(1) | |
27 | #define OBSS_ONETIME_SCAN BIT(2) | |
c5c77ba1 | 28 | #define GTK_RX_KEY_BUFF_LEN 24 |
568ab197 CL |
29 | #define ADDKEY 0x1 |
30 | #define REMOVEKEY 0x2 | |
31 | #define DEFAULTKEY 0x4 | |
32 | #define ADDKEY_AP 0x8 | |
30b2ba09 | 33 | #define MAX_NUM_SCANNED_NETWORKS 100 |
568ab197 | 34 | #define MAX_NUM_SCANNED_NETWORKS_SHADOW 130 |
30b2ba09 CL |
35 | #define MAX_NUM_PROBED_SSID 10 |
36 | #define CHANNEL_SCAN_TIME 250 | |
c5c77ba1 JK |
37 | |
38 | #define TX_MIC_KEY_LEN 8 | |
39 | #define RX_MIC_KEY_LEN 8 | |
568ab197 | 40 | #define PTK_KEY_LEN 16 |
c5c77ba1 JK |
41 | |
42 | #define TX_MIC_KEY_MSG_LEN 26 | |
43 | #define RX_MIC_KEY_MSG_LEN 48 | |
44 | #define PTK_KEY_MSG_LEN 39 | |
45 | ||
46 | #define PMKSA_KEY_LEN 22 | |
568ab197 CL |
47 | #define ETH_ALEN 6 |
48 | #define PMKID_LEN 16 | |
49 | #define WILC_MAX_NUM_PMKIDS 16 | |
50 | #define WILC_SUPP_MCS_SET_SIZE 16 | |
30b2ba09 | 51 | #define WILC_ADD_STA_LENGTH 40 |
c5c77ba1 | 52 | #define SCAN_EVENT_DONE_ABORTED |
568ab197 | 53 | #define NUM_CONCURRENT_IFC 2 |
c5c77ba1 | 54 | |
03e7b9c4 | 55 | struct rf_info { |
5babeecb | 56 | u8 link_speed; |
00c8dfcf | 57 | s8 rssi; |
7e84ff4e | 58 | u32 tx_cnt; |
9b99274a | 59 | u32 rx_cnt; |
54160376 | 60 | u32 tx_fail_cnt; |
03e7b9c4 | 61 | }; |
c5c77ba1 | 62 | |
db9f1b12 | 63 | enum host_if_state { |
df94ed25 CL |
64 | HOST_IF_IDLE = 0, |
65 | HOST_IF_SCANNING = 1, | |
66 | HOST_IF_CONNECTING = 2, | |
67 | HOST_IF_WAITING_CONN_RESP = 3, | |
68 | HOST_IF_CONNECTED = 4, | |
69 | HOST_IF_P2P_LISTEN = 5, | |
70 | HOST_IF_FORCE_32BIT = 0xFFFFFFFF | |
db9f1b12 | 71 | }; |
c5c77ba1 | 72 | |
cd1e6cb4 | 73 | struct host_if_pmkid { |
63d03e47 GKH |
74 | u8 bssid[ETH_ALEN]; |
75 | u8 pmkid[PMKID_LEN]; | |
cd1e6cb4 | 76 | }; |
c5c77ba1 | 77 | |
a949f909 | 78 | struct host_if_pmkid_attr { |
63d03e47 | 79 | u8 numpmkid; |
cd1e6cb4 | 80 | struct host_if_pmkid pmkidlist[WILC_MAX_NUM_PMKIDS]; |
a949f909 | 81 | }; |
61500fbd | 82 | |
430a78cf | 83 | enum CURRENT_TXRATE { |
df94ed25 CL |
84 | AUTORATE = 0, |
85 | MBPS_1 = 1, | |
86 | MBPS_2 = 2, | |
87 | MBPS_5_5 = 5, | |
88 | MBPS_11 = 11, | |
89 | MBPS_6 = 6, | |
90 | MBPS_9 = 9, | |
91 | MBPS_12 = 12, | |
92 | MBPS_18 = 18, | |
93 | MBPS_24 = 24, | |
94 | MBPS_36 = 36, | |
95 | MBPS_48 = 48, | |
96 | MBPS_54 = 54 | |
430a78cf | 97 | }; |
c5c77ba1 | 98 | |
9529650a | 99 | struct cfg_param_val { |
87c05b28 | 100 | u32 flag; |
63d03e47 GKH |
101 | u8 ht_enable; |
102 | u8 bss_type; | |
103 | u8 auth_type; | |
d85f5326 | 104 | u16 auth_timeout; |
63d03e47 | 105 | u8 power_mgmt_mode; |
d85f5326 CL |
106 | u16 short_retry_limit; |
107 | u16 long_retry_limit; | |
108 | u16 frag_threshold; | |
109 | u16 rts_threshold; | |
110 | u16 preamble_type; | |
63d03e47 GKH |
111 | u8 short_slot_allowed; |
112 | u8 txop_prot_disabled; | |
d85f5326 CL |
113 | u16 beacon_interval; |
114 | u16 dtim_period; | |
073b8d0c | 115 | enum SITESURVEY site_survey_enabled; |
d85f5326 | 116 | u16 site_survey_scan_time; |
63d03e47 | 117 | u8 scan_source; |
d85f5326 CL |
118 | u16 active_scan_time; |
119 | u16 passive_scan_time; | |
430a78cf | 120 | enum CURRENT_TXRATE curr_tx_rate; |
c5c77ba1 | 121 | |
9529650a | 122 | }; |
c5c77ba1 | 123 | |
200ac21b | 124 | enum cfg_param { |
ffda203c AB |
125 | RETRY_SHORT = BIT(0), |
126 | RETRY_LONG = BIT(1), | |
127 | FRAG_THRESHOLD = BIT(2), | |
128 | RTS_THRESHOLD = BIT(3), | |
129 | BSS_TYPE = BIT(4), | |
130 | AUTH_TYPE = BIT(5), | |
131 | AUTHEN_TIMEOUT = BIT(6), | |
132 | POWER_MANAGEMENT = BIT(7), | |
133 | PREAMBLE = BIT(8), | |
134 | SHORT_SLOT_ALLOWED = BIT(9), | |
135 | TXOP_PROT_DISABLE = BIT(10), | |
136 | BEACON_INTERVAL = BIT(11), | |
137 | DTIM_PERIOD = BIT(12), | |
138 | SITE_SURVEY = BIT(13), | |
139 | SITE_SURVEY_SCAN_TIME = BIT(14), | |
140 | ACTIVE_SCANTIME = BIT(15), | |
141 | PASSIVE_SCANTIME = BIT(16), | |
142 | CURRENT_TX_RATE = BIT(17), | |
143 | HT_ENABLE = BIT(18), | |
200ac21b | 144 | }; |
c5c77ba1 | 145 | |
73735e49 | 146 | struct found_net_info { |
63d03e47 | 147 | u8 au8bssid[6]; |
ca356ada | 148 | s8 s8rssi; |
73735e49 | 149 | }; |
c5c77ba1 | 150 | |
1ec3815f LK |
151 | enum scan_event { |
152 | SCAN_EVENT_NETWORK_FOUND = 0, | |
153 | SCAN_EVENT_DONE = 1, | |
154 | SCAN_EVENT_ABORTED = 2, | |
155 | SCAN_EVENT_FORCE_32BIT = 0xFFFFFFFF | |
156 | }; | |
c5c77ba1 | 157 | |
ed3f0379 | 158 | enum conn_event { |
c5c77ba1 JK |
159 | CONN_DISCONN_EVENT_CONN_RESP = 0, |
160 | CONN_DISCONN_EVENT_DISCONN_NOTIF = 1, | |
df94ed25 | 161 | CONN_DISCONN_EVENT_FORCE_32BIT = 0xFFFFFFFF |
ed3f0379 | 162 | }; |
c5c77ba1 | 163 | |
b9d96333 | 164 | enum KEY_TYPE { |
c5c77ba1 | 165 | WEP, |
5cd8f7ae | 166 | WPA_RX_GTK, |
2141fe39 | 167 | WPA_PTK, |
c5c77ba1 | 168 | PMKSA, |
b9d96333 | 169 | }; |
c5c77ba1 | 170 | |
1ec3815f LK |
171 | typedef void (*wilc_scan_result)(enum scan_event, tstrNetworkInfo *, |
172 | void *, void *); | |
c5c77ba1 | 173 | |
ed3f0379 | 174 | typedef void (*wilc_connect_result)(enum conn_event, |
c5c77ba1 | 175 | tstrConnectInfo *, |
63d03e47 | 176 | u8, |
c5c77ba1 JK |
177 | tstrDisconnectNotifInfo *, |
178 | void *); | |
179 | ||
e3e7e8ac LK |
180 | typedef void (*wilc_remain_on_chan_expired)(void *, u32); |
181 | typedef void (*wilc_remain_on_chan_ready)(void *); | |
c5c77ba1 | 182 | |
3bbd59f5 | 183 | struct rcvd_net_info { |
b021b80b | 184 | u8 *buffer; |
3bffac68 | 185 | u32 len; |
3bbd59f5 | 186 | }; |
c5c77ba1 | 187 | |
ad61fcea | 188 | struct hidden_net_info { |
63d03e47 GKH |
189 | u8 *pu8ssid; |
190 | u8 u8ssidlen; | |
ad61fcea | 191 | }; |
c5c77ba1 | 192 | |
607db447 | 193 | struct hidden_network { |
ad61fcea | 194 | struct hidden_net_info *pstrHiddenNetworkInfo; |
63d03e47 | 195 | u8 u8ssidnum; |
607db447 | 196 | }; |
c5c77ba1 | 197 | |
b4fe59d8 | 198 | struct user_scan_req { |
bc801855 | 199 | wilc_scan_result scan_result; |
66eaea30 | 200 | void *arg; |
f79756ee | 201 | u32 rcvd_ch_cnt; |
af973f30 | 202 | struct found_net_info net_info[MAX_NUM_SCANNED_NETWORKS]; |
b4fe59d8 | 203 | }; |
c5c77ba1 | 204 | |
c944a4e8 | 205 | struct user_conn_req { |
63d03e47 GKH |
206 | u8 *pu8bssid; |
207 | u8 *pu8ssid; | |
208 | u8 u8security; | |
7d069728 | 209 | enum AUTHTYPE auth_type; |
74ab5e45 | 210 | size_t ssid_len; |
a3b2f4b9 | 211 | u8 *ies; |
331ed080 | 212 | size_t ies_len; |
33bfb198 | 213 | wilc_connect_result conn_result; |
ff06982c | 214 | bool ht_capable; |
73abaa49 | 215 | void *arg; |
c944a4e8 | 216 | }; |
c5c77ba1 | 217 | |
127f9d94 | 218 | struct drv_handler { |
a7f3b12f | 219 | u32 handler; |
127f9d94 | 220 | }; |
c5c77ba1 | 221 | |
801bee52 | 222 | struct op_mode { |
c96debf1 | 223 | u32 mode; |
801bee52 | 224 | }; |
c5c77ba1 | 225 | |
b7611a87 | 226 | struct set_mac_addr { |
ae5e4522 | 227 | u8 mac_addr[ETH_ALEN]; |
b7611a87 | 228 | }; |
c5c77ba1 | 229 | |
fcd27c5f | 230 | struct get_mac_addr { |
6ceba0af | 231 | u8 *mac_addr; |
fcd27c5f | 232 | }; |
c5c77ba1 | 233 | |
54265472 | 234 | struct ba_session_info { |
3fc4999e | 235 | u8 bssid[ETH_ALEN]; |
16c9b391 | 236 | u8 tid; |
277c2130 | 237 | u16 buf_size; |
23d0bfaa | 238 | u16 time_out; |
54265472 | 239 | }; |
c5c77ba1 | 240 | |
2f9c03f5 | 241 | struct remain_ch { |
839ab709 | 242 | u16 ch; |
fb6e0680 | 243 | u32 duration; |
bfb62abc | 244 | wilc_remain_on_chan_expired expired; |
5e5f7916 | 245 | wilc_remain_on_chan_ready ready; |
c5cc4b12 | 246 | void *arg; |
9d764e38 | 247 | u32 id; |
2f9c03f5 | 248 | }; |
c5c77ba1 | 249 | |
bc37c5df | 250 | struct reg_frame { |
6abf8681 | 251 | bool reg; |
d5f654ca | 252 | u16 frame_type; |
bcb410bb | 253 | u8 reg_id; |
bc37c5df | 254 | }; |
c5c77ba1 | 255 | |
c5c77ba1 JK |
256 | enum p2p_listen_state { |
257 | P2P_IDLE, | |
258 | P2P_LISTEN, | |
259 | P2P_GRP_FORMATION | |
260 | }; | |
261 | ||
b82d940d | 262 | struct wilc; |
441dc609 | 263 | struct host_if_drv { |
70793b2a | 264 | struct user_scan_req usr_scan_req; |
f8b17132 | 265 | struct user_conn_req usr_conn_req; |
d61f8e1e | 266 | struct remain_ch remain_on_ch; |
5beef2ca | 267 | u8 remain_on_ch_pending; |
1229b1ab | 268 | u64 p2p_timeout; |
ab16ec0b | 269 | u8 p2p_connect; |
c5c77ba1 | 270 | |
b60005a8 | 271 | enum host_if_state hif_state; |
c5c77ba1 | 272 | |
2a4eded9 | 273 | u8 assoc_bssid[ETH_ALEN]; |
ace303f0 | 274 | struct cfg_param_val cfg_values; |
33110ad7 LK |
275 | |
276 | struct semaphore sem_cfg_values; | |
9ea47133 | 277 | struct semaphore sem_test_key_block; |
e55e4967 | 278 | struct semaphore sem_test_disconn_block; |
7e111f9e | 279 | struct semaphore sem_get_rssi; |
bc34da66 | 280 | struct semaphore sem_get_link_speed; |
4ea90008 | 281 | struct semaphore sem_get_chnl; |
569a3c67 | 282 | struct semaphore sem_inactive_time; |
13b313e4 LK |
283 | |
284 | struct timer_list scan_timer; | |
81a59506 | 285 | struct timer_list connect_timer; |
cc2d7e9e | 286 | struct timer_list remain_on_ch_timer; |
c5c77ba1 | 287 | |
72ed4dc7 | 288 | bool IFC_UP; |
441dc609 | 289 | }; |
c5c77ba1 | 290 | |
6a89ba9c | 291 | struct add_sta_param { |
2353c388 | 292 | u8 bssid[ETH_ALEN]; |
4101eb8a | 293 | u16 aid; |
e734223c | 294 | u8 rates_len; |
a622e016 | 295 | const u8 *rates; |
22520120 | 296 | bool ht_supported; |
0d073f69 | 297 | u16 ht_capa_info; |
fba1f2d2 | 298 | u8 ht_ampdu_params; |
5ebbf4f7 | 299 | u8 ht_supp_mcs_set[16]; |
223741d7 | 300 | u16 ht_ext_params; |
74fe73cf | 301 | u32 ht_tx_bf_cap; |
a486baff | 302 | u8 ht_ante_sel; |
f676e17a | 303 | u16 flags_mask; |
67ab64e4 | 304 | u16 flags_set; |
6a89ba9c | 305 | }; |
c5c77ba1 | 306 | |
cf60106b | 307 | struct wilc_vif; |
0e1af73d | 308 | s32 wilc_remove_key(struct host_if_drv *hWFIDrv, const u8 *pu8StaAddress); |
fbf5379b GL |
309 | int wilc_remove_wep_key(struct wilc_vif *vif, u8 index); |
310 | int wilc_set_wep_default_keyid(struct wilc_vif *vif, u8 index); | |
311 | int wilc_add_wep_key_bss_sta(struct wilc_vif *vif, const u8 *key, u8 len, | |
312 | u8 index); | |
313 | int wilc_add_wep_key_bss_ap(struct wilc_vif *vif, const u8 *key, u8 len, | |
314 | u8 index, u8 mode, enum AUTHTYPE auth_type); | |
961875ed CL |
315 | int wilc_add_ptk(struct wilc_vif *vif, const u8 *ptk, u8 ptk_key_len, |
316 | const u8 *mac_addr, const u8 *rx_mic, const u8 *tx_mic, | |
317 | u8 mode, u8 cipher_mode, u8 index); | |
fbf5379b GL |
318 | s32 wilc_get_inactive_time(struct wilc_vif *vif, const u8 *mac, |
319 | u32 *pu32InactiveTime); | |
9676108e CL |
320 | int wilc_add_rx_gtk(struct wilc_vif *vif, const u8 *rx_gtk, u8 gtk_key_len, |
321 | u8 index, u32 key_rsc_len, const u8 *key_rsc, | |
322 | const u8 *rx_mic, const u8 *tx_mic, u8 mode, | |
323 | u8 cipher_mode); | |
1ab58705 | 324 | int wilc_set_pmkid_info(struct wilc_vif *vif, |
16c0cba7 | 325 | struct host_if_pmkid_attr *pmkid); |
1eabfe3f | 326 | int wilc_get_mac_address(struct wilc_vif *vif, u8 *mac_addr); |
f95f480c | 327 | int wilc_set_mac_address(struct wilc_vif *vif, u8 *mac_addr); |
0e1af73d | 328 | int wilc_wait_msg_queue_idle(void); |
f2cb5f3f | 329 | int wilc_set_join_req(struct wilc_vif *vif, u8 *bssid, const u8 *ssid, |
8c38d960 | 330 | size_t ssid_len, const u8 *ies, size_t ies_len, |
2ef29833 | 331 | wilc_connect_result connect_result, void *user_arg, |
12a3b8bc | 332 | u8 security, enum AUTHTYPE auth_type, |
f382b376 | 333 | u8 channel, void *join_params); |
30205892 | 334 | int wilc_flush_join_req(struct wilc_vif *vif); |
9f723fde | 335 | int wilc_disconnect(struct wilc_vif *vif, u16 reason_code); |
fbf5379b | 336 | int wilc_set_mac_chnl_num(struct wilc_vif *vif, u8 channel); |
652bb5e8 | 337 | int wilc_get_rssi(struct wilc_vif *vif, s8 *rssi_level); |
fbf5379b GL |
338 | s32 wilc_scan(struct wilc_vif *vif, u8 u8ScanSource, u8 u8ScanType, |
339 | u8 *pu8ChnlFreqList, u8 u8ChnlListLen, const u8 *pu8IEs, | |
340 | size_t IEsLen, wilc_scan_result ScanResult, void *pvUserArg, | |
341 | struct hidden_network *pstrHiddenNetwork); | |
342 | s32 wilc_hif_set_cfg(struct wilc_vif *vif, | |
343 | struct cfg_param_val *pstrCfgParamVal); | |
0e1af73d | 344 | s32 wilc_init(struct net_device *dev, struct host_if_drv **phWFIDrv); |
fbf5379b GL |
345 | s32 wilc_deinit(struct wilc_vif *vif); |
346 | s32 wilc_add_beacon(struct wilc_vif *vif, u32 u32Interval, u32 u32DTIMPeriod, | |
347 | u32 u32HeadLen, u8 *pu8Head, u32 u32TailLen, u8 *pu8Tail); | |
348 | int wilc_del_beacon(struct wilc_vif *vif); | |
349 | int wilc_add_station(struct wilc_vif *vif, struct add_sta_param *sta_param); | |
350 | s32 wilc_del_allstation(struct wilc_vif *vif, u8 pu8MacAddr[][ETH_ALEN]); | |
351 | int wilc_del_station(struct wilc_vif *vif, const u8 *mac_addr); | |
352 | s32 wilc_edit_station(struct wilc_vif *vif, | |
353 | struct add_sta_param *pstrStaParams); | |
ecd27500 | 354 | int wilc_set_power_mgmt(struct wilc_vif *vif, bool enabled, u32 timeout); |
b80c0943 | 355 | int wilc_setup_multicast_filter(struct wilc_vif *vif, bool enabled, |
2dff2d42 | 356 | u32 count); |
6964f086 | 357 | int wilc_setup_ipaddress(struct wilc_vif *vif, u8 *ip_addr, u8 idx); |
fbf5379b | 358 | s32 wilc_del_all_rx_ba_session(struct wilc_vif *vif, char *pBSSID, char TID); |
6d6bc400 | 359 | int wilc_remain_on_channel(struct wilc_vif *vif, u32 u32SessionID, |
fbf5379b | 360 | u32 u32duration, u16 chan, |
cf60106b GL |
361 | wilc_remain_on_chan_expired RemainOnChanExpired, |
362 | wilc_remain_on_chan_ready RemainOnChanReady, | |
363 | void *pvUserArg); | |
6b0f7cdd | 364 | int wilc_listen_state_expired(struct wilc_vif *vif, u32 session_id); |
8859fc28 | 365 | int wilc_frame_register(struct wilc_vif *vif, u16 frame_type, bool reg); |
31f0f697 | 366 | int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index); |
fbf5379b | 367 | int wilc_set_operation_mode(struct wilc_vif *vif, u32 mode); |
f70b25ff | 368 | int wilc_get_statistics(struct wilc_vif *vif, struct rf_info *stats); |
fbf5379b | 369 | void wilc_resolve_disconnect_aberration(struct wilc_vif *vif); |
31f0f697 | 370 | int wilc_get_vif_idx(struct wilc_vif *vif); |
491880eb AB |
371 | |
372 | extern bool wilc_optaining_ip; | |
e554a305 | 373 | extern u8 wilc_connected_ssid[6]; |
491880eb AB |
374 | extern u8 wilc_multicast_mac_addr_list[WILC_MULTICAST_TABLE_SIZE][ETH_ALEN]; |
375 | ||
376 | extern int wilc_connecting; | |
377 | extern u8 wilc_initialized; | |
378 | extern struct timer_list wilc_during_ip_timer; | |
379 | ||
c5c77ba1 | 380 | #endif |