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>
This commit is contained in:
committed by
Ben Hutchings
parent
576eda8b08
commit
7c236c43b8
@ -56,7 +56,8 @@
|
||||
#define EFX_MAX_CHANNELS 32U
|
||||
#define EFX_MAX_RX_QUEUES EFX_MAX_CHANNELS
|
||||
#define EFX_EXTRA_CHANNEL_IOV 0
|
||||
#define EFX_MAX_EXTRA_CHANNELS 1U
|
||||
#define EFX_EXTRA_CHANNEL_PTP 1
|
||||
#define EFX_MAX_EXTRA_CHANNELS 2U
|
||||
|
||||
/* Checksum generation is a per-queue option in hardware, so each
|
||||
* queue visible to the networking core is backed by two hardware TX
|
||||
@ -68,6 +69,9 @@
|
||||
#define EFX_TXQ_TYPES 4
|
||||
#define EFX_MAX_TX_QUEUES (EFX_TXQ_TYPES * EFX_MAX_CHANNELS)
|
||||
|
||||
/* Forward declare Precision Time Protocol (PTP) support structure. */
|
||||
struct efx_ptp_data;
|
||||
|
||||
struct efx_self_tests;
|
||||
|
||||
/**
|
||||
@ -736,6 +740,7 @@ struct vfdi_status;
|
||||
* %local_addr_list. Protected by %local_lock.
|
||||
* @local_lock: Mutex protecting %local_addr_list and %local_page_list.
|
||||
* @peer_work: Work item to broadcast peer addresses to VMs.
|
||||
* @ptp_data: PTP state data
|
||||
* @monitor_work: Hardware monitor workitem
|
||||
* @biu_lock: BIU (bus interface unit) lock
|
||||
* @last_irq_cpu: Last CPU to handle a possible test interrupt. This
|
||||
@ -863,6 +868,10 @@ struct efx_nic {
|
||||
struct work_struct peer_work;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SFC_PTP
|
||||
struct efx_ptp_data *ptp_data;
|
||||
#endif
|
||||
|
||||
/* The following fields may be written more often */
|
||||
|
||||
struct delayed_work monitor_work ____cacheline_aligned_in_smp;
|
||||
@ -1125,5 +1134,13 @@ static inline void clear_bit_le(unsigned nr, unsigned char *addr)
|
||||
#define EFX_MAX_FRAME_LEN(mtu) \
|
||||
((((mtu) + ETH_HLEN + VLAN_HLEN + 4/* FCS */ + 7) & ~7) + 16)
|
||||
|
||||
static inline bool efx_xmit_with_hwtstamp(struct sk_buff *skb)
|
||||
{
|
||||
return skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP;
|
||||
}
|
||||
static inline void efx_xmit_hwtstamp_pending(struct sk_buff *skb)
|
||||
{
|
||||
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
|
||||
}
|
||||
|
||||
#endif /* EFX_NET_DRIVER_H */
|
||||
|
Reference in New Issue
Block a user