1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (c) 2012 - 2018 Microchip Technology Inc., and its subsidiaries
9 #include <linux/ieee80211.h>
15 WILC_STATION_MODE
= 0x2,
17 WILC_CLIENT_MODE
= 0x4
20 #define WILC_MAX_NUM_PROBED_SSID 10
22 #define WILC_TX_MIC_KEY_LEN 8
23 #define WILC_RX_MIC_KEY_LEN 8
25 #define WILC_ADD_STA_LENGTH 40
26 #define WILC_NUM_CONCURRENT_IFC 2
44 HOST_IF_CONNECTING
= 2,
45 HOST_IF_WAITING_CONN_RESP
= 3,
46 HOST_IF_CONNECTED
= 4,
47 HOST_IF_P2P_LISTEN
= 5,
48 HOST_IF_EXTERNAL_AUTH
= 6,
49 HOST_IF_FORCE_32BIT
= 0xFFFFFFFF
52 struct cfg_param_attr
{
54 u16 short_retry_limit
;
61 WILC_CFG_PARAM_RETRY_SHORT
= BIT(0),
62 WILC_CFG_PARAM_RETRY_LONG
= BIT(1),
63 WILC_CFG_PARAM_FRAG_THRESHOLD
= BIT(2),
64 WILC_CFG_PARAM_RTS_THRESHOLD
= BIT(3)
68 SCAN_EVENT_NETWORK_FOUND
= 0,
70 SCAN_EVENT_ABORTED
= 2,
71 SCAN_EVENT_FORCE_32BIT
= 0xFFFFFFFF
75 CONN_DISCONN_EVENT_CONN_RESP
= 0,
76 CONN_DISCONN_EVENT_DISCONN_NOTIF
= 1,
77 CONN_DISCONN_EVENT_FORCE_32BIT
= 0xFFFFFFFF
86 WILC_MAC_STATUS_INIT
= -1,
87 WILC_MAC_STATUS_DISCONNECTED
= 0,
88 WILC_MAC_STATUS_CONNECTED
= 1
91 struct wilc_rcvd_net_info
{
95 struct ieee80211_mgmt
*mgmt
;
99 struct wilc_user_scan_req
{
100 void (*scan_result
)(enum scan_event evt
,
101 struct wilc_rcvd_net_info
*info
,
102 struct wilc_priv
*priv
);
103 struct wilc_priv
*priv
;
107 struct wilc_join_bss_param
;
108 struct wilc_conn_info
{
111 enum authtype auth_type
;
112 enum mfptype mfp_type
;
118 void (*conn_result
)(enum conn_event evt
, u8 status
,
119 struct wilc_priv
*priv
);
120 struct wilc_priv
*priv
;
121 struct wilc_join_bss_param
*param
;
125 struct wilc_remain_ch
{
127 void (*expired
)(struct wilc_vif
*vif
, u64 cookie
);
128 struct wilc_vif
*vif
;
134 struct wilc_user_scan_req usr_scan_req
;
135 struct wilc_conn_info conn_info
;
136 struct wilc_remain_ch remain_on_ch
;
139 enum host_if_state hif_state
;
141 u8 assoc_bssid
[ETH_ALEN
];
143 struct timer_list scan_timer
;
144 struct wilc_vif
*scan_timer_vif
;
146 struct timer_list connect_timer
;
147 struct wilc_vif
*connect_timer_vif
;
149 struct timer_list remain_on_ch_timer
;
150 struct wilc_vif
*remain_on_ch_timer_vif
;
153 u8 assoc_resp
[WILC_MAX_ASSOC_RESP_FRAME_SIZE
];
156 int wilc_add_ptk(struct wilc_vif
*vif
, const u8
*ptk
, u8 ptk_key_len
,
157 const u8
*mac_addr
, const u8
*rx_mic
, const u8
*tx_mic
,
158 u8 mode
, u8 cipher_mode
, u8 index
);
159 int wilc_add_igtk(struct wilc_vif
*vif
, const u8
*igtk
, u8 igtk_key_len
,
160 const u8
*pn
, u8 pn_len
, const u8
*mac_addr
, u8 mode
,
162 s32
wilc_get_inactive_time(struct wilc_vif
*vif
, const u8
*mac
,
164 int wilc_add_rx_gtk(struct wilc_vif
*vif
, const u8
*rx_gtk
, u8 gtk_key_len
,
165 u8 index
, u32 key_rsc_len
, const u8
*key_rsc
,
166 const u8
*rx_mic
, const u8
*tx_mic
, u8 mode
,
168 int wilc_set_pmkid_info(struct wilc_vif
*vif
, struct wilc_pmkid_attr
*pmkid
);
169 int wilc_get_mac_address(struct wilc_vif
*vif
, u8
*mac_addr
);
170 int wilc_set_mac_address(struct wilc_vif
*vif
, const u8
*mac_addr
);
171 int wilc_set_join_req(struct wilc_vif
*vif
, u8
*bssid
, const u8
*ies
,
173 int wilc_disconnect(struct wilc_vif
*vif
);
174 int wilc_set_mac_chnl_num(struct wilc_vif
*vif
, u8 channel
);
175 int wilc_get_rssi(struct wilc_vif
*vif
, s8
*rssi_level
);
176 int wilc_scan(struct wilc_vif
*vif
, u8 scan_source
,
177 u8 scan_type
, u8
*ch_freq_list
,
178 void (*scan_result_fn
)(enum scan_event
,
179 struct wilc_rcvd_net_info
*,
181 struct cfg80211_scan_request
*request
);
182 int wilc_hif_set_cfg(struct wilc_vif
*vif
,
183 struct cfg_param_attr
*cfg_param
);
184 int wilc_init(struct net_device
*dev
, struct host_if_drv
**hif_drv_handler
);
185 int wilc_deinit(struct wilc_vif
*vif
);
186 int wilc_add_beacon(struct wilc_vif
*vif
, u32 interval
, u32 dtim_period
,
187 struct cfg80211_beacon_data
*params
);
188 int wilc_del_beacon(struct wilc_vif
*vif
);
189 int wilc_add_station(struct wilc_vif
*vif
, const u8
*mac
,
190 struct station_parameters
*params
);
191 int wilc_del_allstation(struct wilc_vif
*vif
, u8 mac_addr
[][ETH_ALEN
]);
192 int wilc_del_station(struct wilc_vif
*vif
, const u8
*mac_addr
);
193 int wilc_edit_station(struct wilc_vif
*vif
, const u8
*mac
,
194 struct station_parameters
*params
);
195 int wilc_set_power_mgmt(struct wilc_vif
*vif
, bool enabled
, u32 timeout
);
196 int wilc_setup_multicast_filter(struct wilc_vif
*vif
, u32 enabled
, u32 count
,
198 int wilc_remain_on_channel(struct wilc_vif
*vif
, u64 cookie
, u16 chan
,
199 void (*expired
)(struct wilc_vif
*, u64
));
200 int wilc_listen_state_expired(struct wilc_vif
*vif
, u64 cookie
);
201 void wilc_frame_register(struct wilc_vif
*vif
, u16 frame_type
, bool reg
);
202 int wilc_set_operation_mode(struct wilc_vif
*vif
, int index
, u8 mode
,
204 int wilc_get_statistics(struct wilc_vif
*vif
, struct rf_info
*stats
);
205 int wilc_get_vif_idx(struct wilc_vif
*vif
);
206 int wilc_set_tx_power(struct wilc_vif
*vif
, u8 tx_power
);
207 int wilc_get_tx_power(struct wilc_vif
*vif
, u8
*tx_power
);
208 void wilc_set_wowlan_trigger(struct wilc_vif
*vif
, bool enabled
);
209 int wilc_set_external_auth_param(struct wilc_vif
*vif
,
210 struct cfg80211_external_auth_params
*param
);
211 void wilc_scan_complete_received(struct wilc
*wilc
, u8
*buffer
, u32 length
);
212 void wilc_network_info_received(struct wilc
*wilc
, u8
*buffer
, u32 length
);
213 void wilc_gnrl_async_info_received(struct wilc
*wilc
, u8
*buffer
, u32 length
);
214 struct wilc_join_bss_param
*
215 wilc_parse_join_bss_param(struct cfg80211_bss
*bss
,
216 struct cfg80211_crypto_settings
*crypto
);
217 int wilc_set_default_mgmt_key_index(struct wilc_vif
*vif
, u8 index
);
218 void wilc_handle_disconnect(struct wilc_vif
*vif
);