bhyve: add SMBIOS Baseboard Information

Add the System Management BIOS Baseboard (or Module) Information
a.k.a. Type 2 structure to the SMBIOS emulation.

Reviewed by:	rgrimes, bcran, grehan
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D29657
This commit is contained in:
Chuck Tuffli 2021-04-12 08:09:52 -07:00
parent 2816bd8442
commit 0c6282e842

View File

@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$");
#define SMBIOS_TYPE_BIOS 0
#define SMBIOS_TYPE_SYSTEM 1
#define SMBIOS_TYPE_BOARD 2
#define SMBIOS_TYPE_CHASSIS 3
#define SMBIOS_TYPE_PROCESSOR 4
#define SMBIOS_TYPE_MEMARRAY 16
@ -157,10 +158,31 @@ struct smbios_table_type1 {
uint8_t family; /* family name string */
} __packed;
/*
* Baseboard (or Module) Information
*/
#define SMBIOS_BRF_HOSTING 0x1
#define SMBIOS_BRT_MOTHERBOARD 0xa
struct smbios_table_type2 {
struct smbios_structure header;
uint8_t manufacturer; /* manufacturer string */
uint8_t product; /* product name string */
uint8_t version; /* version string */
uint8_t serial; /* serial number string */
uint8_t asset; /* asset tag string */
uint8_t fflags; /* feature flags */
uint8_t location; /* location in chassis */
uint16_t chandle; /* chassis handle */
uint8_t type; /* board type */
uint8_t n_objs; /* number of contained object handles */
} __packed;
/*
* System Enclosure or Chassis
*/
#define SMBIOS_CHT_UNKNOWN 0x02 /* unknown */
#define SMBIOS_CHT_DESKTOP 0x03 /* desktop */
#define SMBIOS_CHST_SAFE 0x03 /* safe */
@ -360,6 +382,30 @@ const char *smbios_type1_strings[] = {
NULL
};
struct smbios_table_type2 smbios_type2_template = {
{ SMBIOS_TYPE_BOARD, sizeof (struct smbios_table_type2), 0 },
1, /* manufacturer string */
2, /* product string */
3, /* version string */
4, /* serial number string */
5, /* asset tag string */
SMBIOS_BRF_HOSTING, /* feature flags */
6, /* location string */
SMBIOS_CHT_DESKTOP, /* chassis handle */
SMBIOS_BRT_MOTHERBOARD, /* board type */
0
};
const char *smbios_type2_strings[] = {
"FreeBSD", /* manufacturer string */
"BHYVE", /* product name string */
"1.0", /* version string */
"None", /* serial number string */
"None", /* asset tag string */
"None", /* location string */
NULL
};
struct smbios_table_type3 smbios_type3_template = {
{ SMBIOS_TYPE_CHASSIS, sizeof (struct smbios_table_type3), 0 },
1, /* manufacturer string */
@ -518,6 +564,9 @@ static struct smbios_template_entry smbios_template[] = {
{ (struct smbios_structure *)&smbios_type1_template,
smbios_type1_strings,
smbios_type1_initializer },
{ (struct smbios_structure *)&smbios_type2_template,
smbios_type2_strings,
smbios_generic_initializer },
{ (struct smbios_structure *)&smbios_type3_template,
smbios_type3_strings,
smbios_generic_initializer },