#define pr_fmt(fmt) …
#include <linux/if.h>
#include <linux/module.h>
#include <linux/err.h>
#include <linux/list.h>
#include <linux/slab.h>
#include <linux/nl80211.h>
#include <linux/debugfs.h>
#include <linux/notifier.h>
#include <linux/device.h>
#include <linux/etherdevice.h>
#include <linux/rtnetlink.h>
#include <linux/sched.h>
#include <net/genetlink.h>
#include <net/cfg80211.h>
#include "nl80211.h"
#include "core.h"
#include "sysfs.h"
#include "debugfs.h"
#include "wext-compat.h"
#include "rdev-ops.h"
#define PHY_NAME …
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_ALIAS_GENL_FAMILY(…);
LIST_HEAD(…);
int cfg80211_rdev_list_generation;
static struct dentry *ieee80211_debugfs_dir;
struct workqueue_struct *cfg80211_wq;
static bool cfg80211_disable_40mhz_24ghz;
module_param(cfg80211_disable_40mhz_24ghz, bool, 0644);
MODULE_PARM_DESC(…) …;
struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx)
{ … }
int get_wiphy_idx(struct wiphy *wiphy)
{ … }
struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx)
{ … }
static int cfg80211_dev_check_name(struct cfg80211_registered_device *rdev,
const char *newname)
{ … }
int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
char *newname)
{ … }
int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
struct net *net)
{ … }
static void cfg80211_rfkill_poll(struct rfkill *rfkill, void *data)
{ … }
void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev)
{ … }
void cfg80211_stop_nan(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev)
{ … }
void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy)
{ … }
EXPORT_SYMBOL_GPL(…);
static int cfg80211_rfkill_set_block(void *data, bool blocked)
{ … }
static void cfg80211_rfkill_block_work(struct work_struct *work)
{ … }
static void cfg80211_event_work(struct work_struct *work)
{ … }
void cfg80211_destroy_ifaces(struct cfg80211_registered_device *rdev)
{ … }
static void cfg80211_destroy_iface_wk(struct work_struct *work)
{ … }
static void cfg80211_sched_scan_stop_wk(struct wiphy *wiphy,
struct wiphy_work *work)
{ … }
static void cfg80211_propagate_radar_detect_wk(struct work_struct *work)
{ … }
static void cfg80211_propagate_cac_done_wk(struct work_struct *work)
{ … }
static void cfg80211_wiphy_work(struct work_struct *work)
{ … }
struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
const char *requested_name)
{ … }
EXPORT_SYMBOL(…);
static int wiphy_verify_combinations(struct wiphy *wiphy)
{ … }
int wiphy_register(struct wiphy *wiphy)
{ … }
EXPORT_SYMBOL(…);
void wiphy_rfkill_start_polling(struct wiphy *wiphy)
{ … }
EXPORT_SYMBOL(…);
void cfg80211_process_wiphy_works(struct cfg80211_registered_device *rdev,
struct wiphy_work *end)
{ … }
void wiphy_unregister(struct wiphy *wiphy)
{ … }
EXPORT_SYMBOL(…);
void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
{ … }
void wiphy_free(struct wiphy *wiphy)
{ … }
EXPORT_SYMBOL(…);
void wiphy_rfkill_set_hw_state_reason(struct wiphy *wiphy, bool blocked,
enum rfkill_hard_block_reasons reason)
{ … }
EXPORT_SYMBOL(…);
static void _cfg80211_unregister_wdev(struct wireless_dev *wdev,
bool unregister_netdev)
{ … }
void cfg80211_unregister_wdev(struct wireless_dev *wdev)
{ … }
EXPORT_SYMBOL(…);
static const struct device_type wiphy_type = …;
void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
enum nl80211_iftype iftype, int num)
{ … }
void cfg80211_leave(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev)
{ … }
void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
gfp_t gfp)
{ … }
EXPORT_SYMBOL(…);
void cfg80211_init_wdev(struct wireless_dev *wdev)
{ … }
void cfg80211_register_wdev(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev)
{ … }
int cfg80211_register_netdevice(struct net_device *dev)
{ … }
EXPORT_SYMBOL(…);
static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
unsigned long state, void *ptr)
{ … }
static struct notifier_block cfg80211_netdev_notifier = …;
static void __net_exit cfg80211_pernet_exit(struct net *net)
{ … }
static struct pernet_operations cfg80211_pernet_ops = …;
void wiphy_work_queue(struct wiphy *wiphy, struct wiphy_work *work)
{ … }
EXPORT_SYMBOL_GPL(…);
void wiphy_work_cancel(struct wiphy *wiphy, struct wiphy_work *work)
{ … }
EXPORT_SYMBOL_GPL(…);
void wiphy_work_flush(struct wiphy *wiphy, struct wiphy_work *work)
{ … }
EXPORT_SYMBOL_GPL(…);
void wiphy_delayed_work_timer(struct timer_list *t)
{ … }
EXPORT_SYMBOL(…);
void wiphy_delayed_work_queue(struct wiphy *wiphy,
struct wiphy_delayed_work *dwork,
unsigned long delay)
{ … }
EXPORT_SYMBOL_GPL(…);
void wiphy_delayed_work_cancel(struct wiphy *wiphy,
struct wiphy_delayed_work *dwork)
{ … }
EXPORT_SYMBOL_GPL(…);
void wiphy_delayed_work_flush(struct wiphy *wiphy,
struct wiphy_delayed_work *dwork)
{ … }
EXPORT_SYMBOL_GPL(…);
static int __init cfg80211_init(void)
{ … }
fs_initcall(cfg80211_init);
static void __exit cfg80211_exit(void)
{ … }
module_exit(cfg80211_exit);