ata_unpack_xfermask(9)
π ata_unpack_xfermask(9) β the Kernel API Manual, but make it make sense
okay so bestie, we're in the Kernel API Manual today and the star of the show is ata_unpack_xfermask(9). she's a tiny little helper living in ./drivers/ata/libata-core.c and honestly? she ate. let's get into it π
β¨ NAME β¨
ata_unpack_xfermask β Unpack xfer_mask into pio, mwdma and udma masks
like literally, that's the whole job. one mask goes in, three masks come out. slay.
πΈ SYNOPSIS πΈ
void ata_unpack_xfermask (unsigned int xfer_mask , unsigned int
*pio_mask , unsigned int *mwdma_mask , unsigned int *udma_mask );
no cap, she returns void β this function does not hand you anything back. the results just land in your pointers. main character behavior tbh π
π¦ ARGUMENTS π¦
xfer_maskβ the xfer_mask you're unpacking. this is the one getting taken apart, bestie.pio_maskβ the resulting pio_mask lands here π«Άmwdma_maskβ the resulting mwdma_mask goes here β¨udma_maskβ and the resulting udma_mask goes here π
π DESCRIPTION π
okay so here's the vibe: ata_unpack_xfermask unpacks xfer_mask into pio_mask, mwdma_mask and udma_mask. that's it, that's the whole thing, and she does it flawlessly π₯
and the iconique little detail? any NULL destination masks are just... ignored. not mad about it, not throwing an error, just π§ minding her own business. so if you only care about one or two of the three, pass NULL for the rest and she literally does not care. periodt.
π SEE ALSO π
Kernel file ./drivers/ata/libata-core.c β and here's the whole friend group, fr fr (yes, all of them, we're not skipping anyone):
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)β her opposite-number bestie, the one who packs it back up π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_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)
bestie note: there's no exit status, no signals, no env vars, no bugs section here β this page is short and sweet, and honestly? we respect the minimalism π
and that's the whole page π sourced from ./drivers/ata, October 2026, version ata_unpack_xfermask(9) β ily, go unpack some masks, mwah πβ¨π¦
π¦ 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