lsefimmap: support persistent memory and other UEFI 2.5 features
This should accompany
76ce1de740 Translate UEFI persistent memory type
1. Add a string for the EfiPersistentMemory type 14 that was
added in UEFI 2.5.
2. Decode the memory attributes that were added in UEFI 2.5:
* NV (non-volatile)
* MORE_RELIABLE (higher reliable, e.g., mirrored memory in a system
with partial memory mirroring)
* RO (read-only)
3. Use proper IEC binary units (KiB, MiB, etc.) for power-of-two
values rather than misusing SI power-of-ten units (KB, MB, etc.)
4. The lsmmap command only decodes memory ranges sizes up to GiB scale
units. Persistent memory ranges will reach into the TiB scale.
Since 64-bit size field supports TiB, PiB, and EiB, decode all of
them for completeness.
5. In the lsefimmap command, rewrite the print statements to
* avoid rounding
* avoid a big nested if/else tree.
For example: In the sixth entry below, the value of 309MB implies
316416KB but is really reporting 316436KB.
Widen the size column to 6 digits to accommodate typical cases.
The worst case value would require 14 digits; if that happens,
let the columns get out of sync.
Old format:
Type Physical start - end #Pages Size Attributes
conv-mem
0000000000000000-
0000000000092fff 00000093 588KB UC WC WT WB
reserved
0000000000093000-
0000000000093fff 00000001 4KB UC WC WT WB
conv-mem
0000000000094000-
000000000009ffff 0000000c 48KB UC WC WT WB
conv-mem
0000000000100000-
000000000fffffff 0000ff00 255MB UC WC WT WB
BS-code
0000000010000000-
0000000010048fff 00000049 292KB UC WC WT WB
conv-mem
0000000010049000-
000000002354dfff 00013505 309MB UC WC WT WB
ldr-data
000000002354e000-
000000003ecfffff 0001b7b2 439MB UC WC WT WB
BS-data
000000003ed00000-
000000003ed7ffff 00000080 512KB UC WC WT WB
conv-mem
000000003ed80000-
000000006af5ffff 0002c1e0 705MB UC WC WT WB
reserved
000000006af60000-
000000006b55ffff 00000600 6MB UC WC WT WB
BS-data
000000006b560000-
000000006b560fff 00000001 4KB UC WC WT WB
RT-data
000000006b561000-
000000006b5e1fff 00000081 516KB RT UC WC WT WB
BS-data
000000006b5e2000-
000000006ecfafff 00003719 55MB UC WC WT WB
BS-code
000000006ecfb000-
000000006ecfbfff 00000001 4KB UC WC WT WB
conv-mem
000000006ecfc000-
00000000711fafff 000024ff 36MB UC WC WT WB
BS-data
00000000711fb000-
000000007128dfff 00000093 588KB UC WC WT WB
Unk 0d
0000000880000000-
0000000e7fffffff 00600000 24GB UC WC WT WB NV
reserved
0000001680000000-
0000001c7fffffff 00600000 24GB UC WC WT WB NV
New format:
Type Physical start - end #Pages Size Attributes
conv-mem
0000000000000000-
0000000000092fff 00000093 588KiB UC WC WT WB
reserved
0000000000093000-
0000000000093fff 00000001 4KiB UC WC WT WB
conv-mem
0000000000094000-
000000000009ffff 0000000c 48KiB UC WC WT WB
conv-mem
0000000000100000-
000000000fffffff 0000ff00 255MiB UC WC WT WB
BS-code
0000000010000000-
0000000010048fff 00000049 292KiB UC WC WT WB
conv-mem
0000000010049000-
000000002354dfff 00013505 316436KiB UC WC WT WB
ldr-data
000000002354e000-
000000003ecfffff 0001b7b2 450248KiB UC WC WT WB
BS-data
000000003ed00000-
000000003ed7ffff 00000080 512KiB UC WC WT WB
conv-mem
000000003ed80000-
000000006af5ffff 0002c1e0 722816KiB UC WC WT WB
reserved
000000006af60000-
000000006b55ffff 00000600 6MiB UC WC WT WB
BS-data
000000006b560000-
000000006b560fff 00000001 4KiB UC WC WT WB
RT-data
000000006b561000-
000000006b5e1fff 00000081 516KiB RT UC WC WT WB
BS-data
000000006b5e2000-
000000006ecfafff 00003719 56420KiB UC WC WT WB
BS-code
000000006ecfb000-
000000006ecfbfff 00000001 4KiB UC WC WT WB
conv-mem
000000006ecfc000-
0000000071222fff 00002527 38044KiB UC WC WT WB
BS-data
0000000071223000-
00000000712ddfff 000000bb 748KiB UC WC WT WB
persist
0000000880000000-
0000000e7fffffff 00600000 24GiB UC WC WT WB NV
reserved
0000001680000000-
0000001c7fffffff 00600000 24GiB UC WC WT WB NV