/seL4-test-master/projects/sel4_projects_libs/libsel4vm/src/arch/x86/ |
H A D | vmcs.c | 19 void vm_vmcs_init_guest(vm_vcpu_t *vcpu) argument 21 vm_vmcs_write(vcpu->vcpu.cptr, VMX_GUEST_ES_SELECTOR, 2 << 3); 22 vm_vmcs_write(vcpu->vcpu.cptr, VMX_GUEST_CS_SELECTOR, BIT(3)); 23 vm_vmcs_write(vcpu->vcpu.cptr, VMX_GUEST_SS_SELECTOR, 2 << 3); 24 vm_vmcs_write(vcpu->vcpu.cptr, VMX_GUEST_DS_SELECTOR, 2 << 3); 25 vm_vmcs_write(vcpu [all...] |
H A D | vmexit.h | 11 /*typedef int(*vmexit_handler_ptr)(vm_vcpu_t *vcpu);*/ 14 int vm_cpuid_handler(vm_vcpu_t *vcpu); 15 int vm_ept_violation_handler(vm_vcpu_t *vcpu); 16 int vm_wrmsr_handler(vm_vcpu_t *vcpu); 17 int vm_rdmsr_handler(vm_vcpu_t *vcpu); 18 int vm_io_instruction_handler(vm_vcpu_t *vcpu); 19 int vm_hlt_handler(vm_vcpu_t *vcpu); 20 int vm_vmx_timer_handler(vm_vcpu_t *vcpu); 21 int vm_cr_access_handler(vm_vcpu_t *vcpu); 22 int vm_vmcall_handler(vm_vcpu_t *vcpu); [all...] |
H A D | halt.c | 21 int vm_hlt_handler(vm_vcpu_t *vcpu) argument 23 if (!(vm_guest_state_get_rflags(vcpu->vcpu_arch.guest_state, vcpu->vcpu.cptr) & BIT(9))) { 24 printf("vcpu %d is halted forever :(\n", vcpu->vcpu_id); 27 if (vm_apic_has_interrupt(vcpu) == -1) { 29 vcpu->vcpu_arch.guest_state->virt.interrupt_halt = 1; 32 vm_guest_exit_next_instruction(vcpu->vcpu_arch.guest_state, vcpu [all...] |
H A D | debug.c | 25 void vm_print_guest_context(vm_vcpu_t *vcpu) argument 28 if (vm_vmcs_read(vcpu->vcpu.cptr, VMX_DATA_EXIT_INTERRUPT_INFO, &data_exit_info) || 29 vm_vmcs_read(vcpu->vcpu.cptr, VMX_DATA_EXIT_INTERRUPT_ERROR, &data_exit_error)) { 35 vm_guest_exit_get_reason(vcpu->vcpu_arch.guest_state), vm_guest_exit_get_qualification(vcpu->vcpu_arch.guest_state), 36 vm_guest_exit_get_int_len(vcpu->vcpu_arch.guest_state), data_exit_info, data_exit_error); 38 vm_guest_exit_get_physical(vcpu->vcpu_arch.guest_state), vm_guest_state_get_rflags(vcpu [all...] |
H A D | interrupt.c | 26 static void resume_guest(vm_vcpu_t *vcpu) argument 29 uint32_t state = vm_guest_state_get_control_ppc(vcpu->vcpu_arch.guest_state); 31 vm_guest_state_set_control_ppc(vcpu->vcpu_arch.guest_state, state); 34 static void inject_irq(vm_vcpu_t *vcpu, int irq) argument 38 vm_guest_state_set_control_entry(vcpu->vcpu_arch.guest_state, BIT(31) | irq); 41 void vm_inject_exception(vm_vcpu_t *vcpu, int exception, int has_error, uint32_t error_code) argument 45 uint32_t int_control = vm_guest_state_get_control_entry(vcpu->vcpu_arch.guest_state); 50 vm_guest_state_set_entry_exception_error_code(vcpu->vcpu_arch.guest_state, error_code); 52 vm_guest_state_set_control_entry(vcpu->vcpu_arch.guest_state, BIT(31) | exception | 3 << 8 | (has_error ? BIT(11) : 0)); 55 void wait_for_guest_ready(vm_vcpu_t *vcpu) argument 63 can_inject(vm_vcpu_t *vcpu) argument 80 vm_have_pending_interrupt(vm_vcpu_t *vcpu) argument 107 vm_pending_interrupt_handler(vm_vcpu_t *vcpu) argument 126 vm_start_ap_vcpu(vm_vcpu_t *vcpu, unsigned int sipi_vector) argument 157 vm_vcpu_t *vcpu = vm->vcpus[BOOT_VCPU]; local 164 vm_vcpu_accept_interrupt(vm_vcpu_t *vcpu) argument [all...] |
H A D | interrupt.h | 13 void wait_for_guest_ready(vm_vcpu_t *vcpu); 16 void vm_inject_exception(vm_vcpu_t *vcpu, int exception, int has_error, uint32_t error_code); 18 /* Start an AP vcpu after a sipi with the requested vector */ 19 void vm_start_ap_vcpu(vm_vcpu_t *vcpu, unsigned int sipi_vector); 21 /* Got interrupt(s) from PIC, propagate to relevant vcpu lapic */ 24 /* inject an interrupt from the lapic on the vcpu, whether or not it is in an exit */ 25 void vm_vcpu_accept_interrupt(vm_vcpu_t *vcpu); 28 void vm_have_pending_interrupt(vm_vcpu_t *vcpu);
|
H A D | ept.c | 28 void print_ept_violation(vm_vcpu_t *vcpu) argument 32 vm_vmcs_read(vcpu->vcpu.cptr, VMX_DATA_GUEST_LINEAR_ADDRESS, &linear_address); 36 printf(" Guest-Physical address 0x%x.\n", vm_guest_exit_get_physical(vcpu->vcpu_arch.guest_state)); 37 printf(" Instruction pointer 0x%x.\n", vm_guest_state_get_eip(vcpu->vcpu_arch.guest_state)); 41 static int unhandled_memory_fault(vm_t *vm, vm_vcpu_t *vcpu, uint32_t guest_phys, size_t size) argument 43 memory_fault_result_t fault_result = vm->mem.unhandled_mem_fault_handler(vm, vcpu, guest_phys, size, 47 print_ept_violation(vcpu); 51 vm_guest_exit_next_instruction(vcpu->vcpu_arch.guest_state, vcpu 58 vm_ept_violation_handler(vm_vcpu_t *vcpu) argument [all...] |
H A D | guest_x86_context.c | 15 int vm_set_thread_context(vm_vcpu_t *vcpu, seL4_VCPUContext context) argument 17 MACHINE_STATE_DIRTY(vcpu->vcpu_arch.guest_state->machine.context); 18 vcpu->vcpu_arch.guest_state->machine.context = context; 22 int vm_set_thread_context_reg(vm_vcpu_t *vcpu, vcpu_context_reg_t reg, uint32_t value) argument 24 MACHINE_STATE_DIRTY(vcpu->vcpu_arch.guest_state->machine.context); 25 (&vcpu->vcpu_arch.guest_state->machine.context.eax)[reg] = value; 29 int vm_get_thread_context(vm_vcpu_t *vcpu, seL4_VCPUContext *context) argument 31 if (IS_MACHINE_STATE_UNKNOWN(vcpu->vcpu_arch.guest_state->machine.context)) { 35 *context = vcpu->vcpu_arch.guest_state->machine.context; 39 int vm_get_thread_context_reg(vm_vcpu_t *vcpu, unsigne argument 49 vm_set_vmcs_field(vm_vcpu_t *vcpu, seL4_Word field, uint32_t value) argument 96 vm_get_vmcs_field(vm_vcpu_t *vcpu, seL4_Word field, uint32_t *value) argument 145 vm_vmcs_read(seL4_CPtr vcpu, seL4_Word field, unsigned int *value) argument 163 vm_vmcs_write(seL4_CPtr vcpu, seL4_Word field, seL4_Word value) argument 178 vm_sync_guest_context(vm_vcpu_t *vcpu) argument [all...] |
H A D | guest_vcpu_fault_arch.c | 14 seL4_Word get_vcpu_fault_address(vm_vcpu_t *vcpu) argument 16 return vm_guest_exit_get_physical(vcpu->vcpu_arch.guest_state); 19 seL4_Word get_vcpu_fault_ip(vm_vcpu_t *vcpu) argument 21 return vm_guest_state_get_eip(vcpu->vcpu_arch.guest_state); 24 seL4_Word get_vcpu_fault_data(vm_vcpu_t *vcpu) argument 29 vm_decode_ept_violation(vcpu, ®, &imm, &size); 32 vm_get_thread_context_reg(vcpu, vcpu_reg, &data); 36 size_t get_vcpu_fault_size(vm_vcpu_t *vcpu) argument 41 vm_decode_ept_violation(vcpu, ®, &imm, &size); 45 seL4_Word get_vcpu_fault_data_mask(vm_vcpu_t *vcpu) argument 68 is_vcpu_read_fault(vm_vcpu_t *vcpu) argument 74 set_vcpu_fault_data(vm_vcpu_t *vcpu, seL4_Word data) argument 84 advance_vcpu_fault(vm_vcpu_t *vcpu) argument 89 restart_vcpu_fault(vm_vcpu_t *vcpu) argument [all...] |
H A D | vmcs.h | 13 int vm_vmcs_read(seL4_CPtr vcpu, seL4_Word field, unsigned int *value); 14 int vm_vmcs_write(seL4_CPtr vcpu, seL4_Word field, seL4_Word value); 15 void vm_vmcs_init_guest(vm_vcpu_t *vcpu);
|
H A D | vm.c | 45 static void vm_resume(vm_vcpu_t *vcpu) argument 47 vm_sync_guest_vmcs_state(vcpu); 48 if (vcpu->vcpu_arch.guest_state->exit.in_exit && !vcpu->vcpu_arch.guest_state->virt.interrupt_halt) { 50 assert(vcpu->vcpu_arch.guest_state->exit.in_exit); 51 vm_sync_guest_context(vcpu); 53 assert(vm_guest_state_no_modified(vcpu->vcpu_arch.guest_state)); 54 vm_guest_state_invalidate_all(vcpu->vcpu_arch.guest_state); 55 vcpu->vcpu_arch.guest_state->exit.in_exit = 0; 60 static int handle_vm_exit(vm_vcpu_t *vcpu) argument 87 vm_update_guest_state_from_interrupt(vm_vcpu_t *vcpu, seL4_Word *msg) argument 94 vm_update_guest_state_from_fault(vm_vcpu_t *vcpu, seL4_Word *msg) argument 121 vcpu_start(vm_vcpu_t *vcpu) argument 130 vm_vcpu_t *vcpu = vm->vcpus[BOOT_VCPU]; local [all...] |
H A D | vmx_timer.c | 23 int vm_vmx_timer_handler(vm_vcpu_t *vcpu) argument 26 vm_print_guest_context(vcpu); 28 int err = vm_vmcs_write(vcpu->vcpu.cptr, VMX_GUEST_VMX_PREEMPTION_TIMER_VALUE, CONFIG_LIB_VM_VMX_TIMER_TIMEOUT);
|
/seL4-test-master/projects/sel4_projects_libs/libsel4vm/include/sel4vm/ |
H A D | guest_vcpu_fault.h | 16 * The libsel4vm VCPU fault interface provides a set of useful methods to query and configure vcpu objects that 17 * have faulted during execution. This interface is commonly leveraged by VMM's to process a vcpu fault and handle 22 * @function get_vcpu_fault_address(vcpu) 23 * Get current fault address of vcpu 24 * @param {vm_vcpu_t *} vcpu Handle to vcpu 25 * @return Current fault address of vcpu 27 seL4_Word get_vcpu_fault_address(vm_vcpu_t *vcpu); 30 * @function get_vcpu_fault_ip(vcpu) 31 * Get instruction pointer of current vcpu faul [all...] |
H A D | guest_irq_controller.h | 20 typedef void (*irq_ack_fn_t)(vm_vcpu_t *vcpu, int irq, void *cookie); 23 * @function vm_inject_irq(vcpu, irq) 25 * @param {vm_vcpu_t *} vcpu Handle to the VCPU 29 int vm_inject_irq(vm_vcpu_t *vcpu, int irq); 32 * @function vm_set_irq_level(vcpu, irq, irq_level) 34 * @param {vm_vcpu_t} vcpu Handle to the VCPU 39 int vm_set_irq_level(vm_vcpu_t *vcpu, int irq, int irq_level); 42 * @function vm_register_irq(vcpu, irq, ack_fn, cookie) 44 * @param {vm_vcpu_t *} vcpu Handle to the VCPU 50 int vm_register_irq(vm_vcpu_t *vcpu, in [all...] |
/seL4-test-master/projects/sel4_projects_libs/libsel4vm/src/arch/arm/ |
H A D | guest_vcpu_fault_arch.c | 11 seL4_Word get_vcpu_fault_address(vm_vcpu_t *vcpu) argument 13 fault_t *fault = vcpu->vcpu_arch.fault; 17 seL4_Word get_vcpu_fault_ip(vm_vcpu_t *vcpu) argument 19 fault_t *fault = vcpu->vcpu_arch.fault; 23 seL4_Word get_vcpu_fault_data(vm_vcpu_t *vcpu) argument 25 fault_t *fault = vcpu->vcpu_arch.fault; 29 seL4_Word get_vcpu_fault_data_mask(vm_vcpu_t *vcpu) argument 31 fault_t *fault = vcpu->vcpu_arch.fault; 35 size_t get_vcpu_fault_size(vm_vcpu_t *vcpu) argument 37 fault_t *fault = vcpu 41 is_vcpu_read_fault(vm_vcpu_t *vcpu) argument 47 set_vcpu_fault_data(vm_vcpu_t *vcpu, seL4_Word data) argument 54 advance_vcpu_fault(vm_vcpu_t *vcpu) argument 60 restart_vcpu_fault(vm_vcpu_t *vcpu) argument [all...] |
H A D | mem_abort.h | 11 int vm_guest_mem_abort_handler(vm_vcpu_t *vcpu);
|
H A D | guest_arm_context.c | 14 int vm_set_thread_context(vm_vcpu_t *vcpu, seL4_UserContext context) argument 16 if (!fault_handled(vcpu->vcpu_arch.fault)) { 19 fault_set_ctx(vcpu->vcpu_arch.fault, &context); 22 seL4_CPtr tcb = vm_get_vcpu_tcb(vcpu); 32 int vm_set_thread_context_reg(vm_vcpu_t *vcpu, unsigned int reg, uintptr_t value) argument 34 seL4_CPtr tcb = vm_get_vcpu_tcb(vcpu); 35 if (!fault_handled(vcpu->vcpu_arch.fault)) { 38 regs = fault_get_ctx(vcpu->vcpu_arch.fault); 58 int vm_get_thread_context(vm_vcpu_t *vcpu, seL4_UserContext *context) argument 60 if (!fault_handled(vcpu 79 vm_get_thread_context_reg(vm_vcpu_t *vcpu, unsigned int reg, uintptr_t *value) argument 100 vm_set_arm_vcpu_reg(vm_vcpu_t *vcpu, seL4_Word reg, uintptr_t value) argument 110 vm_get_arm_vcpu_reg(vm_vcpu_t *vcpu, seL4_Word reg, uintptr_t *value) argument [all...] |
H A D | syscalls.h | 15 int vm_syscall_handler(vm_vcpu_t *vcpu);
|
/seL4-test-master/projects/sel4_projects_libs/libsel4vmmplatsupport/src/arch/arm/ |
H A D | vcpu_fault.h | 11 static inline int unknown_vcpu_exception_handler(vm_vcpu_t *vcpu, uint32_t hsr) argument 16 static inline int ignore_exception(vm_vcpu_t *vcpu, uint32_t hsr) argument
|
/seL4-test-master/projects/sel4_projects_libs/libsel4vm/src/arch/x86/processor/ |
H A D | cr.c | 32 static int vm_cr_set_cr0(vm_vcpu_t *vcpu, unsigned int value) argument 40 if ((value & X86_CR0_PG) && !(vcpu->vcpu_arch.guest_state->virt.cr.cr0_shadow & X86_CR0_PG)) { 43 unsigned int new_mask = vcpu->vcpu_arch.guest_state->virt.cr.cr4_mask & ~(X86_CR4_PSE | X86_CR4_PAE); 44 unsigned int cr4_value = vm_guest_state_get_cr4(vcpu->vcpu_arch.guest_state, vcpu->vcpu.cptr); 46 cr4_value = apply_cr_bits(cr4_value, new_mask ^ vcpu->vcpu_arch.guest_state->virt.cr.cr4_mask, 47 vcpu->vcpu_arch.guest_state->virt.cr.cr4_shadow); 49 vcpu->vcpu_arch.guest_state->virt.cr.cr4_mask = new_mask; 50 err = vm_vmcs_write(vcpu 85 vm_cr_set_cr3(vm_vcpu_t *vcpu, unsigned int value) argument 95 vm_cr_get_cr3(vm_vcpu_t *vcpu, unsigned int *value) argument 106 vm_cr_set_cr4(vm_vcpu_t *vcpu, unsigned int value) argument 128 vm_cr_clts(vm_vcpu_t *vcpu) argument 135 vm_cr_lmsw(vm_vcpu_t *vcpu, unsigned int value) argument 155 vm_cr_access_handler(vm_vcpu_t *vcpu) argument [all...] |
H A D | msr.c | 23 int vm_rdmsr_handler(vm_vcpu_t *vcpu) argument 28 if (vm_get_thread_context_reg(vcpu, VCPU_CONTEXT_ECX, &msr_no)) { 70 data = vm_lapic_get_base_msr(vcpu); 76 vm_inject_exception(vcpu, 13, 1, 0); 82 vm_set_thread_context_reg(vcpu, VCPU_CONTEXT_EAX, (uint32_t)(data & 0xffffffff)); 83 vm_set_thread_context_reg(vcpu, VCPU_CONTEXT_EDX, (uint32_t)(data >> 32)); 84 vm_guest_exit_next_instruction(vcpu->vcpu_arch.guest_state, vcpu->vcpu.cptr); 91 int vm_wrmsr_handler(vm_vcpu_t *vcpu) argument [all...] |
/seL4-test-master/projects/sel4_projects_libs/libsel4vm/src/ |
H A D | guest_vcpu_fault.c | 9 seL4_Word emulate_vcpu_fault(vm_vcpu_t *vcpu, seL4_Word data) argument 12 byte_shift = (get_vcpu_fault_address(vcpu) & 0x3) * 8; 13 mask = get_vcpu_fault_data_mask(vcpu); 14 fault_data = get_vcpu_fault_data(vcpu); 15 if (is_vcpu_read_fault(vcpu)) {
|
/seL4-test-master/kernel/src/drivers/timer/ |
H A D | generic_timer.c | 48 #include <arch/object/vcpu.h> 49 #include <armv/vcpu.h> 60 static void save_virt_timer(vcpu_t *vcpu) argument 63 vcpu_save_reg(vcpu, seL4_VCPUReg_CNTV_CTL); 67 vcpu_save_reg(vcpu, seL4_VCPUReg_CNTV_CVAL); 68 vcpu_save_reg(vcpu, seL4_VCPUReg_CNTVOFF); 69 vcpu_save_reg(vcpu, seL4_VCPUReg_CNTKCTL_EL1); 74 vcpu_write_reg(vcpu, seL4_VCPUReg_CNTV_CVALhigh, (word_t)(cval >> 32)); 75 vcpu_write_reg(vcpu, seL4_VCPUReg_CNTV_CVALlow, (word_t)cval); 76 vcpu_write_reg(vcpu, seL4_VCPUReg_CNTVOFFhig 85 restore_virt_timer(vcpu_t *vcpu) argument [all...] |
/seL4-test-master/projects/sel4_projects_libs/libsel4vm/arch_include/x86/sel4vm/arch/ |
H A D | guest_x86_context.h | 11 * The libsel4vm x86 context interface provides a set of useful getters and setters on x86 vcpu thread contexts. 12 * This interface is commonly leveraged by VMM's to initialise a vcpu state, process a vcpu fault and 30 * @function vm_set_thread_context(vcpu, context) 32 * @param {vm_vcpu_t *} vcpu Handle to the vcpu 36 int vm_set_thread_context(vm_vcpu_t *vcpu, seL4_VCPUContext context); 39 * @function vm_set_thread_context_reg(vcpu, reg, value) 41 * @param {vm_vcpu_t *} vcpu Handle to the vcpu [all...] |
/seL4-test-master/projects/sel4_projects_libs/libsel4vmmplatsupport/arch_include/arm/sel4vmmplatsupport/arch/ |
H A D | guest_vcpu_fault.h | 13 * The arm guest vcpu fault interface provides a module for registering 14 * and processing vcpu faults. The module can be used such that it directly hooks 15 * into an ARM VMMs unhandled vcpu callback interface or wrapped over by another driver. This 16 * module particularly provides useful handlers to vcpu faults relating to SMC and MSR/MRS instructions. 19 typedef int (*vcpu_exception_handler_fn)(vm_vcpu_t *vcpu, uint32_t hsr); 22 * @function vmm_handle_arm_vcpu_exception(vcpu, hsr, cookie) 23 * Handle a vcpu exception given the HSR value - Syndrome information 24 * @param {vm_vcpu_t *} vcpu A handle to the faulting VCPU 29 int vmm_handle_arm_vcpu_exception(vm_vcpu_t *vcpu, uint32_t hsr, void *cookie); 33 * Register a handler to a vcpu exceptio [all...] |