linux/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

// SPDX-License-Identifier: ISC
/*
 * Copyright (c) 2010 Broadcom Corporation
 */

/* Toplevel file. Relies on dhd_linux.c to send commands to the dongle. */

#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

/* Dump obss definitions */
#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[] =;

/* Band templates duplicated per wiphy. The channel info
 * above is added to the band during setup.
 */
static const struct ieee80211_supported_band __wl_band_2ghz =;

static const struct ieee80211_supported_band __wl_band_5ghz =;

/* This is to override regulatory domains defined in cfg80211 module (reg.c)
 * By default world regulatory domain defined in reg.c puts the flags
 * NL80211_RRF_NO_IR for 5GHz channels (for * 36..48 and 149..165).
 * With respect to these flags, wpa_supplicant doesn't * start p2p
 * operations on 5GHz channels. All the changes in world regulatory
 * domain are to be done here.
 */
static const struct ieee80211_regdomain brcmf_regdom =;

/* Note: brcmf_cipher_suites is an array of int defining which cipher suites
 * are supported. A pointer to this array and the number of entries is passed
 * on to upper layers. AES_CMAC defines whether or not the driver supports MFP.
 * So the cipher suite AES_CMAC has to be the last one in the array, and when
 * device does not support MFP then the number of suites will be decreased by 1
 */
static const u32 brcmf_cipher_suites[] =;

/* Vendor specific ie. id = 221, oui and type defines exact ie */
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)
{}

/* Traverse a string of 1-byte tag/1-byte length/variable-length value
 * triples, returning a pointer to the substring whose first element
 * matches tag
 */
static const struct brcmf_tlv *
brcmf_parse_tlvs(const void *buf, int buflen, uint key)
{}

/* Is any of the tlvs the expected entry? If
 * not update the tlvs buffer pointer/length.
 */
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)
{}

/**
 * brcmf_apsta_add_vif() - create a new AP or STA virtual interface
 *
 * @wiphy: wiphy device of new interface.
 * @name: name of the new interface.
 * @params: contains mac address for AP or STA device.
 * @type: interface type.
 */
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)
{}

/**
 * brcmf_mon_add_vif() - create monitor mode virtual interface
 *
 * @wiphy: wiphy device of new interface.
 * @name: name of the new interface.
 */
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)
{}

/* PFN result doesn't have all the info which are required by the supplicant
 * (For e.g IEs) Do a target Escan so that sched scan results are reported
 * via wl_inform_single_bss in the required format. Escan does require the
 * scan request in the form of cfg80211_scan_request. For timebeing, create
 * cfg80211_scan_request one out of the received PNO event.
 */
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 /* CONFIG_PM */

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] =;

/**
 * brcmf_setup_ifmodes() - determine interface modes and combinations.
 *
 * @wiphy: wiphy object.
 * @ifp: interface object needed for feat module api.
 *
 * The interface modes and combinations are determined dynamically here
 * based on firmware functionality.
 *
 * no p2p and no mbss:
 *
 *	#STA <= 1, #AP <= 1, channels = 1, 2 total
 *
 * no p2p and mbss:
 *
 *	#STA <= 1, #AP <= 1, channels = 1, 2 total
 *	#AP <= 4, matching BI, channels = 1, 4 total
 *
 * no p2p and rsdb:
 *	#STA <= 1, #AP <= 2, channels = 2, 4 total
 *
 * p2p, no mchan, and mbss:
 *
 *	#STA <= 1, #P2P-DEV <= 1, #{P2P-CL, P2P-GO} <= 1, channels = 1, 3 total
 *	#STA <= 1, #P2P-DEV <= 1, #AP <= 1, #P2P-CL <= 1, channels = 1, 4 total
 *	#AP <= 4, matching BI, channels = 1, 4 total
 *
 * p2p, mchan, and mbss:
 *
 *	#STA <= 2, #P2P-DEV <= 1, #{P2P-CL, P2P-GO} <= 1, channels = 2, 3 total
 *	#STA <= 1, #P2P-DEV <= 1, #AP <= 1, #P2P-CL <= 1, channels = 1, 4 total
 *	#AP <= 4, matching BI, channels = 1, 4 total
 *
 * p2p, rsdb, and no mbss:
 *	#STA <= 1, #P2P-DEV <= 1, #{P2P-CL, P2P-GO} <= 2, AP <= 2,
 *	 channels = 2, 4 total
 */
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)
{}