From: Lennart Poettering Date: Fri, 20 Dec 2024 11:12:02 +0000 (+0100) Subject: chid: add missing CHID type definitions X-Git-Tag: v258-rc1~1796^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=95cd07e7727a20fa0c1dcce0bf9c8bc2f650bd4b;p=thirdparty%2Fsystemd.git chid: add missing CHID type definitions This add he missing CHID types to our tables, but doesn't add all necessary code to calculate them yet. This brings us closer to what the CHID spec documents, and what "fupwdtool hwids" outputs. --- diff --git a/src/analyze/analyze-chid.c b/src/analyze/analyze-chid.c index bc562f7b069..e89112f23f1 100644 --- a/src/analyze/analyze-chid.c +++ b/src/analyze/analyze-chid.c @@ -37,6 +37,11 @@ static const char *const chid_smbios_friendly[_CHID_SMBIOS_FIELDS_MAX] = { [CHID_SMBIOS_PRODUCT_SKU] = "product-sku", [CHID_SMBIOS_BASEBOARD_MANUFACTURER] = "baseboard-manufacturer", [CHID_SMBIOS_BASEBOARD_PRODUCT] = "baseboard-product", + [CHID_SMBIOS_BIOS_VENDOR] = "bios-vendor", + [CHID_SMBIOS_BIOS_VERSION] = "bios-version", + [CHID_SMBIOS_BIOS_MAJOR] = "bios-major", + [CHID_SMBIOS_BIOS_MINOR] = "bios-minor", + [CHID_SMBIOS_ENCLOSURE_TYPE] = "enclosure-type", }; static const char chid_smbios_fields_char[_CHID_SMBIOS_FIELDS_MAX] = { @@ -46,6 +51,11 @@ static const char chid_smbios_fields_char[_CHID_SMBIOS_FIELDS_MAX] = { [CHID_SMBIOS_PRODUCT_SKU] = 'S', [CHID_SMBIOS_BASEBOARD_MANUFACTURER] = 'm', [CHID_SMBIOS_BASEBOARD_PRODUCT] = 'p', + [CHID_SMBIOS_BIOS_VENDOR] = 'B', + [CHID_SMBIOS_BIOS_VERSION] = 'v', + [CHID_SMBIOS_BIOS_MAJOR] = 'R', + [CHID_SMBIOS_BIOS_MINOR] = 'r', + [CHID_SMBIOS_ENCLOSURE_TYPE] = 'e', }; static char *chid_smbios_fields_string(uint32_t combination) { diff --git a/src/fundamental/chid-fundamental.c b/src/fundamental/chid-fundamental.c index b12191b99cd..47eabdb3499 100644 --- a/src/fundamental/chid-fundamental.c +++ b/src/fundamental/chid-fundamental.c @@ -75,6 +75,30 @@ static void get_chid( } const uint32_t chid_smbios_table[CHID_TYPES_MAX] = { + [0] = (UINT32_C(1) << CHID_SMBIOS_MANUFACTURER) | + (UINT32_C(1) << CHID_SMBIOS_FAMILY) | + (UINT32_C(1) << CHID_SMBIOS_PRODUCT_NAME) | + (UINT32_C(1) << CHID_SMBIOS_PRODUCT_SKU) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_VENDOR) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_VERSION) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_MAJOR) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_MINOR), + + [1] = (UINT32_C(1) << CHID_SMBIOS_MANUFACTURER) | + (UINT32_C(1) << CHID_SMBIOS_FAMILY) | + (UINT32_C(1) << CHID_SMBIOS_PRODUCT_NAME) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_VENDOR) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_VERSION) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_MAJOR) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_MINOR), + + [2] = (UINT32_C(1) << CHID_SMBIOS_MANUFACTURER) | + (UINT32_C(1) << CHID_SMBIOS_PRODUCT_NAME) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_VENDOR) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_VERSION) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_MAJOR) | + (UINT32_C(1) << CHID_SMBIOS_BIOS_MINOR), + [3] = (UINT32_C(1) << CHID_SMBIOS_MANUFACTURER) | (UINT32_C(1) << CHID_SMBIOS_FAMILY) | (UINT32_C(1) << CHID_SMBIOS_PRODUCT_NAME) | @@ -115,9 +139,14 @@ const uint32_t chid_smbios_table[CHID_TYPES_MAX] = { [11] = (UINT32_C(1) << CHID_SMBIOS_MANUFACTURER) | (UINT32_C(1) << CHID_SMBIOS_FAMILY), + [12] = (UINT32_C(1) << CHID_SMBIOS_MANUFACTURER) | + (UINT32_C(1) << CHID_SMBIOS_ENCLOSURE_TYPE), + [13] = (UINT32_C(1) << CHID_SMBIOS_MANUFACTURER) | (UINT32_C(1) << CHID_SMBIOS_BASEBOARD_MANUFACTURER) | (UINT32_C(1) << CHID_SMBIOS_BASEBOARD_PRODUCT), + + [14] = (UINT32_C(1) << CHID_SMBIOS_MANUFACTURER), }; void chid_calculate(const char16_t *const smbios_fields[static _CHID_SMBIOS_FIELDS_MAX], EFI_GUID ret_chids[static CHID_TYPES_MAX]) { diff --git a/src/fundamental/chid-fundamental.h b/src/fundamental/chid-fundamental.h index 41f7be337dd..48b1343f5c3 100644 --- a/src/fundamental/chid-fundamental.h +++ b/src/fundamental/chid-fundamental.h @@ -20,6 +20,11 @@ typedef enum ChidSmbiosFields { CHID_SMBIOS_PRODUCT_SKU, CHID_SMBIOS_BASEBOARD_MANUFACTURER, CHID_SMBIOS_BASEBOARD_PRODUCT, + CHID_SMBIOS_BIOS_VENDOR, + CHID_SMBIOS_BIOS_VERSION, + CHID_SMBIOS_BIOS_MAJOR, + CHID_SMBIOS_BIOS_MINOR, + CHID_SMBIOS_ENCLOSURE_TYPE, _CHID_SMBIOS_FIELDS_MAX, } ChidSmbiosFields; diff --git a/src/test/test-chid.c b/src/test/test-chid.c index ae1726679d0..2faf886c977 100644 --- a/src/test/test-chid.c +++ b/src/test/test-chid.c @@ -11,6 +11,7 @@ const char16_t *const test_fields[_CHID_SMBIOS_FIELDS_MAX] = { [CHID_SMBIOS_FAMILY] = u"To be filled by O.E.M.", [CHID_SMBIOS_BASEBOARD_PRODUCT] = u"MPG X670E CARBON WIFI (MS-7D70)", [CHID_SMBIOS_BASEBOARD_MANUFACTURER] = u"Micro-Star International Co., Ltd.", + [CHID_SMBIOS_ENCLOSURE_TYPE] = u"3", }; /* Actual output of `fwupdtool hwids`: @@ -51,7 +52,7 @@ Extra Hardware IDs {7b3d90ce-ed79-5951-a48a-764ea9f11146} <- Manufacturer + BiosVendor */ -static const EFI_GUID actual_chids[] = { +static const EFI_GUID actual_chids[CHID_TYPES_MAX] = { {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, @@ -64,9 +65,9 @@ static const EFI_GUID actual_chids[] = { {0xc12c1f4a, 0x332d, 0x5d72, {0xaa, 0x36, 0x7a, 0x3d, 0x41, 0x3b, 0x47, 0x9a}}, {0x28ac9cf2, 0x5bde, 0x59f7, {0xae, 0xbe, 0x4b, 0x3d, 0x00, 0x80, 0x90, 0xfe}}, {0xe821e0e2, 0xe11a, 0x5e94, {0xbf, 0x5d, 0xff, 0xe5, 0x3c, 0x5e, 0x50, 0x48}}, - {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {0xbdd76d3e, 0x147f, 0x58a9, {0xa0, 0xb2, 0x42, 0x13, 0x64, 0x54, 0xed, 0x07}}, {0xb2e58e8b, 0xfb10, 0x5cd0, {0x8f, 0xb0, 0x5b, 0xd9, 0x31, 0xf1, 0x87, 0x1a}}, - {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {0x50af5797, 0xa2f2, 0x58b1, {0x9a, 0x1a, 0x45, 0x3b, 0xcb, 0xb2, 0xe0, 0x25}}, }; TEST(chid) {