diff options
author | Stuart Hodgson <smhodgson@solarflare.com> | 2012-09-03 06:09:36 -0400 |
---|---|---|
committer | Ben Hutchings <bhutchings@solarflare.com> | 2012-09-18 21:54:12 -0400 |
commit | 7c236c43b838221e17220bcb39e8e8d8c7123713 (patch) | |
tree | 4ef6fa19edafeddf8280c5086624ae430125be91 /drivers/net/ethernet/sfc/net_driver.h | |
parent | 576eda8b08e00cbb0cf29ba777c2cb461c98cbbc (diff) |
sfc: Add support for IEEE-1588 PTP
Add PTP IEEE-1588 support and make accesible via the PHC subsystem.
This work is based on prior code by Andrew Jackson
Signed-off-by: Stuart Hodgson <smhodgson@solarflare.com>
[bwh:
- Add byte order conversion in efx_ptp_send_times()
- Simplify conversion of PPS event times
- Add the built-in vs module check to CONFIG_SFC_PTP dependencies]
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Diffstat (limited to 'drivers/net/ethernet/sfc/net_driver.h')
-rw-r--r-- | drivers/net/ethernet/sfc/net_driver.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/net/ethernet/sfc/net_driver.h b/drivers/net/ethernet/sfc/net_driver.h index 0f0926e68963..797dbed25d94 100644 --- a/drivers/net/ethernet/sfc/net_driver.h +++ b/drivers/net/ethernet/sfc/net_driver.h | |||
@@ -56,7 +56,8 @@ | |||
56 | #define EFX_MAX_CHANNELS 32U | 56 | #define EFX_MAX_CHANNELS 32U |
57 | #define EFX_MAX_RX_QUEUES EFX_MAX_CHANNELS | 57 | #define EFX_MAX_RX_QUEUES EFX_MAX_CHANNELS |
58 | #define EFX_EXTRA_CHANNEL_IOV 0 | 58 | #define EFX_EXTRA_CHANNEL_IOV 0 |
59 | #define EFX_MAX_EXTRA_CHANNELS 1U | 59 | #define EFX_EXTRA_CHANNEL_PTP 1 |
60 | #define EFX_MAX_EXTRA_CHANNELS 2U | ||
60 | 61 | ||
61 | /* Checksum generation is a per-queue option in hardware, so each | 62 | /* Checksum generation is a per-queue option in hardware, so each |
62 | * queue visible to the networking core is backed by two hardware TX | 63 | * queue visible to the networking core is backed by two hardware TX |
@@ -68,6 +69,9 @@ | |||
68 | #define EFX_TXQ_TYPES 4 | 69 | #define EFX_TXQ_TYPES 4 |
69 | #define EFX_MAX_TX_QUEUES (EFX_TXQ_TYPES * EFX_MAX_CHANNELS) | 70 | #define EFX_MAX_TX_QUEUES (EFX_TXQ_TYPES * EFX_MAX_CHANNELS) |
70 | 71 | ||
72 | /* Forward declare Precision Time Protocol (PTP) support structure. */ | ||
73 | struct efx_ptp_data; | ||
74 | |||
71 | struct efx_self_tests; | 75 | struct efx_self_tests; |
72 | 76 | ||
73 | /** | 77 | /** |
@@ -736,6 +740,7 @@ struct vfdi_status; | |||
736 | * %local_addr_list. Protected by %local_lock. | 740 | * %local_addr_list. Protected by %local_lock. |
737 | * @local_lock: Mutex protecting %local_addr_list and %local_page_list. | 741 | * @local_lock: Mutex protecting %local_addr_list and %local_page_list. |
738 | * @peer_work: Work item to broadcast peer addresses to VMs. | 742 | * @peer_work: Work item to broadcast peer addresses to VMs. |
743 | * @ptp_data: PTP state data | ||
739 | * @monitor_work: Hardware monitor workitem | 744 | * @monitor_work: Hardware monitor workitem |
740 | * @biu_lock: BIU (bus interface unit) lock | 745 | * @biu_lock: BIU (bus interface unit) lock |
741 | * @last_irq_cpu: Last CPU to handle a possible test interrupt. This | 746 | * @last_irq_cpu: Last CPU to handle a possible test interrupt. This |
@@ -863,6 +868,10 @@ struct efx_nic { | |||
863 | struct work_struct peer_work; | 868 | struct work_struct peer_work; |
864 | #endif | 869 | #endif |
865 | 870 | ||
871 | #ifdef CONFIG_SFC_PTP | ||
872 | struct efx_ptp_data *ptp_data; | ||
873 | #endif | ||
874 | |||
866 | /* The following fields may be written more often */ | 875 | /* The following fields may be written more often */ |
867 | 876 | ||
868 | struct delayed_work monitor_work ____cacheline_aligned_in_smp; | 877 | struct delayed_work monitor_work ____cacheline_aligned_in_smp; |
@@ -1125,5 +1134,13 @@ static inline void clear_bit_le(unsigned nr, unsigned char *addr) | |||
1125 | #define EFX_MAX_FRAME_LEN(mtu) \ | 1134 | #define EFX_MAX_FRAME_LEN(mtu) \ |
1126 | ((((mtu) + ETH_HLEN + VLAN_HLEN + 4/* FCS */ + 7) & ~7) + 16) | 1135 | ((((mtu) + ETH_HLEN + VLAN_HLEN + 4/* FCS */ + 7) & ~7) + 16) |
1127 | 1136 | ||
1137 | static inline bool efx_xmit_with_hwtstamp(struct sk_buff *skb) | ||
1138 | { | ||
1139 | return skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP; | ||
1140 | } | ||
1141 | static inline void efx_xmit_hwtstamp_pending(struct sk_buff *skb) | ||
1142 | { | ||
1143 | skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; | ||
1144 | } | ||
1128 | 1145 | ||
1129 | #endif /* EFX_NET_DRIVER_H */ | 1146 | #endif /* EFX_NET_DRIVER_H */ |