ata_host_start(9)
π ata_host_start β the Kernel API Manual page, but make it a group chat
okay so bestie, this page is literally called ata_host_start(9) and it lives in the Kernel API Manual. It's about spinning up an ATA host's ports and then, uh, freezing them?? which sounds mean but it's fine, it's the whole point. Let's go π
β¨ NAME β¨
ata_host_start β start and freeze ports of an ATA host π«Ά
πΈ SYNOPSIS πΈ
int ata_host_start (struct ata_host *host );
π ARGUMENTS π
hostβ the ATA host whose ports we're about to start. This is your host. Be nice to it. π
π¦ DESCRIPTION π¦
Okay so here's the vibe: this function starts the ports of host, and then freezes them. Yes, both. Start, then freeze. That's the whole bit, periodt. π§
The started status gets recorded in host->flags, which is lowkey iconic because it means this function can be called multiple times and it won't freak out. Ports are guaranteed to get started only once β no cap, no double-starting, none of that mess.
And if host->ops isn't initialized yet, it gets set to the first non-dummy port ops. Cute little fallback, love that for it. β¨
LOCKING: inherited from the calling layer β and yes, it may sleep. π΄ So like... don't call it from somewhere spicy, bestie. Respect the sleep.
π₯ RETURN π₯
0β all ports started successfully, we ate, no crumbs π-errnoβ something went sideways, and you get the negative errno to tell you what π«
π SEE ALSO π
First off: the kernel file is ./drivers/ata/libata-core.c. Go say hi. π
Then there's, like, a whole friend group of related calls β each one is (...) with the (9) section suffix, shown here exactly so you can copy-paste them and look like a genius:
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), cable_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_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) π¦π
okay that's the whole page, bestie β good luck out there, hydrate, and remember: start then freeze, 0 or -errno, and it may sleep so act accordingly ππ
signed off with love from ./drivers/ata (the drivers/ata corner of the kernel), dated October 2026, and this gorgeous page is ata_host_start(9) β¨ππ
π¦ 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