nvmm.h revision 1.7
1/* $NetBSD: nvmm.h,v 1.7 2019/04/04 17:33:47 maxv Exp $ */ 2 3/* 4 * Copyright (c) 2018 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Maxime Villard. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#ifndef _LIBNVMM_H_ 33#define _LIBNVMM_H_ 34 35#include <stdint.h> 36#include <stdbool.h> 37 38#include <dev/nvmm/nvmm.h> 39#include <dev/nvmm/nvmm_ioctl.h> 40#ifdef __x86_64__ 41#include <dev/nvmm/x86/nvmm_x86.h> 42#endif 43 44struct nvmm_machine { 45 nvmm_machid_t machid; 46 void *areas; /* opaque */ 47}; 48 49struct nvmm_io { 50 uint64_t port; 51 bool in; 52 size_t size; 53 uint8_t *data; 54}; 55 56struct nvmm_mem { 57 gpaddr_t gpa; 58 bool write; 59 size_t size; 60 uint8_t *data; 61}; 62 63struct nvmm_callbacks { 64 void (*io)(struct nvmm_io *); 65 void (*mem)(struct nvmm_mem *); 66}; 67 68#define NVMM_PROT_READ 0x01 69#define NVMM_PROT_WRITE 0x02 70#define NVMM_PROT_EXEC 0x04 71#define NVMM_PROT_USER 0x08 72#define NVMM_PROT_ALL 0x0F 73typedef uint64_t nvmm_prot_t; 74 75int nvmm_capability(struct nvmm_capability *); 76 77int nvmm_machine_create(struct nvmm_machine *); 78int nvmm_machine_destroy(struct nvmm_machine *); 79int nvmm_machine_configure(struct nvmm_machine *, uint64_t, void *); 80 81int nvmm_vcpu_create(struct nvmm_machine *, nvmm_cpuid_t); 82int nvmm_vcpu_destroy(struct nvmm_machine *, nvmm_cpuid_t); 83int nvmm_vcpu_setstate(struct nvmm_machine *, nvmm_cpuid_t, void *, uint64_t); 84int nvmm_vcpu_getstate(struct nvmm_machine *, nvmm_cpuid_t, void *, uint64_t); 85int nvmm_vcpu_inject(struct nvmm_machine *, nvmm_cpuid_t, struct nvmm_event *); 86int nvmm_vcpu_run(struct nvmm_machine *, nvmm_cpuid_t, struct nvmm_exit *); 87 88int nvmm_gpa_map(struct nvmm_machine *, uintptr_t, gpaddr_t, size_t, int); 89int nvmm_gpa_unmap(struct nvmm_machine *, uintptr_t, gpaddr_t, size_t); 90int nvmm_hva_map(struct nvmm_machine *, uintptr_t, size_t); 91int nvmm_hva_unmap(struct nvmm_machine *, uintptr_t, size_t); 92 93int nvmm_gva_to_gpa(struct nvmm_machine *, nvmm_cpuid_t, gvaddr_t, gpaddr_t *, 94 nvmm_prot_t *); 95int nvmm_gpa_to_hva(struct nvmm_machine *, gpaddr_t, uintptr_t *, 96 nvmm_prot_t *); 97 98int nvmm_assist_io(struct nvmm_machine *, nvmm_cpuid_t, struct nvmm_exit *); 99int nvmm_assist_mem(struct nvmm_machine *, nvmm_cpuid_t, struct nvmm_exit *); 100void nvmm_callbacks_register(const struct nvmm_callbacks *); 101 102int nvmm_vcpu_dump(struct nvmm_machine *, nvmm_cpuid_t); 103 104#endif /* _LIBNVMM_H_ */ 105