@@ -1818,6 +1818,59 @@ static void stdout_id_ctrl_ctratt(__le32 ctrl_ctratt)
18181818 printf ("\n" );
18191819}
18201820
1821+ static void stdout_id_ctrl_bpcap (__u8 ctrl_bpcap )
1822+ {
1823+ __u8 rsvd3 = (ctrl_bpcap >> 3 );
1824+ __u8 sfbpwps = NVME_GET (ctrl_bpcap , CTRL_BACAP_SFBPWPS );
1825+ __u8 rpmbbpwps = NVME_GET (ctrl_bpcap , CTRL_BACAP_RPMBBPWPS );
1826+ static const char * const rpmbbpwps_def [] = {
1827+ "Support Not Specified" ,
1828+ "Not Supported" ,
1829+ "Supported"
1830+ };
1831+
1832+ if (rsvd3 )
1833+ printf (" [7:3] : %#x\tReserved\n" , rsvd3 );
1834+
1835+ printf (" [2:2] : %#x\tSet Features Boot Partition Write Protection %sSupported\n" ,
1836+ sfbpwps , sfbpwps ? "" : "Not " );
1837+ printf (" [1:0] : %#x\tRPMB Boot Partition Write Protection %s\n" ,
1838+ rpmbbpwps , rpmbbpwps_def [rpmbbpwps ]);
1839+ printf ("\n" );
1840+ }
1841+
1842+ static void stdout_id_ctrl_plsi (__u8 ctrl_plsi )
1843+ {
1844+ __u8 rsvd2 = (ctrl_plsi >> 2 );
1845+ __u8 plsfq = NVME_GET (ctrl_plsi , CTRL_PLSI_PLSFQ );
1846+ __u8 plsepf = NVME_GET (ctrl_plsi , CTRL_PLSI_PLSEPF );
1847+
1848+ if (rsvd2 )
1849+ printf (" [7:2] : %#x\tReserved\n" , rsvd2 );
1850+
1851+ printf (" [1:1] : %#x\tPower Loss Signaling with Forced Quiescence %sSupported\n" ,
1852+ plsfq , plsfq ? "" : "Not " );
1853+ printf (" [0:0] : %#x\tPower Loss Signaling with Emergency Power Fail %sSupported\n" ,
1854+ plsepf , plsepf ? "" : "Not " );
1855+ printf ("\n" );
1856+ }
1857+
1858+ static void stdout_id_ctrl_crcap (__u8 ctrl_crcap )
1859+ {
1860+ __u8 rsvd2 = (ctrl_crcap >> 2 );
1861+ __u8 rgidc = NVME_GET (ctrl_crcap , CTRL_CRCAP_RGIDC );
1862+ __u8 rrsup = NVME_GET (ctrl_crcap , CTRL_CRCAP_RRSUP );
1863+
1864+ if (rsvd2 )
1865+ printf (" [7:2] : %#x\tReserved\n" , rsvd2 );
1866+
1867+ printf (" [1:1] : %#x\tRGRPID %s while the namespace is attached to any controller.\n" ,
1868+ rgidc , rgidc ? "does not change" : "may change" );
1869+ printf (" [0:0] : %#x\tReachability Reporting %sSupported\n" ,
1870+ rrsup , rrsup ? "" : "Not " );
1871+ printf ("\n" );
1872+ }
1873+
18211874static void stdout_id_ctrl_cntrltype (__u8 cntrltype )
18221875{
18231876 __u8 rsvd = (cntrltype & 0xFC ) >> 2 ;
@@ -2143,6 +2196,22 @@ static void stdout_id_ctrl_anacap(__u8 anacap)
21432196 printf ("\n" );
21442197}
21452198
2199+ static void stdout_id_ctrl_kpioc (__u8 ctrl_kpioc )
2200+ {
2201+ __u8 rsvd2 = (ctrl_kpioc >> 2 );
2202+ __u8 kpiosc = NVME_GET (ctrl_kpioc , CTRL_KPIOC_KPIOSC );
2203+ __u8 kpios = NVME_GET (ctrl_kpioc , CTRL_KPIOC_KPIOS );
2204+
2205+ if (rsvd2 )
2206+ printf (" [7:2] : %#x\tReserved\n" , rsvd2 );
2207+
2208+ printf (" [1:1] : %#x\tKey Per I/O capability %s to all namespaces\n" ,
2209+ kpiosc , kpiosc ? "applies" : "Not apply" );
2210+ printf (" [0:0] : %#x\tKey Per I/O capability %sSupported\n" ,
2211+ kpios , kpios ? "" : "Not " );
2212+ printf ("\n" );
2213+ }
2214+
21462215static void stdout_id_ctrl_tmpthha (__u8 tmpthha )
21472216{
21482217 __u8 rsvd3 = (tmpthha & 0xf8 ) >> 3 ;
@@ -2381,6 +2450,24 @@ static void stdout_id_ctrl_sgls(__le32 ctrl_sgls)
23812450 printf ("\n" );
23822451}
23832452
2453+ static void stdout_id_ctrl_trattr (__u8 ctrl_trattr )
2454+ {
2455+ __u8 rsvd3 = (ctrl_trattr >> 3 );
2456+ __u8 mrtll = NVME_GET (ctrl_trattr , CTRL_TRATTR_MRTLL );
2457+ __u8 tudcs = NVME_GET (ctrl_trattr , CTRL_TRATTR_TUDCS );
2458+ __u8 thmcs = NVME_GET (ctrl_trattr , CTRL_TRATTR_THMCS );
2459+
2460+ if (rsvd3 )
2461+ printf (" [7:3] : %#x\tReserved\n" , rsvd3 );
2462+
2463+ printf (" [2:2] : %#x\tMemory Range Tracking Length Limit\n" , mrtll );
2464+ printf (" [1:1] : %#x\tTracking User Data Changes %sSupported\n" ,
2465+ tudcs , tudcs ? "" : "Not " );
2466+ printf (" [0:0] : %#x\tTrack Host Memory Changes %sSupported\n" ,
2467+ thmcs , thmcs ? "" : "Not " );
2468+ printf ("\n" );
2469+ }
2470+
23842471static void stdout_id_ctrl_fcatt (__u8 fcatt )
23852472{
23862473 __u8 rsvd = (fcatt & 0xFE ) >> 1 ;
@@ -2945,13 +3032,23 @@ static void stdout_id_ctrl(struct nvme_id_ctrl *ctrl,
29453032 if (human )
29463033 stdout_id_ctrl_ctratt (ctrl -> ctratt );
29473034 printf ("rrls : %#x\n" , le16_to_cpu (ctrl -> rrls ));
3035+ printf ("bpcap : %#x\n" , le16_to_cpu (ctrl -> bpcap ));
3036+ if (human )
3037+ stdout_id_ctrl_bpcap (ctrl -> bpcap );
3038+ printf ("nssl : %#x\n" , le32_to_cpu (ctrl -> nssl ));
3039+ printf ("plsi : %u\n" , ctrl -> plsi );
3040+ if (human )
3041+ stdout_id_ctrl_plsi (ctrl -> plsi );
29483042 printf ("cntrltype : %d\n" , ctrl -> cntrltype );
29493043 if (human )
29503044 stdout_id_ctrl_cntrltype (ctrl -> cntrltype );
29513045 printf ("fguid : %s\n" , util_uuid_to_string (ctrl -> fguid ));
29523046 printf ("crdt1 : %u\n" , le16_to_cpu (ctrl -> crdt1 ));
29533047 printf ("crdt2 : %u\n" , le16_to_cpu (ctrl -> crdt2 ));
29543048 printf ("crdt3 : %u\n" , le16_to_cpu (ctrl -> crdt3 ));
3049+ printf ("crcap : %u\n" , ctrl -> crcap );
3050+ if (human )
3051+ stdout_id_ctrl_crcap (ctrl -> crcap );
29553052 printf ("nvmsr : %u\n" , ctrl -> nvmsr );
29563053 if (human )
29573054 stdout_id_ctrl_nvmsr (ctrl -> nvmsr );
@@ -3033,11 +3130,16 @@ static void stdout_id_ctrl(struct nvme_id_ctrl *ctrl,
30333130 printf ("nanagrpid : %u\n" , le32_to_cpu (ctrl -> nanagrpid ));
30343131 printf ("pels : %u\n" , le32_to_cpu (ctrl -> pels ));
30353132 printf ("domainid : %d\n" , le16_to_cpu (ctrl -> domainid ));
3133+ printf ("kpioc : %u\n" , ctrl -> kpioc );
3134+ if (human )
3135+ stdout_id_ctrl_kpioc (ctrl -> kpioc );
3136+ printf ("mptfawr : %d\n" , le16_to_cpu (ctrl -> mptfawr ));
30363137 printf ("megcap : %s\n" ,
30373138 uint128_t_to_l10n_string (le128_to_cpu (ctrl -> megcap )));
30383139 printf ("tmpthha : %#x\n" , ctrl -> tmpthha );
30393140 if (human )
30403141 stdout_id_ctrl_tmpthha (ctrl -> tmpthha );
3142+ printf ("cqt : %d\n" , le16_to_cpu (ctrl -> cqt ));
30413143 printf ("sqes : %#x\n" , ctrl -> sqes );
30423144 if (human )
30433145 stdout_id_ctrl_sqes (ctrl -> sqes );
@@ -3078,6 +3180,20 @@ static void stdout_id_ctrl(struct nvme_id_ctrl *ctrl,
30783180 uint128_t_to_l10n_string (le128_to_cpu (ctrl -> maxdna )));
30793181 printf ("maxcna : %u\n" , le32_to_cpu (ctrl -> maxcna ));
30803182 printf ("oaqd : %u\n" , le32_to_cpu (ctrl -> oaqd ));
3183+ printf ("rhiri : %d\n" , ctrl -> rhiri );
3184+ printf ("hirt : %d\n" , ctrl -> hirt );
3185+ printf ("cmmrtd : %d\n" , le16_to_cpu (ctrl -> cmmrtd ));
3186+ printf ("nmmrtd : %d\n" , le16_to_cpu (ctrl -> nmmrtd ));
3187+ printf ("minmrtg : %d\n" , ctrl -> minmrtg );
3188+ printf ("maxmrtg : %d\n" , ctrl -> maxmrtg );
3189+ printf ("trattr : %d\n" , ctrl -> trattr );
3190+ if (human )
3191+ stdout_id_ctrl_trattr (ctrl -> trattr );
3192+ printf ("mcudmq : %d\n" , le16_to_cpu (ctrl -> mcudmq ));
3193+ printf ("mnsudmq : %d\n" , le16_to_cpu (ctrl -> mnsudmq ));
3194+ printf ("mcmr : %d\n" , le16_to_cpu (ctrl -> mcmr ));
3195+ printf ("nmcmr : %d\n" , le16_to_cpu (ctrl -> nmcmr ));
3196+ printf ("mcdqpc : %d\n" , le16_to_cpu (ctrl -> mcdqpc ));
30813197 printf ("subnqn : %-.*s\n" , (int )sizeof (ctrl -> subnqn ), ctrl -> subnqn );
30823198 printf ("ioccsz : %u\n" , le32_to_cpu (ctrl -> ioccsz ));
30833199 printf ("iorcsz : %u\n" , le32_to_cpu (ctrl -> iorcsz ));
0 commit comments