add tx
This commit is contained in:
BIN
.module-common.o
BIN
.module-common.o
Binary file not shown.
@@ -99,7 +99,6 @@ static void ch397_read_callback(struct urb *urb)
|
|||||||
struct ch397_device *dev = urb->context;
|
struct ch397_device *dev = urb->context;
|
||||||
struct net_device *netdev = dev->netdev;
|
struct net_device *netdev = dev->netdev;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
struct ethhdr *eth;
|
|
||||||
int status = urb->status;
|
int status = urb->status;
|
||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
@@ -230,11 +229,53 @@ static int ch397_net_stop(struct net_device *netdev)
|
|||||||
return 0;
|
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,
|
static netdev_tx_t ch397_start_xmit(struct sk_buff *skb,
|
||||||
struct net_device *netdev)
|
struct net_device *netdev)
|
||||||
{
|
{
|
||||||
// Pour l'instant, on drop juste les packets TX
|
struct ch397_device *dev = netdev_priv(netdev);
|
||||||
dev_kfree_skb(skb);
|
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++;
|
netdev->stats.tx_dropped++;
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user