#include <linux/ethtool.h>
#include <linux/if_arp.h>
#include <linux/if_vlan.h>
#include <linux/ip.h>
#include <linux/mhi.h>
#include <linux/mii.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/u64_stats_sync.h>
#include <linux/usb.h>
#include <linux/usb/cdc.h>
#include <linux/usb/usbnet.h>
#include <linux/usb/cdc_ncm.h>
#include <linux/wwan.h>
#define MHI_DEFAULT_MRU …
#define MHI_MBIM_DEFAULT_MTU …
#define MHI_MAX_BUF_SZ …
#define MBIM_NDP16_SIGN_MASK …
#define MHI_MBIM_LINK_HASH_SIZE …
#define LINK_HASH(session) …
#define WDS_BIND_MUX_DATA_PORT_MUX_ID …
struct mhi_mbim_link { … };
struct mhi_mbim_context { … };
struct mbim_tx_hdr { … } __packed;
static struct mhi_mbim_link *mhi_mbim_get_link_rcu(struct mhi_mbim_context *mbim,
unsigned int session)
{ … }
static int mhi_mbim_get_link_mux_id(struct mhi_controller *cntrl)
{ … }
static struct sk_buff *mbim_tx_fixup(struct sk_buff *skb, unsigned int session,
u16 tx_seq)
{ … }
static netdev_tx_t mhi_mbim_ndo_xmit(struct sk_buff *skb, struct net_device *ndev)
{ … }
static int mbim_rx_verify_nth16(struct mhi_mbim_context *mbim, struct sk_buff *skb)
{ … }
static int mbim_rx_verify_ndp16(struct sk_buff *skb, struct usb_cdc_ncm_ndp16 *ndp16)
{ … }
static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)
{ … }
static struct sk_buff *mhi_net_skb_agg(struct mhi_mbim_context *mbim,
struct sk_buff *skb)
{ … }
static void mhi_net_rx_refill_work(struct work_struct *work)
{ … }
static void mhi_mbim_dl_callback(struct mhi_device *mhi_dev,
struct mhi_result *mhi_res)
{ … }
static void mhi_mbim_ndo_get_stats64(struct net_device *ndev,
struct rtnl_link_stats64 *stats)
{ … }
static void mhi_mbim_ul_callback(struct mhi_device *mhi_dev,
struct mhi_result *mhi_res)
{ … }
static int mhi_mbim_ndo_open(struct net_device *ndev)
{ … }
static int mhi_mbim_ndo_stop(struct net_device *ndev)
{ … }
static const struct net_device_ops mhi_mbim_ndo = …;
static int mhi_mbim_newlink(void *ctxt, struct net_device *ndev, u32 if_id,
struct netlink_ext_ack *extack)
{ … }
static void mhi_mbim_dellink(void *ctxt, struct net_device *ndev,
struct list_head *head)
{ … }
static void mhi_mbim_setup(struct net_device *ndev)
{ … }
static const struct wwan_ops mhi_mbim_wwan_ops = …;
static int mhi_mbim_probe(struct mhi_device *mhi_dev, const struct mhi_device_id *id)
{ … }
static void mhi_mbim_remove(struct mhi_device *mhi_dev)
{ … }
static const struct mhi_device_id mhi_mbim_id_table[] = …;
MODULE_DEVICE_TABLE(mhi, mhi_mbim_id_table);
static struct mhi_driver mhi_mbim_driver = …;
module_mhi_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;