Le 07/06/2023 à 17:24, Manivannan Sadhasivam a écrit :
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@xxxxxxxxxx> ---
[...]
+static int mhi_ep_net_newlink(struct mhi_ep_device *mhi_dev, struct net_device *ndev) +{ + struct mhi_ep_net_dev *mhi_ep_netdev; + int ret; + + mhi_ep_netdev = netdev_priv(ndev); + + dev_set_drvdata(&mhi_dev->dev, mhi_ep_netdev); + mhi_ep_netdev->ndev = ndev; + mhi_ep_netdev->mdev = mhi_dev; + mhi_ep_netdev->mru = mhi_dev->mhi_cntrl->mru; + + skb_queue_head_init(&mhi_ep_netdev->tx_buffers); + spin_lock_init(&mhi_ep_netdev->tx_lock); + + u64_stats_init(&mhi_ep_netdev->stats.rx_syncp); + u64_stats_init(&mhi_ep_netdev->stats.tx_syncp); + + mhi_ep_netdev->xmit_wq = alloc_workqueue("mhi_ep_net_xmit_wq", 0, WQ_HIGHPRI);
if (!mhi_ep_netdev->xmit_wq) return -ENOMEM;
+ INIT_WORK(&mhi_ep_netdev->xmit_work, mhi_ep_net_dev_process_queue_packets); + + ret = register_netdev(ndev); + if (ret) { + destroy_workqueue(mhi_ep_netdev->xmit_wq);
I don't really think it is needed, but to be consistent with mhi_ep_net_dellink(), maybe:
dev_set_drvdata(&mhi_dev->dev, NULL); CJ
+ return ret; + } + + return 0; +}
[...]