# $NetBSD$
#
# MICROVM kernel configuration, for use with Qemu microvm machine type
# or Firecracker.
# Stripped-down configuration with no PCI, use VirtIO over MMIO virtual
# bus instead. ACPI is disabled as Firecracker doesn't support it,
# use legacy MP tables instead.
#
# Exemple qemu usage on a Linux host to boot a NetBSD guest:
#
# qemu-system-x86_64						\
# -M microvm,x-option-roms=off,rtc=on,acpi=off,pic=off		\
# -enable-kvm -m 128 -cpu host,+invtsc				\
# -kernel ${KERNEL} -append "root=ld0a console=com rw -z"	\
# -display none -device virtio-blk-device,drive=hd0		\
# -drive file=${IMG},format=raw,id=hd0				\
# -global virtio-mmio.force-legacy=false -serial stdio

machine amd64 x86 xen
include         "conf/std"      # MI standard options
include         "arch/xen/conf/std.xenversion"

options         CPU_IN_CKSUM
options         EXEC_ELF64      # exec ELF binaries
options         EXEC_SCRIPT     # exec #! scripts
options         MTRR
options         MULTIPROCESSOR

options         CHILD_MAX=1024  # 160 is too few
options         OPEN_MAX=1024   # 128 is too few

mainbus0 at root
cpu* at mainbus?
ioapic* at mainbus? apid ?

options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
maxusers	8		# estimated number of users

options 	INSECURE	# disable kernel security levels - X needs this

options 	RTC_OFFSET=0	# hardware clock is this many mins. west of GMT

options 	PIPE_SOCKETPAIR	# smaller, but slower pipe(2)

# Xen PV support for PVH and HVM guests, needed for PVH boot
options 	XENPVHVM
options 	XEN
hypervisor*	at mainbus?		# Xen hypervisor
xenbus*	 	at hypervisor?		# Xen virtual bus
xencons*	at hypervisor?		# Xen virtual console

# Include NetBSD 10 compatibility
options		COMPAT_100
#
# Because gcc omits the frame pointer for any -O level, the line below
# is needed to make backtraces in DDB work.
#
makeoptions	COPTS="-O2 -fno-omit-frame-pointer"

# File systems
#include "conf/filesystems.config"
file-system FFS
file-system EXT2FS
file-system KERNFS
file-system MFS
file-system TMPFS
file-system PTYFS
file-system MSDOSFS

options		DKWEDGE_AUTODISCOVER
options		DKWEDGE_METHOD_GPT
# File system options
# ffs
options 	FFS_NO_SNAPSHOT	# No FFS snapshot support
options 	WAPBL		# File system journaling support

# Networking options
#options 	GATEWAY		# packet forwarding
options 	INET		# IP + ICMP + TCP + UDP
options 	INET6		# IPV6

# Kernel root file system and dump configuration.
config		netbsd	root on ? type ?

#
# Device configuration
#

# ACPI will be used if present. If not it will fall back to MPBIOS
options 	MPBIOS			# configure CPUs and APICs using MPBIOS
# Provide bug-for-bug compatibility with Linux in MP Table searching
# and parsing.  Firecracker relies on these bugs.
options		MPTABLE_LINUX_BUG_COMPAT

# ISA bus support
isa0	at mainbus?

# ISA serial interfaces
com0	at isa? port 0x3f8 irq 4	# Standard PC serial ports

# Virtual bus for non-PCI devices
pv* at pvbus?

# Paravirtual clock available in KVM
pvclock* at pv?

## Virtio devices
# Use MMIO by default
virtio* at pv?
#virtio* at pci? dev ? function ?	# Virtio PCI device
#virtio* at acpi?
#viomb*	at virtio?			# Virtio memory balloon device

ld*	at virtio?			# Virtio disk device
vioif*	at virtio?			# Virtio network device
viornd* at virtio?			# Virtio entropy device
viocon* at virtio?

vio9p*	at virtio?			# Virtio 9P device
#vioscsi* at virtio?
#scsibus* at vioscsi?

pseudo-device	md			# memory disk device (ramdisk)
#options 	MEMORY_DISK_HOOKS	# enable md specific hooks
#options 	MEMORY_DISK_DYNAMIC	# enable dynamic resizing
#
pseudo-device	vnd			# disk-like interface to files
#options 	VND_COMPRESSION		# compressed vnd(4)

## network pseudo-devices
pseudo-device	bpfilter		# Berkeley packet filter
pseudo-device	loop			# network loopback

## miscellaneous pseudo-devices
pseudo-device	pty			# pseudo-terminals
# userland interface to drivers, including autoconf and properties retrieval
pseudo-device	drvctl

file-system	PUFFS
pseudo-device	putter

# tslog(4) boot-time event tracing facility
options		TSLOG
# Enable boot time tracking
options		BOOTCYCLETIME