Skip to content

Commit d035094

Browse files
sc108-leeigaw
authored andcommitted
print: id-ctrl print updated based on NVMe v2.1
new fields, missing fields print added Signed-off-by: Steven Seungcheol Lee <[email protected]>
1 parent c07ccbe commit d035094

File tree

2 files changed

+135
-0
lines changed

2 files changed

+135
-0
lines changed

nvme-print-json.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,11 +350,15 @@ void json_nvme_id_ctrl(struct nvme_id_ctrl *ctrl,
350350
obj_add_uint(r, "oaes", le32_to_cpu(ctrl->oaes));
351351
obj_add_uint(r, "ctratt", le32_to_cpu(ctrl->ctratt));
352352
obj_add_int(r, "rrls", le16_to_cpu(ctrl->rrls));
353+
obj_add_int(r, "bpcap", ctrl->bpcap);
354+
obj_add_uint(r, "nssl", le32_to_cpu(ctrl->nssl));
355+
obj_add_int(r, "plsi", ctrl->plsi);
353356
obj_add_int(r, "cntrltype", ctrl->cntrltype);
354357
obj_add_str(r, "fguid", util_uuid_to_string(ctrl->fguid));
355358
obj_add_int(r, "crdt1", le16_to_cpu(ctrl->crdt1));
356359
obj_add_int(r, "crdt2", le16_to_cpu(ctrl->crdt2));
357360
obj_add_int(r, "crdt3", le16_to_cpu(ctrl->crdt3));
361+
obj_add_int(r, "crcap", ctrl->crcap);
358362
obj_add_int(r, "nvmsr", ctrl->nvmsr);
359363
obj_add_int(r, "vwci", ctrl->vwci);
360364
obj_add_int(r, "mec", ctrl->mec);
@@ -393,8 +397,11 @@ void json_nvme_id_ctrl(struct nvme_id_ctrl *ctrl,
393397
obj_add_uint(r, "nanagrpid", le32_to_cpu(ctrl->nanagrpid));
394398
obj_add_uint(r, "pels", le32_to_cpu(ctrl->pels));
395399
obj_add_int(r, "domainid", le16_to_cpu(ctrl->domainid));
400+
obj_add_int(r, "kpioc", ctrl->kpioc);
401+
obj_add_int(r, "mptfawr", le16_to_cpu(ctrl->mptfawr));
396402
obj_add_uint128(r, "megcap", megcap);
397403
obj_add_int(r, "tmpthha", ctrl->tmpthha);
404+
obj_add_int(r, "cqt", le16_to_cpu(ctrl->cqt));
398405
obj_add_int(r, "sqes", ctrl->sqes);
399406
obj_add_int(r, "cqes", ctrl->cqes);
400407
obj_add_int(r, "maxcmd", le16_to_cpu(ctrl->maxcmd));
@@ -414,6 +421,18 @@ void json_nvme_id_ctrl(struct nvme_id_ctrl *ctrl,
414421
obj_add_uint128(r, "maxdna", maxdna);
415422
obj_add_uint(r, "maxcna", le32_to_cpu(ctrl->maxcna));
416423
obj_add_uint(r, "oaqd", le32_to_cpu(ctrl->oaqd));
424+
obj_add_int(r, "rhiri", ctrl->rhiri);
425+
obj_add_int(r, "hirt", ctrl->hirt);
426+
obj_add_int(r, "cmmrtd", le16_to_cpu(ctrl->cmmrtd));
427+
obj_add_int(r, "nmmrtd", le16_to_cpu(ctrl->nmmrtd));
428+
obj_add_int(r, "minmrtg", ctrl->minmrtg);
429+
obj_add_int(r, "maxmrtg", ctrl->maxmrtg);
430+
obj_add_int(r, "trattr", ctrl->trattr);
431+
obj_add_int(r, "mcudmq", le16_to_cpu(ctrl->mcudmq));
432+
obj_add_int(r, "mnsudmq", le16_to_cpu(ctrl->mnsudmq));
433+
obj_add_int(r, "mcmr", le16_to_cpu(ctrl->mcmr));
434+
obj_add_int(r, "nmcmr", le16_to_cpu(ctrl->nmcmr));
435+
obj_add_int(r, "mcdqpc", le16_to_cpu(ctrl->mcdqpc));
417436

418437
if (strlen(subnqn))
419438
obj_add_str(r, "subnqn", subnqn);

nvme-print-stdout.c

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
18211874
static 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+
21462215
static 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+
23842471
static 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

Comments
 (0)