aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nvme.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/nvme.h')
-rw-r--r--include/linux/nvme.h72
1 files changed, 67 insertions, 5 deletions
diff --git a/include/linux/nvme.h b/include/linux/nvme.h
index 2950ce957656..68e91ef5494c 100644
--- a/include/linux/nvme.h
+++ b/include/linux/nvme.h
@@ -242,7 +242,12 @@ struct nvme_id_ctrl {
242 __le32 sanicap; 242 __le32 sanicap;
243 __le32 hmminds; 243 __le32 hmminds;
244 __le16 hmmaxd; 244 __le16 hmmaxd;
245 __u8 rsvd338[174]; 245 __u8 rsvd338[4];
246 __u8 anatt;
247 __u8 anacap;
248 __le32 anagrpmax;
249 __le32 nanagrpid;
250 __u8 rsvd352[160];
246 __u8 sqes; 251 __u8 sqes;
247 __u8 cqes; 252 __u8 cqes;
248 __le16 maxcmd; 253 __le16 maxcmd;
@@ -254,11 +259,12 @@ struct nvme_id_ctrl {
254 __le16 awun; 259 __le16 awun;
255 __le16 awupf; 260 __le16 awupf;
256 __u8 nvscc; 261 __u8 nvscc;
257 __u8 rsvd531; 262 __u8 nwpc;
258 __le16 acwu; 263 __le16 acwu;
259 __u8 rsvd534[2]; 264 __u8 rsvd534[2];
260 __le32 sgls; 265 __le32 sgls;
261 __u8 rsvd540[228]; 266 __le32 mnan;
267 __u8 rsvd544[224];
262 char subnqn[256]; 268 char subnqn[256];
263 __u8 rsvd1024[768]; 269 __u8 rsvd1024[768];
264 __le32 ioccsz; 270 __le32 ioccsz;
@@ -312,7 +318,11 @@ struct nvme_id_ns {
312 __le16 nabspf; 318 __le16 nabspf;
313 __le16 noiob; 319 __le16 noiob;
314 __u8 nvmcap[16]; 320 __u8 nvmcap[16];
315 __u8 rsvd64[40]; 321 __u8 rsvd64[28];
322 __le32 anagrpid;
323 __u8 rsvd96[3];
324 __u8 nsattr;
325 __u8 rsvd100[4];
316 __u8 nguid[16]; 326 __u8 nguid[16];
317 __u8 eui64[8]; 327 __u8 eui64[8];
318 struct nvme_lbaf lbaf[16]; 328 struct nvme_lbaf lbaf[16];
@@ -425,6 +435,32 @@ struct nvme_effects_log {
425 __u8 resv[2048]; 435 __u8 resv[2048];
426}; 436};
427 437
438enum nvme_ana_state {
439 NVME_ANA_OPTIMIZED = 0x01,
440 NVME_ANA_NONOPTIMIZED = 0x02,
441 NVME_ANA_INACCESSIBLE = 0x03,
442 NVME_ANA_PERSISTENT_LOSS = 0x04,
443 NVME_ANA_CHANGE = 0x0f,
444};
445
446struct nvme_ana_group_desc {
447 __le32 grpid;
448 __le32 nnsids;
449 __le64 chgcnt;
450 __u8 state;
451 __u8 rsvd17[15];
452 __le32 nsids[];
453};
454
455/* flag for the log specific field of the ANA log */
456#define NVME_ANA_LOG_RGO (1 << 0)
457
458struct nvme_ana_rsp_hdr {
459 __le64 chgcnt;
460 __le16 ngrps;
461 __le16 rsvd10[3];
462};
463
428enum { 464enum {
429 NVME_SMART_CRIT_SPARE = 1 << 0, 465 NVME_SMART_CRIT_SPARE = 1 << 0,
430 NVME_SMART_CRIT_TEMPERATURE = 1 << 1, 466 NVME_SMART_CRIT_TEMPERATURE = 1 << 1,
@@ -444,11 +480,13 @@ enum {
444enum { 480enum {
445 NVME_AER_NOTICE_NS_CHANGED = 0x00, 481 NVME_AER_NOTICE_NS_CHANGED = 0x00,
446 NVME_AER_NOTICE_FW_ACT_STARTING = 0x01, 482 NVME_AER_NOTICE_FW_ACT_STARTING = 0x01,
483 NVME_AER_NOTICE_ANA = 0x03,
447}; 484};
448 485
449enum { 486enum {
450 NVME_AEN_CFG_NS_ATTR = 1 << 8, 487 NVME_AEN_CFG_NS_ATTR = 1 << 8,
451 NVME_AEN_CFG_FW_ACT = 1 << 9, 488 NVME_AEN_CFG_FW_ACT = 1 << 9,
489 NVME_AEN_CFG_ANA_CHANGE = 1 << 11,
452}; 490};
453 491
454struct nvme_lba_range_type { 492struct nvme_lba_range_type {
@@ -749,15 +787,22 @@ enum {
749 NVME_FEAT_HOST_MEM_BUF = 0x0d, 787 NVME_FEAT_HOST_MEM_BUF = 0x0d,
750 NVME_FEAT_TIMESTAMP = 0x0e, 788 NVME_FEAT_TIMESTAMP = 0x0e,
751 NVME_FEAT_KATO = 0x0f, 789 NVME_FEAT_KATO = 0x0f,
790 NVME_FEAT_HCTM = 0x10,
791 NVME_FEAT_NOPSC = 0x11,
792 NVME_FEAT_RRL = 0x12,
793 NVME_FEAT_PLM_CONFIG = 0x13,
794 NVME_FEAT_PLM_WINDOW = 0x14,
752 NVME_FEAT_SW_PROGRESS = 0x80, 795 NVME_FEAT_SW_PROGRESS = 0x80,
753 NVME_FEAT_HOST_ID = 0x81, 796 NVME_FEAT_HOST_ID = 0x81,
754 NVME_FEAT_RESV_MASK = 0x82, 797 NVME_FEAT_RESV_MASK = 0x82,
755 NVME_FEAT_RESV_PERSIST = 0x83, 798 NVME_FEAT_RESV_PERSIST = 0x83,
799 NVME_FEAT_WRITE_PROTECT = 0x84,
756 NVME_LOG_ERROR = 0x01, 800 NVME_LOG_ERROR = 0x01,
757 NVME_LOG_SMART = 0x02, 801 NVME_LOG_SMART = 0x02,
758 NVME_LOG_FW_SLOT = 0x03, 802 NVME_LOG_FW_SLOT = 0x03,
759 NVME_LOG_CHANGED_NS = 0x04, 803 NVME_LOG_CHANGED_NS = 0x04,
760 NVME_LOG_CMD_EFFECTS = 0x05, 804 NVME_LOG_CMD_EFFECTS = 0x05,
805 NVME_LOG_ANA = 0x0c,
761 NVME_LOG_DISC = 0x70, 806 NVME_LOG_DISC = 0x70,
762 NVME_LOG_RESERVATION = 0x80, 807 NVME_LOG_RESERVATION = 0x80,
763 NVME_FWACT_REPL = (0 << 3), 808 NVME_FWACT_REPL = (0 << 3),
@@ -765,6 +810,14 @@ enum {
765 NVME_FWACT_ACTV = (2 << 3), 810 NVME_FWACT_ACTV = (2 << 3),
766}; 811};
767 812
813/* NVMe Namespace Write Protect State */
814enum {
815 NVME_NS_NO_WRITE_PROTECT = 0,
816 NVME_NS_WRITE_PROTECT,
817 NVME_NS_WRITE_PROTECT_POWER_CYCLE,
818 NVME_NS_WRITE_PROTECT_PERMANENT,
819};
820
768#define NVME_MAX_CHANGED_NAMESPACES 1024 821#define NVME_MAX_CHANGED_NAMESPACES 1024
769 822
770struct nvme_identify { 823struct nvme_identify {
@@ -880,7 +933,7 @@ struct nvme_get_log_page_command {
880 __u64 rsvd2[2]; 933 __u64 rsvd2[2];
881 union nvme_data_ptr dptr; 934 union nvme_data_ptr dptr;
882 __u8 lid; 935 __u8 lid;
883 __u8 rsvd10; 936 __u8 lsp; /* upper 4 bits reserved */
884 __le16 numdl; 937 __le16 numdl;
885 __le16 numdu; 938 __le16 numdu;
886 __u16 rsvd11; 939 __u16 rsvd11;
@@ -1111,6 +1164,8 @@ enum {
1111 NVME_SC_SGL_INVALID_OFFSET = 0x16, 1164 NVME_SC_SGL_INVALID_OFFSET = 0x16,
1112 NVME_SC_SGL_INVALID_SUBTYPE = 0x17, 1165 NVME_SC_SGL_INVALID_SUBTYPE = 0x17,
1113 1166
1167 NVME_SC_NS_WRITE_PROTECTED = 0x20,
1168
1114 NVME_SC_LBA_RANGE = 0x80, 1169 NVME_SC_LBA_RANGE = 0x80,
1115 NVME_SC_CAP_EXCEEDED = 0x81, 1170 NVME_SC_CAP_EXCEEDED = 0x81,
1116 NVME_SC_NS_NOT_READY = 0x82, 1171 NVME_SC_NS_NOT_READY = 0x82,
@@ -1180,6 +1235,13 @@ enum {
1180 NVME_SC_ACCESS_DENIED = 0x286, 1235 NVME_SC_ACCESS_DENIED = 0x286,
1181 NVME_SC_UNWRITTEN_BLOCK = 0x287, 1236 NVME_SC_UNWRITTEN_BLOCK = 0x287,
1182 1237
1238 /*
1239 * Path-related Errors:
1240 */
1241 NVME_SC_ANA_PERSISTENT_LOSS = 0x301,
1242 NVME_SC_ANA_INACCESSIBLE = 0x302,
1243 NVME_SC_ANA_TRANSITION = 0x303,
1244
1183 NVME_SC_DNR = 0x4000, 1245 NVME_SC_DNR = 0x4000,
1184}; 1246};
1185 1247