STRUCT DPNI_SINGLE_STEP_CFG(9)
π struct dpni_single_step_cfg(9) β the Kernel API Manual, bestie edition π°οΈβ¨
Okay so this is a page from the Kernel API Manual (section 9, the kernel-API girlies know π), and it's all about struct dpni_single_step_cfg β literally the struct you use to configure single step PTP, which is IEEE 1588. Clock girlies, this one's for you π
β¨ SYNOPSIS β¨
Here's the whole struct, exactly as it lives, no cap:
struct dpni_single_step_cfg {
u8 en;
u8 ch_update;
u16 offset;
u32 peer_delay;
u32 ptp_onestep_reg_base;
};
π¦ Members π¦
Let's meet the cast, one field at a time β every single one of them matters, so no skipping π
enβ turns single step PTP on. But listen: when it's enabled, the PTPv1 functionality will not work, so that's a whole trade-off bestie π. And if this field is zero? Thenoffsetandch_updatejust get ignored, like they weren't even invited to the party πch_updateβ when this is set, the UDP checksum gets updated inside the packet. That's it, that's the vibe β¨offsetβ the start offset from the beginning of the frame where the timestamp field is found. It's giving "where's the timestamp" scavenger hunt π. The offset must respect all MAC headers, VLAN tags and other protocol headers β like, all of them, don't skip any or it gets mad π€peer_delayβ for peer-to-peer transparent clocks, you add this value to the correction field in addition to the transient time update. And the value expresses nanoseconds β±οΈ (nano girlies, precision icons π )ptp_onestep_reg_baseβ the 1588 SINGLE_STEP register base address π. This address is used to update directly the register contents, and here's the important bit: the user has to create an address mapping for it π₯. You don't get it for free, you gotta set it up yourself fr fr.
π SEE ALSO π
Kernel file: ./drivers/net/ethernet/freescale/dpaa2/dpni.h π
And the whole friend group, in order, all of them, because we don't leave anyone out π«Ά:
DPNI_MAX_TC(9), DPNI_MAX_DPBP(9), DPNI_ALL_TCS(9), DPNI_ALL_TC_FLOWS(9), DPNI_NEW_FLOW_ID(9), DPNI_OPT_TX_FRM_RELEASE(9), DPNI_OPT_NO_MAC_FILTER(9), DPNI_OPT_HAS_POLICING(9), DPNI_OPT_SHARED_CONGESTION(9), DPNI_OPT_HAS_KEY_MASKING(9), DPNI_OPT_NO_FS(9), DPNI_OPT_SHARED_FS(9), struct dpni_pools_cfg(9), struct dpni_attr(9), DPNI_ERROR_EOFHE(9), DPNI_ERROR_FLE(9), DPNI_ERROR_FPE(9), DPNI_ERROR_PHE(9), DPNI_ERROR_L3CE(9), DPNI_ERROR_L4CE(9), enum dpni_error_action(9), struct dpni_error_cfg(9), DPNI_BUF_LAYOUT_OPT_TIMESTAMP(9), DPNI_BUF_LAYOUT_OPT_PARSER_RESULT(9), DPNI_BUF_LAYOUT_OPT_FRAME_STATUS(9), DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE(9), DPNI_BUF_LAYOUT_OPT_DATA_ALIGN(9), DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM(9), DPNI_BUF_LAYOUT_OPT_DATA_TAIL_ROOM(9), struct dpni_buffer_layout(9), enum dpni_queue_type(9), enum dpni_offload(9), union dpni_statistics(9), struct dpni_link_cfg(9), struct dpni_link_state(9), enum dpni_dist_mode(9), enum dpni_fs_miss_action(9), struct dpni_fs_tbl_cfg(9), struct dpni_rx_tc_dist_cfg(9), DPNI_FS_MISS_DROP(9), struct dpni_rx_dist_cfg(9), struct dpni_qos_tbl_cfg(9), enum dpni_dest(9), struct dpni_queue(9), struct dpni_queue_id(9), enum dpni_congestion_unit(9), enum dpni_congestion_point(9), struct dpni_dest_cfg(9), DPNI_CONG_OPT_FLOW_CONTROL(9), struct dpni_congestion_notification_cfg(9), struct dpni_taildrop(9), struct dpni_rule_cfg(9), DPNI_FS_OPT_DISCARD(9), DPNI_FS_OPT_SET_FLC(9), DPNI_FS_OPT_SET_STASH_CONTROL(9), struct dpni_fs_action_cfg(9), struct dpni_tx_shaping_cfg(9)
π oh and a lil heads up: that SEE ALSO list is long long, but every single one of those pages is real and you should not skip them, iykyk
Okay bye besties!! π This page comes from ./drivers/net/ethernet/freesca... and it's dated October 2026, and the footer is literally just struct dpni_single_step_cfg(9) again β so consider this your cute sign-off, drink some water, and go configure your single step PTP ππ§πΈ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms