Commit 3c89f6d0 authored by Matthew Vick's avatar Matthew Vick Committed by Jeff Kirsher

igb: Tidy up wrapping for CONFIG_IGB_PTP.

For users without CONFIG_IGB_PTP=y, we should not be compiling any PTP
code into the driver. Tidy up the wrapping in igb to support this.

Cc: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarMatthew Vick <matthew.vick@intel.com>
Acked-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Tested-by: default avatarJeff Pieper  <jeffrey.e.pieper@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent ba01dfe1
...@@ -34,9 +34,11 @@ ...@@ -34,9 +34,11 @@
#include "e1000_mac.h" #include "e1000_mac.h"
#include "e1000_82575.h" #include "e1000_82575.h"
#ifdef CONFIG_IGB_PTP
#include <linux/clocksource.h> #include <linux/clocksource.h>
#include <linux/net_tstamp.h> #include <linux/net_tstamp.h>
#include <linux/ptp_clock_kernel.h> #include <linux/ptp_clock_kernel.h>
#endif /* CONFIG_IGB_PTP */
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
...@@ -376,12 +378,15 @@ struct igb_adapter { ...@@ -376,12 +378,15 @@ struct igb_adapter {
int node; int node;
u32 *shadow_vfta; u32 *shadow_vfta;
#ifdef CONFIG_IGB_PTP
struct ptp_clock *ptp_clock; struct ptp_clock *ptp_clock;
struct ptp_clock_info caps; struct ptp_clock_info caps;
struct delayed_work overflow_work; struct delayed_work overflow_work;
spinlock_t tmreg_lock; spinlock_t tmreg_lock;
struct cyclecounter cc; struct cyclecounter cc;
struct timecounter tc; struct timecounter tc;
#endif /* CONFIG_IGB_PTP */
char fw_version[32]; char fw_version[32];
}; };
...@@ -436,12 +441,11 @@ extern void igb_set_fw_version(struct igb_adapter *); ...@@ -436,12 +441,11 @@ extern void igb_set_fw_version(struct igb_adapter *);
#ifdef CONFIG_IGB_PTP #ifdef CONFIG_IGB_PTP
extern void igb_ptp_init(struct igb_adapter *adapter); extern void igb_ptp_init(struct igb_adapter *adapter);
extern void igb_ptp_remove(struct igb_adapter *adapter); extern void igb_ptp_remove(struct igb_adapter *adapter);
extern void igb_systim_to_hwtstamp(struct igb_adapter *adapter, extern void igb_systim_to_hwtstamp(struct igb_adapter *adapter,
struct skb_shared_hwtstamps *hwtstamps, struct skb_shared_hwtstamps *hwtstamps,
u64 systim); u64 systim);
#endif /* CONFIG_IGB_PTP */
#endif
static inline s32 igb_reset_phy(struct e1000_hw *hw) static inline s32 igb_reset_phy(struct e1000_hw *hw)
{ {
if (hw->phy.ops.reset) if (hw->phy.ops.reset)
......
...@@ -2338,8 +2338,8 @@ static int igb_ethtool_get_ts_info(struct net_device *dev, ...@@ -2338,8 +2338,8 @@ static int igb_ethtool_get_ts_info(struct net_device *dev,
return 0; return 0;
} }
#endif /* CONFIG_IGB_PTP */
#endif
static const struct ethtool_ops igb_ethtool_ops = { static const struct ethtool_ops igb_ethtool_ops = {
.get_settings = igb_get_settings, .get_settings = igb_get_settings,
.set_settings = igb_set_settings, .set_settings = igb_set_settings,
...@@ -2370,7 +2370,7 @@ static const struct ethtool_ops igb_ethtool_ops = { ...@@ -2370,7 +2370,7 @@ static const struct ethtool_ops igb_ethtool_ops = {
.complete = igb_ethtool_complete, .complete = igb_ethtool_complete,
#ifdef CONFIG_IGB_PTP #ifdef CONFIG_IGB_PTP
.get_ts_info = igb_ethtool_get_ts_info, .get_ts_info = igb_ethtool_get_ts_info,
#endif #endif /* CONFIG_IGB_PTP */
}; };
void igb_set_ethtool_ops(struct net_device *netdev) void igb_set_ethtool_ops(struct net_device *netdev)
......
...@@ -2180,11 +2180,12 @@ static int __devinit igb_probe(struct pci_dev *pdev, ...@@ -2180,11 +2180,12 @@ static int __devinit igb_probe(struct pci_dev *pdev,
} }
#endif #endif
#ifdef CONFIG_IGB_PTP #ifdef CONFIG_IGB_PTP
/* do hw tstamp init after resetting */ /* do hw tstamp init after resetting */
igb_ptp_init(adapter); igb_ptp_init(adapter);
#endif /* CONFIG_IGB_PTP */
#endif
dev_info(&pdev->dev, "Intel(R) Gigabit Ethernet Network Connection\n"); dev_info(&pdev->dev, "Intel(R) Gigabit Ethernet Network Connection\n");
/* print bus type/speed/width info */ /* print bus type/speed/width info */
dev_info(&pdev->dev, "%s: (PCIe:%s:%s) %pM\n", dev_info(&pdev->dev, "%s: (PCIe:%s:%s) %pM\n",
...@@ -2260,8 +2261,8 @@ static void __devexit igb_remove(struct pci_dev *pdev) ...@@ -2260,8 +2261,8 @@ static void __devexit igb_remove(struct pci_dev *pdev)
pm_runtime_get_noresume(&pdev->dev); pm_runtime_get_noresume(&pdev->dev);
#ifdef CONFIG_IGB_PTP #ifdef CONFIG_IGB_PTP
igb_ptp_remove(adapter); igb_ptp_remove(adapter);
#endif /* CONFIG_IGB_PTP */
#endif
/* /*
* The watchdog timer may be rescheduled, so explicitly * The watchdog timer may be rescheduled, so explicitly
* disable watchdog from being rescheduled. * disable watchdog from being rescheduled.
...@@ -3184,8 +3185,10 @@ void igb_configure_rx_ring(struct igb_adapter *adapter, ...@@ -3184,8 +3185,10 @@ void igb_configure_rx_ring(struct igb_adapter *adapter,
srrctl |= (PAGE_SIZE / 2) >> E1000_SRRCTL_BSIZEPKT_SHIFT; srrctl |= (PAGE_SIZE / 2) >> E1000_SRRCTL_BSIZEPKT_SHIFT;
#endif #endif
srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS; srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS;
#ifdef CONFIG_IGB_PTP
if (hw->mac.type >= e1000_82580) if (hw->mac.type >= e1000_82580)
srrctl |= E1000_SRRCTL_TIMESTAMP; srrctl |= E1000_SRRCTL_TIMESTAMP;
#endif /* CONFIG_IGB_PTP */
/* Only set Drop Enable if we are supporting multiple queues */ /* Only set Drop Enable if we are supporting multiple queues */
if (adapter->vfs_allocated_count || adapter->num_rx_queues > 1) if (adapter->vfs_allocated_count || adapter->num_rx_queues > 1)
srrctl |= E1000_SRRCTL_DROP_EN; srrctl |= E1000_SRRCTL_DROP_EN;
...@@ -4229,9 +4232,11 @@ static __le32 igb_tx_cmd_type(u32 tx_flags) ...@@ -4229,9 +4232,11 @@ static __le32 igb_tx_cmd_type(u32 tx_flags)
if (tx_flags & IGB_TX_FLAGS_VLAN) if (tx_flags & IGB_TX_FLAGS_VLAN)
cmd_type |= cpu_to_le32(E1000_ADVTXD_DCMD_VLE); cmd_type |= cpu_to_le32(E1000_ADVTXD_DCMD_VLE);
#ifdef CONFIG_IGB_PTP
/* set timestamp bit if present */ /* set timestamp bit if present */
if (tx_flags & IGB_TX_FLAGS_TSTAMP) if (tx_flags & IGB_TX_FLAGS_TSTAMP)
cmd_type |= cpu_to_le32(E1000_ADVTXD_MAC_TSTAMP); cmd_type |= cpu_to_le32(E1000_ADVTXD_MAC_TSTAMP);
#endif /* CONFIG_IGB_PTP */
/* set segmentation bits for TSO */ /* set segmentation bits for TSO */
if (tx_flags & IGB_TX_FLAGS_TSO) if (tx_flags & IGB_TX_FLAGS_TSO)
...@@ -4462,10 +4467,12 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb, ...@@ -4462,10 +4467,12 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb,
first->bytecount = skb->len; first->bytecount = skb->len;
first->gso_segs = 1; first->gso_segs = 1;
#ifdef CONFIG_IGB_PTP
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
tx_flags |= IGB_TX_FLAGS_TSTAMP; tx_flags |= IGB_TX_FLAGS_TSTAMP;
} }
#endif /* CONFIG_IGB_PTP */
if (vlan_tx_tag_present(skb)) { if (vlan_tx_tag_present(skb)) {
tx_flags |= IGB_TX_FLAGS_VLAN; tx_flags |= IGB_TX_FLAGS_VLAN;
...@@ -5772,8 +5779,8 @@ static void igb_tx_hwtstamp(struct igb_q_vector *q_vector, ...@@ -5772,8 +5779,8 @@ static void igb_tx_hwtstamp(struct igb_q_vector *q_vector,
igb_systim_to_hwtstamp(adapter, &shhwtstamps, regval); igb_systim_to_hwtstamp(adapter, &shhwtstamps, regval);
skb_tstamp_tx(buffer_info->skb, &shhwtstamps); skb_tstamp_tx(buffer_info->skb, &shhwtstamps);
} }
#endif /* CONFIG_IGB_PTP */
#endif
/** /**
* igb_clean_tx_irq - Reclaim resources after transmit completes * igb_clean_tx_irq - Reclaim resources after transmit completes
* @q_vector: pointer to q_vector containing needed info * @q_vector: pointer to q_vector containing needed info
...@@ -5821,8 +5828,8 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector) ...@@ -5821,8 +5828,8 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
#ifdef CONFIG_IGB_PTP #ifdef CONFIG_IGB_PTP
/* retrieve hardware timestamp */ /* retrieve hardware timestamp */
igb_tx_hwtstamp(q_vector, tx_buffer); igb_tx_hwtstamp(q_vector, tx_buffer);
#endif /* CONFIG_IGB_PTP */
#endif
/* free the skb */ /* free the skb */
dev_kfree_skb_any(tx_buffer->skb); dev_kfree_skb_any(tx_buffer->skb);
tx_buffer->skb = NULL; tx_buffer->skb = NULL;
...@@ -6033,8 +6040,8 @@ static void igb_rx_hwtstamp(struct igb_q_vector *q_vector, ...@@ -6033,8 +6040,8 @@ static void igb_rx_hwtstamp(struct igb_q_vector *q_vector,
igb_systim_to_hwtstamp(adapter, skb_hwtstamps(skb), regval); igb_systim_to_hwtstamp(adapter, skb_hwtstamps(skb), regval);
} }
#endif /* CONFIG_IGB_PTP */
#endif
static void igb_rx_vlan(struct igb_ring *ring, static void igb_rx_vlan(struct igb_ring *ring,
union e1000_adv_rx_desc *rx_desc, union e1000_adv_rx_desc *rx_desc,
struct sk_buff *skb) struct sk_buff *skb)
...@@ -6147,7 +6154,7 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, int budget) ...@@ -6147,7 +6154,7 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, int budget)
#ifdef CONFIG_IGB_PTP #ifdef CONFIG_IGB_PTP
igb_rx_hwtstamp(q_vector, rx_desc, skb); igb_rx_hwtstamp(q_vector, rx_desc, skb);
#endif #endif /* CONFIG_IGB_PTP */
igb_rx_hash(rx_ring, rx_desc, skb); igb_rx_hash(rx_ring, rx_desc, skb);
igb_rx_checksum(rx_ring, rx_desc, skb); igb_rx_checksum(rx_ring, rx_desc, skb);
igb_rx_vlan(rx_ring, rx_desc, skb); igb_rx_vlan(rx_ring, rx_desc, skb);
...@@ -6340,6 +6347,7 @@ static int igb_mii_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) ...@@ -6340,6 +6347,7 @@ static int igb_mii_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
return 0; return 0;
} }
#ifdef CONFIG_IGB_PTP
/** /**
* igb_hwtstamp_ioctl - control hardware time stamping * igb_hwtstamp_ioctl - control hardware time stamping
* @netdev: * @netdev:
...@@ -6514,6 +6522,7 @@ static int igb_hwtstamp_ioctl(struct net_device *netdev, ...@@ -6514,6 +6522,7 @@ static int igb_hwtstamp_ioctl(struct net_device *netdev,
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ? return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
-EFAULT : 0; -EFAULT : 0;
} }
#endif /* CONFIG_IGB_PTP */
/** /**
* igb_ioctl - * igb_ioctl -
...@@ -6528,8 +6537,10 @@ static int igb_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) ...@@ -6528,8 +6537,10 @@ static int igb_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
case SIOCGMIIREG: case SIOCGMIIREG:
case SIOCSMIIREG: case SIOCSMIIREG:
return igb_mii_ioctl(netdev, ifr, cmd); return igb_mii_ioctl(netdev, ifr, cmd);
#ifdef CONFIG_IGB_PTP
case SIOCSHWTSTAMP: case SIOCSHWTSTAMP:
return igb_hwtstamp_ioctl(netdev, ifr, cmd); return igb_hwtstamp_ioctl(netdev, ifr, cmd);
#endif /* CONFIG_IGB_PTP */
default: default:
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment