drivers/scsi/sd.h

Source file repositories/reference/linux-study-clean/drivers/scsi/sd.h

File Facts

System
Linux kernel
Corpus path
drivers/scsi/sd.h
Extension
.h
Size
7495 bytes
Lines
279
Domain
Driver Families
Bucket
drivers/scsi
Inferred role
Driver Families: implementation source
Status
source 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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct zoned_disk_info {
	u32		nr_zones;
	u32		zone_blocks;
};

struct scsi_disk {
	struct scsi_device *device;

	/*
	 * disk_dev is used to show attributes in /sys/class/scsi_disk/,
	 * but otherwise not really needed.  Do not use for refcounting.
	 */
	struct device	disk_dev;
	struct gendisk	*disk;
	struct opal_dev *opal_dev;
#ifdef CONFIG_BLK_DEV_ZONED
	/* Updated during revalidation before the gendisk capacity is known. */
	struct zoned_disk_info	early_zone_info;
	/* Updated during revalidation after the gendisk capacity is known. */
	struct zoned_disk_info	zone_info;
	u32		zones_optimal_open;
	u32		zones_optimal_nonseq;
	u32		zones_max_open;
	/*
	 * Either zero or a power of two. If not zero it means that the offset
	 * between zone starting LBAs is constant.
	 */
	u32		zone_starting_lba_gran;
#endif
	atomic_t	openers;
	sector_t	capacity;	/* size in logical blocks */
	int		max_retries;
	u32		min_xfer_blocks;
	u32		max_xfer_blocks;
	u32		opt_xfer_blocks;
	u32		max_ws_blocks;
	u32		max_unmap_blocks;
	u32		unmap_granularity;
	u32		unmap_alignment;

	u32		max_atomic;
	u32		atomic_alignment;
	u32		atomic_granularity;
	u32		max_atomic_with_boundary;
	u32		max_atomic_boundary;

	u32		index;
	unsigned int	physical_block_size;
	unsigned int	max_medium_access_timeouts;
	unsigned int	medium_access_timed_out;
			/* number of permanent streams */
	u16		permanent_stream_count;
	u8		media_present;
	u8		write_prot;
	u8		protection_type;/* Data Integrity Field */
	u8		provisioning_mode;
	u8		zeroing_mode;
	u8		nr_actuators;		/* Number of actuators */
	bool		suspended;	/* Disk is suspended (stopped) */
	unsigned	ATO : 1;	/* state of disk ATO bit */
	unsigned	cache_override : 1; /* temp override of WCE,RCD */
	unsigned	WCE : 1;	/* state of disk WCE bit */
	unsigned	RCD : 1;	/* state of disk RCD bit, unused */
	unsigned	DPOFUA : 1;	/* state of disk DPOFUA bit */
	unsigned	first_scan : 1;
	unsigned	lbpme : 1;
	unsigned	lbprz : 1;
	unsigned	lbpu : 1;
	unsigned	lbpws : 1;
	unsigned	lbpws10 : 1;
	unsigned	lbpvpd : 1;
	unsigned	ws10 : 1;
	unsigned	ws16 : 1;
	unsigned	rc_basis: 2;
	unsigned	zoned: 2;
	unsigned	urswrz : 1;
	unsigned	security : 1;
	unsigned	ignore_medium_access_errors : 1;
	unsigned	rscs : 1; /* reduced stream control support */
	unsigned	use_atomic_write_boundary : 1;
};
#define to_scsi_disk(obj) container_of(obj, struct scsi_disk, disk_dev)

static inline struct scsi_disk *scsi_disk(struct gendisk *disk)
{
	return disk->private_data;
}

#define sd_printk(prefix, sdsk, fmt, a...)				\
        (sdsk)->disk ?							\

Annotation

Implementation Notes