# keelOS Linux partition (docs/92 §12): kernel config fragment, pinned 6.12.111 with
# tools/linuxpart/patches (kvm_intel's keel backend). build.sh runs
# `make allnoconfig KCONFIG_ALLCONFIG=<this + generated lines>` and checks that every line below
# made it into .config unchanged (a dropped dependency fails the build). x86_64 only, no modules.
#
# hyp starts the partition like the mvm (docs/72, docs/92 §8): a vmlinux ELF through Linux's
# 64-bit boot protocol, RAM identity mapped, COM1 = hyp's 16550 (its lines go into hyp's log).
# It gets cores (SMP, MADT from hyp, P1), a virtio-mmio internal link and a VT-d NIC.

CONFIG_64BIT=y
CONFIG_EXPERT=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_PRINTK=y
CONFIG_PRINTK_TIME=y
CONFIG_EARLY_PRINTK=y
CONFIG_BUG=y
CONFIG_MULTIUSER=y
CONFIG_SHMEM=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_FILE_LOCKING=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMFD_CREATE=y
CONFIG_AIO=y
CONFIG_IO_URING=y
CONFIG_INOTIFY_USER=y
CONFIG_POSIX_TIMERS=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_NO_HZ_IDLE=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_SMP=y
CONFIG_NR_CPUS=64
CONFIG_X86_X2APIC=y
CONFIG_MMU=y
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
# The identity RAM is wherever hyp's pool put it (2 MiB aligned): startup_64 relocates the
# kernel physically (phys_base); no KASLR.
CONFIG_RELOCATABLE=y
# CONFIG_RANDOMIZE_BASE is not set
CONFIG_PHYSICAL_ALIGN=0x200000
CONFIG_CPU_SUP_INTEL=y

CONFIG_HYPERVISOR_GUEST=y
CONFIG_PVH=y

# KVM: kvm_intel built in; under hyp it takes the keel backend (vmx_onkeel.c), elsewhere (the
# native test on the control machine) the normal VMX path.
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=y
CONFIG_KVM_INTEL=y
# CONFIG_KVM_AMD is not set
# CONFIG_KVM_HYPERV is not set
# CONFIG_KVM_XEN is not set
CONFIG_VHOST_MENU=y
CONFIG_VHOST_NET=y

# Built-in command line; hyp appends its own (keelpart.addr=…/keelpart.nic=… override init's
# defaults, tools/linuxpart/README.md). printk.devkmsg=on: init and the agent write their lines
# to /dev/kmsg (not rate limited). No panic reboot loop: a panic stays visible.
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0,115200 loglevel=6 tsc=reliable pci=conf1 8250.nr_uarts=1 printk.devkmsg=on random.trust_cpu=on"
# CONFIG_CMDLINE_OVERRIDE is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_COMPRESSION_NONE=y
CONFIG_RD_GZIP=y
CONFIG_PCI=y
CONFIG_PCI_MSI=y
# ACPI: P1 gives the partition a MADT (cores); without tables the kernel just carries on.
CONFIG_ACPI=y
# CONFIG_ACPI_PROCFS_POWER is not set

CONFIG_DEVTMPFS=y
CONFIG_PROC_FS=y
CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
# /dev/mem: keelbeat (feeds hyp's watchdog through the shared page, when hyp wants it)
CONFIG_DEVMEM=y
# CONFIG_STRICT_DEVMEM is not set
CONFIG_MAGIC_SYSRQ=y

CONFIG_TTY=y
CONFIG_UNIX98_PTYS=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=1
CONFIG_SERIAL_8250_RUNTIME_UARTS=1

# Root filesystem: a squashfs image (xz) in the initramfs, a loop device, overlay with a tmpfs upper.
CONFIG_BLOCK=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_MISC_FILESYSTEMS=y
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_FILE_DIRECT=y
CONFIG_SQUASHFS_DECOMP_SINGLE=y
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_ZLIB=y
CONFIG_XZ_DEC=y
CONFIG_OVERLAY_FS=y

# virtio: the internal link (virtio-mmio from hyp, like keelmgmt0) and, natively, PCI virtio
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_BLK=y
CONFIG_NET_CORE=y
CONFIG_NETDEVICES=y
CONFIG_VIRTIO_NET=y

# Network: the bridge for the guests, taps, VLANs, and the VT-d NIC's driver
CONFIG_NET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_PACKET=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_VLAN_8021Q=y
CONFIG_TUN=y
CONFIG_ETHERNET=y
CONFIG_NET_VENDOR_INTEL=y
CONFIG_E1000E=y
CONFIG_IGB=y
CONFIG_IXGBE=y
CONFIG_I40E=y
CONFIG_I40EVF=y
CONFIG_IAVF=y
CONFIG_NET_VENDOR_REALTEK=y
CONFIG_R8169=y
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_BNX2X is not set
CONFIG_PTP_1588_CLOCK=y

# CONFIG_MODULES is not set
# CONFIG_SOUND is not set
# CONFIG_DRM is not set
# CONFIG_USB_SUPPORT is not set
# CONFIG_VT is not set
# CONFIG_EFI is not set
