fdt_supernod...depth_offset(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– fdt_supernod...depth_offset(9) β€” Kernel API Manual πŸ’–

okay so bestie, we're doing fdt_supernode_atdepth_offset today. it's from the Kernel API Manual, section (9), and it's genuinely one of those "walk up the family tree" functions. no cap, it's giving ancestry.com but for device tree nodes. 🌳


✨ NAME ✨

fdt_supernode_atdepth_offset β€” find a specific ancestor of a node πŸ‘‘


πŸŽ€ SYNOPSIS πŸŽ€

int fdt_supernode_atdepth_offset (const void *fdt , int nodeoffset ,
                                  int supernodedepth , int *nodedepth );

πŸ¦‹ ARGUMENTS πŸ¦‹

  • fdt β€” pointer to the device tree blob. the whole vibe. the main character.
  • nodeoffset β€” offset of the node whose parent to find. like, whose ancestor are we hunting, bestie?
  • supernodedepth β€” depth of the ancestor to find. you're picking which level of the family tree you want. 🧬
  • nodedepth β€” pointer to an integer variable (will be overwritten) or NULL. heads up: she will get overwritten, that's literally the whole point. πŸ™ˆ

🌸 DESCRIPTION 🌸

so fdt_supernode_atdepth_offset finds an ancestor of the given node at a specific depth from the root β€” and like, the root itself has depth 0, its immediate subnodes depth 1, and so forth, all the way down. it's a whole staircase of ancestors. πŸͺœ

the way that means this works:

fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, NULL);

will always return 0, the offset of the root node. always. every single time. iconic behavior tbh. πŸ‘‘

and if the node at nodeoffset has depth D, then:

fdt_supernode_atdepth_offset(fdt, nodeoffset, D, NULL);

will return nodeoffset itself. she found herself, honestly relatable. πŸ’…


πŸ’€ NOTE πŸ’€

this function is expensive, bestie. 😭 it must scan the device tree structure from the start to nodeoffset. no shortcuts, no vibes-based caching, just a full walk from the top every time. use it mindfully, fr fr.

πŸ”₯ RETURN πŸ”₯

on success, you get the structure block offset of the node at node offset's ancestor of depth supernodedepth (>=0). slay. ✨

but listen, things can go sideways:

  • -FDT_ERR_BADOFFSET β€” nodeoffset does not refer to a BEGIN_NODE tag. wrong tag, wrong vibe. πŸ’€
  • -FDT_ERR_NOTFOUND β€” supernodedepth was greater than the depth of nodeoffset. you asked for an ancestor that literally does not exist up there. 😭
  • -FDT_ERR_BADMAGIC β€” standard meaning
  • -FDT_ERR_BADVERSION β€” standard meaning
  • -FDT_ERR_BADSTATE β€” standard meaning
  • -FDT_ERR_BADSTRUCTURE β€” standard meaning

🌈 SEE ALSO 🌈

Kernel file ./scripts/dtc/libfdt/libfdt.h β€” and honestly bestie, the whole libfdt friend group showed up to the group chat:

fdt_offset_ptr(9), fdt_next_tag(9), fdt_first_subnode(9), fdt_next_subnode(9), fdt_for_each_subnode(9), fdt_header_size(9), fdt_header_size_(9), fdt_check_header(9), fdt_move(9), fdt_check_full(9), fdt_get_string(9), fdt_string(9), fdt_find_max_phandle(9), fdt_get_max_phandle(9), fdt_generate_phandle(9), fdt_num_mem_rsv(9), fdt_get_mem_rsv(9), fdt_subnode_offset_namelen(9), fdt_subnode_offset(9), fdt_path_offset_namelen(9), fdt_path_offset(9), fdt_get_name(9), fdt_first_property_offset(9), fdt_next_property_offset(9), fdt_for_each_property_offset(9), fdt_get_property_by_offset(9), fdt_get_property_namelen(9), fdt_get_property(9), fdt_getprop_by_offset(9), fdt_getprop_namelen(9), fdt_getprop(9), fdt_get_phandle(9), fdt_get_alias_namelen(9), fdt_get_alias(9), fdt_get_symbol_namelen(9), fdt_get_symbol(9), fdt_get_path(9), fdt_node_depth(9), fdt_parent_offset(9), fdt_node_offset_by_prop_value(9), fdt_node_offset_by_phandle(9), fdt_node_check_compatible(9), fdt_node_offset_by_compatible(9), fdt_stringlist_contains(9), fdt_stringlist_count(9), fdt_stringlist_search(9), fdt_stringlist_get(9), FDT_MAX_NCELLS(9), fdt_address_cells(9), fdt_size_cells(9), fdt_setprop_inplace_namelen_partial(9), fdt_setprop_inplace(9), fdt_setprop_inplace_u32(9), fdt_setprop_inplace_u64(9), fdt_setprop_inplace_cell(9), fdt_nop_property(9), fdt_nop_node(9), fdt_create_with_flags(9), fdt_create(9), fdt_resize(9), fdt_add_reservemap_entry(9), fdt_finish_reservemap(9), fdt_begin_node(9), fdt_property(9), fdt_property_placeholder(9), fdt_end_node(9), fdt_finish(9), fdt_create_empty_tree(9), fdt_open_into(9), fdt_pack(9), fdt_add_mem_rsv(9), fdt_del_mem_rsv(9), fdt_set_name(9), fdt_setprop_namelen(9), fdt_setprop(9), fdt_setprop_placeholder_namelen(9), fdt_setprop_placeholder(9), fdt_setprop_u32(9), fdt_setprop_u64(9), fdt_setprop_cell(9), fdt_setprop_string(9), fdt_setprop_namelen_string(9), fdt_setprop_empty(9), fdt_appendprop(9), fdt_appendprop_u32(9), fdt_appendprop_u64(9), fdt_appendprop_cell(9), fdt_appendprop_string(9), fdt_appendprop_addrrange(9), fdt_delprop(9), fdt_add_subnode_namelen(9), fdt_add_subnode(9), fdt_del_node(9), fdt_overlay_apply(9), fdt_overlay_target_offset(9), fdt_strerror(9)


and that's the whole page, bestie!! 🫢 sourced straight from ./scripts/dtc/libfdt, dated October 2026, and yes the title up top really is fdt_supernod...depth_offset(9) β€” they truncated it, not me. πŸ’…βœ¨

πŸ“¦ where this page comes from