diff --git a/sysutils/dmidecode/Makefile b/sysutils/dmidecode/Makefile index d3c39e4e3381..b8e0575986e4 100644 --- a/sysutils/dmidecode/Makefile +++ b/sysutils/dmidecode/Makefile @@ -1,35 +1,35 @@ PORTNAME= dmidecode PORTVERSION= 3.4 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= sysutils MASTER_SITES= SAVANNAH MAINTAINER= sunpoet@FreeBSD.org COMMENT= Tool for dumping DMI (SMBIOS) contents in human-readable format WWW= https://www.nongnu.org/dmidecode/ LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/LICENSE ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 riscv64 riscv64sf USES= tar:xz SUB_FILES= dmidecode OPTIONS_DEFINE= DOCS .include # Additional programs are only built for x86 platforms. .if ${ARCH} == "amd64" || ${ARCH} == "i386" PLIST_SUB+= X86="" .else PLIST_SUB+= X86="@comment " .endif post-install: ${MKDIR} ${STAGEDIR}${PREFIX}/etc/periodic/daily/ ${INSTALL_SCRIPT} ${WRKDIR}/dmidecode ${STAGEDIR}${PREFIX}/etc/periodic/daily/ .include diff --git a/sysutils/dmidecode/files/patch-dmioem.c b/sysutils/dmidecode/files/patch-dmioem.c index 21d4ec2e5b5c..4726367ec947 100644 --- a/sysutils/dmidecode/files/patch-dmioem.c +++ b/sysutils/dmidecode/files/patch-dmioem.c @@ -1,138 +1,155 @@ Obtained from: https://git.savannah.gnu.org/cgit/dmidecode.git/commit/?id=a1a2258ffbe450e8561ee833787da9321fa734b0 --- dmioem.c.orig 2022-06-27 15:06:32 UTC +++ dmioem.c -@@ -299,6 +299,96 @@ static void dmi_hp_203_devloc(const char *fname, unsig +@@ -198,13 +198,14 @@ static void dmi_hp_240_attr(u64 defined, u64 set) + }; + unsigned int i; + +- pr_attr("Attributes Defined/Set", NULL); ++ pr_list_start("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"); ++ pr_list_item("%s: %s", attributes[i], set.l & (1UL << i) ? "Yes" : "No"); + } ++ pr_list_end(); + } + + static void dmi_hp_203_assoc_hndl(const char *fname, u16 num) +@@ -299,6 +300,96 @@ static void dmi_hp_203_devloc(const char *fname, unsig pr_attr(fname, "%s", str); } +static int dmi_hp_224_status(u8 code) +{ + static const char * const present[] = { + "Not Present", /* 0x00 */ + "Present/Enabled", + "Present/Disabled", + "Reserved" /* 0x03 */ + }; + + pr_attr("Status", "%s", present[code & 0x03]); + if ((code & 0x03) == 0x00) + return 0; + pr_attr("Option ROM Measuring", "%s", (code & (1 << 2)) ? "Yes" : "No"); + pr_attr("Hidden", "%s", (code & (1 << 3)) ? "Yes" : "No"); + return 1; +} + +static void dmi_hp_224_ex_status(u8 status, u8 code) +{ + const char *str = "Reserved"; + static const char * const disable_reason[] = { + "Not Specified", /* 0x00 */ + "User Disabled", + "Error Condition", + "Reserved" /* 0x03 */ + }; + static const char * const error_condition[] = { + "Not Specified", /* 0x00 */ + "Self-Test", /* 0x01 */ + }; + if ((status & 0x03) == 0x02) + pr_attr("Disable Reason", "%s", disable_reason[code & 0x03]); + if ((code & 0x03) == 0x02) { + u8 error = (code >> 2) & 0x0f; + if (error < ARRAY_SIZE(error_condition)) + str = error_condition[error]; + pr_attr("Error Condition", "%s", str); + } +} + +static void dmi_hp_224_module_type(u8 code) +{ + const char *str = "Reserved"; + static const char * const type[] = { + "Not Specified", /* 0x00 */ + "TPM 1.2", + "TPM 2.0", + "Intel PTT fTPM" /* 0x03 */ + }; + if ((code & 0x0f) < ARRAY_SIZE(type)) + str = type[code & 0x0f]; + pr_attr("Type", "%s", str); + pr_attr("Standard Algorithm Supported", "%s", (code & (1 << 4)) ? "Yes" : "No"); + pr_attr("Chinese Algorithm Supported", "%s", (code & (1 << 5)) ? "Yes" : "No"); +} + +static void dmi_hp_224_module_attr(u8 code) +{ + static const char * const phys_attr[] = { + "Not Specified", /* 0x00 */ + "Pluggable and Optional", + "Pluggable but Standard", + "Soldered Down on System Board" /* 0x03 */ + }; + static const char * const fips_attr[] = { + "Not Specified", /* 0x00 */ + "Not FIPS Certified", + "FIPS Certified", + "Reserved" /* 0x03 */ + }; + pr_attr("Trusted Module Attributes", "%s", phys_attr[code & 0x3]); + pr_attr("FIPS Certification", "%s", fips_attr[((code >> 2) & 0x03)]); +} + +static void dmi_hp_224_chipid(u16 code) +{ + const char *str = "Reserved"; + static const char * const chipid[] = { + "None", /* 0x00 */ + "STMicroGen10 TPM", + "Intel firmware TPM (PTT)", + "Nationz TPM", + "STMicroGen10 Plus TPM", + "STMicroGen11 TPM", /* 0x05 */ + }; + if ((code & 0xff) < ARRAY_SIZE(chipid)) + str = chipid[code & 0xff]; + pr_attr("Chip Identifier", "%s", str); +} + static void dmi_hp_238_loc(const char *fname, unsigned int code) { const char *str = "Reserved"; -@@ -597,6 +687,36 @@ static int dmi_decode_hp(const struct dmi_header *h) +@@ -597,6 +688,36 @@ static int dmi_decode_hp(const struct dmi_header *h) pr_attr("Misc. Features", "0x%08x", feat); pr_subattr("iCRU", "%s", feat & 0x0001 ? "Yes" : "No"); pr_subattr("UEFI", "%s", feat & 0x1400 ? "Yes" : "No"); + break; + + case 224: + /* + * Vendor Specific: Trusted Module (TPM or TCM) Status + * + * Offset | Name | Width | Description + * ------------------------------------- + * 0x00 | Type | BYTE | 0xE0, Trusted Module (TPM or TCM) Status + * 0x01 | Length | BYTE | Length of structure + * 0x02 | Handle | WORD | Unique handle + * 0x04 | Status | BYTE | Status Flag Byte + * 0x05 | Ex Stat| BYTE | TPM Extended Status + * 0x06 | Type | BYTE | Trusted Module Type + * 0x07 | Attrib | BYTE | Trusted Module Attributes + * 0x08 | Handle | WORD | Handle to map to Type 216 + * 0x0A | Chip ID| WORD | Chip Identifier Values + */ + pr_handle_name("%s Trusted Module (TPM or TCM) Status", company); + if (h->length < 0x05) break; + if (!dmi_hp_224_status(data[0x04])) + break; + if (h->length < 0x0a) break; + dmi_hp_224_ex_status(data[0x04], data[0x05]); + dmi_hp_224_module_type(data[0x06]); + dmi_hp_224_module_attr(data[0x07]); + if (!(opt.flags & FLAG_QUIET)) + pr_attr("Associated Handle", "0x%04X", WORD(data + 0x8)); + if (h->length < 0x0c) break; + dmi_hp_224_chipid(WORD(data + 0x0a)); break; case 233: