Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions libnvme/src/nvme/nvme-types-base.h
Original file line number Diff line number Diff line change
Expand Up @@ -6051,19 +6051,30 @@ struct nvme_lba_range_type_entry {
* @NVME_LBART_TYPE_RAID: RAID
* @NVME_LBART_TYPE_CACHE: Cache
* @NVME_LBART_TYPE_SWAP: Page / swap file
* @NVME_LBART_ATTRB_LBARO_SHIFT: LBA range overwriteable shift
* @NVME_LBART_ATTRB_HLBAR_SHIFT: Hide LBA range shift
* @NVME_LBART_ATTRB_LBARO_MASK: LBA range overwriteable mask
* @NVME_LBART_ATTRB_HLBAR_MASK: Hide LBA range mask
* @NVME_LBART_ATTRIB_TEMP: Temp
* @NVME_LBART_ATTRIB_HIDE: Hidden
*/
enum nvme_lbart {
NVME_LBART_TYPE_GP = 0,
NVME_LBART_TYPE_FS = 1,
NVME_LBART_TYPE_RAID = 2,
NVME_LBART_TYPE_CACHE = 3,
NVME_LBART_TYPE_SWAP = 4,
NVME_LBART_ATTRIB_TEMP = 1 << 0,
NVME_LBART_ATTRIB_HIDE = 1 << 1,
NVME_LBART_TYPE_GP = 0,
NVME_LBART_TYPE_FS = 1,
NVME_LBART_TYPE_RAID = 2,
NVME_LBART_TYPE_CACHE = 3,
NVME_LBART_TYPE_SWAP = 0,
NVME_LBART_ATTRB_LBARO_SHIFT = 0,
NVME_LBART_ATTRB_HLBAR_SHIFT = 1,
NVME_LBART_ATTRB_LBARO_MASK = 0x1,
NVME_LBART_ATTRB_HLBAR_MASK = 0x1,
NVME_LBART_ATTRIB_TEMP = NVME_VAL(LBART_ATTRB_LBARO),
NVME_LBART_ATTRIB_HIDE = NVME_VAL(LBART_ATTRB_HLBAR),
};

#define NVME_LBART_ATTRB_LBARO(attrb) NVME_GET(attrb, LBART_ATTRB_LBARO)
#define NVME_LBART_ATTRB_HLBAR(attrb) NVME_GET(attrb, LBART_ATTRB_HLBAR)

/**
* struct nvme_lba_range_type - LBA Range Type
* @entry: LBA range type entry. See @struct nvme_lba_range_type_entry
Expand Down Expand Up @@ -7817,7 +7828,7 @@ enum nvme_feat {
NVME_FEAT_FDP_ENABLED_SHIFT = 0,
NVME_FEAT_FDP_ENABLED_MASK = 0x1,
NVME_FEAT_FDP_INDEX_SHIFT = 8,
NVME_FEAT_FDP_INDEX_MASK = 0xf,
NVME_FEAT_FDP_INDEX_MASK = 0xff,
NVME_FEAT_FDP_EVENTS_ENABLE_SHIFT = 0,
NVME_FEAT_FDP_EVENTS_ENABLE_MASK = 0x1,
NVME_FEAT_HOST_ID_EXHID_SHIFT = 0,
Expand Down Expand Up @@ -9178,6 +9189,9 @@ nvme_feature_decode_perf_characteristics(__u32 value, __u8 *attri, bool *rvspa)
*rvspa = NVME_FEAT_PERFC_RVSPA(value);
}

#define NVME_FEAT_FDPE(v) NVME_GET(v, FEAT_FDP_ENABLED)
#define NVME_FEAT_FDPCIDX(v) NVME_GET(v, FEAT_FDP_INDEX)

#define NVME_FEAT_HOST_ID_EXHID(v) NVME_GET(v, FEAT_HOST_ID_EXHID)

static inline void
Expand Down
29 changes: 16 additions & 13 deletions src/nvme-print-stdout.c
Original file line number Diff line number Diff line change
Expand Up @@ -5018,16 +5018,19 @@ static void stdout_lba_range(struct nvme_lba_range_type *lbrt, int nr_ranges)

for (i = 0; i <= nr_ranges; i++) {
printf("\ttype : %#x - %s\n", lbrt->entry[i].type,
nvme_feature_lba_type_to_string(lbrt->entry[i].type));
printf("\tattributes : %#x - %s, %s\n", lbrt->entry[i].attributes,
(lbrt->entry[i].attributes & 0x0001) ?
"LBA range may be overwritten" :
"LBA range should not be overwritten",
((lbrt->entry[i].attributes & 0x0002) >> 1) ?
"LBA range should be hidden from the OS/EFI/BIOS" :
"LBA range should be visible from the OS/EFI/BIOS");
printf("\tslba : %#"PRIx64"\n", le64_to_cpu(lbrt->entry[i].slba));
printf("\tnlb : %#"PRIx64"\n", le64_to_cpu(lbrt->entry[i].nlb));
nvme_feature_lba_type_to_string(lbrt->entry[i].type));
printf("\tattributes : %#x - %s, %s\n",
lbrt->entry[i].attributes,
NVME_LBART_ATTRB_LBARO(lbrt->entry[i].attributes) ?
"LBA range may be overwritten" :
"LBA range should not be overwritten",
NVME_LBART_ATTRB_HLBAR(lbrt->entry[i].attributes) ?
"LBA range should be hidden from the OS/EFI/BIOS" :
"LBA range should be visible from the OS/EFI/BIOS");
printf("\tslba : %#"PRIx64"\n",
le64_to_cpu(lbrt->entry[i].slba));
printf("\tnlb : %#"PRIx64"\n",
le64_to_cpu(lbrt->entry[i].nlb));
printf("\tguid : ");
for (j = 0; j < ARRAY_SIZE(lbrt->entry[i].guid); j++)
printf("%02x", lbrt->entry[i].guid[j]);
Expand Down Expand Up @@ -5401,7 +5404,7 @@ static void stdout_feature_show_fields(enum nvme_features_id fid,
stdout_lba_range((struct nvme_lba_range_type *)buf, field);
break;
case NVME_FEAT_FID_TEMP_THRESH:
field = (result & 0x1c00000) >> 22;
field = NVME_FEAT_TT_TMPTHH(result);
printf("\tTemperature Threshold Hysteresis(TMPTHH): %s (%u K, %s)\n",
nvme_degrees_string(field), field, nvme_degrees_fahrenheit_string(field));
field = NVME_FEAT_TT_THSEL(result);
Expand Down Expand Up @@ -5603,9 +5606,9 @@ static void stdout_feature_show_fields(enum nvme_features_id fid,
break;
case NVME_FEAT_FID_FDP:
printf("\tFlexible Direct Placement Enable (FDPE) : %s\n",
(result & 0x1) ? "Yes" : "No");
NVME_FEAT_FDPE(result) ? "Yes" : "No");
printf("\tFlexible Direct Placement Configuration Index : %u\n",
(result >> 8) & 0xf);
NVME_FEAT_FDPCIDX(result));
break;
case NVME_FEAT_FID_FDP_EVENTS:
for (unsigned int i = 0; i < result; i++) {
Expand Down
Loading