003 File Manager
Current Path:
/usr/src/sys/amd64/include
usr
/
src
/
sys
/
amd64
/
include
/
📁
..
📄
_align.h
(87 B)
📄
_bus.h
(1.78 KB)
📄
_inttypes.h
(90 B)
📄
_limits.h
(88 B)
📄
_stdint.h
(88 B)
📄
_types.h
(87 B)
📄
acpica_machdep.h
(95 B)
📄
apm_bios.h
(89 B)
📄
asm.h
(3.6 KB)
📄
asmacros.h
(10.11 KB)
📄
atomic.h
(22.3 KB)
📄
bus.h
(84 B)
📄
bus_dma.h
(1.5 KB)
📄
clock.h
(891 B)
📄
counter.h
(2.53 KB)
📄
cpu.h
(3.19 KB)
📄
cpufunc.h
(18.89 KB)
📄
cputypes.h
(89 B)
📄
csan.h
(2.02 KB)
📄
db_machdep.h
(2.83 KB)
📄
dump.h
(85 B)
📄
efi.h
(2.62 KB)
📄
elf.h
(84 B)
📄
endian.h
(87 B)
📄
exec.h
(1.76 KB)
📄
fdt.h
(84 B)
📄
float.h
(86 B)
📄
floatingpoint.h
(2.01 KB)
📄
fpu.h
(3.28 KB)
📄
frame.h
(1.78 KB)
📄
gdb_machdep.h
(2.32 KB)
📄
ieeefp.h
(8.9 KB)
📄
in_cksum.h
(2.95 KB)
📄
intr_machdep.h
(1.88 KB)
📄
iodev.h
(1.81 KB)
📄
iommu.h
(86 B)
📄
kdb.h
(1.85 KB)
📄
limits.h
(1.9 KB)
📄
md_var.h
(3.66 KB)
📄
memdev.h
(1.6 KB)
📄
metadata.h
(89 B)
📄
minidump.h
(1.73 KB)
📄
mp_watchdog.h
(1.53 KB)
📄
nexusvar.h
(1.76 KB)
📄
npx.h
(84 B)
📄
ofw_machdep.h
(92 B)
📄
param.h
(5.92 KB)
📁
pc
📄
pcb.h
(4.25 KB)
📄
pci_cfgreg.h
(91 B)
📄
pcpu.h
(10.3 KB)
📄
pcpu_aux.h
(2.16 KB)
📄
pmap.h
(18.41 KB)
📄
pmc_mdep.h
(4.55 KB)
📄
ppireg.h
(1.88 KB)
📄
proc.h
(3.74 KB)
📄
procctl.h
(88 B)
📄
profile.h
(5.7 KB)
📄
psl.h
(84 B)
📄
ptrace.h
(87 B)
📄
pvclock.h
(88 B)
📄
reg.h
(84 B)
📄
reloc.h
(2.26 KB)
📄
resource.h
(1.93 KB)
📄
runq.h
(1.85 KB)
📄
segments.h
(4.08 KB)
📄
setjmp.h
(87 B)
📄
sf_buf.h
(2 KB)
📄
sgx.h
(2.23 KB)
📄
sgxreg.h
(4.95 KB)
📄
sigframe.h
(89 B)
📄
signal.h
(87 B)
📄
smp.h
(1.15 KB)
📄
specialreg.h
(91 B)
📄
stack.h
(85 B)
📄
stdarg.h
(87 B)
📄
sysarch.h
(88 B)
📄
timerreg.h
(2.05 KB)
📄
trap.h
(85 B)
📄
tss.h
(2.84 KB)
📄
ucontext.h
(89 B)
📄
vdso.h
(85 B)
📄
vm.h
(2.02 KB)
📄
vmm.h
(22.46 KB)
📄
vmm_dev.h
(11.61 KB)
📄
vmm_instruction_emul.h
(4.97 KB)
📄
vmm_snapshot.h
(4.63 KB)
📄
vmparam.h
(8.71 KB)
📁
xen
Editing: vmm_instruction_emul.h
/*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2012 NetApp, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD$ */ #ifndef _VMM_INSTRUCTION_EMUL_H_ #define _VMM_INSTRUCTION_EMUL_H_ #include <sys/mman.h> /* * Callback functions to read and write memory regions. */ typedef int (*mem_region_read_t)(void *vm, int cpuid, uint64_t gpa, uint64_t *rval, int rsize, void *arg); typedef int (*mem_region_write_t)(void *vm, int cpuid, uint64_t gpa, uint64_t wval, int wsize, void *arg); /* * Emulate the decoded 'vie' instruction. * * The callbacks 'mrr' and 'mrw' emulate reads and writes to the memory region * containing 'gpa'. 'mrarg' is an opaque argument that is passed into the * callback functions. * * 'void *vm' should be 'struct vm *' when called from kernel context and * 'struct vmctx *' when called from user context. * s */ int vmm_emulate_instruction(void *vm, int cpuid, uint64_t gpa, struct vie *vie, struct vm_guest_paging *paging, mem_region_read_t mrr, mem_region_write_t mrw, void *mrarg); int vie_update_register(void *vm, int vcpuid, enum vm_reg_name reg, uint64_t val, int size); /* * Returns 1 if an alignment check exception should be injected and 0 otherwise. */ int vie_alignment_check(int cpl, int operand_size, uint64_t cr0, uint64_t rflags, uint64_t gla); /* Returns 1 if the 'gla' is not canonical and 0 otherwise. */ int vie_canonical_check(enum vm_cpu_mode cpu_mode, uint64_t gla); uint64_t vie_size2mask(int size); int vie_calculate_gla(enum vm_cpu_mode cpu_mode, enum vm_reg_name seg, struct seg_desc *desc, uint64_t off, int length, int addrsize, int prot, uint64_t *gla); #ifdef _KERNEL /* * APIs to fetch and decode the instruction from nested page fault handler. * * 'vie' must be initialized before calling 'vmm_fetch_instruction()' */ int vmm_fetch_instruction(struct vm *vm, int cpuid, struct vm_guest_paging *guest_paging, uint64_t rip, int inst_length, struct vie *vie, int *is_fault); /* * Translate the guest linear address 'gla' to a guest physical address. * * retval is_fault Interpretation * 0 0 'gpa' contains result of the translation * 0 1 An exception was injected into the guest * EFAULT N/A An unrecoverable hypervisor error occurred */ int vm_gla2gpa(struct vm *vm, int vcpuid, struct vm_guest_paging *paging, uint64_t gla, int prot, uint64_t *gpa, int *is_fault); /* * Like vm_gla2gpa, but no exceptions are injected into the guest and * PTEs are not changed. */ int vm_gla2gpa_nofault(struct vm *vm, int vcpuid, struct vm_guest_paging *paging, uint64_t gla, int prot, uint64_t *gpa, int *is_fault); #endif /* _KERNEL */ void vie_restart(struct vie *vie); void vie_init(struct vie *vie, const char *inst_bytes, int inst_length); /* * Decode the instruction fetched into 'vie' so it can be emulated. * * 'gla' is the guest linear address provided by the hardware assist * that caused the nested page table fault. It is used to verify that * the software instruction decoding is in agreement with the hardware. * * Some hardware assists do not provide the 'gla' to the hypervisor. * To skip the 'gla' verification for this or any other reason pass * in VIE_INVALID_GLA instead. */ #ifdef _KERNEL #define VIE_INVALID_GLA (1UL << 63) /* a non-canonical address */ int vmm_decode_instruction(struct vm *vm, int cpuid, uint64_t gla, enum vm_cpu_mode cpu_mode, int csd, struct vie *vie); #else /* !_KERNEL */ /* * Permit instruction decoding logic to be compiled outside of the kernel for * rapid iteration and validation. No GLA validation is performed, obviously. */ int vmm_decode_instruction(enum vm_cpu_mode cpu_mode, int csd, struct vie *vie); #endif /* _KERNEL */ #endif /* _VMM_INSTRUCTION_EMUL_H_ */
Upload File
Create Folder