#ifndef _LINUX_VIRTIO_BLK_H #define _LINUX_VIRTIO_BLK_H /* This header is BSD licensed so anyone can use the definitions to implement *compatibledrivers/servers. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: *1.Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. *2.Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. *3.NeitherthenameofIBMnorthenamesofitscontributors *maybeusedtoendorseorpromoteproductsderivedfromthissoftware *withoutspecificpriorwrittenpermission. *THISSOFTWAREISPROVIDEDBYTHECOPYRIGHTHOLDERSANDCONTRIBUTORS``ASIS''AND *ANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO,THE *IMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULARPURPOSE *AREDISCLAIMED.INNOEVENTSHALLIBMORCONTRIBUTORSBELIABLE *FORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL,EXEMPLARY,ORCONSEQUENTIAL *DAMAGES(INCLUDING,BUTNOTLIMITEDTO,PROCUREMENTOFSUBSTITUTEGOODS *ORSERVICES;LOSSOFUSE,DATA,ORPROFITS;ORBUSINESSINTERRUPTION) *HOWEVERCAUSEDANDONANYTHEORYOFLIABILITY,WHETHERINCONTRACT,STRICT *LIABILITY,ORTORT(INCLUDINGNEGLIGENCEOROTHERWISE)ARISINGINANYWAY *OUTOFTHEUSEOFTHISSOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOF
* SUCH DAMAGE. */ #include <linux/types.h> #include <linux/virtio_ids.h> #include <linux/virtio_config.h> #include <linux/virtio_types.h>
/* Feature bits */ #define VIRTIO_BLK_F_SIZE_MAX 1/* Indicates maximum segment size */ #define VIRTIO_BLK_F_SEG_MAX 2/* Indicates maximum # of segments */ #define VIRTIO_BLK_F_GEOMETRY 4/* Legacy geometry available */ #define VIRTIO_BLK_F_RO 5/* Disk is read-only */ #define VIRTIO_BLK_F_BLK_SIZE 6/* Block size of disk is available*/ #define VIRTIO_BLK_F_TOPOLOGY 10/* Topology information is available */ #define VIRTIO_BLK_F_MQ 12/* support more than one vq */ #define VIRTIO_BLK_F_DISCARD 13/* DISCARD is supported */ #define VIRTIO_BLK_F_WRITE_ZEROES 14/* WRITE ZEROES is supported */ #define VIRTIO_BLK_F_SECURE_ERASE 16/* Secure Erase is supported */ #define VIRTIO_BLK_F_ZONED 17/* Zoned block device */
/* Legacy feature bits */ #ifndef VIRTIO_BLK_NO_LEGACY #define VIRTIO_BLK_F_BARRIER 0/* Does host support barriers? */ #define VIRTIO_BLK_F_SCSI 7/* Supports scsi command passthru */ #define VIRTIO_BLK_F_FLUSH 9/* Flush command supported */ #define VIRTIO_BLK_F_CONFIG_WCE 11/* Writeback mode available in config */ #ifndef __KERNEL__ /* Old (deprecated) name for VIRTIO_BLK_F_FLUSH. */ #define VIRTIO_BLK_F_WCE VIRTIO_BLK_F_FLUSH #endif #endif/* !VIRTIO_BLK_NO_LEGACY */
#define VIRTIO_BLK_ID_BYTES 20/* ID string length */
struct virtio_blk_config { /* The capacity (in 512-byte sectors). */
__virtio64 capacity; /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */
__virtio32 size_max; /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */
__virtio32 seg_max; /* geometry of the device (if VIRTIO_BLK_F_GEOMETRY) */ struct virtio_blk_geometry {
__virtio16 cylinders;
__u8 heads;
__u8 sectors;
} geometry;
/* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
__virtio32 blk_size;
/* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY */ /* exponent for physical block per logical block. */
__u8 physical_block_exp; /* alignment offset in logical blocks. */
__u8 alignment_offset; /* minimum I/O size without performance penalty in logical blocks. */
__virtio16 min_io_size; /* optimal sustained I/O size in logical blocks. */
__virtio32 opt_io_size;
/* number of vqs, only available when VIRTIO_BLK_F_MQ is set */
__virtio16 num_queues;
/* the next 3 entries are guarded by VIRTIO_BLK_F_DISCARD */ /* *Themaximumdiscardsectors(in512-bytesectors)for *onesegment.
*/
__virtio32 max_discard_sectors; /* *Themaximumnumberofdiscardsegmentsina *discardcommand.
*/
__virtio32 max_discard_seg; /* Discard commands must be aligned to this number of sectors. */
__virtio32 discard_sector_alignment;
/* the next 3 entries are guarded by VIRTIO_BLK_F_WRITE_ZEROES */ /* *Themaximumnumberofwritezeroessectors(in512-bytesectors)in *onesegment.
*/
__virtio32 max_write_zeroes_sectors; /* *Themaximumnumberofsegmentsinawritezeroes *command.
*/
__virtio32 max_write_zeroes_seg; /* *SetifaVIRTIO_BLK_T_WRITE_ZEROESrequestmayresultinthe *deallocationofoneormoreofthesectors.
*/
__u8 write_zeroes_may_unmap;
__u8 unused1[3];
/* the next 3 entries are guarded by VIRTIO_BLK_F_SECURE_ERASE */ /* *Themaximumsecureerasesectors(in512-bytesectors)for *onesegment.
*/
__virtio32 max_secure_erase_sectors; /* *Themaximumnumberofsecureerasesegmentsina *secureerasecommand.
*/
__virtio32 max_secure_erase_seg; /* Secure erase commands must be aligned to this number of sectors. */
__virtio32 secure_erase_sector_alignment;
/* These two define direction. */ #define VIRTIO_BLK_T_IN 0 #define VIRTIO_BLK_T_OUT 1
#ifndef VIRTIO_BLK_NO_LEGACY /* This bit says it's a scsi command, not an actual read or write. */ #define VIRTIO_BLK_T_SCSI_CMD 2 #endif/* VIRTIO_BLK_NO_LEGACY */
/* *Zonedescriptor.ApartofVIRTIO_BLK_T_ZONE_REPORTcommandreply.
*/ struct virtio_blk_zone_descriptor { /* Zone capacity */
__virtio64 z_cap; /* The starting sector of the zone */
__virtio64 z_start; /* Zone write pointer position in sectors */
__virtio64 z_wp; /* Zone type */
__u8 z_type; /* Zone state */
__u8 z_state;
__u8 reserved[38];
};
/* Not a write pointer (conventional zones only) */ #define VIRTIO_BLK_ZS_NOT_WP 0 /* Empty */ #define VIRTIO_BLK_ZS_EMPTY 1 /* Implicitly Open */ #define VIRTIO_BLK_ZS_IOPEN 2 /* Explicitly Open */ #define VIRTIO_BLK_ZS_EOPEN 3 /* Closed */ #define VIRTIO_BLK_ZS_CLOSED 4 /* Read-Only */ #define VIRTIO_BLK_ZS_RDONLY 13 /* Full */ #define VIRTIO_BLK_ZS_FULL 14 /* Offline */ #define VIRTIO_BLK_ZS_OFFLINE 15
/* Unmap this range (only valid for write zeroes command) */ #define VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP 0x00000001
/* Discard/write zeroes range for each request. */ struct virtio_blk_discard_write_zeroes { /* discard/write zeroes start sector */
__le64 sector; /* number of discard/write zeroes sectors */
__le32 num_sectors; /* flags for this range */
__le32 flags;
};
/* And this is the final byte of the write scatter-gather list. */ #define VIRTIO_BLK_S_OK 0 #define VIRTIO_BLK_S_IOERR 1 #define VIRTIO_BLK_S_UNSUPP 2
/* Error codes that are specific to zoned block devices */ #define VIRTIO_BLK_S_ZONE_INVALID_CMD 3 #define VIRTIO_BLK_S_ZONE_UNALIGNED_WP 4 #define VIRTIO_BLK_S_ZONE_OPEN_RESOURCE 5 #define VIRTIO_BLK_S_ZONE_ACTIVE_RESOURCE 6
#endif/* _LINUX_VIRTIO_BLK_H */
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.