linux/drivers/net/wwan/mhi_wwan_mbim.c

// SPDX-License-Identifier: GPL-2.0-or-later
/* MHI MBIM Network driver - Network/MBIM over MHI bus
 *
 * Copyright (C) 2021 Linaro Ltd <[email protected]>
 *
 * This driver copy some code from cdc_ncm, which is:
 * Copyright (C) ST-Ericsson 2010-2012
 * and cdc_mbim, which is:
 * Copyright (c) 2012  Smith Micro Software, Inc.
 * Copyright (c) 2012  Bjørn Mork <[email protected]>
 *
 */

#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>

/* 3500 allows to optimize skb allocation, the skbs will basically fit in
 * one 4K page. Large MBIM packets will simply be split over several MHI
 * transfers and chained by the MHI net layer (zerocopy).
 */
#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();