diff options
| author | Vladimir Oltean <olteanv@gmail.com> | 2019-06-08 08:04:42 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2019-06-08 18:20:40 -0400 |
| commit | f3097be21bf17ae8785eea009cbc424f16611d9a (patch) | |
| tree | e21fd387d3a4914c2bf7b0322aaedb0d5172b23c /include/linux/dsa | |
| parent | 08fde09a0d1fd1391bdf828de3607c00193e6528 (diff) | |
net: dsa: sja1105: Add a state machine for RX timestamping
Meta frame reception relies on the hardware keeping its promise that it
will send no other traffic towards the CPU port between a link-local
frame and a meta frame. Otherwise there is no other way to associate
the meta frame with the link-local frame it's holding a timestamp of.
The receive function is made stateful, and buffers a timestampable frame
until its meta frame arrives, then merges the two, drops the meta and
releases the link-local frame up the stack.
Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/dsa')
| -rw-r--r-- | include/linux/dsa/sja1105.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/dsa/sja1105.h b/include/linux/dsa/sja1105.h index 2c4fce4eaf0d..79435cfc20eb 100644 --- a/include/linux/dsa/sja1105.h +++ b/include/linux/dsa/sja1105.h | |||
| @@ -45,6 +45,13 @@ struct sja1105_tagger_data { | |||
| 45 | bool hwts_rx_en; | 45 | bool hwts_rx_en; |
| 46 | }; | 46 | }; |
| 47 | 47 | ||
| 48 | struct sja1105_skb_cb { | ||
| 49 | u32 meta_tstamp; | ||
| 50 | }; | ||
| 51 | |||
| 52 | #define SJA1105_SKB_CB(skb) \ | ||
| 53 | ((struct sja1105_skb_cb *)DSA_SKB_CB_PRIV(skb)) | ||
| 54 | |||
| 48 | struct sja1105_port { | 55 | struct sja1105_port { |
| 49 | struct sja1105_tagger_data *data; | 56 | struct sja1105_tagger_data *data; |
| 50 | struct dsa_port *dp; | 57 | struct dsa_port *dp; |
