mirror of
https://git.jff.email/cgit/dmidecode.git
synced 2026-08-07 18:02:26 +00:00
Merge branch 'feature/upstream' into develop
This commit is contained in:
commit
d6cfcd5e4d
6
AUTHORS
6
AUTHORS
@ -21,6 +21,9 @@ Roy Franz <roy.franz@linaro.org>
|
||||
Tyler Bell <tyler.bell@hp.com>
|
||||
Xie XiuQi <xiexiuqi@huawei.com>
|
||||
Petr Oros <poros@redhat.com>
|
||||
Prabhakar Pujeri <prabhakar.pujeri@dell.com>
|
||||
Erwan Velu <e.velu@criteo.com>
|
||||
Jerry Hoemann <jerry.hoemann@hpe.com>
|
||||
|
||||
MANY THANKS TO (IN CHRONOLOGICAL ORDER)
|
||||
Werner Heuser
|
||||
@ -90,3 +93,6 @@ Andrey Matveyev
|
||||
Stefan Tauner
|
||||
Naga Chumbalkar
|
||||
Jens Rosenboom
|
||||
Lianbo Jiang
|
||||
Tianjia Zhang
|
||||
Ivan Tkachenko
|
||||
|
||||
19
NEWS
19
NEWS
@ -1,3 +1,22 @@
|
||||
Version 3.4 (Mon Jun 27 2022)
|
||||
- Support for SMBIOS 3.4.0. This includes new memory device types, new
|
||||
processor upgrades, new slot types and characteristics, decoding of memory
|
||||
module extended speed, new system slot types, new processor characteristics
|
||||
and new format of Processor ID.
|
||||
- Support for SMBIOS 3.5.0. This includes new processor upgrades, BIOS
|
||||
characteristics, new slot characteristics, new on-board device types, new
|
||||
pointing device interface types, and a new record type (type 45 -
|
||||
Firmware Inventory Information).
|
||||
- Decode HPE OEM records 194, 199, 203, 236, 237, 238 ans 240.
|
||||
- Bug fixes:
|
||||
Fix OEM vendor name matching
|
||||
Fix ASCII filtering of strings
|
||||
Fix crash with option -u
|
||||
- Minor improvements:
|
||||
Skip details of uninstalled memory modules
|
||||
Don't display the raw CPU ID in quiet mode
|
||||
Improve the formatting of the manual pages
|
||||
|
||||
Version 3.3 (Wed Oct 14 2020)
|
||||
- [BUILD] Allow overriding build settings from the environment.
|
||||
- [COMPATIBILITY] Document how the UUID fields are interpreted.
|
||||
|
||||
724
dmidecode.c
724
dmidecode.c
File diff suppressed because it is too large
Load Diff
16
dmidecode.h
16
dmidecode.h
@ -31,7 +31,23 @@ struct dmi_header
|
||||
u8 *data;
|
||||
};
|
||||
|
||||
enum cpuid_type
|
||||
{
|
||||
cpuid_none,
|
||||
cpuid_80386,
|
||||
cpuid_80486,
|
||||
cpuid_arm_legacy,
|
||||
cpuid_arm_soc_id,
|
||||
cpuid_x86_intel,
|
||||
cpuid_x86_amd,
|
||||
};
|
||||
|
||||
extern enum cpuid_type cpuid_type;
|
||||
|
||||
int is_printable(const u8 *data, int len);
|
||||
const char *dmi_string(const struct dmi_header *dm, u8 s);
|
||||
void dmi_print_memory_size(const char *addr, u64 code, int shift);
|
||||
void dmi_print_cpuid(void (*print_cb)(const char *name, const char *format, ...),
|
||||
const char *label, enum cpuid_type sig, const u8 *p);
|
||||
|
||||
#endif
|
||||
|
||||
576
dmioem.c
576
dmioem.c
@ -23,8 +23,10 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "types.h"
|
||||
#include "util.h"
|
||||
#include "dmidecode.h"
|
||||
#include "dmioem.h"
|
||||
#include "dmiopt.h"
|
||||
#include "dmioutput.h"
|
||||
|
||||
/*
|
||||
@ -42,34 +44,46 @@ enum DMI_VENDORS
|
||||
};
|
||||
|
||||
static enum DMI_VENDORS dmi_vendor = VENDOR_UNKNOWN;
|
||||
static const char *dmi_product = NULL;
|
||||
|
||||
/*
|
||||
* Remember the system vendor for later use. We only actually store the
|
||||
* value if we know how to decode at least one specific entry type for
|
||||
* that vendor.
|
||||
*/
|
||||
void dmi_set_vendor(const char *s)
|
||||
void dmi_set_vendor(const char *v, const char *p)
|
||||
{
|
||||
int len;
|
||||
const struct { const char *str; enum DMI_VENDORS id; } vendor[] = {
|
||||
{ "Acer", VENDOR_ACER },
|
||||
{ "HP", VENDOR_HP },
|
||||
{ "Hewlett-Packard", VENDOR_HP },
|
||||
{ "HPE", VENDOR_HPE },
|
||||
{ "Hewlett Packard Enterprise", VENDOR_HPE },
|
||||
{ "IBM", VENDOR_IBM },
|
||||
{ "LENOVO", VENDOR_LENOVO },
|
||||
};
|
||||
unsigned int i;
|
||||
size_t len;
|
||||
|
||||
/*
|
||||
* Often DMI strings have trailing spaces. Ignore these
|
||||
* when checking for known vendor names.
|
||||
*/
|
||||
len = strlen(s);
|
||||
while (len && s[len - 1] == ' ')
|
||||
len = v ? strlen(v) : 0;
|
||||
while (len && v[len - 1] == ' ')
|
||||
len--;
|
||||
|
||||
if (strncmp(s, "Acer", len) == 0)
|
||||
dmi_vendor = VENDOR_ACER;
|
||||
else if (strncmp(s, "HP", len) == 0 || strncmp(s, "Hewlett-Packard", len) == 0)
|
||||
dmi_vendor = VENDOR_HP;
|
||||
else if (strncmp(s, "HPE", len) == 0 || strncmp(s, "Hewlett Packard Enterprise", len) == 0)
|
||||
dmi_vendor = VENDOR_HPE;
|
||||
else if (strncmp(s, "IBM", len) == 0)
|
||||
dmi_vendor = VENDOR_IBM;
|
||||
else if (strncmp(s, "LENOVO", len) == 0)
|
||||
dmi_vendor = VENDOR_LENOVO;
|
||||
for (i = 0; i < ARRAY_SIZE(vendor); i++)
|
||||
{
|
||||
if (strlen(vendor[i].str) == len &&
|
||||
strncmp(v, vendor[i].str, len) == 0)
|
||||
{
|
||||
dmi_vendor = vendor[i].id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
dmi_product = p;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -133,7 +147,7 @@ static void dmi_print_hp_net_iface_rec(u8 id, u8 bus, u8 dev, const u8 *mac)
|
||||
if (id == 0xFF)
|
||||
id = ++nic_ctr;
|
||||
|
||||
sprintf(attr, "NIC %hu", id);
|
||||
sprintf(attr, "NIC %hhu", id);
|
||||
if (dev == 0x00 && bus == 0x00)
|
||||
pr_attr(attr, "Disabled");
|
||||
else if (dev == 0xFF && bus == 0xFF)
|
||||
@ -147,15 +161,347 @@ static void dmi_print_hp_net_iface_rec(u8 id, u8 bus, u8 dev, const u8 *mac)
|
||||
}
|
||||
}
|
||||
|
||||
typedef enum { G6 = 6, G7, G8, G9, G10, G10P } dmi_hpegen_t;
|
||||
|
||||
static int dmi_hpegen(const char *s)
|
||||
{
|
||||
struct { const char *name; dmi_hpegen_t gen; } table[] = {
|
||||
{ "Gen10 Plus", G10P },
|
||||
{ "Gen10", G10 },
|
||||
{ "Gen9", G9 },
|
||||
{ "Gen8", G8 },
|
||||
{ "G7", G7 },
|
||||
{ "G6", G6 },
|
||||
};
|
||||
unsigned int i;
|
||||
|
||||
if (!strstr(s, "ProLiant") && !strstr(s, "Apollo") &&
|
||||
!strstr(s, "Synergy") && !strstr(s, "Edgeline"))
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(table); i++) {
|
||||
if (strstr(s, table[i].name))
|
||||
return(table[i].gen);
|
||||
}
|
||||
|
||||
return (dmi_vendor == VENDOR_HPE) ? G10P : G6;
|
||||
}
|
||||
|
||||
static void dmi_hp_240_attr(u64 defined, u64 set)
|
||||
{
|
||||
static const char *attributes[] = {
|
||||
"Updatable",
|
||||
"Reset Required",
|
||||
"Authentication Required",
|
||||
"In Use",
|
||||
"UEFI Image",
|
||||
};
|
||||
unsigned int i;
|
||||
|
||||
pr_attr("Attributes Defined/Set", NULL);
|
||||
for (i = 0; i < ARRAY_SIZE(attributes); i++)
|
||||
{
|
||||
if (!(defined.l & (1UL << i)))
|
||||
continue;
|
||||
pr_subattr(attributes[i], "%s", set.l & (1UL << i) ? "Yes" : "No");
|
||||
}
|
||||
}
|
||||
|
||||
static void dmi_hp_203_assoc_hndl(const char *fname, u16 num)
|
||||
{
|
||||
if (opt.flags & FLAG_QUIET)
|
||||
return;
|
||||
|
||||
if (num == 0xFFFE)
|
||||
pr_attr(fname, "N/A");
|
||||
else
|
||||
pr_attr(fname, "0x%04X", num);
|
||||
}
|
||||
|
||||
static void dmi_hp_203_pciinfo(const char *fname, u16 num)
|
||||
{
|
||||
if (num == 0xFFFF)
|
||||
pr_attr(fname, "Device Not Present");
|
||||
else
|
||||
pr_attr(fname, "0x%04x", num);
|
||||
}
|
||||
|
||||
static void dmi_hp_203_bayenc(const char *fname, u8 num)
|
||||
{
|
||||
switch (num)
|
||||
{
|
||||
case 0x00:
|
||||
pr_attr(fname, "Unknown");
|
||||
break;
|
||||
case 0xff:
|
||||
pr_attr(fname, "Do Not Display");
|
||||
break;
|
||||
default:
|
||||
pr_attr(fname, "%d", num);
|
||||
}
|
||||
}
|
||||
|
||||
static void dmi_hp_203_devtyp(const char *fname, unsigned int code)
|
||||
{
|
||||
const char *str = "Reserved";
|
||||
static const char *type[] = {
|
||||
"Unknown", /* 0x00 */
|
||||
"Reserved",
|
||||
"Reserved",
|
||||
"Flexible LOM",
|
||||
"Embedded LOM",
|
||||
"NIC in a Slot",
|
||||
"Storage Controller",
|
||||
"Smart Array Storage Controller",
|
||||
"USB Hard Disk",
|
||||
"Other PCI Device",
|
||||
"RAM Disk",
|
||||
"Firmware Volume",
|
||||
"UEFI Shell",
|
||||
"Generic UEFI USB Boot Entry",
|
||||
"Dynamic Smart Array Controller",
|
||||
"File",
|
||||
"NVME Hard Drive",
|
||||
"NVDIMM" /* 0x11 */
|
||||
};
|
||||
|
||||
if (code < ARRAY_SIZE(type))
|
||||
str = type[code];
|
||||
|
||||
pr_attr(fname, "%s", str);
|
||||
}
|
||||
|
||||
static void dmi_hp_203_devloc(const char *fname, unsigned int code)
|
||||
{
|
||||
const char *str = "Reserved";
|
||||
static const char *location[] = {
|
||||
"Unknown", /* 0x00 */
|
||||
"Embedded",
|
||||
"iLO Virtual Media",
|
||||
"Front USB Port",
|
||||
"Rear USB Port",
|
||||
"Internal USB",
|
||||
"Internal SD Card",
|
||||
"Internal Virutal USB (Embedded NAND)",
|
||||
"Embedded SATA Port",
|
||||
"Embedded Smart Array",
|
||||
"PCI Slot",
|
||||
"RAM Memory",
|
||||
"USB",
|
||||
"Dynamic Smart Array Controller",
|
||||
"URL",
|
||||
"NVMe Drive Bay" /* 0x0F */
|
||||
};
|
||||
|
||||
if (code < ARRAY_SIZE(location))
|
||||
str = location[code];
|
||||
|
||||
pr_attr(fname, "%s", str);
|
||||
}
|
||||
|
||||
static void dmi_hp_238_loc(const char *fname, unsigned int code)
|
||||
{
|
||||
const char *str = "Reserved";
|
||||
static const char *location[] = {
|
||||
"Internal", /* 0x00 */
|
||||
"Front of Server",
|
||||
"Rear of Server",
|
||||
"Embedded internal SD Card",
|
||||
"iLO USB",
|
||||
"HP NAND Controller (USX 2065 or other)",
|
||||
"Reserved",
|
||||
"Debug Port", /* 0x07 */
|
||||
};
|
||||
|
||||
if (code < ARRAY_SIZE(location))
|
||||
str = location[code];
|
||||
|
||||
pr_attr(fname, "%s", str);
|
||||
}
|
||||
|
||||
static void dmi_hp_238_flags(const char *fname, unsigned int code)
|
||||
{
|
||||
const char *str = "Reserved";
|
||||
static const char *flags[] = {
|
||||
"Not Shared", /* 0x00 */
|
||||
"Shared with physical switch",
|
||||
"Shared with automatic control", /* 0x02 */
|
||||
};
|
||||
|
||||
if (code < ARRAY_SIZE(flags))
|
||||
str = flags[code];
|
||||
|
||||
pr_attr(fname, "%s", str);
|
||||
}
|
||||
|
||||
static void dmi_hp_238_speed(const char *fname, unsigned int code)
|
||||
{
|
||||
const char *str = "Reserved";
|
||||
static const char *speed[] = {
|
||||
"Reserved", /* 0x00 */
|
||||
"USB 1.1 Full Speed",
|
||||
"USB 2.0 High Speed",
|
||||
"USB 3.0 Super Speed" /* 0x03 */
|
||||
};
|
||||
|
||||
if (code < ARRAY_SIZE(speed))
|
||||
str = speed[code];
|
||||
|
||||
pr_attr(fname, "%s", str);
|
||||
}
|
||||
|
||||
static int dmi_decode_hp(const struct dmi_header *h)
|
||||
{
|
||||
u8 *data = h->data;
|
||||
int nic, ptr;
|
||||
u32 feat;
|
||||
const char *company = (dmi_vendor == VENDOR_HP) ? "HP" : "HPE";
|
||||
int gen;
|
||||
|
||||
gen = dmi_hpegen(dmi_product);
|
||||
if (gen < 0)
|
||||
return 0;
|
||||
|
||||
switch (h->type)
|
||||
{
|
||||
case 194:
|
||||
/*
|
||||
* Vendor Specific: Super IO Enable/Disable Features
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* -------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xC2, Super IO Enable/Disable Indicator
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | Dev Status | BYTE | Device Status
|
||||
*/
|
||||
pr_handle_name("%s ProLiant Super IO Enable/Disable Indicator", company);
|
||||
if (h->length < 0x05) break;
|
||||
feat = data[0x04];
|
||||
pr_attr("Serial Port A", "%s", feat & (1 << 0) ? "Enabled" : "Disabled");
|
||||
pr_attr("Serial Port B", "%s", feat & (1 << 1) ? "Enabled" : "Disabled");
|
||||
pr_attr("Parallel Port", "%s", feat & (1 << 2) ? "Enabled" : "Disabled");
|
||||
pr_attr("Floppy Disk Port", "%s", feat & (1 << 3) ? "Enabled" : "Disabled");
|
||||
pr_attr("Virtual Serial Port", "%s", feat & (1 << 4) ? "Enabled" : "Disabled");
|
||||
break;
|
||||
|
||||
case 199:
|
||||
/*
|
||||
* Vendor Specific: CPU Microcode Patch
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* -------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xC7, CPU Microcode Patch
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | Patch Info | Varies| { <DWORD: ID, DWORD Date, DWORD CPUID> ...}
|
||||
*/
|
||||
if (gen < G9) return 0;
|
||||
pr_handle_name("%s ProLiant CPU Microcode Patch Support Info", company);
|
||||
|
||||
for (ptr = 0x4; ptr + 12 <= h->length; ptr += 12) {
|
||||
u32 cpuid = DWORD(data + ptr + 2 * 4);
|
||||
u32 date;
|
||||
|
||||
/* AMD omits BaseFamily. Reconstruction valid on family >= 15. */
|
||||
if (cpuid_type == cpuid_x86_amd)
|
||||
cpuid = ((cpuid & 0xfff00) << 8) | 0x0f00 | (cpuid & 0xff);
|
||||
|
||||
dmi_print_cpuid(pr_attr, "CPU ID", cpuid_type, (u8 *) &cpuid);
|
||||
|
||||
date = DWORD(data + ptr + 4);
|
||||
pr_subattr("Date", "%04x-%02x-%02x",
|
||||
date & 0xffff, (date >> 24) & 0xff, (date >> 16) & 0xff);
|
||||
pr_subattr("Patch", "0x%X", DWORD(data + ptr));
|
||||
}
|
||||
break;
|
||||
|
||||
case 203:
|
||||
/*
|
||||
* Vendor Specific: HP Device Correlation Record
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* -------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xCB, Correlation Record
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | Assoc Device | WORD | Handle of Associated Type 9 or Type 41 Record
|
||||
* 0x06 | Assoc SMBus | WORD | Handle of Associated Type 228 SMBus Segment Record
|
||||
* 0x08 | PCI Vendor ID| WORD | PCI Vendor ID of device 0xFFFF -> not present
|
||||
* 0x0A | PCI Device ID| WORD | PCI Device ID of device 0xFFFF -> not present
|
||||
* 0x0C | PCI SubVendor| WORD | PCI Sub Vendor ID of device 0xFFFF -> not present
|
||||
* 0x0E | PCI SubDevice| WORD | PCI Sub Device ID of device 0xFFFF -> not present
|
||||
* 0x10 | Class Code | BYTE | PCI Class Code of Endpoint. 0xFF if device not present.
|
||||
* 0x11 | Class SubCode| BYTE | PCI Sub Class Code of Endpoint. 0xFF if device not present.
|
||||
* 0x12 | Parent Handle| WORD |
|
||||
* 0x14 | Flags | WORD |
|
||||
* 0x16 | Device Type | BYTE | UEFI only
|
||||
* 0x17 | Device Loc | BYTE | Device Location
|
||||
* 0x18 | Dev Instance | BYTE | Device Instance
|
||||
* 0x19 | Sub Instance | BYTE | NIC Port # or NVMe Drive Bay
|
||||
* 0x1A | Bay | BYTE |
|
||||
* 0x1B | Enclosure | BYTE |
|
||||
* 0x1C | UEFI Dev Path| STRING| String number for UEFI Device Path
|
||||
* 0x1D | Struct Name | STRING| String number for UEFI Device Structured Name
|
||||
* 0x1E | Device Name | STRING| String number for UEFI Device Name
|
||||
* 0x1F | UEFI Location| STRING| String number for UEFI Location
|
||||
* 0x20 | Assoc Handle | WORD | Type 9 Handle. Defined if Flags[0] == 1.
|
||||
* 0x22 | Part Number | STRING| PCI Device Part Number
|
||||
* 0x23 | Serial Number| STRING| PCI Device Serial Number
|
||||
* 0x24 | Seg Number | WORD | Segment Group number. 0 -> Single group topology
|
||||
* 0x26 | Bus Number | BYTE | PCI Device Bus Number
|
||||
* 0x27 | Func Number | BTYE | PCI Device and Function Number
|
||||
*/
|
||||
if (gen < G9) return 0;
|
||||
pr_handle_name("%s Device Correlation Record", company);
|
||||
if (h->length < 0x1F) break;
|
||||
dmi_hp_203_assoc_hndl("Associated Device Record", WORD(data + 0x04));
|
||||
dmi_hp_203_assoc_hndl("Associated SMBus Record", WORD(data + 0x06));
|
||||
if (WORD(data + 0x08) == 0xffff && WORD(data + 0x0A) == 0xffff &&
|
||||
WORD(data + 0x0C) == 0xffff && WORD(data + 0x0E) == 0xffff &&
|
||||
data[0x10] == 0xFF && data[0x11] == 0xFF)
|
||||
{
|
||||
pr_attr("PCI Device Info", "Device Not Present");
|
||||
}
|
||||
else
|
||||
{
|
||||
dmi_hp_203_pciinfo("PCI Vendor ID", WORD(data + 0x08));
|
||||
dmi_hp_203_pciinfo("PCI Device ID", WORD(data + 0x0A));
|
||||
dmi_hp_203_pciinfo("PCI Sub Vendor ID", WORD(data + 0x0C));
|
||||
dmi_hp_203_pciinfo("PCI Sub Device ID", WORD(data + 0x0E));
|
||||
dmi_hp_203_pciinfo("PCI Class Code", (char)data[0x10]);
|
||||
dmi_hp_203_pciinfo("PCI Sub Class Code", (char)data[0x11]);
|
||||
}
|
||||
dmi_hp_203_assoc_hndl("Parent Handle", WORD(data + 0x12));
|
||||
pr_attr("Flags", "0x%04X", WORD(data + 0x14));
|
||||
dmi_hp_203_devtyp("Device Type", data[0x16]);
|
||||
dmi_hp_203_devloc("Device Location", data[0x17]);
|
||||
pr_attr("Device Instance", "%d", data[0x18]);
|
||||
pr_attr("Device Sub-Instance", "%d", data[0x19]);
|
||||
dmi_hp_203_bayenc("Bay", data[0x1A]);
|
||||
dmi_hp_203_bayenc("Enclosure", data[0x1B]);
|
||||
pr_attr("Device Path", "%s", dmi_string(h, data[0x1C]));
|
||||
pr_attr("Structured Name", "%s", dmi_string(h, data[0x1D]));
|
||||
pr_attr("Device Name", "%s", dmi_string(h, data[0x1E]));
|
||||
if (h->length < 0x22) break;
|
||||
pr_attr("UEFI Location", "%s", dmi_string(h, data[0x1F]));
|
||||
if (!(opt.flags & FLAG_QUIET))
|
||||
{
|
||||
if (WORD(data + 0x14) & 1)
|
||||
pr_attr("Associated Real/Phys Handle", "0x%04X",
|
||||
WORD(data + 0x20));
|
||||
else
|
||||
pr_attr("Associated Real/Phys Handle", "N/A");
|
||||
}
|
||||
if (h->length < 0x24) break;
|
||||
pr_attr("PCI Part Number", "%s", dmi_string(h, data[0x22]));
|
||||
pr_attr("Serial Number", "%s", dmi_string(h, data[0x23]));
|
||||
if (h->length < 0x28) break;
|
||||
pr_attr("Segment Group Number", "0x%04x", WORD(data + 0x24));
|
||||
pr_attr("PCI Device", "%02x:%02x.%x",
|
||||
data[0x26], data[0x27] >> 3, data[0x27] & 7);
|
||||
break;
|
||||
|
||||
case 204:
|
||||
/*
|
||||
* Vendor Specific: HPE ProLiant System/Rack Locator
|
||||
@ -208,35 +554,6 @@ static int dmi_decode_hp(const struct dmi_header *h)
|
||||
}
|
||||
break;
|
||||
|
||||
case 233:
|
||||
/*
|
||||
* Vendor Specific: HPE ProLiant NIC MAC Information
|
||||
*
|
||||
* This prints the BIOS NIC number,
|
||||
* PCI bus/device/function, and MAC address
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* -------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xE9, NIC structure
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | Grp No | WORD | 0 for single segment
|
||||
* 0x06 | Bus No | BYTE | PCI Bus
|
||||
* 0x07 | Dev No | BYTE | PCI Device/Function No
|
||||
* 0x08 | MAC | 32B | MAC addr padded w/ 0s
|
||||
* 0x28 | Port No| BYTE | Each NIC maps to a Port
|
||||
*/
|
||||
pr_handle_name("%s BIOS PXE NIC PCI and MAC Information",
|
||||
company);
|
||||
if (h->length < 0x0E) break;
|
||||
/* If the record isn't long enough, we don't have an ID
|
||||
* use 0xFF to use the internal counter.
|
||||
* */
|
||||
nic = h->length > 0x28 ? data[0x28] : 0xFF;
|
||||
dmi_print_hp_net_iface_rec(nic, data[0x06], data[0x07],
|
||||
&data[0x08]);
|
||||
break;
|
||||
|
||||
case 212:
|
||||
/*
|
||||
* Vendor Specific: HPE 64-bit CRU Information
|
||||
@ -282,6 +599,177 @@ static int dmi_decode_hp(const struct dmi_header *h)
|
||||
pr_subattr("UEFI", "%s", feat & 0x1400 ? "Yes" : "No");
|
||||
break;
|
||||
|
||||
case 233:
|
||||
/*
|
||||
* Vendor Specific: HPE ProLiant NIC MAC Information
|
||||
*
|
||||
* This prints the BIOS NIC number,
|
||||
* PCI bus/device/function, and MAC address
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* -------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xE9, NIC structure
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | Grp No | WORD | 0 for single segment
|
||||
* 0x06 | Bus No | BYTE | PCI Bus
|
||||
* 0x07 | Dev No | BYTE | PCI Device/Function No
|
||||
* 0x08 | MAC | 32B | MAC addr padded w/ 0s
|
||||
* 0x28 | Port No| BYTE | Each NIC maps to a Port
|
||||
*/
|
||||
pr_handle_name("%s BIOS PXE NIC PCI and MAC Information",
|
||||
company);
|
||||
if (h->length < 0x0E) break;
|
||||
/* If the record isn't long enough, we don't have an ID
|
||||
* use 0xFF to use the internal counter.
|
||||
* */
|
||||
nic = h->length > 0x28 ? data[0x28] : 0xFF;
|
||||
dmi_print_hp_net_iface_rec(nic, data[0x06], data[0x07],
|
||||
&data[0x08]);
|
||||
break;
|
||||
|
||||
case 236:
|
||||
/*
|
||||
* Vendor Specific: HPE ProLiant HDD Backplane
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* ---------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xEC, HDD Backplane
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | I2C Address| BYTE | Backplane FRU I2C Address
|
||||
* 0x05 | Box Number | WORD | Backplane Box Number
|
||||
* 0x07 | NVRAM ID | WORD | Backplane NVRAM ID
|
||||
* 0x09 | WWID | QWORD | SAS Expander WWID
|
||||
* 0x11 | Total Bays | BYTE | Total SAS Bays
|
||||
* 0x12 | A0 Bays | BYTE | (deprecated) Number of SAS drive bays behind port 0xA0
|
||||
* 0x13 | A2 Bays | BYTE | (deprecated) Number of SAS drive bays behind port 0xA2
|
||||
* 0x14 | Name | STRING| (deprecated) Backplane Name
|
||||
*/
|
||||
pr_handle_name("%s HDD Backplane FRU Information", company);
|
||||
if (h->length < 0x08) break;
|
||||
pr_attr("FRU I2C Address", "0x%X raw(0x%X)", data[0x4] >> 1, data[0x4]);
|
||||
pr_attr("Box Number", "%d", WORD(data + 0x5));
|
||||
pr_attr("NVRAM ID", "0x%X", WORD(data + 0x7));
|
||||
if (h->length < 0x11) break;
|
||||
pr_attr("SAS Expander WWID", "0x%X", QWORD(data + 0x9));
|
||||
if (h->length < 0x12) break;
|
||||
pr_attr("Total SAS Bays", "%d", data[0x11]);
|
||||
if (h->length < 0x15) break;
|
||||
if (gen < G10P) {
|
||||
pr_attr("A0 Bay Count", "%d", data[0x12]);
|
||||
pr_attr("A2 Bay Count", "%d", data[0x13]);
|
||||
pr_attr("Backplane Name", "%s", dmi_string(h, data[0x14]));
|
||||
}
|
||||
break;
|
||||
|
||||
case 237:
|
||||
/*
|
||||
* Vendor Specific: HPE DIMM Vendor Part Number Information
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* ---------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xED, DIMM Vendor Part Number information record
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | Hand Assoc | WORD | Handle to map to Type 17
|
||||
* 0x06 | Manufacture|STRING | DIMM Manufacturer
|
||||
* 0x07 | Part Number|STRING | DIMM Manufacturer's Part Number
|
||||
* 0x08 | Serial Num |STRING | DIMM Vendor Serial Number
|
||||
* 0x09 | Spare Part |STRING | DIMM Spare Part Number
|
||||
*/
|
||||
if (gen < G9) return 0;
|
||||
pr_handle_name("%s DIMM Vendor Information", company);
|
||||
if (h->length < 0x08) break;
|
||||
if (!(opt.flags & FLAG_QUIET))
|
||||
pr_attr("Associated Handle", "0x%04X", WORD(data + 0x4));
|
||||
pr_attr("DIMM Manufacturer", "%s", dmi_string(h, data[0x06]));
|
||||
pr_attr("DIMM Manufacturer Part Number", "%s", dmi_string(h, data[0x07]));
|
||||
if (h->length < 0x09) break;
|
||||
pr_attr("DIMM Vendor Serial Number", "%s", dmi_string(h, data[0x08]));
|
||||
if (h->length < 0x0A) break;
|
||||
pr_attr("DIMM Spare Part Number", "%s", dmi_string(h, data[0x09]));
|
||||
break;
|
||||
|
||||
case 238:
|
||||
/*
|
||||
* Vendor Specific: HPE USB Port Connector Correlation Record
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* ---------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xEE, HP Device Correlation Record
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | Hand Assoc | WORD | Handle to map to Type 8
|
||||
* 0x06 | Parent Bus | BYTE | PCI Bus number of USB controller of this port
|
||||
* 0x07 | Par Dev/Fun| BYTE | PCI Dev/Fun of USB Controller of this port
|
||||
* 0x08 | Location | BYTE | Enumerated value of location of USB port
|
||||
* 0x09 | Flags | WORD | USB Shared Management Port
|
||||
* 0x0B | Port Inst | BYTE | Instance number for this type of USB port
|
||||
* 0x0C | Parent Hub | BYTE | Instance number of internal Hub
|
||||
* 0x0D | Port Speed | BYTE | Enumerated value of speed configured by BIOS
|
||||
* 0x0E | Device Path| STRING| UEFI Device Path of USB endpoint
|
||||
*/
|
||||
if (gen < G9) return 0;
|
||||
pr_handle_name("%s Proliant USB Port Connector Correlation Record", company);
|
||||
if (h->length < 0x0F) break;
|
||||
if (!(opt.flags & FLAG_QUIET))
|
||||
pr_attr("Associated Handle", "0x%04X", WORD(data + 0x4));
|
||||
pr_attr("PCI Device", "%02x:%02x.%x", data[0x6],
|
||||
data[0x7] >> 3, data[0x7] & 0x7);
|
||||
dmi_hp_238_loc("Location", data[0x8]);
|
||||
dmi_hp_238_flags("Management Port", WORD(data + 0x9));
|
||||
pr_attr("Port Instance", "%d", data[0xB]);
|
||||
if (data[0xC] != 0xFE)
|
||||
pr_attr("Parent Hub Port Instance", "%d", data[0xC]);
|
||||
else
|
||||
pr_attr("Parent Hub Port Instance", "N/A");
|
||||
dmi_hp_238_speed("Port Speed Capability", data[0xD]);
|
||||
pr_attr("Device Path", "%s", dmi_string(h, data[0xE]));
|
||||
break;
|
||||
|
||||
case 240:
|
||||
/*
|
||||
* Vendor Specific: HPE Proliant Inventory Record
|
||||
*
|
||||
* Reports firmware version information for devices that report their
|
||||
* firmware using their UEFI drivers. Additionally provides association
|
||||
* with other SMBIOS records, such as Type 203 (which in turn is
|
||||
* associated with Types 9, 41, and 228).
|
||||
*
|
||||
* Offset | Name | Width | Description
|
||||
* ---------------------------------------
|
||||
* 0x00 | Type | BYTE | 0xF0, HP Firmware Inventory Record
|
||||
* 0x01 | Length | BYTE | Length of structure
|
||||
* 0x02 | Handle | WORD | Unique handle
|
||||
* 0x04 | Hndl Assoc | WORD | Handle to map to Type 203
|
||||
* 0x06 | Pkg Vers | DWORD | FW Vers Release of All FW in Device
|
||||
* 0x0A | Ver String | STRING| FW Version String
|
||||
* 0x0B | Image Size | QWORD | FW image size (bytes)
|
||||
* 0x13 | Attributes | QWORD | Bitfield: Is attribute defined?
|
||||
* 0x1B | Attr Set | QWORD | BitField: If defined, is attribute set?
|
||||
* 0x23 | Version | DWORD | Lowest supported version.
|
||||
*/
|
||||
pr_handle_name("%s Proliant Inventory Record", company);
|
||||
if (h->length < 0x27) break;
|
||||
if (!(opt.flags & FLAG_QUIET))
|
||||
pr_attr("Associated Handle", "0x%04X", WORD(data + 0x4));
|
||||
pr_attr("Package Version", "0x%08X", DWORD(data + 0x6));
|
||||
pr_attr("Version String", "%s", dmi_string(h, data[0x0A]));
|
||||
|
||||
if (DWORD(data + 0x0B))
|
||||
dmi_print_memory_size("Image Size", QWORD(data + 0xB), 0);
|
||||
else
|
||||
pr_attr("Image Size", "Not Available");
|
||||
|
||||
dmi_hp_240_attr(QWORD(data + 0x13), QWORD(data + 0x1B));
|
||||
|
||||
if (DWORD(data + 0x23))
|
||||
pr_attr("Lowest Supported Version", "0x%08X", DWORD(data + 0x23));
|
||||
else
|
||||
pr_attr("Lowest Supported Version", "Not Available");
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
2
dmioem.h
2
dmioem.h
@ -21,5 +21,5 @@
|
||||
|
||||
struct dmi_header;
|
||||
|
||||
void dmi_set_vendor(const char *s);
|
||||
void dmi_set_vendor(const char *s, const char *p);
|
||||
int dmi_decode_oem(const struct dmi_header *h);
|
||||
|
||||
@ -5,7 +5,7 @@ biosdecode \- \s-1BIOS\s0 information decoder
|
||||
.\"
|
||||
.SH SYNOPSIS
|
||||
.B biosdecode
|
||||
.RB [ OPTIONS ]
|
||||
.RI [ OPTIONS ]
|
||||
.\"
|
||||
.SH DESCRIPTION
|
||||
.B biosdecode
|
||||
@ -59,11 +59,12 @@ program.
|
||||
.\"
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.BR "-d" ", " "--dev-mem FILE"
|
||||
Read memory from device \fBFILE\fR (default: \fB/dev/mem\fR)
|
||||
.BR "-d" ", " "--dev-mem \fIFILE\fP"
|
||||
Read memory from device \fIFILE\fP (default: \fI/dev/mem\fP)
|
||||
.TP
|
||||
.BR " " " " "--pir full"
|
||||
Decode the details of the PCI IRQ routing table
|
||||
.BR " " " " "--pir \fBfull\fP"
|
||||
Decode the details of the PCI IRQ routing table.
|
||||
Only \fBfull\fP mode is supported.
|
||||
.TP
|
||||
.BR "-h" ", " "--help"
|
||||
Display usage information and exit
|
||||
|
||||
114
man/dmidecode.8
114
man/dmidecode.8
@ -5,7 +5,7 @@ dmidecode \- \s-1DMI\s0 table decoder
|
||||
.\"
|
||||
.SH SYNOPSIS
|
||||
.B dmidecode
|
||||
.RB [ OPTIONS ]
|
||||
.RI [ OPTIONS ]
|
||||
.\"
|
||||
.SH DESCRIPTION
|
||||
.B dmidecode
|
||||
@ -63,35 +63,53 @@ and serial number.
|
||||
.\"
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.BR "-d" ", " "--dev-mem FILE"
|
||||
Read memory from device \fBFILE\fR (default: \fB/dev/mem\fR)
|
||||
.BR "-d" ", " "--dev-mem \fIFILE\fP"
|
||||
Read memory from device \fIFILE\fP (default: \fI/dev/mem\fP)
|
||||
.TP
|
||||
.BR "-q" ", " "--quiet"
|
||||
Be less verbose. Unknown, inactive and \s-1OEM\s0-specific entries are not
|
||||
displayed. Meta-data and handle references are hidden.
|
||||
.TP
|
||||
.BR "-s" ", " "--string KEYWORD"
|
||||
Only display the value of the \s-1DMI\s0 string identified by \fBKEYWORD\fR.
|
||||
\fBKEYWORD\fR must be a keyword from the following list: \fBbios-vendor\fR,
|
||||
\fBbios-version\fR, \fBbios-release-date\fR,
|
||||
\fBbios-revision\fR, \fBfirmware-revision\fR,
|
||||
\fBsystem-manufacturer\fR, \fBsystem-product-name\fR,
|
||||
\fBsystem-version\fR, \fBsystem-serial-number\fR,
|
||||
\fBsystem-uuid\fR, \fBsystem-sku-number\fR, \fBsystem-family\fR,
|
||||
\fBbaseboard-manufacturer\fR, \fBbaseboard-product-name\fR,
|
||||
\fBbaseboard-version\fR, \fBbaseboard-serial-number\fR,
|
||||
\fBbaseboard-asset-tag\fR, \fBchassis-manufacturer\fR,
|
||||
\fBchassis-type\fR,
|
||||
\fBchassis-version\fR, \fBchassis-serial-number\fR,
|
||||
\fBchassis-asset-tag\fR, \fBprocessor-family\fR,
|
||||
\fBprocessor-manufacturer\fR,
|
||||
\fBprocessor-version\fR, \fBprocessor-frequency\fR.
|
||||
.BR "-s" ", " "--string \fIKEYWORD\fP"
|
||||
Only display the value of the \s-1DMI\s0 string identified by \fIKEYWORD\fP.
|
||||
It must be a keyword from the following list:
|
||||
.nh
|
||||
.BR bios\-vendor ,
|
||||
.BR bios\-version ,
|
||||
.BR bios\-release\-date ,
|
||||
.BR bios\-revision ,
|
||||
.BR firmware\-revision ,
|
||||
.BR system\-manufacturer ,
|
||||
.BR system\-product\-name ,
|
||||
.BR system\-version ,
|
||||
.BR system\-serial\-number ,
|
||||
.BR system\-uuid ,
|
||||
.BR system\-sku\-number ,
|
||||
.BR system\-family ,
|
||||
.BR baseboard\-manufacturer ,
|
||||
.BR baseboard\-product\-name ,
|
||||
.BR baseboard\-version ,
|
||||
.BR baseboard\-serial\-number ,
|
||||
.BR baseboard\-asset\-tag ,
|
||||
.BR chassis\-manufacturer ,
|
||||
.BR chassis\-type ,
|
||||
.BR chassis\-version ,
|
||||
.BR chassis\-serial\-number ,
|
||||
.BR chassis\-asset\-tag ,
|
||||
.BR processor\-family ,
|
||||
.BR processor\-manufacturer ,
|
||||
.BR processor\-version ,
|
||||
.BR processor\-frequency .
|
||||
.hy
|
||||
Each keyword corresponds to a given \s-1DMI\s0 type and a given offset
|
||||
within this entry type.
|
||||
Not all strings may be meaningful or even defined on all systems. Some
|
||||
keywords may return more than one result on some systems (e.g.
|
||||
\fBprocessor-version\fR on a multi-processor system).
|
||||
If \fBKEYWORD\fR is not provided or not valid, a list of all valid
|
||||
.nh
|
||||
.B processor\-version
|
||||
.hy
|
||||
on a multi-processor system).
|
||||
If \fIKEYWORD\fP is not provided or not valid, a list of all valid
|
||||
keywords is printed and
|
||||
.B dmidecode
|
||||
exits with an error.
|
||||
@ -104,23 +122,32 @@ typically from files under
|
||||
.IR /sys/devices/virtual/dmi/id .
|
||||
Most of these files are even readable by regular users.
|
||||
.TP
|
||||
.BR "-t" ", " "--type TYPE"
|
||||
Only display the entries of type \fBTYPE\fR. \fBTYPE\fR can be either a
|
||||
.BR "-t" ", " "--type \fITYPE\fP"
|
||||
Only display the entries of type \fITYPE\fP. It can be either a
|
||||
\s-1DMI\s0 type number, or a comma-separated list of type numbers, or a
|
||||
keyword from the following list: \fBbios\fR, \fBsystem\fR,
|
||||
\fBbaseboard\fR, \fBchassis\fR, \fBprocessor\fR, \fBmemory\fR,
|
||||
\fBcache\fR, \fBconnector\fR, \fBslot\fR. Refer to the DMI TYPES section
|
||||
below for details.
|
||||
keyword from the following list:
|
||||
.nh
|
||||
.BR bios ,
|
||||
.BR system ,
|
||||
.BR baseboard ,
|
||||
.BR chassis ,
|
||||
.BR processor ,
|
||||
.BR memory ,
|
||||
.BR cache ,
|
||||
.BR connector ,
|
||||
.BR slot .
|
||||
.hy
|
||||
Refer to the DMI TYPES section below for details.
|
||||
If this option is used more than once, the set of displayed entries will be
|
||||
the union of all the given types.
|
||||
If \fBTYPE\fR is not provided or not valid, a list of all valid keywords
|
||||
If \fITYPE\fP is not provided or not valid, a list of all valid keywords
|
||||
is printed and
|
||||
.B dmidecode
|
||||
exits with an error.
|
||||
.TP
|
||||
.BR "-H" ", " "--handle HANDLE"
|
||||
Only display the entry whose handle matches \fBHANDLE\fR. \fBHANDLE\fR
|
||||
is a 16-bit integer.
|
||||
.BR "-H" ", " "--handle \fIHANDLE\fP"
|
||||
Only display the entry whose handle matches \fIHANDLE\fP.
|
||||
\fIHANDLE\fP is a 16-bit integer.
|
||||
.TP
|
||||
.BR "-u" ", " "--dump"
|
||||
Do not decode the entries, dump their contents as hexadecimal instead.
|
||||
@ -128,22 +155,22 @@ Note that this is still a text output, no binary data will be thrown upon
|
||||
you. The strings attached to each entry are displayed as both
|
||||
hexadecimal and \s-1ASCII\s0. This option is mainly useful for debugging.
|
||||
.TP
|
||||
.BR " " " " "--dump-bin FILE"
|
||||
.BR " " " " "--dump-bin \fIFILE\fP"
|
||||
Do not decode the entries, instead dump the DMI data to a file in binary
|
||||
form. The generated file is suitable to pass to \fB--from-dump\fR
|
||||
form. The generated file is suitable to pass to \fB--from-dump\fP
|
||||
later.
|
||||
.TP
|
||||
.BR " " " " "--from-dump FILE"
|
||||
Read the DMI data from a binary file previously generated using
|
||||
\fB--dump-bin\fR.
|
||||
.BR " " " " "--from-dump \fIFILE\fP"
|
||||
Read the DMI data from a binary file previously generated using
|
||||
\fB--dump-bin\fP.
|
||||
.TP
|
||||
.BR " " " " "--no-sysfs"
|
||||
Do not attempt to read DMI data from sysfs files. This is mainly useful for
|
||||
debugging.
|
||||
.TP
|
||||
.BR " " " " "--oem-string N"
|
||||
Only display the value of the \s-1OEM\s0 string number \fBN\fR. The first
|
||||
\s-1OEM\s0 string has number 1. With special value "count", return the
|
||||
.BR " " " " "--oem-string \fIN\fP"
|
||||
Only display the value of the \s-1OEM\s0 string number \fIN\fP. The first
|
||||
\s-1OEM\s0 string has number \fB1\fP. With special value \fBcount\fP, return the
|
||||
number of OEM strings instead.
|
||||
.TP
|
||||
.BR "-h" ", " "--help"
|
||||
@ -152,7 +179,10 @@ Display usage information and exit
|
||||
.BR "-V" ", " "--version"
|
||||
Display the version and exit
|
||||
.P
|
||||
Options --string, --type, --dump-bin and --oem-string
|
||||
Options
|
||||
.BR --string ,
|
||||
.BR --type,
|
||||
.BR --dump-bin " and " --oem-string
|
||||
determine the output format and are mutually exclusive.
|
||||
.P
|
||||
Please note in case of
|
||||
@ -220,7 +250,7 @@ end-of-table marker. Types 128 to 255 are for \s-1OEM\s0-specific data.
|
||||
will display these entries by default, but it can only decode them
|
||||
when the vendors have contributed documentation or code for them.
|
||||
|
||||
Keywords can be used instead of type numbers with \fB--type\fR.
|
||||
Keywords can be used instead of type numbers with \fB--type\fP.
|
||||
Each keyword is equivalent to a list of type numbers:
|
||||
|
||||
.TS
|
||||
@ -250,7 +280,7 @@ dmidecode --type bios
|
||||
dmidecode --type BIOS
|
||||
.\"
|
||||
.SH BINARY DUMP FILE FORMAT
|
||||
The binary dump files generated by --dump-bin and read using --from-dump
|
||||
The binary dump files generated by \fB--dump-bin\fP and read using \fB--from-dump\fP
|
||||
are formatted as follows:
|
||||
.IP \(bu "\w'\(bu'u+1n"
|
||||
The SMBIOS or DMI entry point is located at offset 0x00.
|
||||
|
||||
@ -5,7 +5,7 @@ ownership \- Compaq ownership tag retriever
|
||||
.\"
|
||||
.SH SYNOPSIS
|
||||
.B ownership
|
||||
.RB [ OPTIONS ]
|
||||
.RI [ OPTIONS ]
|
||||
.\"
|
||||
.SH DESCRIPTION
|
||||
.B ownership
|
||||
@ -19,8 +19,8 @@ ownership tag. This should help its integration in scripts.
|
||||
.\"
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.BR "-d" ", " "--dev-mem FILE"
|
||||
Read memory from device \fBFILE\fR (default: \fB/dev/mem\fR)
|
||||
.BR "-d" ", " "--dev-mem \fIFILE\fP"
|
||||
Read memory from device \fIFILE\fP (default: \fI/dev/mem\fP)
|
||||
.TP
|
||||
.BR "-h" ", " "--help"
|
||||
Display usage information and exit
|
||||
|
||||
@ -5,7 +5,7 @@ vpddecode \- \s-1VPD\s0 structure decoder
|
||||
.\"
|
||||
.SH SYNOPSIS
|
||||
.B vpddecode
|
||||
.RB [ OPTIONS ]
|
||||
.RI [ OPTIONS ]
|
||||
.\"
|
||||
.SH DESCRIPTION
|
||||
.B vpddecode
|
||||
@ -32,30 +32,35 @@ the accuracy of these labels is welcome.
|
||||
.\"
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.BR "-d" ", " "--dev-mem FILE"
|
||||
Read memory from device \fBFILE\fR (default: \fB/dev/mem\fR)
|
||||
.BR "-d" ", " "--dev-mem \fIFILE\fP"
|
||||
Read memory from device \fIFILE\fP (default: \fI/dev/mem\fP)
|
||||
.TP
|
||||
.BR "-s" ", " "--string KEYWORD"
|
||||
Only display the value of the \s-1VPD\s0 string identified by \fBKEYWORD\fR.
|
||||
\fBKEYWORD\fR must be a keyword from the following list: \fBbios-build-id\fR,
|
||||
\fBbox-serial-number\fR, \fBmotherboard-serial-number\fR,
|
||||
\fBmachine-type-model\fR, \fBbios-release-date\fR.
|
||||
.BR "-s" ", " "--string \fIKEYWORD\fP"
|
||||
Only display the value of the \s-1VPD\s0 string identified by \fIKEYWORD\fP.
|
||||
It must be a keyword from the following list:
|
||||
.nh
|
||||
.BR bios-build-id ,
|
||||
.BR box-serial-number ,
|
||||
.BR motherboard-serial-number ,
|
||||
.BR machine-type-model ,
|
||||
.BR bios-release-date .
|
||||
.hy
|
||||
Each keyword corresponds to an offset and a length within the \s-1VPD\s0
|
||||
record.
|
||||
Not all strings may be defined on all \s-1VPD\s0-enabled systems.
|
||||
If \fBKEYWORD\fR is not provided or not valid, a list of all valid
|
||||
If \fIKEYWORD\fP is not provided or not valid, a list of all valid
|
||||
keywords is printed and
|
||||
.B vpddecode
|
||||
exits with an error.
|
||||
This option cannot be used more than once.
|
||||
Mutually exclusive with \fB--dump\fR.
|
||||
Mutually exclusive with \fB--dump\fP.
|
||||
.TP
|
||||
.BR "-u" ", " "--dump"
|
||||
Do not decode the VPD records, dump their contents as hexadecimal instead.
|
||||
Note that this is still a text output, no binary data will be thrown upon
|
||||
you. ASCII equivalent is displayed when possible. This option is mainly
|
||||
useful for debugging.
|
||||
Mutually exclusive with \fB--string\fR.
|
||||
Mutually exclusive with \fB--string\fP.
|
||||
.TP
|
||||
.BR "-h" ", " "--help"
|
||||
Display usage information and exit
|
||||
|
||||
Loading…
Reference in New Issue
Block a user