#include <linux/kernel.h>
#include <linux/etherdevice.h>
#include <linux/module.h>
#include <linux/inetdevice.h>
#include <linux/property.h>
#include <net/cfg80211.h>
#include <net/rtnetlink.h>
#include <net/addrconf.h>
#include <net/ieee80211_radiotap.h>
#include <net/ipv6.h>
#include <brcmu_utils.h>
#include <brcmu_wifi.h>
#include "core.h"
#include "bus.h"
#include "fwvid.h"
#include "debug.h"
#include "fwil_types.h"
#include "p2p.h"
#include "pno.h"
#include "cfg80211.h"
#include "fwil.h"
#include "feature.h"
#include "proto.h"
#include "pcie.h"
#include "common.h"
#define MAX_WAIT_FOR_8021X_TX …
#define BRCMF_BSSIDX_INVALID …
#define RXS_PBPRES …
#define D11_PHY_HDR_LEN …
struct d11rxhdr_le { … } __packed;
struct wlc_d11rxhdr { … } __packed;
char *brcmf_ifname(struct brcmf_if *ifp)
{ … }
struct brcmf_if *brcmf_get_ifp(struct brcmf_pub *drvr, int ifidx)
{ … }
void brcmf_configure_arp_nd_offload(struct brcmf_if *ifp, bool enable)
{ … }
static void _brcmf_set_multicast_list(struct work_struct *work)
{ … }
#if IS_ENABLED(CONFIG_IPV6)
static void _brcmf_update_ndtable(struct work_struct *work)
{ … }
#else
static void _brcmf_update_ndtable(struct work_struct *work)
{
}
#endif
static int brcmf_netdev_set_mac_address(struct net_device *ndev, void *addr)
{ … }
static void brcmf_netdev_set_multicast_list(struct net_device *ndev)
{ … }
static bool brcmf_skb_is_iapp(struct sk_buff *skb)
{ … }
static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
struct net_device *ndev)
{ … }
void brcmf_txflowblock_if(struct brcmf_if *ifp,
enum brcmf_netif_stop_reason reason, bool state)
{ … }
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
{ … }
void brcmf_netif_mon_rx(struct brcmf_if *ifp, struct sk_buff *skb)
{ … }
static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb,
struct brcmf_if **ifp)
{ … }
void brcmf_rx_frame(struct device *dev, struct sk_buff *skb, bool handle_event,
bool inirq)
{ … }
void brcmf_rx_event(struct device *dev, struct sk_buff *skb)
{ … }
void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success)
{ … }
static void brcmf_ethtool_get_drvinfo(struct net_device *ndev,
struct ethtool_drvinfo *info)
{ … }
static const struct ethtool_ops brcmf_ethtool_ops = …;
static int brcmf_netdev_stop(struct net_device *ndev)
{ … }
static int brcmf_netdev_open(struct net_device *ndev)
{ … }
static const struct net_device_ops brcmf_netdev_ops_pri = …;
int brcmf_net_attach(struct brcmf_if *ifp, bool locked)
{ … }
void brcmf_net_detach(struct net_device *ndev, bool locked)
{ … }
static int brcmf_net_mon_open(struct net_device *ndev)
{ … }
static int brcmf_net_mon_stop(struct net_device *ndev)
{ … }
static netdev_tx_t brcmf_net_mon_start_xmit(struct sk_buff *skb,
struct net_device *ndev)
{ … }
static const struct net_device_ops brcmf_netdev_ops_mon = …;
int brcmf_net_mon_attach(struct brcmf_if *ifp)
{ … }
void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on)
{ … }
static int brcmf_net_p2p_open(struct net_device *ndev)
{ … }
static int brcmf_net_p2p_stop(struct net_device *ndev)
{ … }
static netdev_tx_t brcmf_net_p2p_start_xmit(struct sk_buff *skb,
struct net_device *ndev)
{ … }
static const struct net_device_ops brcmf_netdev_ops_p2p = …;
static int brcmf_net_p2p_attach(struct brcmf_if *ifp)
{ … }
struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx,
bool is_p2pdev, const char *name, u8 *mac_addr)
{ … }
static void brcmf_del_if(struct brcmf_pub *drvr, s32 bsscfgidx,
bool locked)
{ … }
void brcmf_remove_interface(struct brcmf_if *ifp, bool locked)
{ … }
static int brcmf_psm_watchdog_notify(struct brcmf_if *ifp,
const struct brcmf_event_msg *evtmsg,
void *data)
{ … }
#ifdef CONFIG_INET
#define ARPOL_MAX_ENTRIES …
static int brcmf_inetaddr_changed(struct notifier_block *nb,
unsigned long action, void *data)
{ … }
#endif
#if IS_ENABLED(CONFIG_IPV6)
static int brcmf_inet6addr_changed(struct notifier_block *nb,
unsigned long action, void *data)
{ … }
#endif
static int brcmf_revinfo_read(struct seq_file *s, void *data)
{ … }
static void brcmf_core_bus_reset(struct work_struct *work)
{ … }
static ssize_t bus_reset_write(struct file *file, const char __user *user_buf,
size_t count, loff_t *ppos)
{ … }
static const struct file_operations bus_reset_fops = …;
static int brcmf_bus_started(struct brcmf_pub *drvr, struct cfg80211_ops *ops)
{ … }
int brcmf_alloc(struct device *dev, struct brcmf_mp_device *settings)
{ … }
int brcmf_attach(struct device *dev)
{ … }
void brcmf_bus_add_txhdrlen(struct device *dev, uint len)
{ … }
void brcmf_dev_reset(struct device *dev)
{ … }
void brcmf_dev_coredump(struct device *dev)
{ … }
void brcmf_fw_crashed(struct device *dev)
{ … }
void brcmf_detach(struct device *dev)
{ … }
void brcmf_free(struct device *dev)
{ … }
s32 brcmf_iovar_data_set(struct device *dev, char *name, void *data, u32 len)
{ … }
static int brcmf_get_pend_8021x_cnt(struct brcmf_if *ifp)
{ … }
int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp)
{ … }
void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state)
{ … }
int __init brcmf_core_init(void)
{ … }
void __exit brcmf_core_exit(void)
{ … }