diff options
author | Brandon Streiff <brandon.streiff@ni.com> | 2018-02-13 19:07:49 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-02-14 14:33:37 -0500 |
commit | 90af1059c52c0031f3bfd8279c9ede153ca83275 (patch) | |
tree | 66b3f0407a9189ef36649951fc8da47305028a8c /include/net/dsa.h | |
parent | 0336369d3a4d65c9332476b618ff3bb9b41045e1 (diff) |
net: dsa: forward timestamping callbacks to switch drivers
Forward the rx/tx timestamp machinery from the dsa infrastructure to the
switch driver.
On the rx side, defer delivery of skbs until we have an rx timestamp.
This mimicks the behavior of skb_defer_rx_timestamp.
On the tx side, identify PTP packets, clone them, and pass them to the
underlying switch driver before we transmit. This mimicks the behavior
of skb_tx_timestamp.
Adjusted txstamp API to keep the allocation and freeing of the clone
in the same central function by Richard Cochran
Signed-off-by: Brandon Streiff <brandon.streiff@ni.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/dsa.h')
-rw-r--r-- | include/net/dsa.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/include/net/dsa.h b/include/net/dsa.h index 4c0df83dddaf..0ad17b63684d 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h | |||
@@ -102,6 +102,7 @@ struct dsa_platform_data { | |||
102 | }; | 102 | }; |
103 | 103 | ||
104 | struct packet_type; | 104 | struct packet_type; |
105 | struct dsa_switch; | ||
105 | 106 | ||
106 | struct dsa_device_ops { | 107 | struct dsa_device_ops { |
107 | struct sk_buff *(*xmit)(struct sk_buff *skb, struct net_device *dev); | 108 | struct sk_buff *(*xmit)(struct sk_buff *skb, struct net_device *dev); |
@@ -484,6 +485,10 @@ struct dsa_switch_ops { | |||
484 | struct ifreq *ifr); | 485 | struct ifreq *ifr); |
485 | int (*port_hwtstamp_set)(struct dsa_switch *ds, int port, | 486 | int (*port_hwtstamp_set)(struct dsa_switch *ds, int port, |
486 | struct ifreq *ifr); | 487 | struct ifreq *ifr); |
488 | bool (*port_txtstamp)(struct dsa_switch *ds, int port, | ||
489 | struct sk_buff *clone, unsigned int type); | ||
490 | bool (*port_rxtstamp)(struct dsa_switch *ds, int port, | ||
491 | struct sk_buff *skb, unsigned int type); | ||
487 | }; | 492 | }; |
488 | 493 | ||
489 | struct dsa_switch_driver { | 494 | struct dsa_switch_driver { |