MMRamGC.cpp revision d099ccfb66d26601f93e7967e8e73cee4b9c62df
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * MMRamGC - Guest Context Ram access Routines, pair for MMRamGCA.asm.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * available from http://www.virtualbox.org. This file is free software;
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * you can redistribute it and/or modify it under the terms of the GNU
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * General Public License (GPL) as published by the Free Software
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * additional information or have any questions.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync/*******************************************************************************
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync* Header Files *
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync*******************************************************************************/
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync/*******************************************************************************
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync* Internal Functions *
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync*******************************************************************************/
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsyncstatic DECLCALLBACK(int) mmGCRamTrap0eHandler(PVM pVM, PCPUMCTXCORE pRegFrame);
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsyncDECLASM(void) MMGCRamReadNoTrapHandler_EndProc(void);
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsyncDECLASM(void) MMGCRamWriteNoTrapHandler_EndProc(void);
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsyncDECLASM(void) EMGCEmulateLockCmpXchg8b_EndProc(void);
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync * Install MMGCRam Hypervisor page fault handler for normal working
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync * of MMGCRamRead and MMGCRamWrite calls.
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync * This handler will be automatically removed at page fault.
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync * In other case it must be removed by MMGCRamDeregisterTrapHandler call.
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync * @param pVM VM handle.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync TRPMGCSetTempHandler(pVM, 0xe, mmGCRamTrap0eHandler);
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync * Remove MMGCRam Hypervisor page fault handler.
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync * See description of MMGCRamRegisterTrapHandler call.
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsync * @param pVM VM handle.
8a0e16a59a2c5ffeeac323e1842e65a4ddf3c5c1vboxsyncVMMRCDECL(void) MMGCRamDeregisterTrapHandler(PVM pVM)
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * Read data in guest context with #PF control.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * @returns VBox status.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * @param pVM The VM handle.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * @param pDst Where to store the readed data.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * @param pSrc Pointer to the data to read.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync * @param cb Size of data to read, only 1/2/4/8 is valid.
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsyncVMMRCDECL(int) MMGCRamRead(PVM pVM, void *pDst, void *pSrc, size_t cb)
49ff1fd14c340480f6f52f9dec52aabc630f7fd4vboxsync TRPMSaveTrap(pVCpu); /* save the current trap info, because it will get trashed if our access failed. */
return rc;
TRPMSaveTrap(pVCpu); /* save the current trap info, because it will get trashed if our access failed. */
PGMGstModifyPage(VMMGetCpu0(pVM), (RTGCPTR)(RTRCUINTPTR)pDst, cb, X86_PTE_A | X86_PTE_D, ~(uint64_t)(X86_PTE_A | X86_PTE_D));
return rc;
* \#PF Handler for servicing traps inside MMGCRamReadNoTrapHandler and MMGCRamWriteNoTrapHandler functions.
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VERR_INTERNAL_ERROR;