Merge tag 'for-5.18/drivers-2022-04-01' of git://git.kernel.dk/linux-block
[linux-block.git] / include / linux / nvme.h
index 2dcee34d467d6c8f247760575eb34c5388ccff56..f626a445d1a872647c27e6c09139dca1d99af676 100644 (file)
@@ -244,6 +244,7 @@ enum {
 enum nvme_ctrl_attr {
        NVME_CTRL_ATTR_HID_128_BIT      = (1 << 0),
        NVME_CTRL_ATTR_TBKAS            = (1 << 6),
+       NVME_CTRL_ATTR_ELBAS            = (1 << 15),
 };
 
 struct nvme_id_ctrl {
@@ -400,8 +401,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];
 };
 
@@ -419,8 +419,7 @@ struct nvme_id_ns_zns {
        __le32                  rrl;
        __le32                  frl;
        __u8                    rsvd20[2796];
-       struct nvme_zns_lbafe   lbafe[16];
-       __u8                    rsvd3072[768];
+       struct nvme_zns_lbafe   lbafe[64];
        __u8                    vs[256];
 };
 
@@ -429,6 +428,30 @@ struct nvme_id_ctrl_zns {
        __u8    rsvd1[4095];
 };
 
+struct nvme_id_ns_nvm {
+       __le64  lbstm;
+       __u8    pic;
+       __u8    rsvd9[3];
+       __le32  elbaf[64];
+       __u8    rsvd268[3828];
+};
+
+enum {
+       NVME_ID_NS_NVM_STS_MASK         = 0x3f,
+       NVME_ID_NS_NVM_GUARD_SHIFT      = 7,
+       NVME_ID_NS_NVM_GUARD_MASK       = 0x3,
+};
+
+static inline __u8 nvme_elbaf_sts(__u32 elbaf)
+{
+       return elbaf & NVME_ID_NS_NVM_STS_MASK;
+}
+
+static inline __u8 nvme_elbaf_guard_type(__u32 elbaf)
+{
+       return (elbaf >> NVME_ID_NS_NVM_GUARD_SHIFT) & NVME_ID_NS_NVM_GUARD_MASK;
+}
+
 struct nvme_id_ctrl_nvm {
        __u8    vsl;
        __u8    wzsl;
@@ -479,6 +502,8 @@ enum {
        NVME_NS_FEAT_IO_OPT     = 1 << 4,
        NVME_NS_ATTR_RO         = 1 << 0,
        NVME_NS_FLBAS_LBA_MASK  = 0xf,
+       NVME_NS_FLBAS_LBA_UMASK = 0x60,
+       NVME_NS_FLBAS_LBA_SHIFT = 1,
        NVME_NS_FLBAS_META_EXT  = 0x10,
        NVME_NS_NMIC_SHARED     = 1 << 0,
        NVME_LBAF_RP_BEST       = 0,
@@ -497,6 +522,18 @@ enum {
        NVME_NS_DPS_PI_TYPE3    = 3,
 };
 
+enum {
+       NVME_NVM_NS_16B_GUARD   = 0,
+       NVME_NVM_NS_32B_GUARD   = 1,
+       NVME_NVM_NS_64B_GUARD   = 2,
+};
+
+static inline __u8 nvme_lbaf_index(__u8 flbas)
+{
+       return (flbas & NVME_NS_FLBAS_LBA_MASK) |
+               ((flbas & NVME_NS_FLBAS_LBA_UMASK) >> NVME_NS_FLBAS_LBA_SHIFT);
+}
+
 /* Identify Namespace Metadata Capabilities (MC): */
 enum {
        NVME_MC_EXTENDED_LBA    = (1 << 0),
@@ -843,7 +880,8 @@ struct nvme_rw_command {
        __u8                    flags;
        __u16                   command_id;
        __le32                  nsid;
-       __u64                   rsvd2;
+       __le32                  cdw2;
+       __le32                  cdw3;
        __le64                  metadata;
        union nvme_data_ptr     dptr;
        __le64                  slba;
@@ -997,11 +1035,14 @@ enum {
 
 struct nvme_feat_host_behavior {
        __u8 acre;
-       __u8 resv1[511];
+       __u8 etdas;
+       __u8 lbafee;
+       __u8 resv1[509];
 };
 
 enum {
        NVME_ENABLE_ACRE        = 1,
+       NVME_ENABLE_LBAFEE      = 1,
 };
 
 /* Admin commands */