16d65b43dSAaron LI /* 2bfc69df0SAaron LI * Copyright (c) 2018-2021 Maxime Villard, m00nbsd.net 36d65b43dSAaron LI * All rights reserved. 46d65b43dSAaron LI * 57f0e1ce2SAaron LI * This code is part of the NVMM hypervisor. 66d65b43dSAaron LI * 76d65b43dSAaron LI * Redistribution and use in source and binary forms, with or without 86d65b43dSAaron LI * modification, are permitted provided that the following conditions 96d65b43dSAaron LI * are met: 106d65b43dSAaron LI * 1. Redistributions of source code must retain the above copyright 116d65b43dSAaron LI * notice, this list of conditions and the following disclaimer. 126d65b43dSAaron LI * 2. Redistributions in binary form must reproduce the above copyright 136d65b43dSAaron LI * notice, this list of conditions and the following disclaimer in the 146d65b43dSAaron LI * documentation and/or other materials provided with the distribution. 156d65b43dSAaron LI * 167f0e1ce2SAaron LI * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 177f0e1ce2SAaron LI * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 187f0e1ce2SAaron LI * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 197f0e1ce2SAaron LI * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 207f0e1ce2SAaron LI * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 217f0e1ce2SAaron LI * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 227f0e1ce2SAaron LI * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 237f0e1ce2SAaron LI * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 247f0e1ce2SAaron LI * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 257f0e1ce2SAaron LI * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 267f0e1ce2SAaron LI * SUCH DAMAGE. 276d65b43dSAaron LI */ 286d65b43dSAaron LI 296d65b43dSAaron LI #ifndef _NVMM_H_ 306d65b43dSAaron LI #define _NVMM_H_ 316d65b43dSAaron LI 3223b2397dSAaron LI #include <sys/cdefs.h> 336d65b43dSAaron LI #include <sys/types.h> 346d65b43dSAaron LI 356d65b43dSAaron LI #ifndef _KERNEL 366d65b43dSAaron LI #include <stdbool.h> 376d65b43dSAaron LI #endif 386d65b43dSAaron LI 396d65b43dSAaron LI typedef uint64_t gpaddr_t; 406d65b43dSAaron LI typedef uint64_t gvaddr_t; 416d65b43dSAaron LI 426d65b43dSAaron LI typedef uint32_t nvmm_machid_t; 436d65b43dSAaron LI typedef uint32_t nvmm_cpuid_t; 446d65b43dSAaron LI 4523b2397dSAaron LI #undef CTASSERT 4623b2397dSAaron LI #define CTASSERT(x) NVMM_CTASSERT(x, __LINE__) 4723b2397dSAaron LI #define NVMM_CTASSERT(x, y) NVMM__CTASSERT(x, y) 4823b2397dSAaron LI #define NVMM__CTASSERT(x, y) typedef char __assert ## y[(x) ? 1 : -1] __unused 4923b2397dSAaron LI 506d65b43dSAaron LI #if defined(__x86_64__) 5142862644SAaron LI #if defined(__NetBSD__) 5242862644SAaron LI #include <dev/nvmm/x86/nvmm_x86.h> 5342862644SAaron LI #elif defined(__DragonFly__) 54db2e0557SAaron LI #include <dev/virtual/nvmm/x86/nvmm_x86.h> 556d65b43dSAaron LI #endif 5642862644SAaron LI #endif /* __x86_64__ */ 576d65b43dSAaron LI 58*cca384e4SAaron LI #define NVMM_KERN_VERSION 3 596d65b43dSAaron LI 606d65b43dSAaron LI struct nvmm_capability { 616d65b43dSAaron LI uint32_t version; 626d65b43dSAaron LI uint32_t state_size; 63*cca384e4SAaron LI uint32_t comm_size; 646d65b43dSAaron LI uint32_t max_machines; 656d65b43dSAaron LI uint32_t max_vcpus; 666d65b43dSAaron LI uint64_t max_ram; 676d65b43dSAaron LI struct nvmm_cap_md arch; 686d65b43dSAaron LI }; 696d65b43dSAaron LI 706d65b43dSAaron LI /* Machine configuration slots. */ 716d65b43dSAaron LI #define NVMM_MACH_CONF_LIBNVMM_BEGIN 0 726d65b43dSAaron LI #define NVMM_MACH_CONF_MI_BEGIN 100 736d65b43dSAaron LI #define NVMM_MACH_CONF_MD_BEGIN 200 746d65b43dSAaron LI #define NVMM_MACH_CONF_MD(op) (op - NVMM_MACH_CONF_MD_BEGIN) 756d65b43dSAaron LI 766d65b43dSAaron LI /* VCPU configuration slots. */ 776d65b43dSAaron LI #define NVMM_VCPU_CONF_LIBNVMM_BEGIN 0 786d65b43dSAaron LI #define NVMM_VCPU_CONF_MI_BEGIN 100 796d65b43dSAaron LI #define NVMM_VCPU_CONF_MD_BEGIN 200 806d65b43dSAaron LI #define NVMM_VCPU_CONF_MD(op) (op - NVMM_VCPU_CONF_MD_BEGIN) 816d65b43dSAaron LI 826d65b43dSAaron LI struct nvmm_comm_page { 836d65b43dSAaron LI /* State. */ 846d65b43dSAaron LI uint64_t state_wanted; 856d65b43dSAaron LI uint64_t state_cached; 866d65b43dSAaron LI uint64_t state_commit; 876d65b43dSAaron LI struct nvmm_vcpu_state state; 886d65b43dSAaron LI 896d65b43dSAaron LI /* Event. */ 906d65b43dSAaron LI bool event_commit; 916d65b43dSAaron LI struct nvmm_vcpu_event event; 926d65b43dSAaron LI }; 936d65b43dSAaron LI 946d65b43dSAaron LI #endif 95