choice
	prompt "Type of boot firmware (BIOS) on the target platform"
	default PLATFORM_SBL
	help
	  The boot firmware (BIOS) used on the target board.

config PLATFORM_UEFI
	bool "UEFI"
	select EFI_STUB
	help
	  Select this if the target board uses UEFI.

config PLATFORM_SBL
	bool "SBL"
	help
	  Select this if the target board uses Slim Bootloader.

endchoice

choice
	prompt "Hypervisor mode"
	default SHARING_MODE
	help
	  Select the usage mode of the hypervisor.

config SHARING_MODE
	bool "Sharing mode"
	help
	  In sharing mode, the first VM (called Service OS or SOS) is capable of
	  managing the other VMs (called User OS or UOS) and trap/mediate their
	  I/O accesses to physical devices.

config PARTITION_MODE
	bool "Partition mode"
	depends on PLATFORM_SBL
	help
	  In partition mode, every VM owns part of the physical resources
	  exclusively and runs with minimal interference from the others. The VM
	  configurations are statically defined in the source.

endchoice

choice
	prompt "I/O emulation completion mode"
	default IOREQ_NOTIFICATION
	help
	  Select the mode of I/O emulation completion

config IOREQ_NOTIFICATION
	bool "Notification mode"
	help
	  When I/O request is completed, SOS will mark the completion status and
	  notify hypervisor via hypercall. Hypervisor will finish the post work
	  when notification is received.

config IOREQ_POLLING
	bool "Polling mode"
	help
	  When I/O request is completed, SOS will only mark completion status
	  without notifying hypervisor. Hypervisor will poll the completion
	  status and finish the post work.

endchoice

config BOARD
	string "Target board"
	help
	  The target board this build runs on top of.

config DEFCONFIG_LIST
	string
	option defconfig_list
	default "arch/x86/configs/$BOARD.config"

config RELEASE
	bool "Release build"
	default n
	help
	  Whether to build a release version of the hypervisor. Logs, serial
	  console and hypervisor shell are available only in non-release
	  (i.e. debug) builds. Assertions are not effective in release builds.

config MAX_VM_NUM
	int "Maximum number of VM"
	range 1 8
	default 4
	help
	  The maximum number of virtual machines (VMs) the hypervisor can
	  support.  This is customizable per the use cases of the build. For
	  general-purpose builds the maximum of physical cores can be used.

config MAX_VCPUS_PER_VM
	int "Maximum number of VCPUs per VM"
	range 1 8
	default 4 if PLATFORM_SBL
	default 8 if PLATFORM_UEFI
	help
	  The maximum number of virtual CPUs the hypervisor can support in a
	  single VM.

config MAX_PCPU_NUM
	int "Maximum number of PCPU"
	range 1 8
	default 8

config MAX_EMULATED_MMIO_REGIONS
	int "Maximum number of emulated MMIO regions"
	range 0 128
	default 16

config MAX_PT_IRQ_ENTRIES
	int "Maximum number of interrupt source for PT devices"
	range 0 128
	default 64

config MAX_IOMMU_NUM
	int "Maximum number of IOMMU devices"
	range 1 2
	default 2
	help
	  The maximum number of physical IOMMUs the hypervisor can support.

config STACK_SIZE
	hex "Capacity of one stack, in bytes"
	default 0x2000
	help
	  The size of stacks used by physical cores. Each core uses one stack
	  for normal operations and another three for specific exceptions.

config LOG_BUF_SIZE
	hex "Capacity of logbuf for each physical cpu"
	default 0x40000

config LOG_DESTINATION
	int "Bitmap of consoles where logs are printed"
	range 0 7
	default 7
	help
	  A bitmap indicating the destinations of log messages. Currently there
	  are 3 destinations available. Bit 0 represents the serial console, bit
	  1 the SOS ACRN log and bit 2 NPK log. Effective only in debug builds.

config CPU_UP_TIMEOUT
	int "Timeout in ms when bringing up secondary CPUs"
	range 100 200
	default 100
	help
	  A 32-bit integer specifying the timeout in millisecond when waiting
	  for secondary CPUs to start up.

choice
	prompt "Serial IO type"
	depends on !RELEASE
	optional
	help
	  If selected, this configures whether the physical serial port shall
	  be accessed via memory-mapped registers or I/O ports.

	  If this is not selected, the serial port is disabled. This is the
	  default.

config SERIAL_PCI
	bool "PCI"
	help
	  Select this if the serial port shall be accessed via PCI memory-mapped
	  registers.

config SERIAL_LEGACY
	bool "Legacy"
	help
	  Select this if the serial port shall be accessed via legacy port in/out
	  instructions.

endchoice

config SERIAL_PCI_BDF
	string "BDF of serial PCI device"
	depends on SERIAL_PCI
	default "0:18.2"
	help
	  BDF: bus, device and function of the serial PCI device; for an example,
	  PCI device ttyS2: 0:18.2.

config SERIAL_PIO_BASE
	hex "Base address of serial PIO region"
	depends on SERIAL_LEGACY
	default 0x3f8
	help
	  The base address of the serial ports. This is logically 16-bit but used
	  as a 64-bit integer.

config COM_BASE
	hex "Base address of the vuart port"
	depends on !RELEASE
	default 0x3f8
	help
	  Base address of the vuart port.

config COM_IRQ
	hex "IRQ of the vuart port"
	depends on !RELEASE
	default 4
	help
	  IRQ of the vuart port.

config MALLOC_ALIGN
	int "Block size in the heap for malloc()"
	range 8 32
	default 16

config HEAP_SIZE
	hex "Capacity of the heap for malloc()"
	default 0x100000

config CONSOLE_LOGLEVEL_DEFAULT
	int "Default loglevel on the serial console"
	depends on !RELEASE
	range 0 6
	default 3
	help
	  This indicates the maximum debug level of logs that will be available
	  on the the serial console. The higher the number, the more logs will
	  be available.

config MEM_LOGLEVEL_DEFAULT
	int "Default loglevel in memory"
	depends on !RELEASE
	range 0 6
	default 5
	help
	  This indicates the maximum debug level of logs that will be available
	  in the logbuf in memory which can be accessed by ACRN log in SOS. The
	  higher the number, the more logs will be available.

config NPK_LOGLEVEL_DEFAULT
	int "Default loglevel for the hypervisor NPK log"
	depends on !RELEASE
	range 0 6
	default 5
	help
	  This indicates the maximum debug level of logs that will be available
	  via NPK log. The higher the number, the more logs will be available.

config LOW_RAM_SIZE
	hex "Size of the low RAM region"
	default 0x00010000
	help
	  A 32-bit integer indicating the size of RAM region below address
	  0x10000, starting from address 0x0.

config HV_RAM_START
	hex "Start physical address of the RAM region used by the hypervisor"
	default 0x6e000000 if PLATFORM_SBL
	default 0x00100000 if PLATFORM_UEFI
	help
	  A 64-bit integer indicating the base physical address where the
	  hypervisor should be loaded. If RELOC is disabled, the bootloader
	  is required to load the hypervisor to this specific address.
	  Otherwise the hypervisor will not boot. With RELOC enabled the
	  hypervisor may relocate its symbols to where it is placed,
	  and thus the bootloader might not place the hypervisor at this
	  specific address.

config HV_RAM_SIZE
	hex "Size of the RAM region used by the hypervisor"
	default 0x07800000 if PLATFORM_SBL
	default 0x0b000000 if PLATFORM_UEFI
	help
	  A 64-bit integer indicating the size of RAM used by the hypervisor.
	  It is ensured at link time that the footprint of the hypervisor
	  does not exceed this size.

config PLATFORM_RAM_SIZE
	hex "Size of the physical platform RAM"
	default 0x200000000 if PLATFORM_SBL
	default 0x400000000 if PLATFORM_UEFI
	help
	  A 64-bit integer indicating the size of the physical platform RAM
	  (MMIO not included).

config SOS_RAM_SIZE
	hex "Size of the Service OS (SOS) RAM"
	default 0x200000000 if PLATFORM_SBL
	default 0x400000000 if PLATFORM_UEFI
	help
	  A 64-bit integer indicating the size of the Service OS RAM (MMIO not
	  included).

 config UOS_RAM_SIZE
	hex "Size of the User OS (UOS) RAM"
	default 0x100000000 if PLATFORM_SBL
	default 0x200000000 if PLATFORM_UEFI
	help
	  A 64-bit integer indicating the size of the User OS RAM (MMIO not
	  included). Now we assume each UOS uses same amount of RAM size.

config CONSTANT_ACPI
	bool "The platform ACPI info is constant"
	default n
	help
	  Whether constant ACPI tables shall be used. If selected, the built-in
	  ACPI tables, usually generated on target platforms by an offline tool,
	  will be used. If not a fixup subroutine will be invoked to update the
	  built-in tables after parsing the real ACPI tables at runtime.

config DMAR_PARSE_ENABLED
	bool "Enable ACPI DMA Remapping tables parsing"
	default n if PLATFORM_SBL
	default y if PLATFORM_UEFI
	help
	  Whether to parse the ACPI DMA Remapping tables at runtime.

config GPU_SBDF
	hex "Segment, Bus, Device, and function of the GPU"
	depends on DMAR_PARSE_ENABLED
	default 0x00000010
	help
	  A 32-bit integer encoding the segment, bus, device and function of the
	  GPU. This integer consists of a 16-bit segment ID, 8-bit bus ID, 5-bit
	  device ID and 3-bit function ID. As an example, for PCI device at
	  00:02.0 in DRHD segment 0, this SBDF would be (0 << 16) | (0 << 8) |
	  (2 << 3) | (0 << 0), i.e. 0x00000010.

config EFI_STUB
	bool "Enable EFI stub"
	depends on PLATFORM_UEFI
	default y

config UEFI_OS_LOADER_NAME
	string "UEFI OS loader name"
	depends on PLATFORM_UEFI
	default "\\EFI\\org.clearlinux\\bootloaderx64.efi"

config MTRR_ENABLED
	bool "Memory Type Range Registers (MTRR) enabled"
	default y

config RELOC
	bool "Enable hypervisor relocation"
	default n
	help
	  When selected, the hypervisor will relocate itself to where it is
	  loaded. This allows the bootloader to put the hypervisor image to
	  wherever appropriate. Without relocation the bootloader must put the
	  image to RAM_START, otherwise the hypervisor will not start up.

config IOMMU_BUS_NUM
	hex "Highest PCI bus ID used during IOMMU initialization"
	default 0x10 if PLATFORM_SBL
	default 0x100 if PLATFORM_UEFI
	help
	  Any BDF with a bus ID smaller than this number is mapped to
	  the IOMMU domain of the first VM.

config MAX_PCI_DEV_NUM
	int "Maximum number of PCI devices"
	range 1 1024
	default 96

config MAX_MSIX_TABLE_NUM
	int "Maximum number of MSI-X tables per device"
	range 1 2048
	default 16

config ENFORCE_VALIDATED_ACPI_INFO
	bool "Enforce the use of validated ACPI info table"
	default n
	help
	  When set, the use of validated ACPI info tables is enforced and using
	  an offline tool to generate such data is required. Otherwise a
	  warning will be printed when validated ACPI info is unavailable, but
	  a binary can still be built with the ACPI info template.

config L1D_FLUSH_VMENTRY_ENABLED
	bool "Enable L1 cache flush before VM entry"
	default n
