| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (c) 2012 - 2018 Microchip Technology Inc., and its subsidiaries. |
| * All rights reserved. |
| */ |
| |
| #ifndef WILC_FW_H |
| #define WILC_FW_H |
| |
| #include <linux/ieee80211.h> |
| |
| #define WILC_MAX_NUM_STA 9 |
| #define WILC_MAX_RATES_SUPPORTED 12 |
| #define WILC_MAX_NUM_PMKIDS 16 |
| #define WILC_MAX_NUM_SCANNED_CH 14 |
| #define WILC_NVMEM_MAX_NUM_BANK 6 |
| #define WILC_NVMEM_BANK_BASE 0x30000000 |
| #define WILC_NVMEM_LOW_BANK_OFFSET 0x102c |
| #define WILC_NVMEM_HIGH_BANK_OFFSET 0x1380 |
| #define WILC_NVMEM_IS_BANK_USED BIT(31) |
| #define WILC_NVMEM_IS_BANK_INVALID BIT(30) |
| |
| struct wilc_assoc_resp { |
| __le16 capab_info; |
| __le16 status_code; |
| __le16 aid; |
| } __packed; |
| |
| struct wilc_pmkid { |
| u8 bssid[ETH_ALEN]; |
| u8 pmkid[WLAN_PMKID_LEN]; |
| } __packed; |
| |
| struct wilc_pmkid_attr { |
| u8 numpmkid; |
| struct wilc_pmkid pmkidlist[WILC_MAX_NUM_PMKIDS]; |
| } __packed; |
| |
| struct wilc_reg_frame { |
| u8 reg; |
| u8 reg_id; |
| __le16 frame_type; |
| } __packed; |
| |
| struct wilc_drv_handler { |
| __le32 handler; |
| u8 mode; |
| } __packed; |
| |
| struct wilc_sta_wpa_ptk { |
| u8 mac_addr[ETH_ALEN]; |
| u8 key_len; |
| u8 key[]; |
| } __packed; |
| |
| struct wilc_ap_wpa_ptk { |
| u8 mac_addr[ETH_ALEN]; |
| u8 index; |
| u8 key_len; |
| u8 key[]; |
| } __packed; |
| |
| struct wilc_wpa_igtk { |
| u8 index; |
| u8 pn_len; |
| u8 pn[6]; |
| u8 key_len; |
| u8 key[]; |
| } __packed; |
| |
| struct wilc_gtk_key { |
| u8 mac_addr[ETH_ALEN]; |
| u8 rsc[8]; |
| u8 index; |
| u8 key_len; |
| u8 key[]; |
| } __packed; |
| |
| struct wilc_op_mode { |
| __le32 mode; |
| } __packed; |
| |
| struct wilc_noa_opp_enable { |
| u8 ct_window; |
| u8 cnt; |
| __le32 duration; |
| __le32 interval; |
| __le32 start_time; |
| } __packed; |
| |
| struct wilc_noa_opp_disable { |
| u8 cnt; |
| __le32 duration; |
| __le32 interval; |
| __le32 start_time; |
| } __packed; |
| |
| struct wilc_join_bss_param { |
| char ssid[IEEE80211_MAX_SSID_LEN]; |
| u8 ssid_terminator; |
| u8 bss_type; |
| u8 ch; |
| __le16 cap_info; |
| u8 sa[ETH_ALEN]; |
| u8 bssid[ETH_ALEN]; |
| __le16 beacon_period; |
| u8 dtim_period; |
| u8 supp_rates[WILC_MAX_RATES_SUPPORTED + 1]; |
| u8 wmm_cap; |
| u8 uapsd_cap; |
| u8 ht_capable; |
| u8 rsn_found; |
| u8 rsn_grp_policy; |
| u8 mode_802_11i; |
| u8 p_suites[3]; |
| u8 akm_suites[3]; |
| u8 rsn_cap[2]; |
| u8 noa_enabled; |
| __le32 tsf_lo; |
| u8 idx; |
| u8 opp_enabled; |
| union { |
| struct wilc_noa_opp_disable opp_dis; |
| struct wilc_noa_opp_enable opp_en; |
| }; |
| } __packed; |
| |
| struct wilc_external_auth_param { |
| u8 action; |
| u8 bssid[ETH_ALEN]; |
| u8 ssid[IEEE80211_MAX_SSID_LEN]; |
| u8 ssid_len; |
| __le32 key_mgmt_suites; |
| __le16 status; |
| } __packed; |
| |
| static inline u32 get_bank_offset_from_bank_index(unsigned int i) |
| { |
| return (((i) < 2) ? WILC_NVMEM_LOW_BANK_OFFSET + ((i) * 32) : |
| WILC_NVMEM_HIGH_BANK_OFFSET + ((i) - 2) * 16); |
| } |
| |
| #endif |