cable_is_40wire(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… cable_is_40wire β€” the Kernel API Manual moment πŸŽ€

okay so bestie, welcome to the cable_is_40wire(9) page, part of the Kernel API Manual ✨ genuinely one of the most niche little functions and honestly? it's giving "small but crucial." let's get into it 🫢


🌸 NAME 🌸

cable_is_40wire β€” the 40/80/SATA decider πŸ’…

like, it literally decides which kind of cable vibe you're dealing with. 40-wire? 80-wire? SATA? she's the one who knows ✨


πŸŽ€ SYNOPSIS πŸŽ€

int cable_is_40wire (struct ata_port *ap );

that's the whole call, no cap πŸ’–


πŸ¦‹ ARGUMENTS πŸ¦‹

  • ap β€” the port to consider πŸ‘€ literally the port we're judging the cable of. that's the whole input, she's low maintenance like that.

🌈 DESCRIPTION 🌈

okay so the whole point of this function is that it encapsulates the policy for speed management in one place β€” one single home for the vibes, instead of the policy being scattered everywhere 😌 iconic organizational behavior tbh.

right now, at the moment, we don't cache the result πŸ™ˆ no memoization, no storing it for later. but bestie, there's a good case for setting ap->cbl to the result when we get called with unknown cables β€” and also for figuring out if that impacts hotplug at all πŸ‘€ so like, that's a maybe-future-glow-up, not a thing it does today. don't come for me.

and the actual answer she gives:

Return 1 if the cable appears to be 40 wire. periodt. that's the return value, that's the whole deal πŸ’€

πŸ’œ SEE ALSO πŸ’œ

the full girlies list, in order, all of them, no skips 🫢:

Kernel file ./drivers/ata/libata-core.c 🌸

ata_link_next(9), ata_dev_next(9), ata_dev_phys_link(9), ata_force_cbl(9), ata_force_pflags(9), ata_force_link_limits(9), ata_force_xfermask(9), ata_force_quirks(9), atapi_cmd_type(9), ata_set_rwcmd_protocol(9), ata_tf_read_block(9), ata_build_rw_tf(9), ata_pack_xfermask(9), ata_unpack_xfermask(9), ata_xfer_mask2mode(9), ata_xfer_mode2mask(9), ata_xfer_mode2shift(9), ata_mode_string(9), ata_dev_classify(9), ata_id_string(9), ata_id_c_string(9), ata_read_native_max_address(9), ata_set_max_sectors(9), ata_hpa_resize(9), ata_dump_id(9), ata_id_xfermask(9), ata_exec_internal(9), ata_pio_need_iordy(9), ata_pio_mask_no_iordy(9), ata_do_dev_read_id(9), ata_dev_read_id(9), ata_dev_power_set_standby(9), ata_dev_power_set_active(9), ata_read_log_page(9), ata_dev_configure(9), ata_cable_40wire(9), ata_cable_80wire(9), ata_cable_unknown(9), ata_cable_ignore(9), ata_cable_sata(9), sata_print_link_status(9), ata_dev_pair(9), ata_timing_cycle2mode(9), ata_down_xfermask_limit(9), ata_set_mode(9), ata_wait_ready(9), ata_wait_after_reset(9), ata_std_prereset(9), ata_std_postreset(9), ata_dev_same_device(9), ata_dev_reread_id(9), ata_dev_revalidate(9), ata_is_40wire(9), ata_dev_xfermask(9), ata_dev_set_xfermode(9), ata_dev_set_feature(9), ata_dev_init_params(9), atapi_check_dma(9), ata_std_qc_defer(9), ata_sg_init(9), ata_sg_clean(9), ata_sg_setup(9), swap_buf_le16(9), ata_qc_free(9), ata_qc_complete(9), ata_qc_get_active(9), ata_qc_issue(9), ata_phys_link_online(9), ata_phys_link_offline(9), ata_link_online(9), ata_link_offline(9), ata_host_suspend(9), ata_host_resume(9), ata_dev_init(9), ata_link_init(9), sata_link_init_spd(9), ata_port_alloc(9), ata_host_alloc(9), ata_host_alloc_pinfo(9), ata_finalize_port_ops(9), ata_host_start(9), ata_host_init(9), ata_host_register(9), ata_host_activate(9), ata_dev_free_resources(9), ata_port_detach(9), ata_host_detach(9), ata_pci_remove_one(9), ata_platform_remove_one(9), ata_msleep(9), ata_wait_register(9)

like, that's the whole extended family reunion right there 😭 every single one, accounted for πŸ’…


okay and for the cute sign-off: this page lives in ./drivers/ata, dated October 2026, and yes she's filed under cable_is_40wire(9) because main character energy means the page is named after herself πŸ‘‘βœ¨

love that for her. go check your cables bestie πŸŒΈπŸ¦‹πŸŽ€

πŸ“¦ where this page comes from