Merge branch 'release/debian/3.4-1'

This commit is contained in:
Jörg Frings-Fürst 2022-07-01 07:35:46 +02:00
commit 918cb82823
16 changed files with 1282 additions and 371 deletions

View File

@ -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
View File

@ -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.

13
debian/changelog vendored
View File

@ -1,3 +1,16 @@
dmidecode (3.4-1) unstable; urgency=medium
* New upstream release.
- Remove upstream applied patches:
+ debian/patches/0145-Fix_condition_error_in_ascii_filter.patch
+ debian/patches/0150-Fix_crash.patch
- Refresh upstream signing key.
* Declare compliance with Debian Policy 4.6.1.0 (No changes needed).
* debian/copyright:
- Add year 2022 to myself.
-- Jörg Frings-Fürst <debian@jff.email> Thu, 30 Jun 2022 20:37:08 +0200
dmidecode (3.3-3) unstable; urgency=medium
* Add Architecture riscv64 (Closes: #991854).

2
debian/control vendored
View File

@ -3,7 +3,7 @@ Section: utils
Priority: optional
Maintainer: Jörg Frings-Fürst <debian@jff.email>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.6.0.0
Standards-Version: 4.6.1.0
Rules-Requires-Root: no
Vcs-Git: git://jff.email/opt/git/dmidecode.git
Vcs-Browser: https://jff.email/cgit/dmidecode.git/

2
debian/copyright vendored
View File

@ -13,7 +13,7 @@ License: GPL-2+
Files: debian/*
Copyright: 2003-2007 Petter Reinholdtsen <pere@debian.org>
2011-2012 Daniel Baumann <daniel.baumann@progress-technologies.net>
2014-2021 Jörg Frings-Fürst <debian@jff.email>
2014-2022 Jörg Frings-Fürst <debian@jff.email>
License: GPL-2+
License: GPL-2+

View File

@ -1,5 +1,5 @@
0145-Fix_condition_error_in_ascii_filter.patch
0150-Fix_crash.patch
#0145-Fix_condition_error_in_ascii_filter.patch
#0150-Fix_crash.patch
0100-ansi-c.patch
0001-hurd.patch
#0005-build.patch

View File

@ -1,68 +1,63 @@
-----BEGIN PGP ARMORED FILE-----
Comment: Use "gpg --dearmor" for unpacking
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=9biY
-----END PGP ARMORED FILE-----
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
Qu7m8XPTuUj0t1Fvq0Xleoa74ot+e+pKWAaR40U=
=3wf6
-----END PGP PUBLIC KEY BLOCK-----

File diff suppressed because it is too large Load Diff

View File

@ -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
View File

@ -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;
}

View File

@ -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);

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
#define VERSION "3.3"
#define VERSION "3.4"