tb_switch_add(9)
π tb_switch_add(9) β Kernel API Manual β¨
okay so bestie, this one's a kernel API page for tb_switch_add, straight out of the Thunderbolt corner of the kernel. it's giving "final boss of switch setup" energy and honestly? iconic. let's get into it π«Ά
πΈ NAME πΈ
tb_switch_add β add a switch to the domain π
β¨ SYNOPSIS β¨
int tb_switch_add (struct tb_switch *sw );
π ARGUMENTS π
swβ the switch you're adding. like, the actual switch. that one. π
π¦ DESCRIPTION π¦
so this is the last step in adding a switch to the domain β the main character moment, the finale, the "and finallyβ¦" of the whole operation. π
what it does: it reads identification information from DROM (yes, DROM, not drama β though there is a little of that) and initializes ports so they can be used to connect other switches. so basically it's setting up the ports' whole social life so they can network with other switches. no cap. π₯
once this function successfully returns, the switch gets exposed to the userspace β it's out there, living its best life, visible to everyone. π
heads up bestie: when you're done and you wanna remove and release the switch, you call tb_switch_remove. don't just ghost it, okay? π
β RETURN β
0on success π- a negative errno otherwise π
that's it. zero is the slay outcome, negative means something went sideways, fr fr.
π SEE ALSO π
Kernel file ./drivers/thunderbolt/switch.c, plus literally the entire extended friend group of Thunderbolt functions β every single one, no skips, because we don't do that here:
tb_switch_nvm_read(9)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)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)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)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_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)
and that's the whole page, bestie π§ this lil drop came from the kernel source at ./drivers/thunderbolt, dated October 2026, and it's tb_switch_add(9) all the way down. go forth and add your switches π
π¦ 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