kernel-fxtec-pro1x/drivers/net/ethernet/sfc
Laurence Evans c939a31645 sfc: PTP changes to support improved UUID filtering mode
There is a long-standing problem with the packet-timestamp matching in
the driver. When a PTP packet is received by the MC, the FPGA
timestamps the packet and the MC sends the timestamp and 6 bytes of
the UUID to the driver. The driver then matches the timestamp against
received packets using the same 6 bytes of UUID.

The problem comes from the choice of which 6 bytes to use. The PTP
spec is slightly contradictory and misleading in one of the two places
where the UUIDs are discussed. From section 7.2.2.2 of the spec, a
PTPD2 UUID can be either a EUI-64 or a EUI-64 constructed from a
EUI-48. The typical ethernet based implementation uses a EUI-64
constructed from a EUI-48. This works by taking the first 3 bytes of
the MAC address of the NIC being used for PTP (the OUI), then
inserting 0xFF, 0xFE, then taking the last 3 bytes of the MAC address
giving
          MAC[0], MAC[1], MAC[2], 0xFF, 0xFE, MAC[3], MAC[4], MAC[5]
The current MC firmware and driver discard the first two bytes of this
UUID and packets are matched against timestamps using bytes 2 to 7 so
there is a small risk that in a deployment of Solarflare PTP NICs used
with other vendors NICs, that a PTP packet could be matched against
the wrong timestamp. This applies to all other organisations whose
third byte of the OUI is 0x53. It's a long list but I notice that it
includes Cisco.

The necessary modifications to use bytes 0-2 and 5-7 of the UUID to
match against are quite small but introduce incompatibility between
older version of the firmware and driver.

When PTP is enabled via SO_TIMESTAMPING specifying PTP V2, the driver
will try to enable PTP in the firmware using the enhanced mode
(above). If the firmware returns an error, the driver will enable PTP
in the firmware using the old mode.

[bwh: Fix some style errors; remove private ioctl bits]
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
2013-03-07 20:21:55 +00:00
..
bitfield.h sfc: Add parentheses around use of bitfield macro arguments 2012-10-02 01:58:39 +01:00
efx.c sfc: Detach net device when stopping queues for reconfiguration 2013-02-26 15:00:46 +00:00
efx.h sfc: Disable soft interrupt handling during efx_device_detach_sync() 2013-03-06 17:57:24 +00:00
enum.h sfc: Correct some comments on enum reset_type 2012-07-17 16:12:35 +01:00
ethtool.c sfc: Fix byte order warnings for ethtool RX filter interface 2012-12-01 00:26:06 +00:00
falcon.c sfc: Really disable flow control while flushing 2012-12-01 00:26:09 +00:00
falcon_boards.c sfc: Change state names to be clearer, and comment them 2012-08-24 20:10:18 +01:00
falcon_xmac.c sfc: Fix interface statistics running backward 2012-07-17 16:12:34 +01:00
filter.c sfc: Fix the reported priorities of different filter types 2012-10-02 01:58:42 +01:00
filter.h sfc: Remove EFX_FILTER_FLAG_RX_OVERRIDE_IP 2012-10-02 01:58:41 +01:00
io.h sfc: Remove confusing MMIO functions 2012-12-01 00:26:11 +00:00
Kconfig net: Remove bogus dependencies on INET 2012-11-19 19:13:59 -05:00
Makefile ptp: Enable clock drivers along with associated net/PHY drivers 2012-11-01 11:35:18 -04:00
mcdi.c sfc: Fix timekeeping in efx_mcdi_poll() 2012-12-01 02:37:36 +00:00
mcdi.h sfc: Fix MCDI structure field lookup 2012-10-02 01:58:40 +01:00
mcdi_mac.c sfc: Add SR-IOV back-end support for SFC9000 family 2012-02-16 00:25:13 +00:00
mcdi_mon.c sfc: initialize dynamic sysfs attributes for lockdep 2012-07-19 10:48:08 -07:00
mcdi_pcol.h sfc: PTP changes to support improved UUID filtering mode 2013-03-07 20:21:55 +00:00
mcdi_phy.c sfc: Added support for new ethtool APIs for obtaining module eeprom 2012-05-10 03:10:46 +01:00
mdio_10g.c sfc: Fix some formatting errors reported by checkpatch 2012-01-05 18:44:49 +00:00
mdio_10g.h
mtd.c sfc: Expose FPGA bitfile partition through MTD 2012-09-19 02:56:24 +01:00
net_driver.h sfc: Allow efx_channel_type::receive_skb() to reject a packet 2013-03-07 20:21:54 +00:00
nic.c sfc: Work-around flush timeout when flushes have completed 2012-12-01 02:37:27 +00:00
nic.h sfc: Really disable flow control while flushing 2012-12-01 00:26:09 +00:00
phy.h
ptp.c sfc: PTP changes to support improved UUID filtering mode 2013-03-07 20:21:55 +00:00
qt202x_phy.c sfc: Implement module EEPROM access for SFE4002 and SFN4112F 2012-05-10 03:10:54 +01:00
regs.h sfc: Correct MAC filter bitfield definitions 2012-02-16 00:11:31 +00:00
rx.c sfc: Allow efx_channel_type::receive_skb() to reject a packet 2013-03-07 20:21:54 +00:00
selftest.c sfc: lock TX queues when calling netif_device_detach() 2012-12-01 02:37:35 +00:00
selftest.h sfc: Run event/IRQ self-test asynchronously when interface is brought up 2012-03-06 18:14:15 +00:00
siena.c sfc: Correctly initialise reset_method in siena_test_chip() 2012-12-01 01:55:27 +00:00
siena_sriov.c sfc: Remove confusing MMIO functions 2012-12-01 00:26:11 +00:00
spi.h sfc: Fix some formatting errors reported by checkpatch 2012-01-05 18:44:49 +00:00
tenxpress.c sfc: Fix some formatting errors reported by checkpatch 2012-01-05 18:44:49 +00:00
tx.c sfc: Add support for IEEE-1588 PTP 2012-09-19 02:54:12 +01:00
txc43128_phy.c sfc: Const-qualify static data as appropriate, partly prompted by checkpatch 2012-01-09 17:08:13 +00:00
vfdi.h sfc: Specify that the VFDI status page has page alignment and size 2012-02-22 20:48:07 +00:00
workarounds.h