/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2025 The FreeBSD Foundation4*5* This software was developed by Konstantin Belousov <[email protected]>6* under sponsorship from the FreeBSD Foundation.7*8* Redistribution and use in source and binary forms, with or without9* modification, are permitted provided that the following conditions10* are met:11* 1. Redistributions of source code must retain the above copyright12* notice, this list of conditions and the following disclaimer.13* 2. Redistributions in binary form must reproduce the above copyright14* notice, this list of conditions and the following disclaimer in the15* documentation and/or other materials provided with the distribution.16*17* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND18* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE19* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE20* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE21* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL22* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS23* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)24* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT25* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY26* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF27* SUCH DAMAGE.28*/2930#include <sys/types.h>31#include <sys/errno.h>32#include <sys/tree.h>33#include <machine/vmm.h>3435#include <stdio.h>3637#include "debug.h"38#include "mem.h"3940static int41no_mem_handler(struct vcpu *vcpu __unused, int dir, uint64_t addr __unused,42int size, uint64_t *val, void *arg1 __unused, long arg2 __unused)43{44if (dir == MEM_F_READ) {45switch (size) {46case 1:47*val = 0xff;48break;49case 2:50*val = 0xffff;51break;52case 4:53*val = 0xffffffff;54break;55case 8:56*val = 0xffffffffffffffff;57break;58}59}60return (0);61}6263static struct mem_range fb_entry = {64.handler = no_mem_handler,65.base = 0,66.size = 0xffffffffffffffff,67};6869/*70* x86 hardware ignores writes without receiver, and returns all 1's71* from reads without response to transaction.72*/73int74mmio_handle_non_backed_mem(struct vcpu *vcpu __unused, uint64_t paddr,75struct mem_range **mr_paramp)76{77*mr_paramp = &fb_entry;78EPRINTLN("Emulating access to non-existent address to %#lx\n",79paddr);80return (0);81}828384