git: 294a50a29324 - main - sysutils/dmidecode: Decode HPE OEM Record 224

From: Po-Chuan Hsieh <sunpoet_at_FreeBSD.org>
Date: Sat, 27 Aug 2022 10:31:18 UTC
The branch main has been updated by sunpoet:

URL: https://cgit.FreeBSD.org/ports/commit/?id=294a50a293243a7af63ed1de71ba3068b24e2580

commit 294a50a293243a7af63ed1de71ba3068b24e2580
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2022-08-27 10:23:43 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2022-08-27 10:23:43 +0000

    sysutils/dmidecode: Decode HPE OEM Record 224
    
    - Bump PORTREVISION for package change
    
    Requested by:   Ivan Grynov <rmrf@x123.net>
    Obtained from:  https://git.savannah.gnu.org/cgit/dmidecode.git/commit/?id=a1a2258ffbe450e8561ee833787da9321fa734b0
---
 sysutils/dmidecode/Makefile             |   1 +
 sysutils/dmidecode/files/patch-dmioem.c | 138 ++++++++++++++++++++++++++++++++
 2 files changed, 139 insertions(+)

diff --git a/sysutils/dmidecode/Makefile b/sysutils/dmidecode/Makefile
index bfb5f6e183a3..b834f8df4116 100644
--- a/sysutils/dmidecode/Makefile
+++ b/sysutils/dmidecode/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	dmidecode
 PORTVERSION=	3.4
+PORTREVISION=	1
 CATEGORIES=	sysutils
 MASTER_SITES=	SAVANNAH
 
diff --git a/sysutils/dmidecode/files/patch-dmioem.c b/sysutils/dmidecode/files/patch-dmioem.c
new file mode 100644
index 000000000000..21d4ec2e5b5c
--- /dev/null
+++ b/sysutils/dmidecode/files/patch-dmioem.c
@@ -0,0 +1,138 @@
+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
+ 	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)
+ 			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: