drivers/s390/block/dasd_int.h
Source file repositories/reference/linux-study-clean/drivers/s390/block/dasd_int.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/s390/block/dasd_int.h- Extension
.h- Size
- 43904 bytes
- Lines
- 1466
- Domain
- Driver Families
- Bucket
- drivers/s390
- Inferred role
- Driver Families: operation-table or driver-model contract
- Status
- pattern implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines an operation table; this is where Linux turns generic core objects into subsystem-specific behavior.
- Touches user memory; correctness depends on fault-safe copying and privilege boundary handling.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/module.hlinux/wait.hlinux/blkdev.hlinux/hdreg.hlinux/interrupt.hlinux/log2.hasm/ccwdev.hlinux/workqueue.hasm/debug.hasm/dasd.hasm/idals.hlinux/bitops.hlinux/blk-mq.h
Detected Declarations
struct dasd_devicestruct dasd_blockstruct dasd_ccw_reqstruct dasd_uidstruct dasd_pprc_headerstruct dasd_pprc_dev_infostruct dasd_pprc_data_sc4struct dasd_copy_entrystruct dasd_copy_relationstruct dasd_disciplinestruct dasd_pathstruct dasd_profile_infostruct dasd_profilestruct dasd_format_entrystruct dasd_devicestruct dasd_blockstruct dasd_attention_datastruct dasd_queuestruct dasd_mchunkenum eer_triggerfunction dasd_path_releasefunction dasd_get_devicefunction dasd_put_devicefunction dasd_init_chunklistfunction dasd_alloc_chunkfunction dasd_free_chunkfunction dasd_check_blocksizefunction dasd_eer_enabledfunction dasd_path_is_operationalfunction dasd_path_need_verifyfunction dasd_path_verifyfunction dasd_path_clear_verifyfunction dasd_path_clear_all_verifyfunction dasd_path_fcsecfunction dasd_path_clear_fcsecfunction dasd_path_need_fcsecfunction dasd_path_clear_all_fcsecfunction dasd_path_operationalfunction dasd_path_nonpreferredfunction dasd_path_is_nonpreferredfunction dasd_path_clear_nonpreferredfunction dasd_path_preferredfunction dasd_path_is_preferredfunction dasd_path_clear_preferredfunction dasd_path_clear_operfunction dasd_path_clear_cablefunction dasd_path_cuirfunction dasd_path_is_cuir
Annotated Snippet
extern struct blk_mq_ops dasd_mq_ops;
extern struct kmem_cache *dasd_page_cache;
struct dasd_ccw_req *
dasd_smalloc_request(int, int, int, struct dasd_device *, struct dasd_ccw_req *);
struct dasd_ccw_req *dasd_fmalloc_request(int, int, int, struct dasd_device *);
void dasd_sfree_request(struct dasd_ccw_req *, struct dasd_device *);
void dasd_ffree_request(struct dasd_ccw_req *, struct dasd_device *);
void dasd_wakeup_cb(struct dasd_ccw_req *, void *);
struct dasd_device *dasd_alloc_device(void);
void dasd_free_device(struct dasd_device *);
struct dasd_block *dasd_alloc_block(void);
void dasd_free_block(struct dasd_block *);
enum blk_eh_timer_return dasd_times_out(struct request *req);
void dasd_enable_device(struct dasd_device *);
void dasd_set_target_state(struct dasd_device *, int);
void dasd_kick_device(struct dasd_device *);
void dasd_reload_device(struct dasd_device *);
void dasd_schedule_requeue(struct dasd_device *);
void dasd_add_request_head(struct dasd_ccw_req *);
void dasd_add_request_tail(struct dasd_ccw_req *);
int dasd_start_IO(struct dasd_ccw_req *);
int dasd_term_IO(struct dasd_ccw_req *);
void dasd_schedule_device_bh(struct dasd_device *);
void dasd_schedule_block_bh(struct dasd_block *);
int dasd_sleep_on(struct dasd_ccw_req *);
int dasd_sleep_on_queue(struct list_head *);
int dasd_sleep_on_immediatly(struct dasd_ccw_req *);
int dasd_sleep_on_queue_interruptible(struct list_head *);
int dasd_sleep_on_interruptible(struct dasd_ccw_req *);
void dasd_device_set_timer(struct dasd_device *, int);
void dasd_device_clear_timer(struct dasd_device *);
void dasd_block_set_timer(struct dasd_block *, int);
void dasd_block_clear_timer(struct dasd_block *);
int dasd_cancel_req(struct dasd_ccw_req *);
int dasd_flush_device_queue(struct dasd_device *);
int dasd_generic_probe(struct ccw_device *);
void dasd_generic_free_discipline(struct dasd_device *);
void dasd_generic_remove (struct ccw_device *cdev);
int dasd_generic_set_online(struct ccw_device *, struct dasd_discipline *);
int dasd_generic_set_offline (struct ccw_device *cdev);
int dasd_generic_notify(struct ccw_device *, int);
int dasd_generic_last_path_gone(struct dasd_device *);
int dasd_generic_path_operational(struct dasd_device *);
void dasd_generic_shutdown(struct ccw_device *);
void dasd_generic_handle_state_change(struct dasd_device *);
enum uc_todo dasd_generic_uc_handler(struct ccw_device *, struct irb *);
void dasd_generic_path_event(struct ccw_device *, int *);
int dasd_generic_verify_path(struct dasd_device *, __u8);
void dasd_generic_space_exhaust(struct dasd_device *, struct dasd_ccw_req *);
void dasd_generic_space_avail(struct dasd_device *);
int dasd_generic_requeue_all_requests(struct dasd_device *);
int dasd_generic_read_dev_chars(struct dasd_device *, int, void *, int);
char *dasd_get_sense(struct irb *);
void dasd_device_set_stop_bits(struct dasd_device *, int);
void dasd_device_remove_stop_bits(struct dasd_device *, int);
int dasd_device_is_ro(struct dasd_device *);
void dasd_profile_reset(struct dasd_profile *);
int dasd_profile_on(struct dasd_profile *);
void dasd_profile_off(struct dasd_profile *);
char *dasd_get_user_string(const char __user *, size_t);
/* externals in dasd_devmap.c */
extern int dasd_max_devindex;
extern int dasd_probeonly;
extern int dasd_autodetect;
extern int dasd_nopav;
extern int dasd_nofcx;
int dasd_devmap_init(void);
void dasd_devmap_exit(void);
struct dasd_device *dasd_create_device(struct ccw_device *);
void dasd_delete_device(struct dasd_device *);
int dasd_get_feature(struct ccw_device *, int);
int dasd_set_feature(struct ccw_device *, int, int);
Annotation
- Immediate include surface: `linux/module.h`, `linux/wait.h`, `linux/blkdev.h`, `linux/hdreg.h`, `linux/interrupt.h`, `linux/log2.h`, `asm/ccwdev.h`, `linux/workqueue.h`.
- Detected declarations: `struct dasd_device`, `struct dasd_block`, `struct dasd_ccw_req`, `struct dasd_uid`, `struct dasd_pprc_header`, `struct dasd_pprc_dev_info`, `struct dasd_pprc_data_sc4`, `struct dasd_copy_entry`, `struct dasd_copy_relation`, `struct dasd_discipline`.
- Atlas domain: Driver Families / drivers/s390.
- Implementation status: pattern implementation candidate.
- This snippet crosses the user/kernel memory boundary; validate fault handling and access checks before translating the pattern.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.