engines/io_uring: remove dead code related to trim
[fio.git] / engines / nvme.h
index 8e626bb23791bc8c374f33f8f6fe11ca92177c22..238471dd76b94f1dd063eee7449ed9e2354a6abd 100644 (file)
@@ -43,8 +43,17 @@ struct nvme_uring_cmd {
 #define NVME_IDENTIFY_DATA_SIZE 4096
 #define NVME_IDENTIFY_CSI_SHIFT 24
 
+#define NVME_ZNS_ZRA_REPORT_ZONES 0
+#define NVME_ZNS_ZRAS_FEAT_ERZ (1 << 16)
+#define NVME_ZNS_ZSA_RESET 0x4
+#define NVME_ZONE_TYPE_SEQWRITE_REQ 0x2
+
+#define NVME_ATTRIBUTE_DEALLOCATE (1 << 2)
+
 enum nvme_identify_cns {
-       NVME_IDENTIFY_CNS_NS = 0x00,
+       NVME_IDENTIFY_CNS_NS            = 0x00,
+       NVME_IDENTIFY_CNS_CSI_NS        = 0x05,
+       NVME_IDENTIFY_CNS_CSI_CTRL      = 0x06,
 };
 
 enum nvme_csi {
@@ -60,11 +69,26 @@ enum nvme_admin_opcode {
 enum nvme_io_opcode {
        nvme_cmd_write                  = 0x01,
        nvme_cmd_read                   = 0x02,
+       nvme_cmd_dsm                    = 0x09,
+       nvme_cmd_io_mgmt_recv           = 0x12,
+       nvme_zns_cmd_mgmt_send          = 0x79,
+       nvme_zns_cmd_mgmt_recv          = 0x7a,
+};
+
+enum nvme_zns_zs {
+       NVME_ZNS_ZS_EMPTY               = 0x1,
+       NVME_ZNS_ZS_IMPL_OPEN           = 0x2,
+       NVME_ZNS_ZS_EXPL_OPEN           = 0x3,
+       NVME_ZNS_ZS_CLOSED              = 0x4,
+       NVME_ZNS_ZS_READ_ONLY           = 0xd,
+       NVME_ZNS_ZS_FULL                = 0xe,
+       NVME_ZNS_ZS_OFFLINE             = 0xf,
 };
 
 struct nvme_data {
        __u32 nsid;
        __u32 lba_shift;
+       __u32 lba_ext;
 };
 
 struct nvme_lbaf {
@@ -111,8 +135,7 @@ struct nvme_id_ns {
        __le16                  endgid;
        __u8                    nguid[16];
        __u8                    eui64[8];
-       struct nvme_lbaf        lbaf[16];
-       __u8                    rsvd192[192];
+       struct nvme_lbaf        lbaf[64];
        __u8                    vs[3712];
 };
 
@@ -127,10 +150,92 @@ static inline int ilog2(uint32_t i)
        return log;
 }
 
+struct nvme_zns_lbafe {
+       __le64  zsze;
+       __u8    zdes;
+       __u8    rsvd9[7];
+};
+
+struct nvme_zns_id_ns {
+       __le16                  zoc;
+       __le16                  ozcs;
+       __le32                  mar;
+       __le32                  mor;
+       __le32                  rrl;
+       __le32                  frl;
+       __le32                  rrl1;
+       __le32                  rrl2;
+       __le32                  rrl3;
+       __le32                  frl1;
+       __le32                  frl2;
+       __le32                  frl3;
+       __le32                  numzrwa;
+       __le16                  zrwafg;
+       __le16                  zrwasz;
+       __u8                    zrwacap;
+       __u8                    rsvd53[2763];
+       struct nvme_zns_lbafe   lbafe[64];
+       __u8                    vs[256];
+};
+
+struct nvme_zns_desc {
+       __u8    zt;
+       __u8    zs;
+       __u8    za;
+       __u8    zai;
+       __u8    rsvd4[4];
+       __le64  zcap;
+       __le64  zslba;
+       __le64  wp;
+       __u8    rsvd32[32];
+};
+
+struct nvme_zone_report {
+       __le64                  nr_zones;
+       __u8                    rsvd8[56];
+       struct nvme_zns_desc    entries[];
+};
+
+struct nvme_fdp_ruh_status_desc {
+       __u16 pid;
+       __u16 ruhid;
+       __u32 earutr;
+       __u64 ruamw;
+       __u8  rsvd16[16];
+};
+
+struct nvme_fdp_ruh_status {
+       __u8  rsvd0[14];
+       __le16 nruhsd;
+       struct nvme_fdp_ruh_status_desc ruhss[];
+};
+
+struct nvme_dsm_range {
+       __le32  cattr;
+       __le32  nlb;
+       __le64  slba;
+};
+
+int fio_nvme_iomgmt_ruhs(struct thread_data *td, struct fio_file *f,
+                        struct nvme_fdp_ruh_status *ruhs, __u32 bytes);
+
 int fio_nvme_get_info(struct fio_file *f, __u32 *nsid, __u32 *lba_sz,
-                     __u64 *nlba);
+                     __u32 *ms, __u64 *nlba);
 
 int fio_nvme_uring_cmd_prep(struct nvme_uring_cmd *cmd, struct io_u *io_u,
-                           struct iovec *iov);
+                           struct iovec *iov, struct nvme_dsm_range *dsm);
+
+int fio_nvme_get_zoned_model(struct thread_data *td, struct fio_file *f,
+                            enum zbd_zoned_model *model);
+
+int fio_nvme_report_zones(struct thread_data *td, struct fio_file *f,
+                         uint64_t offset, struct zbd_zone *zbdz,
+                         unsigned int nr_zones);
+
+int fio_nvme_reset_wp(struct thread_data *td, struct fio_file *f,
+                     uint64_t offset, uint64_t length);
+
+int fio_nvme_get_max_open_zones(struct thread_data *td, struct fio_file *f,
+                               unsigned int *max_open_zones);
 
 #endif