diff --git a/libnvme/src/nvme/nvme-types-base.h b/libnvme/src/nvme/nvme-types-base.h index 577b164907..f2504c7e0f 100644 --- a/libnvme/src/nvme/nvme-types-base.h +++ b/libnvme/src/nvme/nvme-types-base.h @@ -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 @@ -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, @@ -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 diff --git a/src/nvme-print-stdout.c b/src/nvme-print-stdout.c index 933a90f58e..cd71a544a0 100644 --- a/src/nvme-print-stdout.c +++ b/src/nvme-print-stdout.c @@ -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]); @@ -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); @@ -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++) {