VMMDevTesting.cpp revision 81d68eb8ae7de14bed1d17c50a609dd63ca78e3c
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * VMMDev - Testing Extensions.
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * Copyright (C) 2010-2012 Oracle Corporation
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * This file is part of VirtualBox Open Source Edition (OSE), as
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * available from http://www.virtualbox.org. This file is free software;
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * you can redistribute it and/or modify it under the terms of the GNU
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * General Public License (GPL) as published by the Free Software
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * Foundation, in version 2 as it comes in the "COPYING" file of the
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding/*******************************************************************************
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding* Header Files *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding*******************************************************************************/
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding } while (0)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * @callback_method_impl{FNIOMMMIOWRITE}
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingPDMBOTHCBDECL(int) vmmdevTestingMmioWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void const *pv, unsigned cb)
case VMMDEV_TESTING_MMIO_NOP:
switch (cb)
AssertFailed();
return VERR_INTERNAL_ERROR_5;
return VINF_SUCCESS;
return VINF_SUCCESS;
PDMBOTHCBDECL(int) vmmdevTestingMmioRead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void *pv, unsigned cb)
switch (GCPhysAddr)
case VMMDEV_TESTING_MMIO_NOP:
switch (cb)
AssertFailed();
return VERR_INTERNAL_ERROR_5;
return VINF_SUCCESS;
return VINF_IOM_MMIO_UNUSED_FF;
PDMBOTHCBDECL(int) vmmdevTestingIoWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
switch (Port)
switch (cb)
AssertFailed();
return VERR_INTERNAL_ERROR_2;
return VINF_SUCCESS;
return VINF_SUCCESS;
switch (uCmd)
case VMMDEV_TESTING_CMD_INIT:
if (u32)
#ifdef IN_RING3
switch (uCmd)
case VMMDEV_TESTING_CMD_INIT:
return VINF_IOM_R3_IOPORT_WRITE;
return VINF_SUCCESS;
case VMMDEV_TESTING_CMD_TERM:
if ( off == 0
#ifdef IN_RING3
return VINF_SUCCESS;
return VINF_IOM_R3_IOPORT_WRITE;
case VMMDEV_TESTING_CMD_VALUE:
if (off == 0)
return VINF_SUCCESS;
if (u32)
#ifdef IN_RING3
return VINF_IOM_R3_IOPORT_WRITE;
return VINF_SUCCESS;
#ifdef IN_RING3
return VINF_SUCCESS;
return VINF_IOM_R3_IOPORT_WRITE;
Log(("VMMDEV_TESTING_IOPORT_CMD: bad access; cmd=%#x off=%#x cb=%#x u32=%#x\n", uCmd, off, cb, u32));
return VINF_SUCCESS;
return VERR_IOM_IOPORT_UNUSED;
PDMBOTHCBDECL(int) vmmdevTestingIoRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
switch (Port)
switch (cb)
AssertFailed();
return VERR_INTERNAL_ERROR_2;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VINF_SUCCESS;
return VERR_IOM_IOPORT_UNUSED;
#ifdef IN_RING3
return VINF_SUCCESS;
int rc = PDMDevHlpMMIORegister(pDevIns, VMMDEV_TESTING_MMIO_BASE, VMMDEV_TESTING_MMIO_SIZE, NULL /*pvUser*/,
rc = PDMDevHlpMMIORegisterR0(pDevIns, VMMDEV_TESTING_MMIO_BASE, VMMDEV_TESTING_MMIO_SIZE, NIL_RTR0PTR /*pvUser*/,
rc = PDMDevHlpMMIORegisterRC(pDevIns, VMMDEV_TESTING_MMIO_BASE, VMMDEV_TESTING_MMIO_SIZE, NIL_RTRCPTR /*pvUser*/,
rc = PDMDevHlpIOPortRegister(pDevIns, VMMDEV_TESTING_IOPORT_BASE, VMMDEV_TESTING_IOPORT_COUNT, NULL,
rc = PDMDevHlpIOPortRegisterR0(pDevIns, VMMDEV_TESTING_IOPORT_BASE, VMMDEV_TESTING_IOPORT_COUNT, NIL_RTR0PTR /*pvUser*/,
rc = PDMDevHlpIOPortRegisterRC(pDevIns, VMMDEV_TESTING_IOPORT_BASE, VMMDEV_TESTING_IOPORT_COUNT, NIL_RTRCPTR /*pvUser*/,
return VINF_SUCCESS;