82574 GbE网卡的硬件时间戳功能需要初始化,Tx与Rx部分略有不同,大致流程如下,只要把寄存器置好,就可以拿回想要的时间戳啦:
- HW TX
- The EXTCMD:TS bit is enable according to datasheet 7.2.10.1 & 7.2.10.1.5.
- Enable TX timestamp TSYNCTXCTL.
- HW RX
- Set RXCFGL to 0x0800(IPV4) or 0x88F7 (ieee1588 ethertype), V2 messageID set to 0x0(SYNC packet)
- Set RXUDP to 0x013F (port 319)
- Config TIMINCA
- Config SYSTIMH & SYSTIML
- Enable TSYNCRXCTL and select mode
- Send SYNC packet from ieee1588 devices
- Watchdog query TSYNCRXCTL bit 0, if bit became 1b, then queries RXSTMPH/RXSTMPL/RXSATRL/RXSATRH.
注:RX中第3、4步很关键,可以放在网卡probe函数里做,2.6.31内核igb驱动(82575、82576)的代码其实已经写的很清楚了,这些步骤是对代码的一个总结而已,e1000e(82574)的驱动可以完全参照igb驱动的代码写,部分寄存器地址不一致调整一下就可以了