@@ -242,7 +242,12 @@ struct nvme_id_ctrl {
242242 __le32 sanicap ;
243243 __le32 hmminds ;
244244 __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 ];
246251 __u8 sqes ;
247252 __u8 cqes ;
248253 __le16 maxcmd ;
@@ -258,7 +263,8 @@ struct nvme_id_ctrl {
258263 __le16 acwu ;
259264 __u8 rsvd534 [2 ];
260265 __le32 sgls ;
261- __u8 rsvd540 [228 ];
266+ __le32 mnan ;
267+ __u8 rsvd544 [224 ];
262268 char subnqn [256 ];
263269 __u8 rsvd1024 [768 ];
264270 __le32 ioccsz ;
@@ -312,7 +318,9 @@ struct nvme_id_ns {
312318 __le16 nabspf ;
313319 __le16 noiob ;
314320 __u8 nvmcap [16 ];
315- __u8 rsvd64 [40 ];
321+ __u8 rsvd64 [28 ];
322+ __le32 anagrpid ;
323+ __u8 rsvd96 [8 ];
316324 __u8 nguid [16 ];
317325 __u8 eui64 [8 ];
318326 struct nvme_lbaf lbaf [16 ];
@@ -425,6 +433,32 @@ struct nvme_effects_log {
425433 __u8 resv [2048 ];
426434};
427435
436+ enum nvme_ana_state {
437+ NVME_ANA_OPTIMIZED = 0x01 ,
438+ NVME_ANA_NONOPTIMIZED = 0x02 ,
439+ NVME_ANA_INACCESSIBLE = 0x03 ,
440+ NVME_ANA_PERSISTENT_LOSS = 0x04 ,
441+ NVME_ANA_CHANGE = 0x0f ,
442+ };
443+
444+ struct nvme_ana_group_desc {
445+ __le32 grpid ;
446+ __le32 nnsids ;
447+ __le64 chgcnt ;
448+ __u8 state ;
449+ __u8 rsvd17 [7 ];
450+ __le32 nsids [];
451+ };
452+
453+ /* flag for the log specific field of the ANA log */
454+ #define NVME_ANA_LOG_RGO (1 << 0)
455+
456+ struct nvme_ana_rsp_hdr {
457+ __le64 chgcnt ;
458+ __le16 ngrps ;
459+ __le16 rsvd10 [3 ];
460+ };
461+
428462enum {
429463 NVME_SMART_CRIT_SPARE = 1 << 0 ,
430464 NVME_SMART_CRIT_TEMPERATURE = 1 << 1 ,
@@ -444,11 +478,13 @@ enum {
444478enum {
445479 NVME_AER_NOTICE_NS_CHANGED = 0x00 ,
446480 NVME_AER_NOTICE_FW_ACT_STARTING = 0x01 ,
481+ NVME_AER_NOTICE_ANA = 0x03 ,
447482};
448483
449484enum {
450485 NVME_AEN_CFG_NS_ATTR = 1 << 8 ,
451486 NVME_AEN_CFG_FW_ACT = 1 << 9 ,
487+ NVME_AEN_CFG_ANA_CHANGE = 1 << 11 ,
452488};
453489
454490struct nvme_lba_range_type {
@@ -763,6 +799,7 @@ enum {
763799 NVME_LOG_FW_SLOT = 0x03 ,
764800 NVME_LOG_CHANGED_NS = 0x04 ,
765801 NVME_LOG_CMD_EFFECTS = 0x05 ,
802+ NVME_LOG_ANA = 0x0c ,
766803 NVME_LOG_DISC = 0x70 ,
767804 NVME_LOG_RESERVATION = 0x80 ,
768805 NVME_FWACT_REPL = (0 << 3 ),
@@ -1185,6 +1222,13 @@ enum {
11851222 NVME_SC_ACCESS_DENIED = 0x286 ,
11861223 NVME_SC_UNWRITTEN_BLOCK = 0x287 ,
11871224
1225+ /*
1226+ * Path-related Errors:
1227+ */
1228+ NVME_SC_ANA_PERSISTENT_LOSS = 0x301 ,
1229+ NVME_SC_ANA_INACCESSIBLE = 0x302 ,
1230+ NVME_SC_ANA_TRANSITION = 0x303 ,
1231+
11881232 NVME_SC_DNR = 0x4000 ,
11891233};
11901234
0 commit comments