xref: /dragonfly/sys/dev/virtual/nvmm/nvmm.h (revision cca384e4)
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