| # -*- Mode: Python -*- | |
| # vim: filetype=python | |
| # | |
| # Copyright (C) 2018 Red Hat, Inc. | |
| # | |
| # Authors: | |
| # Daniel P. Berrange <berrange@redhat.com> | |
| # Laszlo Ersek <lersek@redhat.com> | |
| # | |
| # This work is licensed under the terms of the GNU GPL, version 2 or | |
| # later. See the COPYING file in the top-level directory. | |
| ## | |
| # ******** | |
| # Firmware | |
| # ******** | |
| ## | |
| { 'pragma': { | |
| 'member-name-exceptions': [ | |
| 'FirmwareArchitecture' # x86_64 | |
| ] } } | |
| ## | |
| # @FirmwareOSInterface: | |
| # Lists the firmware-OS interface types provided by various | |
| # firmware that is commonly used with QEMU virtual machines. | |
| # | |
| # @bios: Traditional x86 BIOS interface. For example, firmware built | |
| # from the SeaBIOS project usually provides this interface. | |
| # | |
| # @openfirmware: The interface is defined by the (historical) IEEE | |
| # 1275-1994 standard. Examples for firmware projects that provide | |
| # this interface are: OpenBIOS and SLOF. | |
| # | |
| # @uboot: Firmware interface defined by the U-Boot project. | |
| # | |
| # @uefi: Firmware interface defined by the UEFI specification. For | |
| # example, firmware built from the edk2 (EFI Development Kit II) | |
| # project usually provides this interface. | |
| # | |
| # @svsm: AMD SEV-SNP Secure VM Service Module (SVSM) guest protocol. | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'enum' : 'FirmwareOSInterface', | |
| 'data' : [ 'bios', 'openfirmware', 'svsm', 'uboot', 'uefi' ] } | |
| ## | |
| # @FirmwareDevice: | |
| # Defines the device types that firmware can be mapped into. | |
| # | |
| # @flash: The firmware executable and its accompanying NVRAM file are | |
| # to be mapped into a pflash chip each. | |
| # | |
| # @kernel: The firmware is to be loaded like a Linux kernel. This is | |
| # similar to @memory but may imply additional processing that is | |
| # specific to the target architecture and machine type. | |
| # | |
| # @memory: The firmware is to be mapped into memory. | |
| # | |
| # @igvm: The firmware is defined by a file conforming to the IGVM | |
| # specification and mapped into memory according to directives | |
| # defined in the file. This is similar to @memory but may include | |
| # additional processing defined by the IGVM file including initial | |
| # CPU state or population of metadata into the guest address | |
| # space. Since: 10.1 | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'enum' : 'FirmwareDevice', | |
| 'data' : [ 'flash', 'kernel', 'memory', 'igvm' ] } | |
| ## | |
| # @FirmwareArchitecture: | |
| # Enumeration of architectures for which Qemu uses additional | |
| # firmware files. | |
| # | |
| # @aarch64: 64-bit Arm. | |
| # | |
| # @arm: 32-bit Arm. | |
| # | |
| # @i386: 32-bit x86. | |
| # | |
| # @loongarch64: 64-bit LoongArch. (since: 7.1) | |
| # | |
| # @riscv64: 64-bit RISC-V. | |
| # | |
| # @x86_64: 64-bit x86. | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'enum' : 'FirmwareArchitecture', | |
| 'data' : [ 'aarch64', 'arm', 'i386', 'loongarch64', 'riscv64', 'x86_64' ] } | |
| ## | |
| # @FirmwareTarget: | |
| # Defines the machine types that firmware may execute on. | |
| # | |
| # @architecture: Determines the emulation target (the QEMU system | |
| # emulator) that can execute the firmware. | |
| # | |
| # @machines: Lists the machine types (known by the emulator that is | |
| # specified through @architecture) that can execute the firmware. | |
| # Elements of @machines are supposed to be concrete machine types, | |
| # not aliases. Glob patterns are understood, which is especially | |
| # useful for versioned machine types. (For example, the glob | |
| # pattern "pc-i440fx-*" matches "pc-i440fx-2.12".) On the QEMU | |
| # command line, "-machine type=..." specifies the requested | |
| # machine type (but that option does not accept glob patterns). | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'struct' : 'FirmwareTarget', | |
| 'data' : { 'architecture' : 'FirmwareArchitecture', | |
| 'machines' : [ 'str' ] } } | |
| ## | |
| # @FirmwareFeature: | |
| # Defines the features that firmware may support, and the platform | |
| # requirements that firmware may present. | |
| # | |
| # @acpi-s3: The firmware supports S3 sleep (suspend to RAM), as | |
| # defined in the ACPI specification. On the "pc-i440fx-*" machine | |
| # types of the @i386 and @x86_64 emulation targets, S3 can be | |
| # enabled with "-global PIIX4_PM.disable_s3=0" and disabled with | |
| # "-global PIIX4_PM.disable_s3=1". On the "pc-q35-*" machine | |
| # types of the @i386 and @x86_64 emulation targets, S3 can be | |
| # enabled with "-global ICH9-LPC.disable_s3=0" and disabled with | |
| # "-global ICH9-LPC.disable_s3=1". | |
| # | |
| # @acpi-s4: The firmware supports S4 hibernation (suspend to disk), as | |
| # defined in the ACPI specification. On the "pc-i440fx-*" machine | |
| # types of the @i386 and @x86_64 emulation targets, S4 can be | |
| # enabled with "-global PIIX4_PM.disable_s4=0" and disabled with | |
| # "-global PIIX4_PM.disable_s4=1". On the "pc-q35-*" machine | |
| # types of the @i386 and @x86_64 emulation targets, S4 can be | |
| # enabled with "-global ICH9-LPC.disable_s4=0" and disabled with | |
| # "-global ICH9-LPC.disable_s4=1". | |
| # | |
| # @amd-sev: The firmware supports running under AMD Secure Encrypted | |
| # Virtualization, as specified in the AMD64 Architecture | |
| # Programmer's Manual. QEMU command line options related to this | |
| # feature are documented in | |
| # "docs/system/i386/amd-memory-encryption.rst". | |
| # | |
| # @amd-sev-es: The firmware supports running under AMD Secure | |
| # Encrypted Virtualization - Encrypted State, as specified in the | |
| # AMD64 Architecture Programmer's Manual. QEMU command line | |
| # options related to this feature are documented in | |
| # "docs/system/i386/amd-memory-encryption.rst". | |
| # | |
| # @amd-sev-snp: The firmware supports running under AMD Secure | |
| # Encrypted Virtualization - Secure Nested Paging, as specified in | |
| # the AMD64 Architecture Programmer's Manual. QEMU command line | |
| # options related to this feature are documented in | |
| # "docs/system/i386/amd-memory-encryption.rst". | |
| # | |
| # @intel-tdx: The firmware supports running under Intel Trust Domain | |
| # Extensions (TDX). | |
| # | |
| # @enrolled-keys: The variable store (NVRAM) template associated with | |
| # the firmware binary has the UEFI Secure Boot operational mode | |
| # turned on, with certificates enrolled. | |
| # | |
| # @requires-smm: The firmware requires the platform to emulate SMM | |
| # (System Management Mode), as defined in the AMD64 Architecture | |
| # Programmer's Manual, and in the Intel(R)64 and IA-32 | |
| # Architectures Software Developer's Manual. On the "pc-q35-*" | |
| # machine types of the @i386 and @x86_64 emulation targets, SMM | |
| # emulation can be enabled with "-machine smm=on". (On the | |
| # "pc-q35-*" machine types of the @i386 emulation target, | |
| # @requires-smm presents further CPU requirements; one combination | |
| # known to work is "-cpu coreduo,nx=off".) If the firmware is | |
| # marked as both @secure-boot and @requires-smm, then write | |
| # accesses to the pflash chip (NVRAM) that holds the UEFI variable | |
| # store must be restricted to code that executes in SMM, using the | |
| # additional option "-global | |
| # driver=cfi.pflash01,property=secure,value=on". Furthermore, a | |
| # large guest-physical address space (comprising guest RAM, memory | |
| # hotplug range, and 64-bit PCI MMIO aperture), and/or a high VCPU | |
| # count, may present high SMRAM requirements from the firmware. | |
| # On the "pc-q35-*" machine types of the @i386 and @x86_64 | |
| # emulation targets, the SMRAM size may be increased above the | |
| # default 16MB with the "-global mch.extended-tseg-mbytes=uint16" | |
| # option. As a rule of thumb, the default 16MB size suffices for | |
| # 1TB of guest-phys address space and a few tens of VCPUs; for | |
| # every further TB of guest-phys address space, add 8MB of SMRAM. | |
| # 48MB should suffice for 4TB of guest-phys address space and 2-3 | |
| # hundred VCPUs. | |
| # | |
| # @secure-boot: The firmware implements the software interfaces for | |
| # UEFI Secure Boot, as defined in the UEFI specification. Note | |
| # that without @requires-smm, guest code running with kernel | |
| # privileges can undermine the security of Secure Boot. | |
| # | |
| # @verbose-dynamic: When firmware log capture is enabled, the firmware | |
| # logs a large amount of debug messages, which may impact boot | |
| # performance. With log capture disabled, there is no boot | |
| # performance impact. On the "pc-i440fx-*" and "pc-q35-*" machine | |
| # types of the @i386 and @x86_64 emulation targets, firmware log | |
| # capture can be enabled with the QEMU command line options | |
| # "-chardev file,id=fwdebug,path=LOGFILEPATH -device | |
| # isa-debugcon,iobase=0x402,chardev=fwdebug". @verbose-dynamic is | |
| # mutually exclusive with @verbose-static. | |
| # | |
| # @verbose-static: The firmware unconditionally produces a large | |
| # amount of debug messages, which may impact boot performance. | |
| # This feature may typically be carried by certain UEFI firmware | |
| # for the "virt-*" machine types of the @arm and @aarch64 | |
| # emulation targets, where the debug messages are written to the | |
| # first (always present) PL011 UART. @verbose-static is mutually | |
| # exclusive with @verbose-dynamic. | |
| # | |
| # @host-uefi-vars: The firmware expects the host to provide an uefi | |
| # variable store. qemu supports that via "uefi-vars-sysbus" | |
| # (aarch64, riscv64, loongarch64) or "uefi-vars-x64" (x86_64) | |
| # devices. The firmware will not use flash for nvram. When | |
| # loading the firmware into flash the 'stateless' setup should be | |
| # used. It is recommened to load the firmware into memory though. | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'enum' : 'FirmwareFeature', | |
| 'data' : [ 'acpi-s3', 'acpi-s4', | |
| 'amd-sev', 'amd-sev-es', 'amd-sev-snp', | |
| 'intel-tdx', | |
| 'enrolled-keys', 'requires-smm', | |
| 'secure-boot', 'host-uefi-vars', | |
| 'verbose-dynamic', 'verbose-static' ] } | |
| ## | |
| # @FirmwareFormat: | |
| # Formats that are supported for firmware images. | |
| # | |
| # @raw: Raw disk image format. | |
| # | |
| # @qcow2: The QCOW2 image format. | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'enum': 'FirmwareFormat', | |
| 'data': [ 'raw', 'qcow2' ] } | |
| ## | |
| # @FirmwareFlashFile: | |
| # Defines common properties that are necessary for loading a | |
| # firmware file into a pflash chip. The corresponding QEMU | |
| # command line option is "-drive file=@filename,format=@format". | |
| # Note however that the option-argument shown here is incomplete; | |
| # it is completed under @FirmwareMappingFlash. | |
| # | |
| # @filename: Specifies the filename on the host filesystem where the | |
| # firmware file can be found. | |
| # | |
| # @format: Specifies the block format of the file pointed-to by | |
| # @filename, such as @raw or @qcow2. | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'struct' : 'FirmwareFlashFile', | |
| 'data' : { 'filename' : 'str', | |
| 'format' : 'FirmwareFormat' } } | |
| ## | |
| # @FirmwareFlashMode: | |
| # Describes how the firmware build handles code versus variable | |
| # persistence. | |
| # | |
| # @split: the executable file contains code while the NVRAM template | |
| # provides variable storage. The executable must be configured | |
| # read-only and can be shared between multiple guests. The NVRAM | |
| # template must be cloned for each new guest and configured | |
| # read-write. | |
| # | |
| # @combined: the executable file contains both code and variable | |
| # storage. The executable must be cloned for each new guest and | |
| # configured read-write. No NVRAM template will be specified. | |
| # | |
| # @stateless: the executable file contains code and variable storage | |
| # is not persisted. The executable must be configured read-only | |
| # and can be shared between multiple guests. No NVRAM template | |
| # will be specified. | |
| # | |
| # Since: 7.0.0 | |
| ## | |
| { 'enum': 'FirmwareFlashMode', | |
| 'data': [ 'split', 'combined', 'stateless' ] } | |
| ## | |
| # @FirmwareMappingFlash: | |
| # Describes loading and mapping properties for the firmware | |
| # executable and its accompanying NVRAM file, when @FirmwareDevice | |
| # is @flash. | |
| # | |
| # @mode: Describes how the firmware build handles code versus variable | |
| # storage. If not present, it must be treated as if it was | |
| # configured with value @split. Since: 7.0.0 | |
| # | |
| # @executable: Identifies the firmware executable. The @mode | |
| # indicates whether there will be an associated NVRAM template | |
| # present. The preferred corresponding QEMU command line options | |
| # are | |
| # | |
| # :: | |
| # | |
| # -drive if=none,id=pflash0,readonly=on,file=@executable.@filename,format=@executable.@format | |
| # -machine pflash0=pflash0 | |
| # | |
| # or equivalent -blockdev instead of -drive. When @mode is | |
| # @combined the executable must be cloned before use and | |
| # configured with readonly=off. With QEMU versions older than | |
| # 4.0, you have to use | |
| # | |
| # :: | |
| # | |
| # -drive if=pflash,unit=0,readonly=on,file=@executable.@filename,format=@executable.@format | |
| # | |
| # @nvram-template: Identifies the NVRAM template compatible with | |
| # @executable, when @mode is set to @split, otherwise it should | |
| # not be present. Management software instantiates an individual | |
| # copy -- a specific NVRAM file -- from @nvram-template.@filename | |
| # for each new virtual machine definition created. | |
| # @nvram-template.@filename itself is never mapped into virtual | |
| # machines, only individual copies of it are. An NVRAM file is | |
| # typically used for persistently storing the non-volatile UEFI | |
| # variables of a virtual machine definition. The preferred | |
| # corresponding QEMU command line options are | |
| # | |
| # :: | |
| # | |
| # -drive if=none,id=pflash1,readonly=off,file=FILENAME_OF_PRIVATE_NVRAM_FILE,format=@nvram-template.@format | |
| # -machine pflash1=pflash1 | |
| # | |
| # or equivalent -blockdev instead of -drive. With QEMU versions | |
| # older than 4.0, you have to use | |
| # | |
| # :: | |
| # | |
| # -drive if=pflash,unit=1,readonly=off,file=FILENAME_OF_PRIVATE_NVRAM_FILE,format=@nvram-template.@format | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'struct' : 'FirmwareMappingFlash', | |
| 'data' : { '*mode': 'FirmwareFlashMode', | |
| 'executable' : 'FirmwareFlashFile', | |
| '*nvram-template' : 'FirmwareFlashFile' } } | |
| ## | |
| # @FirmwareMappingKernel: | |
| # Describes loading and mapping properties for the firmware | |
| # executable, when @FirmwareDevice is @kernel. | |
| # | |
| # @filename: Identifies the firmware executable. The firmware | |
| # executable may be shared by multiple virtual machine | |
| # definitions. The corresponding QEMU command line option is | |
| # "-kernel @filename". | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'struct' : 'FirmwareMappingKernel', | |
| 'data' : { 'filename' : 'str' } } | |
| ## | |
| # @FirmwareMemoryUefiVars: | |
| # Contains information needed to set up the "uefi-vars" device to | |
| # provide UEFI variable store access to the firmware. | |
| # | |
| # @template: The path to the UEFI JSON variable store template | |
| # compatible with the firmware. Management software instantiates | |
| # an individual copy -- a specific UEFI variable store file -- | |
| # from @template for each new virtual machine definition created. | |
| # @template itself is never mapped into virtual machines, only | |
| # individual copies of it are. The file created by copying | |
| # @template is used for persistently storing the non-volatile | |
| # UEFI variables of a virtual machine definition. The | |
| # corresponding QEMU command line options are | |
| # | |
| # :: | |
| # | |
| # -device uefi-vars-x64,jsonfile=PATH_TO_PRIVATE_FILE | |
| # | |
| # for x86_64 virtual machines, or | |
| # | |
| # :: | |
| # | |
| # -device uefi-vars-sysbus,jsonfile=PATH_TO_PRIVATE_FILE | |
| # | |
| # for other UEFI architectures (aarch64, riscv64, loongarch64). | |
| # | |
| # Since: 11.0 | |
| ## | |
| { 'struct' : 'FirmwareMemoryUefiVars', | |
| 'data' : { 'template' : 'str' }} | |
| ## | |
| # @FirmwareMappingMemory: | |
| # Describes loading and mapping properties for the firmware | |
| # executable, when @FirmwareDevice is @memory. | |
| # | |
| # @filename: Identifies the firmware executable. The firmware | |
| # executable may be shared by multiple virtual machine | |
| # definitions. The corresponding QEMU command line option is | |
| # "-bios @filename". | |
| # | |
| # @uefi-vars: Information specific to firmware builds that expect the | |
| # "uefi-vars" device to be used to provide access to the UEFI | |
| # variable store. If the mapping contains this member, the | |
| # firmware descriptor must advertise both the @uefi interface | |
| # from @FirmwareOSInterface and the @host-uefi-vars feature from | |
| # @FirmwareFeature. (Since 11.0) | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'struct' : 'FirmwareMappingMemory', | |
| 'data' : { 'filename' : 'str', | |
| '*uefi-vars' : 'FirmwareMemoryUefiVars' } } | |
| ## | |
| # @FirmwareMappingIgvm: | |
| # Describes loading and mapping properties for the firmware | |
| # executable, when @FirmwareDevice is @igvm. | |
| # | |
| # @filename: Identifies the IGVM file containing the firmware | |
| # executable along with other information used to configure the | |
| # initial state of the guest. The IGVM file may be shared by | |
| # multiple virtual machine definitions. This corresponds to | |
| # creating an object on the command line with "-object igvm-cfg, | |
| # file=@filename". | |
| # | |
| # Since: 10.1 | |
| ## | |
| { 'struct' : 'FirmwareMappingIgvm', | |
| 'data' : { 'filename' : 'str' } } | |
| ## | |
| # @FirmwareMapping: | |
| # Provides a discriminated structure for firmware to describe its | |
| # loading / mapping properties. | |
| # | |
| # @device: Selects the device type that the firmware must be mapped | |
| # into. | |
| # | |
| # Since: 3.0 | |
| ## | |
| { 'union' : 'FirmwareMapping', | |
| 'base' : { 'device' : 'FirmwareDevice' }, | |
| 'discriminator' : 'device', | |
| 'data' : { 'flash' : 'FirmwareMappingFlash', | |
| 'kernel' : 'FirmwareMappingKernel', | |
| 'memory' : 'FirmwareMappingMemory', | |
| 'igvm' : 'FirmwareMappingIgvm' } } | |
| ## | |
| # @Firmware: | |
| # Describes a firmware (or a firmware use case) to management | |
| # software. | |
| # | |
| # It is possible for multiple @Firmware elements to match the search | |
| # criteria of management software. Applications thus need rules to | |
| # pick one of the many matches, and users need the ability to override | |
| # distro defaults. | |
| # | |
| # It is recommended to create firmware JSON files (each containing a | |
| # single @Firmware root element) with a double-digit prefix, for | |
| # example "50-ovmf.json", "50-seabios-256k.json", etc, so they can be | |
| # sorted in predictable order. The firmware JSON files should be | |
| # searched for in three directories: | |
| # | |
| # - /usr/share/qemu/firmware -- populated by distro-provided firmware | |
| # packages (XDG_DATA_DIRS covers | |
| # /usr/share by default), | |
| # | |
| # - /etc/qemu/firmware -- exclusively for sysadmins' local additions, | |
| # | |
| # - $XDG_CONFIG_HOME/qemu/firmware -- exclusively for per-user local | |
| # additions (XDG_CONFIG_HOME | |
| # defaults to $HOME/.config). | |
| # | |
| # Top-down, the list of directories goes from general to specific. | |
| # | |
| # Management software should build a list of files from all three | |
| # locations, then sort the list by filename (i.e., last pathname | |
| # component). Management software should choose the first JSON file | |
| # on the sorted list that matches the search criteria. If a more | |
| # specific directory has a file with same name as a less specific | |
| # directory, then the file in the more specific directory takes | |
| # effect. If the more specific file is zero length, it hides the less | |
| # specific one. | |
| # | |
| # For example, if a distro ships | |
| # | |
| # - /usr/share/qemu/firmware/50-ovmf.json | |
| # | |
| # - /usr/share/qemu/firmware/50-seabios-256k.json | |
| # | |
| # then the sysadmin can prevent the default OVMF being used at all | |
| # with | |
| # | |
| # $ touch /etc/qemu/firmware/50-ovmf.json | |
| # | |
| # The sysadmin can replace/alter the distro default OVMF with | |
| # | |
| # $ vim /etc/qemu/firmware/50-ovmf.json | |
| # | |
| # or they can provide a parallel OVMF with higher priority | |
| # | |
| # $ vim /etc/qemu/firmware/10-ovmf.json | |
| # | |
| # or they can provide a parallel OVMF with lower priority | |
| # | |
| # $ vim /etc/qemu/firmware/99-ovmf.json | |
| # | |
| # @description: Provides a human-readable description of the firmware. | |
| # Management software may or may not display @description. | |
| # | |
| # @interface-types: Lists the types of interfaces that the firmware | |
| # can expose to the guest OS. This is a non-empty, ordered list; | |
| # entries near the beginning of @interface-types are considered | |
| # more native to the firmware, and/or to have a higher quality | |
| # implementation in the firmware, than entries near the end of | |
| # @interface-types. | |
| # | |
| # @mapping: Describes the loading / mapping properties of the | |
| # firmware. | |
| # | |
| # @targets: Collects the target architectures (QEMU system emulators) | |
| # and their machine types that may execute the firmware. | |
| # | |
| # @features: Lists the features that the firmware supports, and the | |
| # platform requirements it presents. | |
| # | |
| # @tags: A list of auxiliary strings associated with the firmware for | |
| # which @description is not appropriate, due to the latter's | |
| # possible exposure to the end-user. @tags serves development and | |
| # debugging purposes only, and management software shall | |
| # explicitly ignore it. | |
| # | |
| # Since: 3.0 | |
| # | |
| # .. qmp-example:: | |
| # | |
| # { | |
| # "description": "SeaBIOS", | |
| # "interface-types": [ | |
| # "bios" | |
| # ], | |
| # "mapping": { | |
| # "device": "memory", | |
| # "filename": "/usr/share/seabios/bios-256k.bin" | |
| # }, | |
| # "targets": [ | |
| # { | |
| # "architecture": "i386", | |
| # "machines": [ | |
| # "pc-i440fx-*", | |
| # "pc-q35-*" | |
| # ] | |
| # }, | |
| # { | |
| # "architecture": "x86_64", | |
| # "machines": [ | |
| # "pc-i440fx-*", | |
| # "pc-q35-*" | |
| # ] | |
| # } | |
| # ], | |
| # "features": [ | |
| # "acpi-s3", | |
| # "acpi-s4" | |
| # ], | |
| # "tags": [ | |
| # "CONFIG_BOOTSPLASH=n", | |
| # "CONFIG_ROM_SIZE=256", | |
| # "CONFIG_USE_SMM=n" | |
| # ] | |
| # } | |
| # | |
| # { | |
| # "description": "OVMF with SB+SMM, empty varstore", | |
| # "interface-types": [ | |
| # "uefi" | |
| # ], | |
| # "mapping": { | |
| # "device": "flash", | |
| # "executable": { | |
| # "filename": "/usr/share/OVMF/OVMF_CODE.secboot.fd", | |
| # "format": "raw" | |
| # }, | |
| # "nvram-template": { | |
| # "filename": "/usr/share/OVMF/OVMF_VARS.fd", | |
| # "format": "raw" | |
| # } | |
| # }, | |
| # "targets": [ | |
| # { | |
| # "architecture": "x86_64", | |
| # "machines": [ | |
| # "pc-q35-*" | |
| # ] | |
| # } | |
| # ], | |
| # "features": [ | |
| # "acpi-s3", | |
| # "amd-sev", | |
| # "requires-smm", | |
| # "secure-boot", | |
| # "verbose-dynamic" | |
| # ], | |
| # "tags": [ | |
| # "-a IA32", | |
| # "-a X64", | |
| # "-p OvmfPkg/OvmfPkgIa32X64.dsc", | |
| # "-t GCC48", | |
| # "-b DEBUG", | |
| # "-D SMM_REQUIRE", | |
| # "-D SECURE_BOOT_ENABLE", | |
| # "-D FD_SIZE_4MB" | |
| # ] | |
| # } | |
| # | |
| # { | |
| # "description": "OVMF with SB+SMM, SB enabled, MS certs enrolled", | |
| # "interface-types": [ | |
| # "uefi" | |
| # ], | |
| # "mapping": { | |
| # "device": "flash", | |
| # "executable": { | |
| # "filename": "/usr/share/OVMF/OVMF_CODE.secboot.fd", | |
| # "format": "raw" | |
| # }, | |
| # "nvram-template": { | |
| # "filename": "/usr/share/OVMF/OVMF_VARS.secboot.fd", | |
| # "format": "raw" | |
| # } | |
| # }, | |
| # "targets": [ | |
| # { | |
| # "architecture": "x86_64", | |
| # "machines": [ | |
| # "pc-q35-*" | |
| # ] | |
| # } | |
| # ], | |
| # "features": [ | |
| # "acpi-s3", | |
| # "amd-sev", | |
| # "enrolled-keys", | |
| # "requires-smm", | |
| # "secure-boot", | |
| # "verbose-dynamic" | |
| # ], | |
| # "tags": [ | |
| # "-a IA32", | |
| # "-a X64", | |
| # "-p OvmfPkg/OvmfPkgIa32X64.dsc", | |
| # "-t GCC48", | |
| # "-b DEBUG", | |
| # "-D SMM_REQUIRE", | |
| # "-D SECURE_BOOT_ENABLE", | |
| # "-D FD_SIZE_4MB" | |
| # ] | |
| # } | |
| # | |
| # { | |
| # "description": "OVMF with SEV-ES support", | |
| # "interface-types": [ | |
| # "uefi" | |
| # ], | |
| # "mapping": { | |
| # "device": "flash", | |
| # "executable": { | |
| # "filename": "/usr/share/OVMF/OVMF_CODE.fd", | |
| # "format": "raw" | |
| # }, | |
| # "nvram-template": { | |
| # "filename": "/usr/share/OVMF/OVMF_VARS.fd", | |
| # "format": "raw" | |
| # } | |
| # }, | |
| # "targets": [ | |
| # { | |
| # "architecture": "x86_64", | |
| # "machines": [ | |
| # "pc-q35-*" | |
| # ] | |
| # } | |
| # ], | |
| # "features": [ | |
| # "acpi-s3", | |
| # "amd-sev", | |
| # "amd-sev-es", | |
| # "verbose-dynamic" | |
| # ], | |
| # "tags": [ | |
| # "-a X64", | |
| # "-p OvmfPkg/OvmfPkgX64.dsc", | |
| # "-t GCC48", | |
| # "-b DEBUG", | |
| # "-D FD_SIZE_4MB" | |
| # ] | |
| # } | |
| # | |
| # { | |
| # "description": "UEFI firmware for ARM64 virtual machines", | |
| # "interface-types": [ | |
| # "uefi" | |
| # ], | |
| # "mapping": { | |
| # "device": "flash", | |
| # "executable": { | |
| # "filename": "/usr/share/AAVMF/AAVMF_CODE.fd", | |
| # "format": "raw" | |
| # }, | |
| # "nvram-template": { | |
| # "filename": "/usr/share/AAVMF/AAVMF_VARS.fd", | |
| # "format": "raw" | |
| # } | |
| # }, | |
| # "targets": [ | |
| # { | |
| # "architecture": "aarch64", | |
| # "machines": [ | |
| # "virt-*" | |
| # ] | |
| # } | |
| # ], | |
| # "features": [ | |
| # | |
| # ], | |
| # "tags": [ | |
| # "-a AARCH64", | |
| # "-p ArmVirtPkg/ArmVirtQemu.dsc", | |
| # "-t GCC48", | |
| # "-b DEBUG", | |
| # "-D DEBUG_PRINT_ERROR_LEVEL=0x80000000" | |
| # ] | |
| # } | |
| ## | |
| { 'struct' : 'Firmware', | |
| 'data' : { 'description' : 'str', | |
| 'interface-types' : [ 'FirmwareOSInterface' ], | |
| 'mapping' : 'FirmwareMapping', | |
| 'targets' : [ 'FirmwareTarget' ], | |
| 'features' : [ 'FirmwareFeature' ], | |
| 'tags' : [ 'str' ] } } |