From f4e38f056338a2e00c02585a62c3ba2af86eaf39 Mon Sep 17 00:00:00 2001 From: rltbg Date: Tue, 10 Mar 2026 12:55:58 +0100 Subject: [PATCH] add tx --- .module-common.o | Bin 9208 -> 13216 bytes src/ch397_driver.c | 47 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/.module-common.o b/.module-common.o index 50ee75bfff9e9666acc8fad1e7452e13d52939a5..b004a9a726746d9cf7b84656e58b018f5d78d212 100644 GIT binary patch literal 13216 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 e2GF{context; struct net_device *netdev = dev->netdev; struct sk_buff *skb; - struct ethhdr *eth; int status = urb->status; switch (status) { @@ -230,11 +229,53 @@ static int ch397_net_stop(struct net_device *netdev) return 0; } +static void ch397_write_callback(struct urb *urb) +{ + struct sk_buff *skb = urb->context; + struct net_device *netdev = skb->dev; + + switch (urb->status) { + case 0: + netdev->stats.tx_packets++; + break; + default: + netdev->stats.tx_errors++; + break; + } + + dev_kfree_skb_any(skb); + usb_free_urb(urb); + netif_wake_queue(netdev); +} + static netdev_tx_t ch397_start_xmit(struct sk_buff *skb, struct net_device *netdev) { - // Pour l'instant, on drop juste les packets TX - dev_kfree_skb(skb); + struct ch397_device *dev = netdev_priv(netdev); + struct urb *urb; + int retval; + + urb = usb_alloc_urb(0, GFP_ATOMIC); + if (!urb) + goto drop; + + usb_fill_bulk_urb(urb, dev->udev, + usb_sndbulkpipe(dev->udev, + dev->bulk_out_endpointAddr), + skb->data, skb->len, ch397_write_callback, skb); + + retval = usb_submit_urb(urb, GFP_ATOMIC); + if (retval) { + usb_free_urb(urb); + goto drop; + } + + netdev->stats.tx_bytes += skb->len; + netif_stop_queue(netdev); + return NETDEV_TX_OK; + +drop: + dev_kfree_skb_any(skb); netdev->stats.tx_dropped++; return NETDEV_TX_OK; }