#include <linux/kernel.h>
#include <linux/etherdevice.h>
#include <linux/module.h>
#include <linux/vmalloc.h>
#include <net/cfg80211.h>
#include <net/netlink.h>
#include <uapi/linux/if_arp.h>
#include <brcmu_utils.h>
#include <defs.h>
#include <brcmu_wifi.h>
#include <brcm_hw_ids.h>
#include "core.h"
#include "debug.h"
#include "tracepoint.h"
#include "fwil_types.h"
#include "p2p.h"
#include "btcoex.h"
#include "pno.h"
#include "fwsignal.h"
#include "cfg80211.h"
#include "feature.h"
#include "fwil.h"
#include "proto.h"
#include "vendor.h"
#include "bus.h"
#include "common.h"
#include "fwvid.h"
#define BRCMF_SCAN_IE_LEN_MAX …
#define WPA_OUI …
#define WPA_OUI_TYPE …
#define RSN_OUI …
#define WME_OUI_TYPE …
#define WPS_OUI_TYPE …
#define VS_IE_FIXED_HDR_LEN …
#define WPA_IE_VERSION_LEN …
#define WPA_IE_MIN_OUI_LEN …
#define WPA_IE_SUITE_COUNT_LEN …
#define WPA_CIPHER_NONE …
#define WPA_CIPHER_WEP_40 …
#define WPA_CIPHER_TKIP …
#define WPA_CIPHER_AES_CCM …
#define WPA_CIPHER_WEP_104 …
#define RSN_AKM_NONE …
#define RSN_AKM_UNSPECIFIED …
#define RSN_AKM_PSK …
#define RSN_AKM_SHA256_1X …
#define RSN_AKM_SHA256_PSK …
#define RSN_AKM_SAE …
#define RSN_CAP_LEN …
#define RSN_CAP_PTK_REPLAY_CNTR_MASK …
#define RSN_CAP_MFPR_MASK …
#define RSN_CAP_MFPC_MASK …
#define RSN_PMKID_COUNT_LEN …
#define VNDR_IE_CMD_LEN …
#define VNDR_IE_COUNT_OFFSET …
#define VNDR_IE_PKTFLAG_OFFSET …
#define VNDR_IE_VSIE_OFFSET …
#define VNDR_IE_HDR_SIZE …
#define VNDR_IE_PARSE_LIMIT …
#define DOT11_MGMT_HDR_LEN …
#define DOT11_BCN_PRB_FIXED_LEN …
#define BRCMF_SCAN_JOIN_ACTIVE_DWELL_TIME_MS …
#define BRCMF_SCAN_JOIN_PASSIVE_DWELL_TIME_MS …
#define BRCMF_SCAN_JOIN_PROBE_INTERVAL_MS …
#define BRCMF_SCAN_CHANNEL_TIME …
#define BRCMF_SCAN_UNASSOC_TIME …
#define BRCMF_SCAN_PASSIVE_TIME …
#define BRCMF_ND_INFO_TIMEOUT …
#define BRCMF_PS_MAX_TIMEOUT_MS …
#define ACS_MSRMNT_DELAY …
#define CHAN_NOISE_DUMMY …
#define OBSS_TOKEN_IDX …
#define IBSS_TOKEN_IDX …
#define TX_TOKEN_IDX …
#define CTG_TOKEN_IDX …
#define PKT_TOKEN_IDX …
#define IDLE_TOKEN_IDX …
#define BRCMF_ASSOC_PARAMS_FIXED_SIZE …
#define BRCMF_MAX_CHANSPEC_LIST …
struct brcmf_dump_survey { … };
struct cca_stats_n_flags { … };
struct cca_msrmnt_query { … };
static bool check_vif_up(struct brcmf_cfg80211_vif *vif)
{ … }
#define RATE_TO_BASE100KBPS(rate) …
#define RATETAB_ENT(_rateid, _flags) …
static struct ieee80211_rate __wl_rates[] = …;
#define wl_g_rates …
#define wl_g_rates_size …
#define wl_a_rates …
#define wl_a_rates_size …
#define CHAN2G(_channel, _freq) …
#define CHAN5G(_channel) …
static struct ieee80211_channel __wl_2ghz_channels[] = …;
static struct ieee80211_channel __wl_5ghz_channels[] = …;
static const struct ieee80211_supported_band __wl_band_2ghz = …;
static const struct ieee80211_supported_band __wl_band_5ghz = …;
static const struct ieee80211_regdomain brcmf_regdom = …;
static const u32 brcmf_cipher_suites[] = …;
struct brcmf_vs_tlv { … };
struct parsed_vndr_ie_info { … };
struct parsed_vndr_ies { … };
#define WL_INTERFACE_CREATE_VER_1 …
#define WL_INTERFACE_CREATE_VER_2 …
#define WL_INTERFACE_CREATE_VER_3 …
#define WL_INTERFACE_CREATE_VER_MAX …
#define WL_INTERFACE_MAC_DONT_USE …
#define WL_INTERFACE_MAC_USE …
#define WL_INTERFACE_CREATE_STA …
#define WL_INTERFACE_CREATE_AP …
struct wl_interface_create_v1 { … };
struct wl_interface_create_v2 { … };
struct wl_interface_create_v3 { … };
static u8 nl80211_band_to_fwil(enum nl80211_band band)
{ … }
static u16 chandef_to_chanspec(struct brcmu_d11inf *d11inf,
struct cfg80211_chan_def *ch)
{ … }
u16 channel_to_chanspec(struct brcmu_d11inf *d11inf,
struct ieee80211_channel *ch)
{ … }
static const struct brcmf_tlv *
brcmf_parse_tlvs(const void *buf, int buflen, uint key)
{ … }
static bool
brcmf_tlv_has_ie(const u8 *ie, const u8 **tlvs, u32 *tlvs_len,
const u8 *oui, u32 oui_len, u8 type)
{ … }
static struct brcmf_vs_tlv *
brcmf_find_wpaie(const u8 *parse, u32 len)
{ … }
static struct brcmf_vs_tlv *
brcmf_find_wpsie(const u8 *parse, u32 len)
{ … }
static int brcmf_vif_change_validate(struct brcmf_cfg80211_info *cfg,
struct brcmf_cfg80211_vif *vif,
enum nl80211_iftype new_type)
{ … }
static int brcmf_vif_add_validate(struct brcmf_cfg80211_info *cfg,
enum nl80211_iftype new_type)
{ … }
static void convert_key_from_CPU(struct brcmf_wsec_key *key,
struct brcmf_wsec_key_le *key_le)
{ … }
static int
send_key_to_dongle(struct brcmf_if *ifp, struct brcmf_wsec_key *key)
{ … }
static void
brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev)
{ … }
static int brcmf_get_first_free_bsscfgidx(struct brcmf_pub *drvr)
{ … }
static void brcmf_set_vif_sta_macaddr(struct brcmf_if *ifp, u8 *mac_addr)
{ … }
static int brcmf_cfg80211_request_sta_if(struct brcmf_if *ifp, u8 *macaddr)
{ … }
static int brcmf_cfg80211_request_ap_if(struct brcmf_if *ifp)
{ … }
static
struct wireless_dev *brcmf_apsta_add_vif(struct wiphy *wiphy, const char *name,
struct vif_params *params,
enum nl80211_iftype type)
{ … }
static bool brcmf_is_apmode(struct brcmf_cfg80211_vif *vif)
{ … }
static bool brcmf_is_ibssmode(struct brcmf_cfg80211_vif *vif)
{ … }
static struct wireless_dev *brcmf_mon_add_vif(struct wiphy *wiphy,
const char *name)
{ … }
static int brcmf_mon_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev)
{ … }
static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy,
const char *name,
unsigned char name_assign_type,
enum nl80211_iftype type,
struct vif_params *params)
{ … }
static void brcmf_scan_config_mpc(struct brcmf_if *ifp, int mpc)
{ … }
void brcmf_set_mpc(struct brcmf_if *ifp, int mpc)
{ … }
static void brcmf_scan_params_v2_to_v1(struct brcmf_scan_params_v2_le *params_v2_le,
struct brcmf_scan_params_le *params_le)
{ … }
static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg,
struct brcmf_scan_params_v2_le *params_le,
struct cfg80211_scan_request *request)
{ … }
s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg,
struct brcmf_if *ifp, bool aborted,
bool fw_abort)
{ … }
static int brcmf_cfg80211_del_apsta_iface(struct wiphy *wiphy,
struct wireless_dev *wdev)
{ … }
static
int brcmf_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev)
{ … }
static s32
brcmf_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
enum nl80211_iftype type,
struct vif_params *params)
{ … }
static s32
brcmf_run_escan(struct brcmf_cfg80211_info *cfg, struct brcmf_if *ifp,
struct cfg80211_scan_request *request)
{ … }
static s32
brcmf_do_escan(struct brcmf_if *ifp, struct cfg80211_scan_request *request)
{ … }
static s32
brcmf_cfg80211_scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
{ … }
static s32 brcmf_set_rts(struct net_device *ndev, u32 rts_threshold)
{ … }
static s32 brcmf_set_frag(struct net_device *ndev, u32 frag_threshold)
{ … }
static s32 brcmf_set_retry(struct net_device *ndev, u32 retry, bool l)
{ … }
static s32 brcmf_cfg80211_set_wiphy_params(struct wiphy *wiphy, u32 changed)
{ … }
static void brcmf_init_prof(struct brcmf_cfg80211_profile *prof)
{ … }
static u16 brcmf_map_fw_linkdown_reason(const struct brcmf_event_msg *e)
{ … }
int brcmf_set_wsec(struct brcmf_if *ifp, const u8 *key, u16 key_len, u16 flags)
{ … }
BRCMF_EXPORT_SYMBOL_GPL(brcmf_set_wsec);
static int brcmf_set_pmk(struct brcmf_if *ifp, const u8 *pmk_data, u16 pmk_len)
{ … }
static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason,
bool locally_generated)
{ … }
static s32
brcmf_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
struct cfg80211_ibss_params *params)
{ … }
static s32
brcmf_cfg80211_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
{ … }
static s32 brcmf_set_wpa_version(struct net_device *ndev,
struct cfg80211_connect_params *sme)
{ … }
static s32 brcmf_set_auth_type(struct net_device *ndev,
struct cfg80211_connect_params *sme)
{ … }
static s32
brcmf_set_wsec_mode(struct net_device *ndev,
struct cfg80211_connect_params *sme)
{ … }
static s32
brcmf_set_key_mgmt(struct net_device *ndev, struct cfg80211_connect_params *sme)
{ … }
static s32
brcmf_set_sharedkey(struct net_device *ndev,
struct cfg80211_connect_params *sme)
{ … }
static
enum nl80211_auth_type brcmf_war_auth_type(struct brcmf_if *ifp,
enum nl80211_auth_type type)
{ … }
static void brcmf_set_join_pref(struct brcmf_if *ifp,
struct cfg80211_bss_selection *bss_select)
{ … }
static s32
brcmf_cfg80211_connect(struct wiphy *wiphy, struct net_device *ndev,
struct cfg80211_connect_params *sme)
{ … }
static s32
brcmf_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *ndev,
u16 reason_code)
{ … }
static s32
brcmf_cfg80211_set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
enum nl80211_tx_power_setting type, s32 mbm)
{ … }
static s32
brcmf_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
s32 *dbm)
{ … }
static s32
brcmf_cfg80211_config_default_key(struct wiphy *wiphy, struct net_device *ndev,
int link_id, u8 key_idx, bool unicast,
bool multicast)
{ … }
static s32
brcmf_cfg80211_del_key(struct wiphy *wiphy, struct net_device *ndev,
int link_id, u8 key_idx, bool pairwise,
const u8 *mac_addr)
{ … }
static s32
brcmf_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
int link_id, u8 key_idx, bool pairwise,
const u8 *mac_addr, struct key_params *params)
{ … }
static s32
brcmf_cfg80211_get_key(struct wiphy *wiphy, struct net_device *ndev,
int link_id, u8 key_idx, bool pairwise,
const u8 *mac_addr, void *cookie,
void (*callback)(void *cookie,
struct key_params *params))
{ … }
static s32
brcmf_cfg80211_config_default_mgmt_key(struct wiphy *wiphy,
struct net_device *ndev, int link_id,
u8 key_idx)
{ … }
static void
brcmf_cfg80211_reconfigure_wep(struct brcmf_if *ifp)
{ … }
static void brcmf_convert_sta_flags(u32 fw_sta_flags, struct station_info *si)
{ … }
static void brcmf_fill_bss_param(struct brcmf_if *ifp, struct station_info *si)
{ … }
static s32
brcmf_cfg80211_get_station_ibss(struct brcmf_if *ifp,
struct station_info *sinfo)
{ … }
static s32
brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
const u8 *mac, struct station_info *sinfo)
{ … }
static int
brcmf_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *ndev,
int idx, u8 *mac, struct station_info *sinfo)
{ … }
static s32
brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev,
bool enabled, s32 timeout)
{ … }
static s32 brcmf_inform_single_bss(struct brcmf_cfg80211_info *cfg,
struct brcmf_bss_info_le *bi)
{ … }
static struct brcmf_bss_info_le *
next_bss_le(struct brcmf_scan_results *list, struct brcmf_bss_info_le *bss)
{ … }
static s32 brcmf_inform_bss(struct brcmf_cfg80211_info *cfg)
{ … }
static s32 brcmf_inform_ibss(struct brcmf_cfg80211_info *cfg,
struct net_device *ndev, const u8 *bssid)
{ … }
static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg,
struct brcmf_if *ifp)
{ … }
void brcmf_abort_scanning(struct brcmf_cfg80211_info *cfg)
{ … }
static void brcmf_cfg80211_escan_timeout_worker(struct work_struct *work)
{ … }
static void brcmf_escan_timeout(struct timer_list *t)
{ … }
static s32
brcmf_compare_update_same_bss(struct brcmf_cfg80211_info *cfg,
struct brcmf_bss_info_le *bss,
struct brcmf_bss_info_le *bss_info_le)
{ … }
static s32
brcmf_cfg80211_escan_handler(struct brcmf_if *ifp,
const struct brcmf_event_msg *e, void *data)
{ … }
static void brcmf_init_escan(struct brcmf_cfg80211_info *cfg)
{ … }
static struct cfg80211_scan_request *
brcmf_alloc_internal_escan_request(struct wiphy *wiphy, u32 n_netinfo) { … }
static int brcmf_internal_escan_add_info(struct cfg80211_scan_request *req,
u8 *ssid, u8 ssid_len, u8 channel)
{ … }
static int brcmf_start_internal_escan(struct brcmf_if *ifp, u32 fwmap,
struct cfg80211_scan_request *request)
{ … }
static struct brcmf_pno_net_info_le *
brcmf_get_netinfo_array(struct brcmf_pno_scanresults_le *pfn_v1)
{ … }
static s32
brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
const struct brcmf_event_msg *e, void *data)
{ … }
static int
brcmf_cfg80211_sched_scan_start(struct wiphy *wiphy,
struct net_device *ndev,
struct cfg80211_sched_scan_request *req)
{ … }
static int brcmf_cfg80211_sched_scan_stop(struct wiphy *wiphy,
struct net_device *ndev, u64 reqid)
{ … }
static __always_inline void brcmf_delay(u32 ms)
{ … }
static s32 brcmf_config_wowl_pattern(struct brcmf_if *ifp, u8 cmd[4],
u8 *pattern, u32 patternsize, u8 *mask,
u32 packet_offset)
{ … }
static s32
brcmf_wowl_nd_results(struct brcmf_if *ifp, const struct brcmf_event_msg *e,
void *data)
{ … }
#ifdef CONFIG_PM
static void brcmf_report_wowl_wakeind(struct wiphy *wiphy, struct brcmf_if *ifp)
{ … }
#else
static void brcmf_report_wowl_wakeind(struct wiphy *wiphy, struct brcmf_if *ifp)
{
}
#endif
static s32 brcmf_cfg80211_resume(struct wiphy *wiphy)
{ … }
static void brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg,
struct brcmf_if *ifp,
struct cfg80211_wowlan *wowl)
{ … }
static int brcmf_keepalive_start(struct brcmf_if *ifp, unsigned int interval)
{ … }
static s32 brcmf_cfg80211_suspend(struct wiphy *wiphy,
struct cfg80211_wowlan *wowl)
{ … }
static s32
brcmf_pmksa_v3_op(struct brcmf_if *ifp, struct cfg80211_pmksa *pmksa,
bool alive)
{ … }
static __used s32
brcmf_update_pmklist(struct brcmf_cfg80211_info *cfg, struct brcmf_if *ifp)
{ … }
static s32
brcmf_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *ndev,
struct cfg80211_pmksa *pmksa)
{ … }
static s32
brcmf_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device *ndev,
struct cfg80211_pmksa *pmksa)
{ … }
static s32
brcmf_cfg80211_flush_pmksa(struct wiphy *wiphy, struct net_device *ndev)
{ … }
static s32 brcmf_configure_opensecurity(struct brcmf_if *ifp)
{ … }
static bool brcmf_valid_wpa_oui(u8 *oui, bool is_rsn_ie)
{ … }
static s32
brcmf_configure_wpaie(struct brcmf_if *ifp,
const struct brcmf_vs_tlv *wpa_ie,
bool is_rsn_ie)
{ … }
static s32
brcmf_parse_vndr_ies(const u8 *vndr_ie_buf, u32 vndr_ie_len,
struct parsed_vndr_ies *vndr_ies)
{ … }
static u32
brcmf_vndr_ie(u8 *iebuf, s32 pktflag, u8 *ie_ptr, u32 ie_len, s8 *add_del_cmd)
{ … }
s32 brcmf_vif_set_mgmt_ie(struct brcmf_cfg80211_vif *vif, s32 pktflag,
const u8 *vndr_ie_buf, u32 vndr_ie_len)
{ … }
s32 brcmf_vif_clear_mgmt_ies(struct brcmf_cfg80211_vif *vif)
{ … }
static s32
brcmf_config_ap_mgmt_ie(struct brcmf_cfg80211_vif *vif,
struct cfg80211_beacon_data *beacon)
{ … }
static s32
brcmf_parse_configure_security(struct brcmf_if *ifp,
struct cfg80211_ap_settings *settings,
enum nl80211_iftype dev_role)
{ … }
static s32
brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
struct cfg80211_ap_settings *settings)
{ … }
static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev,
unsigned int link_id)
{ … }
static s32
brcmf_cfg80211_change_beacon(struct wiphy *wiphy, struct net_device *ndev,
struct cfg80211_ap_update *info)
{ … }
static int
brcmf_cfg80211_del_station(struct wiphy *wiphy, struct net_device *ndev,
struct station_del_parameters *params)
{ … }
static int
brcmf_cfg80211_change_station(struct wiphy *wiphy, struct net_device *ndev,
const u8 *mac, struct station_parameters *params)
{ … }
static void
brcmf_cfg80211_update_mgmt_frame_registrations(struct wiphy *wiphy,
struct wireless_dev *wdev,
struct mgmt_frame_regs *upd)
{ … }
static int
brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
struct cfg80211_mgmt_tx_params *params, u64 *cookie)
{ … }
static int brcmf_cfg80211_set_cqm_rssi_range_config(struct wiphy *wiphy,
struct net_device *ndev,
s32 rssi_low, s32 rssi_high)
{ … }
static int
brcmf_cfg80211_cancel_remain_on_channel(struct wiphy *wiphy,
struct wireless_dev *wdev,
u64 cookie)
{ … }
static int brcmf_cfg80211_get_channel(struct wiphy *wiphy,
struct wireless_dev *wdev,
unsigned int link_id,
struct cfg80211_chan_def *chandef)
{ … }
static int brcmf_cfg80211_crit_proto_start(struct wiphy *wiphy,
struct wireless_dev *wdev,
enum nl80211_crit_proto_id proto,
u16 duration)
{ … }
static void brcmf_cfg80211_crit_proto_stop(struct wiphy *wiphy,
struct wireless_dev *wdev)
{ … }
static s32
brcmf_notify_tdls_peer_event(struct brcmf_if *ifp,
const struct brcmf_event_msg *e, void *data)
{ … }
static int brcmf_convert_nl80211_tdls_oper(enum nl80211_tdls_operation oper)
{ … }
static int brcmf_cfg80211_tdls_oper(struct wiphy *wiphy,
struct net_device *ndev, const u8 *peer,
enum nl80211_tdls_operation oper)
{ … }
static int
brcmf_cfg80211_update_conn_params(struct wiphy *wiphy,
struct net_device *ndev,
struct cfg80211_connect_params *sme,
u32 changed)
{ … }
#ifdef CONFIG_PM
static int
brcmf_cfg80211_set_rekey_data(struct wiphy *wiphy, struct net_device *ndev,
struct cfg80211_gtk_rekey_data *gtk)
{ … }
#endif
static int brcmf_cfg80211_set_pmk(struct wiphy *wiphy, struct net_device *dev,
const struct cfg80211_pmk_conf *conf)
{ … }
static int brcmf_cfg80211_del_pmk(struct wiphy *wiphy, struct net_device *dev,
const u8 *aa)
{ … }
static struct cfg80211_ops brcmf_cfg80211_ops = …;
struct cfg80211_ops *brcmf_cfg80211_get_ops(struct brcmf_mp_device *settings)
{ … }
struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
enum nl80211_iftype type)
{ … }
void brcmf_free_vif(struct brcmf_cfg80211_vif *vif)
{ … }
void brcmf_cfg80211_free_netdev(struct net_device *ndev)
{ … }
static bool brcmf_is_linkup(struct brcmf_cfg80211_vif *vif,
const struct brcmf_event_msg *e)
{ … }
static bool brcmf_is_linkdown(struct brcmf_cfg80211_vif *vif,
const struct brcmf_event_msg *e)
{ … }
static bool brcmf_is_nonetwork(struct brcmf_cfg80211_info *cfg,
const struct brcmf_event_msg *e)
{ … }
static void brcmf_clear_assoc_ies(struct brcmf_cfg80211_info *cfg)
{ … }
u8 brcmf_map_prio_to_prec(void *config, u8 prio)
{ … }
u8 brcmf_map_prio_to_aci(void *config, u8 prio)
{ … }
static void brcmf_init_wmm_prio(u8 *priority)
{ … }
static void brcmf_wifi_prioritize_acparams(const
struct brcmf_cfg80211_edcf_acparam *acp, u8 *priority)
{ … }
static s32 brcmf_get_assoc_ies(struct brcmf_cfg80211_info *cfg,
struct brcmf_if *ifp)
{ … }
static s32
brcmf_bss_roaming_done(struct brcmf_cfg80211_info *cfg,
struct net_device *ndev,
const struct brcmf_event_msg *e)
{ … }
static s32
brcmf_bss_connect_done(struct brcmf_cfg80211_info *cfg,
struct net_device *ndev, const struct brcmf_event_msg *e,
bool completed)
{ … }
static s32
brcmf_notify_connect_status_ap(struct brcmf_cfg80211_info *cfg,
struct net_device *ndev,
const struct brcmf_event_msg *e, void *data)
{ … }
static s32
brcmf_notify_connect_status(struct brcmf_if *ifp,
const struct brcmf_event_msg *e, void *data)
{ … }
static s32
brcmf_notify_roaming_status(struct brcmf_if *ifp,
const struct brcmf_event_msg *e, void *data)
{ … }
static s32
brcmf_notify_mic_status(struct brcmf_if *ifp,
const struct brcmf_event_msg *e, void *data)
{ … }
static s32 brcmf_notify_rssi(struct brcmf_if *ifp,
const struct brcmf_event_msg *e, void *data)
{ … }
static s32 brcmf_notify_vif_event(struct brcmf_if *ifp,
const struct brcmf_event_msg *e, void *data)
{ … }
static void brcmf_init_conf(struct brcmf_cfg80211_conf *conf)
{ … }
static void brcmf_register_event_handlers(struct brcmf_cfg80211_info *cfg)
{ … }
static void brcmf_deinit_priv_mem(struct brcmf_cfg80211_info *cfg)
{ … }
static s32 brcmf_init_priv_mem(struct brcmf_cfg80211_info *cfg)
{ … }
static s32 wl_init_priv(struct brcmf_cfg80211_info *cfg)
{ … }
static void wl_deinit_priv(struct brcmf_cfg80211_info *cfg)
{ … }
static void init_vif_event(struct brcmf_cfg80211_vif_event *event)
{ … }
static s32 brcmf_dongle_roam(struct brcmf_if *ifp)
{ … }
static s32
brcmf_dongle_scantime(struct brcmf_if *ifp)
{ … }
static void brcmf_update_bw40_channel_flag(struct ieee80211_channel *channel,
struct brcmu_chan *ch)
{ … }
static int brcmf_construct_chaninfo(struct brcmf_cfg80211_info *cfg,
u32 bw_cap[])
{ … }
static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
{ … }
static void brcmf_get_bwcap(struct brcmf_if *ifp, u32 bw_cap[])
{ … }
static void brcmf_update_ht_cap(struct ieee80211_supported_band *band,
u32 bw_cap[2], u32 nchain)
{ … }
static __le16 brcmf_get_mcs_map(u32 nchain, enum ieee80211_vht_mcs_support supp)
{ … }
static void brcmf_update_vht_cap(struct ieee80211_supported_band *band,
u32 bw_cap[2], u32 nchain, u32 txstreams,
u32 txbf_bfe_cap, u32 txbf_bfr_cap)
{ … }
static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
{ … }
static const struct ieee80211_txrx_stypes
brcmf_txrx_stypes[NUM_NL80211_IFTYPES] = …;
static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
{ … }
#ifdef CONFIG_PM
static const struct wiphy_wowlan_support brcmf_wowlan_support = …;
#endif
static void brcmf_wiphy_wowl_params(struct wiphy *wiphy, struct brcmf_if *ifp)
{ … }
static int brcmf_setup_wiphy(struct wiphy *wiphy, struct brcmf_if *ifp)
{ … }
static s32 brcmf_config_dongle(struct brcmf_cfg80211_info *cfg)
{ … }
static s32 __brcmf_cfg80211_up(struct brcmf_if *ifp)
{ … }
static s32 __brcmf_cfg80211_down(struct brcmf_if *ifp)
{ … }
s32 brcmf_cfg80211_up(struct net_device *ndev)
{ … }
s32 brcmf_cfg80211_down(struct net_device *ndev)
{ … }
enum nl80211_iftype brcmf_cfg80211_get_iftype(struct brcmf_if *ifp)
{ … }
bool brcmf_get_vif_state_any(struct brcmf_cfg80211_info *cfg,
unsigned long state)
{ … }
static inline bool vif_event_equals(struct brcmf_cfg80211_vif_event *event,
u8 action)
{ … }
void brcmf_cfg80211_arm_vif_event(struct brcmf_cfg80211_info *cfg,
struct brcmf_cfg80211_vif *vif)
{ … }
bool brcmf_cfg80211_vif_event_armed(struct brcmf_cfg80211_info *cfg)
{ … }
int brcmf_cfg80211_wait_vif_event(struct brcmf_cfg80211_info *cfg,
u8 action, ulong timeout)
{ … }
static bool brmcf_use_iso3166_ccode_fallback(struct brcmf_pub *drvr)
{ … }
static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2],
struct brcmf_fil_country_le *ccreq)
{ … }
static int
brcmf_parse_dump_obss(char *buf, struct brcmf_dump_survey *survey)
{ … }
static int
brcmf_dump_obss(struct brcmf_if *ifp, struct cca_msrmnt_query req,
struct brcmf_dump_survey *survey)
{ … }
static s32
brcmf_set_channel(struct brcmf_cfg80211_info *cfg, struct ieee80211_channel *chan)
{ … }
static int
brcmf_cfg80211_dump_survey(struct wiphy *wiphy, struct net_device *ndev,
int idx, struct survey_info *info)
{ … }
static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy,
struct regulatory_request *req)
{ … }
static void brcmf_free_wiphy(struct wiphy *wiphy)
{ … }
struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
struct cfg80211_ops *ops,
bool p2pdev_forced)
{ … }
void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg)
{ … }