[PATCH v2 14/14] net/idpf: add support for timestamp offload
Andrew Rybchenko
andrew.rybchenko at oktetlabs.ru
Mon Oct 3 16:22:16 CEST 2022
On 9/5/22 13:58, Junfeng Guo wrote:
> Add support for timestamp offload.
>
> Signed-off-by: Wenjing Qiao <wenjing.qiao at intel.com>
> Signed-off-by: Junfeng Guo <junfeng.guo at intel.com>
[snip]
> +/* Helper function to convert a 32b nanoseconds timestamp to 64b. */
> +static inline uint64_t
> +idpf_tstamp_convert_32b_64b(struct iecm_hw *hw, struct idpf_adapter *ad,
> + uint32_t flag, uint32_t in_timestamp)
> +{
> +/* TODO: timestamp for ACC */
> +#ifdef RTE_ARCH_ARM64
> + return 0;
> +#endif /* RTE_ARCH_ARM64 */
> +
> +#ifdef RTE_ARCH_X86_64
> + const uint64_t mask = 0xFFFFFFFF;
> + uint32_t hi, lo, lo2, delta;
> + uint64_t ns;
> +
> + if (flag) {
> + IECM_WRITE_REG(hw, GLTSYN_CMD_SYNC_0_0, PF_GLTSYN_CMD_SYNC_SHTIME_EN_M);
> + IECM_WRITE_REG(hw, GLTSYN_CMD_SYNC_0_0, PF_GLTSYN_CMD_SYNC_EXEC_CMD_M |
> + PF_GLTSYN_CMD_SYNC_SHTIME_EN_M);
> + lo = IECM_READ_REG(hw, PF_GLTSYN_SHTIME_L_0);
> + hi = IECM_READ_REG(hw, PF_GLTSYN_SHTIME_H_0);
> + /*
> + * On typical system, the delta between lo and lo2 is ~1000ns,
> + * so 10000 seems a large-enough but not overly-big guard band.
> + */
> + if (lo > (UINT32_MAX - IDPF_TIMESYNC_REG_WRAP_GUARD_BAND))
> + lo2 = IECM_READ_REG(hw, PF_GLTSYN_SHTIME_L_0);
> + else
> + lo2 = lo;
> +
> + if (lo2 < lo) {
> + lo = IECM_READ_REG(hw, PF_GLTSYN_SHTIME_L_0);
> + hi = IECM_READ_REG(hw, PF_GLTSYN_SHTIME_H_0);
> + }
> +
> + ad->time_hw = ((uint64_t)hi << 32) | lo;
> + }
> +
> + delta = (in_timestamp - (uint32_t)(ad->time_hw & mask));
> + if (delta > (mask / 2)) {
> + delta = ((uint32_t)(ad->time_hw & mask) - in_timestamp);
> + ns = ad->time_hw - delta;
> + } else {
> + ns = ad->time_hw + delta;
> + }
> +
> + return ns;
> +#endif /* RTE_ARCH_X86_64 */
Conditional compilation is rather strange above.
Will it break build on some architectures?
Non-x86-64 and non-ARM64.
> +}
>
> +#endif /* _IDPF_RXTX_H_ */
More information about the dev
mailing list