mirror of https://github.com/xemu-project/xemu.git
SMBIOS: Update Type 0 struct generator for machines >= 2.1
Update how type 0 (bios info) structures are generated, as follows: - convert bios_characteristics field to uin64_t (instead of uint8_t[8]), as described in the current smbios spec (v2.8) - enable "virtual machine" bit in bios_characteristics_extension_bits - add command line option to enable "uefi supported" bit in bios_characteristics_extension_bits These updates should make this optional structure more useful when used with edk2/ovmf. Only pc machines >= 2.1 are affected, and only when a type 0 structure is explicitly specified on the command line. Signed-off-by: Gabriel Somlo <somlo@cmu.edu> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
fb5be2e833
commit
84351843eb
|
@ -67,7 +67,7 @@ static DECLARE_BITMAP(have_fields_bitmap, SMBIOS_MAX_TYPE+1);
|
|||
|
||||
static struct {
|
||||
const char *vendor, *version, *date;
|
||||
bool have_major_minor;
|
||||
bool have_major_minor, uefi;
|
||||
uint8_t major, minor;
|
||||
} type0;
|
||||
|
||||
|
@ -134,6 +134,10 @@ static const QemuOptDesc qemu_smbios_type0_opts[] = {
|
|||
.name = "release",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "revision number",
|
||||
},{
|
||||
.name = "uefi",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "uefi support",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
};
|
||||
|
@ -497,13 +501,12 @@ static void smbios_build_type_0_table(void)
|
|||
|
||||
t->bios_rom_size = 0; /* hardcoded in SeaBIOS with FIXME comment */
|
||||
|
||||
/* BIOS characteristics not supported */
|
||||
memset(t->bios_characteristics, 0, 8);
|
||||
t->bios_characteristics[0] = 0x08;
|
||||
|
||||
/* Enable targeted content distribution (needed for SVVP, per SeaBIOS) */
|
||||
t->bios_characteristics = cpu_to_le64(0x08); /* Not supported */
|
||||
t->bios_characteristics_extension_bytes[0] = 0;
|
||||
t->bios_characteristics_extension_bytes[1] = 4;
|
||||
t->bios_characteristics_extension_bytes[1] = 0x14; /* TCD/SVVP | VM */
|
||||
if (type0.uefi) {
|
||||
t->bios_characteristics_extension_bytes[1] |= 0x08; /* |= UEFI */
|
||||
}
|
||||
|
||||
if (type0.have_major_minor) {
|
||||
t->system_bios_major_release = type0.major;
|
||||
|
@ -979,6 +982,7 @@ void smbios_entry_add(QemuOpts *opts)
|
|||
save_opt(&type0.vendor, opts, "vendor");
|
||||
save_opt(&type0.version, opts, "version");
|
||||
save_opt(&type0.date, opts, "date");
|
||||
type0.uefi = qemu_opt_get_bool(opts, "uefi", false);
|
||||
|
||||
val = qemu_opt_get(opts, "release");
|
||||
if (val) {
|
||||
|
|
|
@ -64,7 +64,7 @@ struct smbios_type_0 {
|
|||
uint16_t bios_starting_address_segment;
|
||||
uint8_t bios_release_date_str;
|
||||
uint8_t bios_rom_size;
|
||||
uint8_t bios_characteristics[8];
|
||||
uint64_t bios_characteristics;
|
||||
uint8_t bios_characteristics_extension_bytes[2];
|
||||
uint8_t system_bios_major_release;
|
||||
uint8_t system_bios_minor_release;
|
||||
|
|
|
@ -1335,7 +1335,7 @@ ETEXI
|
|||
DEF("smbios", HAS_ARG, QEMU_OPTION_smbios,
|
||||
"-smbios file=binary\n"
|
||||
" load SMBIOS entry from binary file\n"
|
||||
"-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]\n"
|
||||
"-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d][,uefi=on|off]\n"
|
||||
" specify SMBIOS type 0 fields\n"
|
||||
"-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]\n"
|
||||
" [,uuid=uuid][,sku=str][,family=str]\n"
|
||||
|
@ -1345,7 +1345,7 @@ STEXI
|
|||
@findex -smbios
|
||||
Load SMBIOS entry from binary file.
|
||||
|
||||
@item -smbios type=0[,vendor=@var{str}][,version=@var{str}][,date=@var{str}][,release=@var{%d.%d}]
|
||||
@item -smbios type=0[,vendor=@var{str}][,version=@var{str}][,date=@var{str}][,release=@var{%d.%d}][,uefi=on|off]
|
||||
Specify SMBIOS type 0 fields
|
||||
|
||||
@item -smbios type=1[,manufacturer=@var{str}][,product=@var{str}] [,version=@var{str}][,serial=@var{str}][,uuid=@var{uuid}][,sku=@var{str}] [,family=@var{str}]
|
||||
|
|
Loading…
Reference in New Issue