diff --git a/src/analyze/analyze-chid.c b/src/analyze/analyze-chid.c index bc562f7b06..e89112f23f 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 b12191b99c..47eabdb349 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 41f7be337d..48b1343f5c 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 ae1726679d..2faf886c97 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) {