1 #ifndef HOST_INT_H 2 #define HOST_INT_H 3 4 #include "coreconfigurator.h" 5 6 #define IP_ALEN 4 7 8 #define IDLE_MODE 0x00 9 #define AP_MODE 0x01 10 #define STATION_MODE 0x02 11 #define GO_MODE 0x03 12 #define CLIENT_MODE 0x04 13 #define ACTION 0xD0 14 #define PROBE_REQ 0x40 15 #define PROBE_RESP 0x50 16 17 #define ACTION_FRM_IDX 0 18 #define PROBE_REQ_IDX 1 19 #define MAX_NUM_STA 9 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 25 #define USER_SCAN BIT(0) 26 #define OBSS_PERIODIC_SCAN BIT(1) 27 #define OBSS_ONETIME_SCAN BIT(2) 28 #define GTK_RX_KEY_BUFF_LEN 24 29 #define ADDKEY 0x1 30 #define REMOVEKEY 0x2 31 #define DEFAULTKEY 0x4 32 #define ADDKEY_AP 0x8 33 #define MAX_NUM_SCANNED_NETWORKS 100 34 #define MAX_NUM_SCANNED_NETWORKS_SHADOW 130 35 #define MAX_NUM_PROBED_SSID 10 36 #define CHANNEL_SCAN_TIME 250 37 38 #define TX_MIC_KEY_LEN 8 39 #define RX_MIC_KEY_LEN 8 40 #define PTK_KEY_LEN 16 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 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 51 #define WILC_ADD_STA_LENGTH 40 52 #define SCAN_EVENT_DONE_ABORTED 53 #define NUM_CONCURRENT_IFC 2 54 55 struct rf_info { 56 u8 link_speed; 57 s8 rssi; 58 u32 tx_cnt; 59 u32 rx_cnt; 60 u32 tx_fail_cnt; 61 }; 62 63 enum host_if_state { 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 71 }; 72 73 struct host_if_pmkid { 74 u8 bssid[ETH_ALEN]; 75 u8 pmkid[PMKID_LEN]; 76 }; 77 78 struct host_if_pmkid_attr { 79 u8 numpmkid; 80 struct host_if_pmkid pmkidlist[WILC_MAX_NUM_PMKIDS]; 81 }; 82 83 enum CURRENT_TXRATE { 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 97 }; 98 99 struct cfg_param_attr { 100 u32 flag; 101 u8 ht_enable; 102 u8 bss_type; 103 u8 auth_type; 104 u16 auth_timeout; 105 u8 power_mgmt_mode; 106 u16 short_retry_limit; 107 u16 long_retry_limit; 108 u16 frag_threshold; 109 u16 rts_threshold; 110 u16 preamble_type; 111 u8 short_slot_allowed; 112 u8 txop_prot_disabled; 113 u16 beacon_interval; 114 u16 dtim_period; 115 enum SITESURVEY site_survey_enabled; 116 u16 site_survey_scan_time; 117 u8 scan_source; 118 u16 active_scan_time; 119 u16 passive_scan_time; 120 enum CURRENT_TXRATE curr_tx_rate; 121 122 }; 123 124 enum cfg_param { 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), 144 }; 145 146 struct found_net_info { 147 u8 bssid[6]; 148 s8 rssi; 149 }; 150 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 }; 157 158 enum conn_event { 159 CONN_DISCONN_EVENT_CONN_RESP = 0, 160 CONN_DISCONN_EVENT_DISCONN_NOTIF = 1, 161 CONN_DISCONN_EVENT_FORCE_32BIT = 0xFFFFFFFF 162 }; 163 164 enum KEY_TYPE { 165 WEP, 166 WPA_RX_GTK, 167 WPA_PTK, 168 PMKSA, 169 }; 170 171 typedef void (*wilc_scan_result)(enum scan_event, struct network_info *, 172 void *, void *); 173 174 typedef void (*wilc_connect_result)(enum conn_event, 175 struct connect_info *, 176 u8, 177 struct disconnect_info *, 178 void *); 179 180 typedef void (*wilc_remain_on_chan_expired)(void *, u32); 181 typedef void (*wilc_remain_on_chan_ready)(void *); 182 183 struct rcvd_net_info { 184 u8 *buffer; 185 u32 len; 186 }; 187 188 struct hidden_net_info { 189 u8 *ssid; 190 u8 ssid_len; 191 }; 192 193 struct hidden_network { 194 struct hidden_net_info *net_info; 195 u8 n_ssids; 196 }; 197 198 struct user_scan_req { 199 wilc_scan_result scan_result; 200 void *arg; 201 u32 rcvd_ch_cnt; 202 struct found_net_info net_info[MAX_NUM_SCANNED_NETWORKS]; 203 }; 204 205 struct user_conn_req { 206 u8 *bssid; 207 u8 *ssid; 208 u8 security; 209 enum AUTHTYPE auth_type; 210 size_t ssid_len; 211 u8 *ies; 212 size_t ies_len; 213 wilc_connect_result conn_result; 214 bool ht_capable; 215 void *arg; 216 }; 217 218 struct drv_handler { 219 u32 handler; 220 u8 mac_idx; 221 }; 222 223 struct op_mode { 224 u32 mode; 225 }; 226 227 struct get_mac_addr { 228 u8 *mac_addr; 229 }; 230 231 struct ba_session_info { 232 u8 bssid[ETH_ALEN]; 233 u8 tid; 234 u16 buf_size; 235 u16 time_out; 236 }; 237 238 struct remain_ch { 239 u16 ch; 240 u32 duration; 241 wilc_remain_on_chan_expired expired; 242 wilc_remain_on_chan_ready ready; 243 void *arg; 244 u32 id; 245 }; 246 247 struct reg_frame { 248 bool reg; 249 u16 frame_type; 250 u8 reg_id; 251 }; 252 253 enum p2p_listen_state { 254 P2P_IDLE, 255 P2P_LISTEN, 256 P2P_GRP_FORMATION 257 }; 258 259 struct wilc; 260 struct host_if_drv { 261 struct user_scan_req usr_scan_req; 262 struct user_conn_req usr_conn_req; 263 struct remain_ch remain_on_ch; 264 u8 remain_on_ch_pending; 265 u64 p2p_timeout; 266 u8 p2p_connect; 267 268 enum host_if_state hif_state; 269 270 u8 assoc_bssid[ETH_ALEN]; 271 struct cfg_param_attr cfg_values; 272 273 struct mutex cfg_values_lock; 274 struct completion comp_test_key_block; 275 struct completion comp_test_disconn_block; 276 struct completion comp_get_rssi; 277 struct completion comp_inactive_time; 278 279 struct timer_list scan_timer; 280 struct timer_list connect_timer; 281 struct timer_list remain_on_ch_timer; 282 283 bool IFC_UP; 284 }; 285 286 struct add_sta_param { 287 u8 bssid[ETH_ALEN]; 288 u16 aid; 289 u8 rates_len; 290 const u8 *rates; 291 bool ht_supported; 292 u16 ht_capa_info; 293 u8 ht_ampdu_params; 294 u8 ht_supp_mcs_set[16]; 295 u16 ht_ext_params; 296 u32 ht_tx_bf_cap; 297 u8 ht_ante_sel; 298 u16 flags_mask; 299 u16 flags_set; 300 }; 301 302 struct wilc_vif; 303 s32 wilc_remove_key(struct host_if_drv *hWFIDrv, const u8 *pu8StaAddress); 304 int wilc_remove_wep_key(struct wilc_vif *vif, u8 index); 305 int wilc_set_wep_default_keyid(struct wilc_vif *vif, u8 index); 306 int wilc_add_wep_key_bss_sta(struct wilc_vif *vif, const u8 *key, u8 len, 307 u8 index); 308 int wilc_add_wep_key_bss_ap(struct wilc_vif *vif, const u8 *key, u8 len, 309 u8 index, u8 mode, enum AUTHTYPE auth_type); 310 int wilc_add_ptk(struct wilc_vif *vif, const u8 *ptk, u8 ptk_key_len, 311 const u8 *mac_addr, const u8 *rx_mic, const u8 *tx_mic, 312 u8 mode, u8 cipher_mode, u8 index); 313 s32 wilc_get_inactive_time(struct wilc_vif *vif, const u8 *mac, 314 u32 *pu32InactiveTime); 315 int wilc_add_rx_gtk(struct wilc_vif *vif, const u8 *rx_gtk, u8 gtk_key_len, 316 u8 index, u32 key_rsc_len, const u8 *key_rsc, 317 const u8 *rx_mic, const u8 *tx_mic, u8 mode, 318 u8 cipher_mode); 319 int wilc_set_pmkid_info(struct wilc_vif *vif, 320 struct host_if_pmkid_attr *pmkid); 321 int wilc_get_mac_address(struct wilc_vif *vif, u8 *mac_addr); 322 int wilc_set_join_req(struct wilc_vif *vif, u8 *bssid, const u8 *ssid, 323 size_t ssid_len, const u8 *ies, size_t ies_len, 324 wilc_connect_result connect_result, void *user_arg, 325 u8 security, enum AUTHTYPE auth_type, 326 u8 channel, void *join_params); 327 int wilc_disconnect(struct wilc_vif *vif, u16 reason_code); 328 int wilc_set_mac_chnl_num(struct wilc_vif *vif, u8 channel); 329 int wilc_get_rssi(struct wilc_vif *vif, s8 *rssi_level); 330 int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type, 331 u8 *ch_freq_list, u8 ch_list_len, const u8 *ies, 332 size_t ies_len, wilc_scan_result scan_result, void *user_arg, 333 struct hidden_network *hidden_network); 334 int wilc_hif_set_cfg(struct wilc_vif *vif, 335 struct cfg_param_attr *cfg_param); 336 int wilc_init(struct net_device *dev, struct host_if_drv **hif_drv_handler); 337 int wilc_deinit(struct wilc_vif *vif); 338 int wilc_add_beacon(struct wilc_vif *vif, u32 interval, u32 dtim_period, 339 u32 head_len, u8 *head, u32 tail_len, u8 *tail); 340 int wilc_del_beacon(struct wilc_vif *vif); 341 int wilc_add_station(struct wilc_vif *vif, struct add_sta_param *sta_param); 342 int wilc_del_allstation(struct wilc_vif *vif, u8 mac_addr[][ETH_ALEN]); 343 int wilc_del_station(struct wilc_vif *vif, const u8 *mac_addr); 344 int wilc_edit_station(struct wilc_vif *vif, 345 struct add_sta_param *sta_param); 346 int wilc_set_power_mgmt(struct wilc_vif *vif, bool enabled, u32 timeout); 347 int wilc_setup_multicast_filter(struct wilc_vif *vif, bool enabled, 348 u32 count); 349 int wilc_setup_ipaddress(struct wilc_vif *vif, u8 *ip_addr, u8 idx); 350 int wilc_remain_on_channel(struct wilc_vif *vif, u32 session_id, 351 u32 duration, u16 chan, 352 wilc_remain_on_chan_expired expired, 353 wilc_remain_on_chan_ready ready, 354 void *user_arg); 355 int wilc_listen_state_expired(struct wilc_vif *vif, u32 session_id); 356 int wilc_frame_register(struct wilc_vif *vif, u16 frame_type, bool reg); 357 int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index, u8 mac_idx); 358 int wilc_set_operation_mode(struct wilc_vif *vif, u32 mode); 359 int wilc_get_statistics(struct wilc_vif *vif, struct rf_info *stats); 360 void wilc_resolve_disconnect_aberration(struct wilc_vif *vif); 361 int wilc_get_vif_idx(struct wilc_vif *vif); 362 int wilc_set_tx_power(struct wilc_vif *vif, u8 tx_power); 363 int wilc_get_tx_power(struct wilc_vif *vif, u8 *tx_power); 364 365 extern bool wilc_optaining_ip; 366 extern u8 wilc_connected_ssid[6]; 367 extern u8 wilc_multicast_mac_addr_list[WILC_MULTICAST_TABLE_SIZE][ETH_ALEN]; 368 369 extern int wilc_connecting; 370 extern u8 wilc_initialized; 371 extern struct timer_list wilc_during_ip_timer; 372 373 #endif 374