tb_switch_nvm_read(9)
πΈ NAME πΈ
tb_switch_nvm_read β bestie, this is the one that reads the router NVM π
(yes, this page lives in the section 9 Kernel API Manual, iykyk)
β¨ SYNOPSIS β¨
int tb_switch_nvm_read (struct tb_switch *sw , unsigned int address ,
void *buf , size_t size );
That's the whole vibe check right there β four args, one int coming back at you π«Ά
π ARGUMENTS π
swβ the router whose NVM you're about to read. like, which router, bestie, be specific πaddressβ the start address on the NVM. where the reading begins, no cap πbufβ the buffer where the read data gets copied. this is where the tea lands βsizeβ size of the buffer, in bytes. please get this right or it's giving chaos π
π¦ DESCRIPTION π¦
okay so here's the whole thing: it reads from the router NVM and hands you back the requested data in buf. that's it, that's the function β¨
π¨ the one thing you cannot skip: locking is up to the caller. the function does not do it for you. not me having to remind you β it literally says so. so lock it yourself, bestie, or it's giving undefined chaos π
π RETURN π
0on success β slay, we ate π- negative
errnootherwise β so if it's negative, something went wrong, and that's your sign π
π§ SEE ALSO π§
the kernel file is ./drivers/thunderbolt/switch.c β go read the source, it's iconic π
the ports & paths girlies:
tb_port_state(9)tb_wait_for_port(9)tb_port_add_nfc_credits(9)tb_port_clear_counter(9)tb_port_unlock(9)tb_port_enable(9)tb_port_disable(9)tb_port_reset(9)tb_port_alloc_in_hopid(9)tb_port_alloc_out_hopid(9)tb_port_release_in_hopid(9)tb_port_release_out_hopid(9)tb_next_port_on_path(9)
link speed / width / lane bonding squad π :
tb_port_get_link_speed(9)tb_port_get_link_generation(9)tb_port_get_link_width(9)tb_port_width_supported(9)tb_port_set_link_width(9)tb_port_set_lane_bonding(9)tb_port_lane_bonding_enable(9)tb_port_lane_bonding_disable(9)tb_port_wait_for_link_width(9)tb_port_update_credits(9)tb_port_is_enabled(9)
usb3 / pci / displayport besties:
tb_usb3_port_is_enabled(9)tb_usb3_port_enable(9)tb_pci_port_is_enabled(9)tb_pci_port_enable(9)tb_dp_port_hpd_is_active(9)tb_dp_port_hpd_clear(9)tb_dp_port_set_hops(9)tb_dp_port_is_enabled(9)tb_dp_port_enable(9)
the switch main characters π:
tb_switch_reset(9)tb_switch_wait_for_bit(9)tb_switch_alloc(9)tb_switch_alloc_safe_mode(9)tb_switch_configure(9)tb_switch_configuration_valid(9)tb_switch_lane_bonding_enable(9)tb_switch_lane_bonding_disable(9)tb_switch_set_link_width(9)tb_switch_configure_link(9)tb_switch_unconfigure_link(9)tb_switch_add(9)tb_switch_remove(9)tb_sw_set_unplugged(9)tb_switch_resume(9)tb_switch_suspend(9)tb_switch_query_dp_resource(9)tb_switch_alloc_dp_resource(9)tb_switch_dealloc_dp_resource(9)tb_switch_find_by_link_depth(9)tb_switch_find_by_uuid(9)tb_switch_find_by_route(9)tb_switch_find_port(9)tb_switch_pcie_l1_enable(9)tb_switch_xhci_connect(9)tb_switch_xhci_disconnect(9)
okay that's the whole page, you're so welcome π this little writeup ships out of the ./drivers/thunderbolt source and it's dated October 2026 β so like, future vibes only, periodt π byeee, go read your NVM responsibly π«Άβ¨
π¦ 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