/**************************************************************************** * * Copyright (c) 2012 - 2021 Samsung Electronics Co., Ltd. All rights reserved * ****************************************************************************/ #ifndef __SLSI_MLME_H__ #define __SLSI_MLME_H__ #include "dev.h" #include "mib.h" enum slsi_ac_index_wmm_pe { AC_BE, AC_BK, AC_VI, AC_VO }; #define SLSI_FREQ_FW_TO_HOST(f) ((f) / 2) #define SLSI_FREQ_HOST_TO_FW(f) ((f) * 2) #define SLSI_SINFO_MIB_ACCESS_TIMEOUT (1000) /* 1 sec timeout */ #define SLSI_WLAN_EID_VENDOR_SPECIFIC 0xdd #define SLSI_WLAN_EID_INTERWORKING 107 #define SLSI_WLAN_EID_EXTENSION 255 /* Element ID Extension (EID 255) values */ #define SLSI_WLAN_EID_EXT_OWE_DH_PARAM 32 #define SLSI_WLAN_OUI_TYPE_WFA_HS20_IND 0x10 #define SLSI_WLAN_OUI_TYPE_WFA_OSEN 0x12 #define SLSI_WLAN_OUI_TYPE_WFA_MBO 0x16 #define SLSI_WLAN_FAIL_WORK_TIMEOUT 1500 /* 1.5s timeout */ /*Extended capabilities bytes*/ #define SLSI_WLAN_EXT_CAPA2_BSS_TRANSISITION_ENABLED (BIT(3)) #define SLSI_WLAN_EXT_CAPA3_INTERWORKING_ENABLED (BIT(7)) #define SLSI_WLAN_EXT_CAPA4_QOS_MAP_ENABLED (BIT(0)) #define SLSI_WLAN_EXT_CAPA5_WNM_NOTIF_ENABLED (BIT(6)) #define SLSI_WLAN_EXT_CAPA2_QBSS_LOAD_ENABLED BIT(7) #define SLSI_WLAN_EXT_CAPA1_PROXY_ARP_ENABLED BIT(4) #define SLSI_WLAN_EXT_CAPA2_TFS_ENABLED BIT(0) #define SLSI_WLAN_EXT_CAPA2_WNM_SLEEP_ENABLED BIT(1) #define SLSI_WLAN_EXT_CAPA2_TIM_ENABLED BIT(2) #define SLSI_WLAN_EXT_CAPA2_DMS_ENABLED BIT(4) /*RM Enabled Capabilities Bytes*/ #define SLSI_WLAN_RM_CAPA0_LINK_MEASUREMENT_ENABLED BIT(0) #define SLSI_WLAN_RM_CAPA0_NEIGHBOR_REPORT_ENABLED BIT(1) #define SLSI_WLAN_RM_CAPA0_PASSIVE_MODE_ENABLED BIT(4) #define SLSI_WLAN_RM_CAPA0_ACTIVE_MODE_ENABLED BIT(5) #define SLSI_WLAN_RM_CAPA0_TABLE_MODE_ENABLED BIT(6) /* EID (1) + Len (1) + Ext Capab (8) */ #define SLSI_AP_EXT_CAPAB_IE_LEN_MAX 12 #if (KERNEL_VERSION(5, 7, 0) <= LINUX_VERSION_CODE) || defined(CONFIG_SCSC_WLAN_BSS_COLOR) #define SLSI_WLAN_HE_BSS_COLOR_IE_LEN 8 #define SLSI_WLAN_HE_BSS_COLOR_PARTIAL_OFFSET 6 #define SLSI_WLAN_HE_BSS_COLOR_ENABLE_DISABLE_INDEX 7 #define SLSI_WLAN_HE_BSS_COLOR_DISABLED BIT(7) #endif #define SLSI_SCAN_DONE_IND_WAIT_TIMEOUT 40000 /* 40 seconds */ #define SLSI_NAN_START_TIMEOUT 9000 /* 9 seconds */ /* WLAN_EID_COUNTRY available from kernel version 3.7 */ #ifndef WLAN_EID_COUNTRY #define WLAN_EID_COUNTRY 7 #endif /* P2P (Wi-Fi Direct) */ #define SLSI_P2P_WILDCARD_SSID "DIRECT-" #define SLSI_P2P_WILDCARD_SSID_LENGTH 7 #define SLSI_P2P_SOCIAL_CHAN_COUNT 3 #define SLSI_P2P_SOCIAL_CHAN_1 1 #define SLSI_P2P_SOCIAL_CHAN_6 6 #define SLSI_P2P_SOCIAL_CHAN_11 11 #define SLSI_P2P_IS_SOCAIL_CHAN(ch) ({ \ typeof(ch) ch_ = (ch); \ ((ch_ == SLSI_P2P_SOCIAL_CHAN_1) || \ (ch_ == SLSI_P2P_SOCIAL_CHAN_6) || \ (ch_ == SLSI_P2P_SOCIAL_CHAN_11)); \ }) /* A join scan with P2P GO SSID can come and hence the SSID length * comparision should include >= */ #define SLSI_IS_P2P_SSID(ssid, ssid_len) ((ssid_len >= SLSI_P2P_WILDCARD_SSID_LENGTH) && \ (memcmp(ssid, SLSI_P2P_WILDCARD_SSID, SLSI_P2P_WILDCARD_SSID_LENGTH) == 0)) /* Action frame categories for registering with firmware */ #define SLSI_ACTION_FRAME_PUBLIC (BIT(4)) #define SLSI_ACTION_FRAME_VENDOR_SPEC_PROTECTED (BIT(30)) #define SLSI_ACTION_FRAME_VENDOR_SPEC (BIT(31)) #define SLSI_ACTION_FRAME_WMM (BIT(17)) #define SLSI_ACTION_FRAME_WNM (BIT(10)) #define SLSI_ACTION_FRAME_QOS (BIT(1)) #define SLSI_ACTION_FRAME_PROTECTED_DUAL BIT(9) #define SLSI_ACTION_FRAME_RADIO_MEASUREMENT BIT(5) /* Firmware transmit rates */ #define SLSI_TX_RATE_NON_HT_1MBPS 0x4001 #define SLSI_TX_RATE_NON_HT_6MBPS 0x4004 #define SLSI_ROAMING_CHANNELS_MAX 38 #define SLSI_WLAN_EID_WAPI 68 #define SLSI_WLAN_EID_RSNX 244 #define SLSI_SCAN_PRIVATE_IE_CHANNEL_LIST_HEADER_LEN 7 #define SLSI_SCAN_PRIVATE_IE_SSID_FILTER_HEADER_LEN 7 #define SLSI_CHANN_INFO_HT_SCB 0x0100 #define SLSI_SCAN_CHANNEL_DESCRIPTOR_SIZE 4 /** * If availability_duration is set to SLSI_FW_CHANNEL_DURATION_UNSPECIFIED * then the firmware autonomously decides how long to remain listening on * the configured channel. */ #define SLSI_FW_CHANNEL_DURATION_UNSPECIFIED (0x0000) extern struct ieee80211_supported_band slsi_band_2ghz; extern struct ieee80211_supported_band slsi_band_5ghz; extern struct ieee80211_sta_vht_cap slsi_vht_cap; /* Packet Filtering */ #define SLSI_MAX_PATTERN_DESC 4 /* We are not using more than 4 pattern descriptors in a pkt filter*/ #define SLSI_PKT_DESC_FIXED_LEN 2 /* offset (1) + mask length (1)*/ #define SLSI_PKT_FILTER_ELEM_FIXED_LEN 6 /* oui(3) + oui type(1) + filter id (1) + pkt filter mode(1)*/ #define SLSI_PKT_FILTER_ELEM_HDR_LEN (2 + SLSI_PKT_FILTER_ELEM_FIXED_LEN) /* element id + len + SLSI_PKT_FILTER_ELEM_FIXED_LEN*/ #define SLSI_MAX_PATTERN_LENGTH 6 /*Default values of MIBS params for GET_STA_INFO driver private command */ #define SLSI_DEFAULT_UNIFI_PEER_RX_RETRY_PACKETS 0 #define SLSI_DEFAULT_UNIFI_PEER_RX_BC_MC_PACKETS 0 #define SLSI_DEFAULT_UNIFI_PEER_BANDWIDTH -1 #define SLSI_DEFAULT_UNIFI_PEER_NSS 0 #define SLSI_DEFAULT_UNIFI_PEER_RSSI 1 #define SLSI_DEFAULT_UNIFI_PEER_TX_DATA_RATE 0 #define SLSI_CHECK_TYPE(sdev, recv_type, exp_type) \ do { \ int var1 = recv_type; \ int var2 = exp_type; \ if (var1 != var2) { \ SLSI_WARN(sdev, "Type mismatch, expected:%d received:%d\n", var2, var1); \ } \ } while (0) struct slsi_mlme_pattern_desc { u8 offset; u8 mask_length; u8 mask[SLSI_MAX_PATTERN_LENGTH]; u8 pattern[SLSI_MAX_PATTERN_LENGTH]; }; struct slsi_mlme_pkt_filter_elem { u8 header[SLSI_PKT_FILTER_ELEM_HDR_LEN]; u8 num_pattern_desc; struct slsi_mlme_pattern_desc pattern_desc[SLSI_MAX_PATTERN_DESC]; }; #define SLSI_MLME_OUI_LENGTH 3 #define SLSI_MLME_SAMSUNG_OUI 0x001632 #define SLSI_MLME_TYPE_SCAN_PARAM 0x01 #define SLSI_MLME_PARAM_HEADER_SIZE 5 #define SLSI_MLME_SUBTYPE_SCAN_TIMING 0x1 #define SLSI_MLME_SUBTYPE_CHANNEL_LIST 0x2 #define SLSI_MLME_SUBTYPE_SSID_FILTER 0x4 #define SLSI_KEY_MGMT_PSK 0x000fac02 #define SLSI_KEY_MGMT_PSK_SHA 0x000fac06 #define SLSI_KEY_MGMT_FILS_SHA256 0x000fac0e #define SLSI_KEY_MGMT_FILS_SHA384 0x000fac0f #define SLSI_KEY_MGMT_FT_FILS_SHA256 0x000fac10 #define SLSI_KEY_MGMT_FT_FILS_SHA384 0x000fac11 #define SLSI_KEY_MGMT_OWE 0x000fac12 #define SLSI_KEY_MGMT_802_1X_SUITE_B_192 0x000fac0c #define SLSI_KEY_MGMT_FT_802_1X_SHA384 0x000fac0d struct slsi_mlme_parameters { u8 element_id; u8 length; u8 oui[SLSI_MLME_OUI_LENGTH]; u8 oui_type; u8 oui_subtype; } __packed; struct slsi_mlme_scan_timing_element { struct slsi_mlme_parameters header; u32 min_period; u32 max_period; u8 exponent; u8 step_count; u16 number_of_iterations; u16 skip_first_period; } __packed; static inline void slsi_mlme_put_oui_type(struct slsi_mlme_parameters *ie, u8 type, u8 subtype) { ie->oui_type = type; ie->oui_subtype = subtype; } static inline void slsi_mlme_put_oui(u8 *oui, u32 val) { oui[0] = (u8)((val >> 16) & 0xff); oui[1] = (u8)((val >> 8) & 0xff); oui[2] = (u8)(val & 0xff); } #define SLSI_5GHZ_MIN_FREQ 5180 #define SLSI_5GHZ_MAX_FREQ 5825 #define SLSI_6GHZ_MIN_FREQ 5955 #define SLSI_6GHZ_MAX_FREQ 7115 #ifdef CONFIG_SCSC_WLAN_SUPPORT_6G #define SLSI_NUM_6GHZ_CHANNELS 59 #define SLSI_MLME_SUBTYPE_6GHZ_PARAM 0x10 enum slsi_scan_6ghz_opt { SLSI_UNSOLICITED_PROBE = BIT(0), SLSI_SHORT_SSID_VALID = BIT(1), SLSI_PSC_NO_LISTEN = BIT(2) }; struct slsi_mlme_scan_6ghz_descriptor { u32 short_ssid; u32 channel_idx; u8 bssid[ETH_ALEN]; u8 scan_6ghz_option; } __packed; #endif u16 slsi_get_chann_info(struct slsi_dev *sdev, struct cfg80211_chan_def *chandef); int slsi_check_channelization(struct slsi_dev *sdev, struct cfg80211_chan_def *chandef, int wifi_sharing_channel_switched); int slsi_mlme_set_ip_address(struct slsi_dev *sdev, struct net_device *dev); #if IS_ENABLED(CONFIG_IPV6) int slsi_mlme_set_ipv6_address(struct slsi_dev *sdev, struct net_device *dev); #endif int slsi_mlme_set(struct slsi_dev *sdev, struct net_device *dev, u8 *req, int req_len); struct sk_buff *slsi_mlme_set_with_cfm(struct slsi_dev *sdev, struct net_device *dev, u8 *mib, int mib_len); int slsi_mlme_get(struct slsi_dev *sdev, struct net_device *dev, u8 *req, int req_len, u8 *resp, int resp_buf_len, int *resp_len); int slsi_mlme_add_vif(struct slsi_dev *sdev, struct net_device *dev, u8 *interface_address, u8 *device_address); int slsi_mlme_del_vif(struct slsi_dev *sdev, struct net_device *dev); int slsi_mlme_add_detect_vif(struct slsi_dev *sdev, struct net_device *dev, u8 *interface_address, u8 *device_address); int slsi_mlme_del_detect_vif(struct slsi_dev *sdev, struct net_device *dev); #if defined(CONFIG_SLSI_WLAN_STA_FWD_BEACON) && (defined(SCSC_SEP_VERSION) && SCSC_SEP_VERSION >= 10) int slsi_mlme_set_forward_beacon(struct slsi_dev *sdev, struct net_device *dev, int action); #endif int slsi_mlme_set_channel(struct slsi_dev *sdev, struct net_device *dev, struct ieee80211_channel *chan, u16 duration, u16 interval, u16 count); void slsi_ap_obss_scan_done_ind(struct net_device *dev, struct netdev_vif *ndev_vif); int slsi_mlme_unset_channel_req(struct slsi_dev *sdev, struct net_device *dev); u16 slsi_compute_chann_info(struct slsi_dev *sdev, u16 width, u16 center_freq0, u16 channel_freq); /** * slsi_mlme_add_autonomous_scan() Returns: * 0 : Scan installed * >0 : Scan NOT installed. Not an Error * <0 : Scan NOT installed. Error */ int slsi_mlme_add_scan(struct slsi_dev *sdev, struct net_device *dev, u16 scan_type, u16 report_mode, u32 n_ssids, struct cfg80211_ssid *ssids, u32 n_channels, struct ieee80211_channel *channels[], void *gscan_param, const u8 *ies, u16 ies_len, #ifdef CONFIG_SCSC_WLAN_SUPPORT_6G u32 n_6ghz_params, struct cfg80211_scan_6ghz_params *scan_6ghz_params, #endif bool wait_for_ind); int slsi_mlme_add_sched_scan(struct slsi_dev *sdev, struct net_device *dev, struct cfg80211_sched_scan_request *request, const u8 *ies, u16 ies_len); int slsi_mlme_del_scan(struct slsi_dev *sdev, struct net_device *dev, u16 scan_id, bool scan_timed_out); int slsi_mlme_start(struct slsi_dev *sdev, struct net_device *dev, u8 *bssid, struct cfg80211_ap_settings *settings, const u8 *wpa_ie_pos, const u8 *wmm_ie_pos, bool append_vht_ies); int slsi_mlme_connect(struct slsi_dev *sdev, struct net_device *dev, struct cfg80211_connect_params *sme, struct ieee80211_channel *channel, const u8 *bssid); int slsi_mlme_set_key(struct slsi_dev *sdev, struct net_device *dev, u16 key_id, u16 key_type, const u8 *address, struct key_params *key); int slsi_mlme_get_key(struct slsi_dev *sdev, struct net_device *dev, u16 key_id, u16 key_type, u8 *seq, int *seq_len); /** * Sends MLME-DISCONNECT-REQ and waits for the MLME-DISCONNECT-CFM * MLME-DISCONNECT-CFM only indicates if the firmware has accepted the request * (or not) the actual end of the disconnection is indicated by the firmware * sending MLME-DISCONNECT-IND (following a successful MLME-DISCONNECT-CFM). * The host has to wait for the full exchange to complete with the firmware * before returning to cfg80211 if it made the disconnect request. So this * function waits for both the MLME-DISCONNECT-CFM and the MLME-DISCONNECT-IND * (if the MLME-DISCONNECT-CFM was successful) */ int slsi_mlme_disconnect(struct slsi_dev *sdev, struct net_device *dev, u8 *bssid, u16 reason_code, bool wait_ind); struct sk_buff *slsi_mlme_roaming_channel_list_req(struct slsi_dev *sdev, struct net_device *dev); int slsi_mlme_req(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb); struct sk_buff *slsi_mlme_req_no_cfm(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb); struct sk_buff *slsi_mlme_req_ind(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb, u16 ind_id); /* Read multiple MIBs related to station info */ int slsi_mlme_get_sinfo_mib(struct slsi_dev *sdev, struct net_device *dev, struct slsi_peer *peer); int slsi_mlme_connect_scan(struct slsi_dev *sdev, struct net_device *dev, u32 n_ssids, struct cfg80211_ssid *ssids, struct ieee80211_channel *channel); int slsi_mlme_powermgt(struct slsi_dev *sdev, struct net_device *dev, u16 ps_mode); int slsi_mlme_powermgt_unlocked(struct slsi_dev *sdev, struct net_device *dev, u16 ps_mode); int slsi_mlme_register_action_frame(struct slsi_dev *sdev, struct net_device *dev, u32 af_bitmap_active, u32 af_bitmap_suspended); #ifdef CONFIG_SCSC_WLAN_SAE_CONFIG int slsi_mlme_synchronised_response(struct slsi_dev *sdev, struct net_device *dev, struct cfg80211_external_auth_params *params); #endif #ifdef CONFIG_SCSC_WLAN_NUM_ANTENNAS int slsi_mlme_get_num_antennas(struct slsi_dev *sdev, struct net_device *dev, int *num_antennas); #endif int slsi_mlme_channel_switch(struct slsi_dev *sdev, struct net_device *dev, u16 center_freq, u16 chan_info); int slsi_mlme_add_info_elements(struct slsi_dev *sdev, struct net_device *dev, u16 purpose, const u8 *ies, const u16 ies_len); int slsi_mlme_send_frame_mgmt(struct slsi_dev *sdev, struct net_device *dev, const u8 *frame, int frame_len, u16 data_desc, u16 msg_type, u16 host_tag, u16 freq, u32 dwell_time, u32 period); int slsi_mlme_send_frame_data(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb, u16 msg_type, u16 host_tag, u32 dwell_time, u32 period); int slsi_mlme_wifisharing_permitted_channels(struct slsi_dev *sdev, struct net_device *dev, u8 *permitted_channels); int slsi_mlme_reset_dwell_time(struct slsi_dev *sdev, struct net_device *dev); int slsi_mlme_set_packet_filter(struct slsi_dev *sdev, struct net_device *dev, int pkt_filter_len, u8 num_filters, struct slsi_mlme_pkt_filter_elem *pkt_filter_elems); void slsi_mlme_connect_resp(struct slsi_dev *sdev, struct net_device *dev); void slsi_mlme_connected_resp(struct slsi_dev *sdev, struct net_device *dev, u16 peer_index); void slsi_mlme_roamed_resp(struct slsi_dev *sdev, struct net_device *dev); int slsi_mlme_roam(struct slsi_dev *sdev, struct net_device *dev, const u8 *bssid, u16 freq); int slsi_mlme_set_cached_channels(struct slsi_dev *sdev, struct net_device *dev, u32 channels_count, u8 *channels); int slsi_mlme_tdls_action(struct slsi_dev *sdev, struct net_device *dev, const u8 *peer, int action); int slsi_mlme_set_acl(struct slsi_dev *sdev, struct net_device *dev, u16 ifnum, enum nl80211_acl_policy acl_policy, int max_acl_entries, struct mac_address mac_addrs[]); int slsi_mlme_set_traffic_parameters(struct slsi_dev *sdev, struct net_device *dev, u16 user_priority, u16 medium_time, u16 minimun_data_rate, u8 *mac); int slsi_mlme_del_traffic_parameters(struct slsi_dev *sdev, struct net_device *dev, u16 user_priority); #ifdef CONFIG_SCSC_WLAN_GSCAN_ENABLE int slsi_mlme_set_pno_list(struct slsi_dev *sdev, int count, struct slsi_epno_param *epno_param, struct slsi_epno_hs2_param *epno_hs2_param); int slsi_mlme_start_link_stats_req(struct slsi_dev *sdev, u16 mpdu_size_threshold, bool aggressive_statis_enabled); int slsi_mlme_stop_link_stats_req(struct slsi_dev *sdev, u16 stats_stop_mask); #ifdef CONFIG_SCSC_WIFI_NAN_ENABLE int slsi_mlme_nan_enable(struct slsi_dev *sdev, struct net_device *dev, struct slsi_hal_nan_enable_req *hal_req); int slsi_mlme_nan_publish(struct slsi_dev *sdev, struct net_device *dev, struct slsi_hal_nan_publish_req *hal_req, u16 publish_id); int slsi_mlme_nan_subscribe(struct slsi_dev *sdev, struct net_device *dev, struct slsi_hal_nan_subscribe_req *hal_req, u16 subscribe_id); int slsi_mlme_nan_tx_followup(struct slsi_dev *sdev, struct net_device *dev, struct slsi_hal_nan_transmit_followup_req *hal_req); int slsi_mlme_nan_set_config(struct slsi_dev *sdev, struct net_device *dev, struct slsi_hal_nan_config_req *hal_req); int slsi_mlme_ndp_request(struct slsi_dev *sdev, struct net_device *dev, struct slsi_hal_nan_data_path_initiator_req *hal_req, u32 ndp_instance_id, u16 ndl_vif_id); int slsi_mlme_ndp_response(struct slsi_dev *sdev, struct net_device *dev, struct slsi_hal_nan_data_path_indication_response *hal_req, u16 local_ndp_instance_id); int slsi_mlme_ndp_terminate(struct slsi_dev *sdev, struct net_device *dev, u16 ndp_instance_id, u16 transaction_id); int slsi_mlme_nan_range_req(struct slsi_dev *sdev, struct net_device *dev, u8 count, struct slsi_rtt_config *nl_rtt_params); int slsi_mlme_nan_range_cancel_req(struct slsi_dev *sdev, struct net_device *dev); #endif #endif int slsi_mlme_set_ext_capab(struct slsi_dev *sdev, struct net_device *dev, u8 *data, int datalength); int slsi_mlme_reassociate(struct slsi_dev *sdev, struct net_device *dev); void slsi_mlme_reassociate_resp(struct slsi_dev *sdev, struct net_device *dev); int slsi_modify_ies(struct net_device *dev, u8 eid, u8 *ies, int ies_len, u8 ie_index, u8 ie_value); int slsi_mlme_set_rssi_monitor(struct slsi_dev *sdev, struct net_device *dev, u8 enable, s8 low_rssi_threshold, s8 high_rssi_threshold); struct slsi_mib_value *slsi_read_mibs(struct slsi_dev *sdev, struct net_device *dev, struct slsi_mib_get_entry *mib_entries, int mib_count, struct slsi_mib_data *mibrsp); int slsi_mlme_set_host_state(struct slsi_dev *sdev, struct net_device *dev, u16 host_state); int slsi_mlme_read_apf_request(struct slsi_dev *sdev, struct net_device *dev, u8 **host_dst, int *datalen); int slsi_mlme_install_apf_request(struct slsi_dev *sdev, struct net_device *dev, u8 *program, u32 program_len); int slsi_mlme_set_multicast_ip(struct slsi_dev *sdev, struct net_device *dev, __be32 multicast_ip_list[], int count); #ifdef CONFIG_SCSC_WLAN_STA_ENHANCED_ARP_DETECT int slsi_mlme_arp_detect_request(struct slsi_dev *sdev, struct net_device *dev, u16 action, u8 *ipaddr); #endif int slsi_mlme_start_detect_request(struct slsi_dev *sdev, struct net_device *dev); int slsi_mlme_set_ctwindow(struct slsi_dev *sdev, struct net_device *dev, unsigned int ct_param); int slsi_mlme_set_p2p_noa(struct slsi_dev *sdev, struct net_device *dev, unsigned int noa_count, unsigned int interval, unsigned int duration); void slsi_decode_fw_rate(u32 fw_rate, struct rate_info *rate, unsigned long *data_rate_mbps); int slsi_test_sap_configure_monitor_mode(struct slsi_dev *sdev, struct net_device *dev, struct cfg80211_chan_def *chandef); int slsi_mlme_delba_req(struct slsi_dev *sdev, struct net_device *dev, u8 *peer_qsta_address, u16 priority, u16 direction, u16 sequence_number, u16 reason_code); int slsi_mlme_configure_monitor_mode(struct slsi_dev *sdev, struct net_device *dev, struct cfg80211_chan_def *chandef); struct sk_buff *slsi_mlme_req_cfm(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb, u16 cfm_id); struct sk_buff *slsi_mlme_req_cfm_ind(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb, u16 cfm_id, u16 ind_id, bool (*validate_cfm_wait_ind)(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *cfm)); int slsi_mlme_set_country(struct slsi_dev *sdev, char *alpha2); int slsi_mlme_set_roaming_parameters(struct slsi_dev *sdev, struct net_device *dev, u16 psid, int mib_value, int mib_length); int slsi_mlme_set_band_req(struct slsi_dev *sdev, struct net_device *dev, uint band, u16 avoid_disconnection); int slsi_mlme_set_scan_mode_req(struct slsi_dev *sdev, struct net_device *dev, u16 scan_mode, u16 max_channel_time, u16 home_away_time, u16 home_time, u16 max_channel_passive_time); int slsi_mlme_add_range_req(struct slsi_dev *sdev, struct net_device *dev, u8 count, struct slsi_rtt_config *nl_rtt_params, u16 rtt_id, u8 *source_addr); int slsi_mlme_del_range_req(struct slsi_dev *sdev, struct net_device *dev, u16 count, u8 *addr, u16 rtt_id); void slsi_mlme_set_country_for_recovery(struct slsi_dev *sdev); #if !defined(CONFIG_SCSC_WLAN_TX_API) && defined(CONFIG_SCSC_WLAN_ARP_FLOW_CONTROL) void slsi_rx_send_frame_cfm_async(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb); #endif #ifdef CONFIG_SCSC_WLAN_NUM_ANTENNAS int slsi_mlme_set_num_antennas(struct net_device *dev, const u16 num_of_antennas, int frame_type); #endif #endif /*__SLSI_MLME_H__*/