[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <26a85bae-1a33-dd1f-5e73-0ab6da100abf@quicinc.com>
Date: Wed, 7 Jun 2023 10:27:47 -0600
From: Jeffrey Hugo <quic_jhugo@...cinc.com>
To: Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>,
<davem@...emloft.net>, <edumazet@...gle.com>, <kuba@...nel.org>,
<pabeni@...hat.com>
CC: <mhi@...ts.linux.dev>, <linux-arm-msm@...r.kernel.org>,
<netdev@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
<loic.poulain@...aro.org>
Subject: Re: [PATCH v2 1/2] net: Add MHI Endpoint network driver
On 6/7/2023 9:24 AM, Manivannan Sadhasivam wrote:
> Add a network driver for the Modem Host Interface (MHI) endpoint devices
> that provides network interfaces to the PCIe based Qualcomm endpoint
> devices supporting MHI bus. This driver allows the MHI endpoint devices to
> establish IP communication with the host machines (x86, ARM64) over MHI
> bus.
>
> The driver currently supports only IP_SW0 MHI channel that can be used
> to route IP traffic from the endpoint CPU to host machine.
>
> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>
> ---
> drivers/net/Kconfig | 9 ++
> drivers/net/Makefile | 1 +
> drivers/net/mhi_ep_net.c | 331 +++++++++++++++++++++++++++++++++++++++
> 3 files changed, 341 insertions(+)
> create mode 100644 drivers/net/mhi_ep_net.c
>
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index 368c6f5b327e..36b628e2e49f 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -452,6 +452,15 @@ config MHI_NET
> QCOM based WWAN modems for IP or QMAP/rmnet protocol (like SDX55).
> Say Y or M.
>
> +config MHI_EP_NET
> + tristate "MHI Endpoint network driver"
> + depends on MHI_BUS_EP
> + help
> + This is the network driver for MHI bus implementation in endpoint
> + devices. It is used provide the network interface for QCOM endpoint
> + devices such as SDX55 modems.
> + Say Y or M.
What will the module be called if "m" is selected?
> +
> endif # NET_CORE
>
> config SUNGEM_PHY
> diff --git a/drivers/net/Makefile b/drivers/net/Makefile
> index e26f98f897c5..b8e706a4150e 100644
> --- a/drivers/net/Makefile
> +++ b/drivers/net/Makefile
> @@ -40,6 +40,7 @@ obj-$(CONFIG_NLMON) += nlmon.o
> obj-$(CONFIG_NET_VRF) += vrf.o
> obj-$(CONFIG_VSOCKMON) += vsockmon.o
> obj-$(CONFIG_MHI_NET) += mhi_net.o
> +obj-$(CONFIG_MHI_EP_NET) += mhi_ep_net.o
>
> #
> # Networking Drivers
> diff --git a/drivers/net/mhi_ep_net.c b/drivers/net/mhi_ep_net.c
> new file mode 100644
> index 000000000000..0d7939caefc7
> --- /dev/null
> +++ b/drivers/net/mhi_ep_net.c
> @@ -0,0 +1,331 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * MHI Endpoint Network driver
> + *
> + * Based on drivers/net/mhi_net.c
> + *
> + * Copyright (c) 2023, Linaro Ltd.
> + * Author: Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>
> + */
> +
> +#include <linux/if_arp.h>
> +#include <linux/mhi_ep.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/module.h>
> +#include <linux/netdevice.h>
> +#include <linux/skbuff.h>
> +#include <linux/u64_stats_sync.h>
> +
> +#define MHI_NET_MIN_MTU ETH_MIN_MTU
> +#define MHI_NET_MAX_MTU 0xffff
> +
> +struct mhi_ep_net_stats {
> + u64_stats_t rx_packets;
> + u64_stats_t rx_bytes;
> + u64_stats_t rx_errors;
> + u64_stats_t tx_packets;
> + u64_stats_t tx_bytes;
> + u64_stats_t tx_errors;
> + u64_stats_t tx_dropped;
> + struct u64_stats_sync tx_syncp;
> + struct u64_stats_sync rx_syncp;
> +};
> +
> +struct mhi_ep_net_dev {
> + struct mhi_ep_device *mdev;
> + struct net_device *ndev;
> + struct mhi_ep_net_stats stats;
> + struct workqueue_struct *xmit_wq;
> + struct work_struct xmit_work;
> + struct sk_buff_head tx_buffers;
> + spinlock_t tx_lock; /* Lock for protecting tx_buffers */
> + u32 mru;
> +};
> +
> +static void mhi_ep_net_dev_process_queue_packets(struct work_struct *work)
> +{
> + struct mhi_ep_net_dev *mhi_ep_netdev = container_of(work,
> + struct mhi_ep_net_dev, xmit_work);
Looks like this can fit all on one line to me.
Powered by blists - more mailing lists