ccw_device_start(9)
π ccw_device_start β start a s390 channel program
okay so this is a page from the Kernel API Manual, and it's all about ccw_device_start, the function that kicks off a channel program on s390. stay with me bestie, it's actually iconic once you get it π
β¨ SYNOPSIS β¨
int ccw_device_start (struct ccw_device *cdev , struct ccw1 *cpa ,
unsigned long intparm , __u8 lpm , unsigned long flags );
that's the whole signature, no cap. now let's meet the arguments π
πΈ ARGUMENTS πΈ
cdevβ the target ccw device. like, the device you're talking to.cpaβ the logical start address of the channel program. this is where your program lives in the address space πΊοΈintparmβ a user specific interruption parameter. it gets presented back tocdev's interrupt handler, which is literally how a device driver associates an interrupt with a particular I/O request. so thoughtful of it π«Άlpmβ defines the channel path to be used for a specific I/O request. a value of0will make cio use theopm.flagsβ additional flags. defines the action to be performed for I/O processing.
π₯ DESCRIPTION π₯
Start a S/390 channel program. that's the whole vibe.
when the interrupt arrives, the IRQ handler is called β and here's the tea, it can be called in one of three ways:
- immediately,
- delayed (that's when dev-end is missing, or sense is required),
- or never (when there's no IRQ handler registered at all π).
the interruption handler will echo back the intparm you specified here β unless another interruption parameter is specified by a subsequent invocation of ccw_device_halt or ccw_device_clear. so like, if you call those afterwards, the echo changes. noted π
β RETURN β
0β the operation was successful π slay-EBUSYβ the device is busy, or status pending-EACCESβ no path specified inlpmis operational-ENODEVβ the device is not operational
π¦ CONTEXT π¦
Interrupts disabled, ccw device lock held. like, don't even think about calling this without holding the lock, bestie π
π SEE ALSO π
the kernel file, right here:
Kernel file ./drivers/s390/cio/device_ops.c
and the whole friend group of related calls, all of them, no one left out π«Ά
ccw_device_set_options_mask(9),ccw_device_set_options(9),ccw_device_clear_options(9)ccw_device_is_pathgroup(9),ccw_device_is_multipath(9)ccw_device_clear(9),ccw_device_halt(9),ccw_device_resume(9)ccw_device_start_timeout_key(9),ccw_device_start_key(9),ccw_device_start_timeout(9)ccw_device_get_ciw(9),ccw_device_get_path_mask(9),ccw_device_get_chp_desc(9),ccw_device_get_util_str(9),ccw_device_get_id(9)ccw_device_tm_start_timeout_key(9),ccw_device_tm_start_key(9),ccw_device_tm_start(9),ccw_device_tm_start_timeout(9),ccw_device_tm_intrg(9)ccw_device_get_mdc(9),ccw_device_get_schid(9),ccw_device_pnso(9)ccw_device_get_cssid(9),ccw_device_get_iid(9),ccw_device_get_chpid(9),ccw_device_get_chid(9)
that's the whole page, periodt. this one lives in ./drivers/s390/cio and the date on it is October 2026 β so yeah, mark your calendar bestie, and go start some channel programs π§π
π¦ 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