|
@@ -41,6 +41,7 @@
|
|
|
#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
|
|
@@ -135,6 +136,16 @@ struct virtio_blk_config {
|
|
|
/* Secure erase commands must be aligned to this number of sectors. */
|
|
|
__virtio32 secure_erase_sector_alignment;
|
|
|
|
|
|
+ /* Zoned block device characteristics (if VIRTIO_BLK_F_ZONED) */
|
|
|
+ struct virtio_blk_zoned_characteristics {
|
|
|
+ uint32_t zone_sectors;
|
|
|
+ uint32_t max_open_zones;
|
|
|
+ uint32_t max_active_zones;
|
|
|
+ uint32_t max_append_sectors;
|
|
|
+ uint32_t write_granularity;
|
|
|
+ uint8_t model;
|
|
|
+ uint8_t unused2[3];
|
|
|
+ } zoned;
|
|
|
} QEMU_PACKED;
|
|
|
|
|
|
/*
|
|
@@ -172,6 +183,27 @@ struct virtio_blk_config {
|
|
|
/* Secure erase command */
|
|
|
#define VIRTIO_BLK_T_SECURE_ERASE 14
|
|
|
|
|
|
+/* Zone append command */
|
|
|
+#define VIRTIO_BLK_T_ZONE_APPEND 15
|
|
|
+
|
|
|
+/* Report zones command */
|
|
|
+#define VIRTIO_BLK_T_ZONE_REPORT 16
|
|
|
+
|
|
|
+/* Open zone command */
|
|
|
+#define VIRTIO_BLK_T_ZONE_OPEN 18
|
|
|
+
|
|
|
+/* Close zone command */
|
|
|
+#define VIRTIO_BLK_T_ZONE_CLOSE 20
|
|
|
+
|
|
|
+/* Finish zone command */
|
|
|
+#define VIRTIO_BLK_T_ZONE_FINISH 22
|
|
|
+
|
|
|
+/* Reset zone command */
|
|
|
+#define VIRTIO_BLK_T_ZONE_RESET 24
|
|
|
+
|
|
|
+/* Reset All zones command */
|
|
|
+#define VIRTIO_BLK_T_ZONE_RESET_ALL 26
|
|
|
+
|
|
|
#ifndef VIRTIO_BLK_NO_LEGACY
|
|
|
/* Barrier before this op. */
|
|
|
#define VIRTIO_BLK_T_BARRIER 0x80000000
|
|
@@ -191,6 +223,72 @@ struct virtio_blk_outhdr {
|
|
|
__virtio64 sector;
|
|
|
};
|
|
|
|
|
|
+/*
|
|
|
+ * Supported zoned device models.
|
|
|
+ */
|
|
|
+
|
|
|
+/* Regular block device */
|
|
|
+#define VIRTIO_BLK_Z_NONE 0
|
|
|
+/* Host-managed zoned device */
|
|
|
+#define VIRTIO_BLK_Z_HM 1
|
|
|
+/* Host-aware zoned device */
|
|
|
+#define VIRTIO_BLK_Z_HA 2
|
|
|
+
|
|
|
+/*
|
|
|
+ * Zone descriptor. A part of VIRTIO_BLK_T_ZONE_REPORT command reply.
|
|
|
+ */
|
|
|
+struct virtio_blk_zone_descriptor {
|
|
|
+ /* Zone capacity */
|
|
|
+ uint64_t z_cap;
|
|
|
+ /* The starting sector of the zone */
|
|
|
+ uint64_t z_start;
|
|
|
+ /* Zone write pointer position in sectors */
|
|
|
+ uint64_t z_wp;
|
|
|
+ /* Zone type */
|
|
|
+ uint8_t z_type;
|
|
|
+ /* Zone state */
|
|
|
+ uint8_t z_state;
|
|
|
+ uint8_t reserved[38];
|
|
|
+};
|
|
|
+
|
|
|
+struct virtio_blk_zone_report {
|
|
|
+ uint64_t nr_zones;
|
|
|
+ uint8_t reserved[56];
|
|
|
+ struct virtio_blk_zone_descriptor zones[];
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * Supported zone types.
|
|
|
+ */
|
|
|
+
|
|
|
+/* Conventional zone */
|
|
|
+#define VIRTIO_BLK_ZT_CONV 1
|
|
|
+/* Sequential Write Required zone */
|
|
|
+#define VIRTIO_BLK_ZT_SWR 2
|
|
|
+/* Sequential Write Preferred zone */
|
|
|
+#define VIRTIO_BLK_ZT_SWP 3
|
|
|
+
|
|
|
+/*
|
|
|
+ * Zone states that are available for zones of all types.
|
|
|
+ */
|
|
|
+
|
|
|
+/* 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
|
|
|
|
|
@@ -217,4 +315,11 @@ struct virtio_scsi_inhdr {
|
|
|
#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 */
|