TRPMR0A.asm revision 769d882a3803c0f7321cf9874be77aa3454ad9fb
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; TRPM - Host Context Ring-0
a0a3a26a4065b9401681a8c99a11bd83e08f94ccvboxsync; Copyright (C) 2006 InnoTek Systemberatung GmbH
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; available from http://www.virtualbox.org. This file is free software;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; you can redistribute it and/or modify it under the terms of the GNU
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; General Public License as published by the Free Software Foundation,
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; distribution. VirtualBox OSE is distributed in the hope that it will
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; be useful, but WITHOUT ANY WARRANTY of any kind.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; If you received this file as part of a commercial VirtualBox
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; distribution, then only the terms of your commercial VirtualBox
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; license agreement apply instead of the previous paragraph.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync;*******************************************************************************
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync;* Header Files *
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync;*******************************************************************************
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; Calls the interrupt gate as if we received an interrupt while in Ring-0.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; Returns with interrupts enabled.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; @param uIP x86:[ebp+8] msc:rcx gcc:rdi The interrupt gate IP.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; @param SelCS x86:[ebp+12] msc:dx gcc:si The interrupt gate CS.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync; @param RSP msc:r8 gcc:rdx The interrupt gate RSP. ~0 if no stack switch should take place. (only AMD64)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync;DECLASM(void) trpmR0DispatchHostInterrupt(RTR0UINTPTR uIP, RTSEL SelCS, RTR0UINTPTR RSP);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncBEGINPROC trpmR0DispatchHostInterrupt
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync mov xBP, xSP
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync%ifdef __AMD64__
a0a3a26a4065b9401681a8c99a11bd83e08f94ccvboxsync mov rax, rsp
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync and rsp, 15h ; align the stack. (do it unconditionally saves some jump mess)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync ; switch stack?
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync %ifdef ASM_CALL64_MSC
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync cmp r8, 0ffffffffffffffffh
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync je .no_stack_switch
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync mov rsp, r8
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync cmp rdx, 0ffffffffffffffffh
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync je .no_stack_switch
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync mov rsp, rdx
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync.no_stack_switch:
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync ; create the iret frame
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync push 0 ; SS
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync push rax ; RSP
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync pushfd ; RFLAGS
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync and dword [rsp], ~X86_EFL_IF
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync push rax ; CS
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync mov rax, .return ; RIP
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync ; create the retf frame
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync %ifdef ASM_CALL64_MSC
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync movzx rdx, dx
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync movzx rdi, di
a0a3a26a4065b9401681a8c99a11bd83e08f94ccvboxsync ; dispatch it!