xref: /dragonfly/sys/dev/virtual/nvmm/nvmm.h (revision db2e0557)
16d65b43dSAaron LI /*	$NetBSD: nvmm.h,v 1.10.4.2 2020/08/18 09:29:52 martin Exp $	*/
26d65b43dSAaron LI 
36d65b43dSAaron LI /*
46d65b43dSAaron LI  * Copyright (c) 2018-2020 The NetBSD Foundation, Inc.
56d65b43dSAaron LI  * All rights reserved.
66d65b43dSAaron LI  *
76d65b43dSAaron LI  * This code is derived from software contributed to The NetBSD Foundation
86d65b43dSAaron LI  * by Maxime Villard.
96d65b43dSAaron LI  *
106d65b43dSAaron LI  * Redistribution and use in source and binary forms, with or without
116d65b43dSAaron LI  * modification, are permitted provided that the following conditions
126d65b43dSAaron LI  * are met:
136d65b43dSAaron LI  * 1. Redistributions of source code must retain the above copyright
146d65b43dSAaron LI  *    notice, this list of conditions and the following disclaimer.
156d65b43dSAaron LI  * 2. Redistributions in binary form must reproduce the above copyright
166d65b43dSAaron LI  *    notice, this list of conditions and the following disclaimer in the
176d65b43dSAaron LI  *    documentation and/or other materials provided with the distribution.
186d65b43dSAaron LI  *
196d65b43dSAaron LI  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
206d65b43dSAaron LI  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
216d65b43dSAaron LI  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
226d65b43dSAaron LI  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
236d65b43dSAaron LI  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
246d65b43dSAaron LI  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
256d65b43dSAaron LI  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
266d65b43dSAaron LI  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
276d65b43dSAaron LI  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
286d65b43dSAaron LI  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
296d65b43dSAaron LI  * POSSIBILITY OF SUCH DAMAGE.
306d65b43dSAaron LI  */
316d65b43dSAaron LI 
326d65b43dSAaron LI #ifndef _NVMM_H_
336d65b43dSAaron LI #define _NVMM_H_
346d65b43dSAaron LI 
356d65b43dSAaron LI #include <sys/types.h>
366d65b43dSAaron LI 
376d65b43dSAaron LI #ifndef _KERNEL
386d65b43dSAaron LI #include <stdbool.h>
396d65b43dSAaron LI #endif
406d65b43dSAaron LI 
416d65b43dSAaron LI typedef uint64_t	gpaddr_t;
426d65b43dSAaron LI typedef uint64_t	gvaddr_t;
436d65b43dSAaron LI 
446d65b43dSAaron LI typedef uint32_t	nvmm_machid_t;
456d65b43dSAaron LI typedef uint32_t	nvmm_cpuid_t;
466d65b43dSAaron LI 
476d65b43dSAaron LI #if defined(__x86_64__)
48*db2e0557SAaron LI #include <dev/virtual/nvmm/x86/nvmm_x86.h>
496d65b43dSAaron LI #endif
506d65b43dSAaron LI 
516d65b43dSAaron LI #define NVMM_KERN_VERSION		1
526d65b43dSAaron LI 
536d65b43dSAaron LI struct nvmm_capability {
546d65b43dSAaron LI 	uint32_t version;
556d65b43dSAaron LI 	uint32_t state_size;
566d65b43dSAaron LI 	uint32_t max_machines;
576d65b43dSAaron LI 	uint32_t max_vcpus;
586d65b43dSAaron LI 	uint64_t max_ram;
596d65b43dSAaron LI 	struct nvmm_cap_md arch;
606d65b43dSAaron LI };
616d65b43dSAaron LI 
626d65b43dSAaron LI /* Machine configuration slots. */
636d65b43dSAaron LI #define NVMM_MACH_CONF_LIBNVMM_BEGIN	0
646d65b43dSAaron LI #define NVMM_MACH_CONF_MI_BEGIN		100
656d65b43dSAaron LI #define NVMM_MACH_CONF_MD_BEGIN		200
666d65b43dSAaron LI #define NVMM_MACH_CONF_MD(op)		(op - NVMM_MACH_CONF_MD_BEGIN)
676d65b43dSAaron LI 
686d65b43dSAaron LI /* VCPU configuration slots. */
696d65b43dSAaron LI #define NVMM_VCPU_CONF_LIBNVMM_BEGIN	0
706d65b43dSAaron LI #define NVMM_VCPU_CONF_MI_BEGIN		100
716d65b43dSAaron LI #define NVMM_VCPU_CONF_MD_BEGIN		200
726d65b43dSAaron LI #define NVMM_VCPU_CONF_MD(op)		(op - NVMM_VCPU_CONF_MD_BEGIN)
736d65b43dSAaron LI 
746d65b43dSAaron LI struct nvmm_comm_page {
756d65b43dSAaron LI 	/* State. */
766d65b43dSAaron LI 	uint64_t state_wanted;
776d65b43dSAaron LI 	uint64_t state_cached;
786d65b43dSAaron LI 	uint64_t state_commit;
796d65b43dSAaron LI 	struct nvmm_vcpu_state state;
806d65b43dSAaron LI 
816d65b43dSAaron LI 	/* Event. */
826d65b43dSAaron LI 	bool event_commit;
836d65b43dSAaron LI 	struct nvmm_vcpu_event event;
846d65b43dSAaron LI };
856d65b43dSAaron LI 
866d65b43dSAaron LI /*
876d65b43dSAaron LI  * Bits 20:27 -> machid
886d65b43dSAaron LI  * Bits 12:19 -> cpuid
896d65b43dSAaron LI  */
906d65b43dSAaron LI #define NVMM_COMM_OFF(machid, cpuid)	\
916d65b43dSAaron LI 	((((uint64_t)machid & 0xFFULL) << 20) | (((uint64_t)cpuid & 0xFFULL) << 12))
926d65b43dSAaron LI 
936d65b43dSAaron LI #define NVMM_COMM_MACHID(off)		\
946d65b43dSAaron LI 	((off >> 20) & 0xFF)
956d65b43dSAaron LI 
966d65b43dSAaron LI #define NVMM_COMM_CPUID(off)		\
976d65b43dSAaron LI 	((off >> 12) & 0xFF)
986d65b43dSAaron LI 
996d65b43dSAaron LI #ifdef _KERNEL
1006d65b43dSAaron LI /* At most one page, for the NVMM_COMM_* macros. */
1016d65b43dSAaron LI CTASSERT(sizeof(struct nvmm_comm_page) <= PAGE_SIZE);
1026d65b43dSAaron LI #endif
1036d65b43dSAaron LI 
1046d65b43dSAaron LI #endif
105