3c59x: Add software timestamping
authorMatthew Whitehead <tedheadster@gmail.com>
Mon, 16 Dec 2013 15:20:26 +0000 (10:20 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 19 Dec 2013 19:32:52 +0000 (14:32 -0500)
Added software timestamping ability. Tested with linuxptp and synchronized
clocks to an average of less than 200 microseconds on 10 megabit ethernet.

Tested on both Vortex and Boomerang models.

Signed-off-by: Matthew Whitehead <tedheadster@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/3com/3c59x.c

index af24c3c..0f4241c 100644 (file)
@@ -2079,10 +2079,12 @@ vortex_start_xmit(struct sk_buff *skb, struct net_device *dev)
                iowrite16(len, ioaddr + Wn7_MasterLen);
                spin_unlock_irq(&vp->window_lock);
                vp->tx_skb = skb;
+               skb_tx_timestamp(skb);
                iowrite16(StartDMADown, ioaddr + EL3_CMD);
                /* netif_wake_queue() will be called at the DMADone interrupt. */
        } else {
                /* ... and the packet rounded to a doubleword. */
+               skb_tx_timestamp(skb);
                iowrite32_rep(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
                dev_kfree_skb (skb);
                if (ioread16(ioaddr + TxFree) > 1536) {
@@ -2212,6 +2214,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
                prev_entry->status &= cpu_to_le32(~TxIntrUploaded);
 #endif
        }
+       skb_tx_timestamp(skb);
        iowrite16(DownUnstall, ioaddr + EL3_CMD);
        spin_unlock_irqrestore(&vp->lock, flags);
        return NETDEV_TX_OK;
@@ -2986,6 +2989,7 @@ static const struct ethtool_ops vortex_ethtool_ops = {
        .nway_reset             = vortex_nway_reset,
        .get_wol                = vortex_get_wol,
        .set_wol                = vortex_set_wol,
+       .get_ts_info            = ethtool_op_get_ts_info,
 };
 
 #ifdef CONFIG_PCI