On 12/18/2013 05:08 PM, Stefan Assmann wrote: > - add struct ethtool_ts_info > - add struct ethtool_modinfo > - add struct timestamp_event_queue > - add struct ptp_clock > - add ptp_clock_index() > - add patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch > > Signed-off-by: Stefan Assmann <sassmann@xxxxxxxxx> > --- > backport/backport-include/linux/ethtool.h | 48 ++++++++++++++++++++++ > backport/backport-include/linux/ptp_clock_kernel.h | 35 ++++++++++++++++ > backport/compat/compat-3.5.c | 11 +++++ > .../network/82-ethernet/0007-igb_ethtool_ops.patch | 24 +++++++++++ > 4 files changed, 118 insertions(+) > create mode 100644 backport/backport-include/linux/ptp_clock_kernel.h > create mode 100644 patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch > > diff --git a/backport/backport-include/linux/ethtool.h b/backport/backport-include/linux/ethtool.h > index 4f13cb9..38882de 100644 > --- a/backport/backport-include/linux/ethtool.h > +++ b/backport/backport-include/linux/ethtool.h > @@ -42,6 +42,54 @@ static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep) > } > #endif > > +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) > +/* EEPROM Standards for plug in modules */ > +#define ETH_MODULE_SFF_8079 0x1 > +#define ETH_MODULE_SFF_8079_LEN 256 > +#define ETH_MODULE_SFF_8472 0x2 > +#define ETH_MODULE_SFF_8472_LEN 512 > + > +/** > + * struct ethtool_ts_info - holds a device's timestamping and PHC association > + * @cmd: command number = %ETHTOOL_GET_TS_INFO > + * @so_timestamping: bit mask of the sum of the supported SO_TIMESTAMPING flags > + * @phc_index: device index of the associated PHC, or -1 if there is none > + * @tx_types: bit mask of the supported hwtstamp_tx_types enumeration values > + * @rx_filters: bit mask of the supported hwtstamp_rx_filters enumeration values > + * > + * The bits in the 'tx_types' and 'rx_filters' fields correspond to > + * the 'hwtstamp_tx_types' and 'hwtstamp_rx_filters' enumeration values, > + * respectively. For example, if the device supports HWTSTAMP_TX_ON, > + * then (1 << HWTSTAMP_TX_ON) in 'tx_types' will be set. > + */ > +struct ethtool_ts_info { > + __u32 cmd; > + __u32 so_timestamping; > + __s32 phc_index; > + __u32 tx_types; > + __u32 tx_reserved[3]; > + __u32 rx_filters; > + __u32 rx_reserved[3]; > +}; > + > +/** > + * struct ethtool_modinfo - plugin module eeprom information > + * @cmd: %ETHTOOL_GMODULEINFO > + * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx > + * @eeprom_len: Length of the eeprom > + * > + * This structure is used to return the information to > + * properly size memory for a subsequent call to %ETHTOOL_GMODULEEEPROM. > + * The type code indicates the eeprom data format > + */ > +struct ethtool_modinfo { > + __u32 cmd; > + __u32 type; > + __u32 eeprom_len; > + __u32 reserved[8]; > +}; > +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) */ > + > #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) > /** > * struct ethtool_eee - Energy Efficient Ethernet information > diff --git a/backport/backport-include/linux/ptp_clock_kernel.h b/backport/backport-include/linux/ptp_clock_kernel.h > new file mode 100644 > index 0000000..b455517 > --- /dev/null > +++ b/backport/backport-include/linux/ptp_clock_kernel.h > @@ -0,0 +1,35 @@ > +#ifndef __BACKPORT_PTP_CLOCK_KERNEL_H > +#define __BACKPORT_PTP_CLOCK_KERNEL_H > +#include_next <linux/ptp_clock_kernel.h> > + > +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) > +#include <linux/posix-clock.h> > + > +#define PTP_MAX_TIMESTAMPS 128 > +#define PTP_BUF_TIMESTAMPS 30 > + > +struct timestamp_event_queue { > + struct ptp_extts_event buf[PTP_MAX_TIMESTAMPS]; > + int head; > + int tail; > + spinlock_t lock; > +}; > + > +struct ptp_clock { > + struct posix_clock clock; > + struct device *dev; > + struct ptp_clock_info *info; > + dev_t devid; > + int index; /* index into clocks.map */ > + struct pps_device *pps_source; > + long dialed_frequency; /* remembers the frequency adjustment */ > + struct timestamp_event_queue tsevq; /* simple fifo for time stamps */ > + struct mutex tsevq_mux; /* one process at a time reading the fifo */ > + wait_queue_head_t tsev_wq; > + int defunct; /* tells readers to go away when clock is being removed */ > +}; > + > +extern int ptp_clock_index(struct ptp_clock *ptp); > +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) */ > + > +#endif /* __BACKPORT_PTP_CLOCK_KERNEL_H */ > diff --git a/backport/compat/compat-3.5.c b/backport/compat/compat-3.5.c > index 95f52b9..0a4aaba 100644 > --- a/backport/compat/compat-3.5.c > +++ b/backport/compat/compat-3.5.c > @@ -12,6 +12,9 @@ > #include <linux/highuid.h> > #include <linux/ktime.h> > #include <linux/hrtimer.h> > +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) > +#include <linux/ptp_clock_kernel.h> > +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) */ > > #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) > #include <linux/device.h> > @@ -64,3 +67,11 @@ int overflowgid = DEFAULT_OVERFLOWGID; > EXPORT_SYMBOL_GPL(overflowuid); > EXPORT_SYMBOL_GPL(overflowgid); > #endif > + > +#ifdef CONFIG_PTP_1588_CLOCK > +int ptp_clock_index(struct ptp_clock *ptp) > +{ > + return ptp->index; > +} > +EXPORT_SYMBOL(ptp_clock_index); ptp_clock_index() is only used in igb_get_ts_info() which which is never called in kernel < 3.5 because this operation does not exist in ethtool_ops there. Backporting this is not so easy as it looks here, because you added struct ptp_clock here and there is also a version in the kernel, if they differ it could be that this index does not point to the same offset the kernel used as index variable. I would also ifdef the igb_get_ts_info() itself and remove the stuff related to ptp_clock_index(), you are seeing a unused function warning as well. > +#endif /* CONFIG_PTP_1588_CLOCK */ > diff --git a/patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch b/patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch > new file mode 100644 > index 0000000..ff0c95a > --- /dev/null > +++ b/patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch > @@ -0,0 +1,24 @@ > +diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c > +index 43ee8d0..b3c07d1 100644 > +--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c > ++++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c > +@@ -2999,15 +2999,19 @@ static const struct ethtool_ops igb_ethtool_ops = { > + .get_ethtool_stats = igb_get_ethtool_stats, > + .get_coalesce = igb_get_coalesce, > + .set_coalesce = igb_set_coalesce, > ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) > + .get_ts_info = igb_get_ts_info, > ++#endif > + .get_rxnfc = igb_get_rxnfc, > + .set_rxnfc = igb_set_rxnfc, > + #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) > + .get_eee = igb_get_eee, > + .set_eee = igb_set_eee, > + #endif > ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) > + .get_module_info = igb_get_module_info, > + .get_module_eeprom = igb_get_module_eeprom, > ++#endif > + .get_rxfh_indir_size = igb_get_rxfh_indir_size, > + .get_rxfh_indir = igb_get_rxfh_indir, > + .set_rxfh_indir = igb_set_rxfh_indir, > -- To unsubscribe from this list: send the line "unsubscribe backports" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html