smbios: Add API to generate SMBIOS type 43 TPM Device

Based on DMTF SMBIOS Specification 3.1.0.

Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
Change-Id: Ia2db29f8bc4cfbc6648bb2cabad074d9ea583ca9
Reviewed-on: https://review.coreboot.org/c/coreboot/+/64048
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Christian Walter <christian.walter@9elements.com>
This commit is contained in:
Michał Żygowski 2022-05-04 14:10:45 +02:00
parent 7ac796c7b2
commit e779523193
2 changed files with 48 additions and 0 deletions

View File

@ -1108,6 +1108,29 @@ int smbios_write_type41(unsigned long *current, int *handle,
return len; return len;
} }
int smbios_write_type43(unsigned long *current, int *handle, const u32 vendor_id,
const u8 major_spec_ver, const u8 minor_spec_ver,
const u32 fw_ver1, const u32 fw_ver2, const char *description,
const u64 characteristics, const u32 oem_defined)
{
struct smbios_type43 *t = smbios_carve_table(*current, SMBIOS_TPM_DEVICE,
sizeof(*t), *handle);
t->vendor_id = vendor_id;
t->major_spec_ver = major_spec_ver;
t->minor_spec_ver = minor_spec_ver;
t->fw_ver1 = fw_ver1;
t->fw_ver2 = fw_ver2;
t->characteristics = characteristics;
t->oem_defined = oem_defined;
t->description = smbios_add_string(t->eos, description);
const int len = smbios_full_table_len(&t->header, t->eos);
*current += len;
*handle += 1;
return len;
}
static int smbios_write_type127(unsigned long *current, int handle) static int smbios_write_type127(unsigned long *current, int handle)
{ {
struct smbios_type127 *t = smbios_carve_table(*current, SMBIOS_END_OF_TABLE, struct smbios_type127 *t = smbios_carve_table(*current, SMBIOS_END_OF_TABLE,

View File

@ -35,6 +35,11 @@ int smbios_write_type41(unsigned long *current, int *handle,
const char *name, u8 instance, u16 segment, const char *name, u8 instance, u16 segment,
u8 bus, u8 device, u8 function, u8 device_type); u8 bus, u8 device, u8 function, u8 device_type);
int smbios_write_type43(unsigned long *current, int *handle, const u32 vendor_id,
const u8 major_spec_ver, const u8 minor_spec_ver,
const u32 fw_ver1, const u32 fw_ver2, const char *description,
const u64 characteristics, const u32 oem_defined);
struct device; struct device;
int get_smbios_data(struct device *dev, int *handle, unsigned long *current); int get_smbios_data(struct device *dev, int *handle, unsigned long *current);
@ -253,6 +258,7 @@ typedef enum {
SMBIOS_SYSTEM_BOOT_INFORMATION = 32, SMBIOS_SYSTEM_BOOT_INFORMATION = 32,
SMBIOS_IPMI_DEVICE_INFORMATION = 38, SMBIOS_IPMI_DEVICE_INFORMATION = 38,
SMBIOS_ONBOARD_DEVICES_EXTENDED_INFORMATION = 41, SMBIOS_ONBOARD_DEVICES_EXTENDED_INFORMATION = 41,
SMBIOS_TPM_DEVICE = 43,
SMBIOS_END_OF_TABLE = 127, SMBIOS_END_OF_TABLE = 127,
} smbios_struct_type_t; } smbios_struct_type_t;
@ -976,6 +982,25 @@ struct smbios_type41 {
u8 eos[2]; u8 eos[2];
} __packed; } __packed;
#define SMBIOS_TPM_DEVICE_CHARACTERISTICS_NOT_SUPPORTED (1ULL << 2)
#define SMBIOS_TPM_DEVICE_FAMILY_CONFIGURABLE_VIA_FW_UPD (1ULL << 3)
#define SMBIOS_TPM_DEVICE_FAMILY_CONFIGURABLE_VIA_PLATFORM_SW_SUPPORT (1ULL << 4)
#define SMBIOS_TPM_DEVICE_FAMILY_CONFIGURABLE_VIA_OEM_PROPRIETARY (1ULL << 5)
struct smbios_type43 {
struct smbios_header header;
u32 vendor_id;
u8 major_spec_ver;
u8 minor_spec_ver;
u32 fw_ver1;
u32 fw_ver2;
u8 description;
u64 characteristics;
u32 oem_defined;
u8 eos[2];
} __packed;
struct smbios_type127 { struct smbios_type127 {
struct smbios_header header; struct smbios_header header;
u8 eos[2]; u8 eos[2];