[30715] | 1 | /* $Id: VMMDevTesting.h 42585 2012-08-03 16:50:05Z vboxsync $ */
|
---|
| 2 | /** @file
|
---|
| 3 | * VMMDev - Testing Extensions.
|
---|
| 4 | */
|
---|
| 5 |
|
---|
| 6 | /*
|
---|
[41416] | 7 | * Copyright (C) 2010-2012 Oracle Corporation
|
---|
[30715] | 8 | *
|
---|
| 9 | * This file is part of VirtualBox Open Source Edition (OSE), as
|
---|
| 10 | * available from http://www.virtualbox.org. This file is free software;
|
---|
| 11 | * you can redistribute it and/or modify it under the terms of the GNU
|
---|
| 12 | * General Public License (GPL) as published by the Free Software
|
---|
| 13 | * Foundation, in version 2 as it comes in the "COPYING" file of the
|
---|
| 14 | * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
---|
| 15 | * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
---|
[31665] | 16 | *
|
---|
| 17 | * The contents of this file may alternatively be used under the terms
|
---|
| 18 | * of the Common Development and Distribution License Version 1.0
|
---|
| 19 | * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
|
---|
| 20 | * VirtualBox OSE distribution, in which case the provisions of the
|
---|
| 21 | * CDDL are applicable instead of those of the GPL.
|
---|
| 22 | *
|
---|
| 23 | * You may elect to license modified versions of this file under the
|
---|
| 24 | * terms and conditions of either the GPL or the CDDL or both.
|
---|
[30715] | 25 | */
|
---|
| 26 |
|
---|
| 27 |
|
---|
| 28 | #ifndef ___VBox_VMMDevTesting_h
|
---|
| 29 | #define ___VBox_VMMDevTesting_h
|
---|
| 30 |
|
---|
| 31 | #include <VBox/types.h>
|
---|
| 32 |
|
---|
| 33 | /** The base address of the MMIO range used for testing.
|
---|
| 34 | * This is intentionally put at the 2nd page above 1M so that it can be
|
---|
| 35 | * accessed from both real (!A20) and protected mode. */
|
---|
| 36 | #define VMMDEV_TESTING_MMIO_BASE UINT32_C(0x00101000)
|
---|
| 37 | /** The size of the MMIO range used for testing. */
|
---|
| 38 | #define VMMDEV_TESTING_MMIO_SIZE UINT32_C(0x00001000)
|
---|
| 39 | /** The NOP MMIO register - 124 RW. */
|
---|
| 40 | #define VMMDEV_TESTING_MMIO_NOP (VMMDEV_TESTING_MMIO_BASE + 0x000)
|
---|
| 41 | /** The XXX MMIO register - 124 RW. */
|
---|
| 42 | #define VMMDEV_TESTING_MMIO_TODO (VMMDEV_TESTING_MMIO_BASE + 0x004)
|
---|
[30736] | 43 | /** The real mode selector to use.
|
---|
| 44 | * @remarks Requires that the A20 gate is enabled. */
|
---|
| 45 | #define VMMDEV_TESTING_MMIO_RM_SEL 0xffff
|
---|
| 46 | /** Calculate the real mode offset of a MMIO register. */
|
---|
| 47 | #define VMMDEV_TESTING_MMIO_RM_OFF(val) ((val) - 0xffff0)
|
---|
[30715] | 48 |
|
---|
| 49 | /** The base port of the I/O range used for testing. */
|
---|
| 50 | #define VMMDEV_TESTING_IOPORT_BASE 0x0510
|
---|
| 51 | /** The number of I/O ports reserved for testing. */
|
---|
| 52 | #define VMMDEV_TESTING_IOPORT_COUNT 0x0010
|
---|
[30772] | 53 | /** The NOP I/O port - 1,2,4 RW. */
|
---|
[30715] | 54 | #define VMMDEV_TESTING_IOPORT_NOP (VMMDEV_TESTING_IOPORT_BASE + 0)
|
---|
| 55 | /** The low nanosecond timestamp - 4 RO. */
|
---|
| 56 | #define VMMDEV_TESTING_IOPORT_TS_LOW (VMMDEV_TESTING_IOPORT_BASE + 1)
|
---|
| 57 | /** The high nanosecond timestamp - 4 RO. Read this after the low one! */
|
---|
| 58 | #define VMMDEV_TESTING_IOPORT_TS_HIGH (VMMDEV_TESTING_IOPORT_BASE + 2)
|
---|
[30772] | 59 | /** Command register usually used for preparing the data register - 4 WO. */
|
---|
| 60 | #define VMMDEV_TESTING_IOPORT_CMD (VMMDEV_TESTING_IOPORT_BASE + 3)
|
---|
| 61 | /** Data register which use depends on the current command - 1s, 4 WO. */
|
---|
| 62 | #define VMMDEV_TESTING_IOPORT_DATA (VMMDEV_TESTING_IOPORT_BASE + 4)
|
---|
[30715] | 63 |
|
---|
[30772] | 64 | /** @name Commands.
|
---|
| 65 | * @{ */
|
---|
| 66 | /** Initialize test, sending name (zero terminated string). (RTTestCreate) */
|
---|
| 67 | #define VMMDEV_TESTING_CMD_INIT UINT32_C(0xcab1e000)
|
---|
| 68 | /** Test done, no data. (RTTestSummaryAndDestroy) */
|
---|
| 69 | #define VMMDEV_TESTING_CMD_TERM UINT32_C(0xcab1e001)
|
---|
| 70 | /** Start a new sub-test, sending name (zero terminated string). (RTTestSub) */
|
---|
| 71 | #define VMMDEV_TESTING_CMD_SUB_NEW UINT32_C(0xcab1e002)
|
---|
| 72 | /** Sub-test is done, sending 32-bit error count for it. (RTTestDone) */
|
---|
| 73 | #define VMMDEV_TESTING_CMD_SUB_DONE UINT32_C(0xcab1e003)
|
---|
| 74 | /** Report a failure, sending reason (zero terminated string). (RTTestFailed) */
|
---|
| 75 | #define VMMDEV_TESTING_CMD_FAILED UINT32_C(0xcab1e004)
|
---|
| 76 | /** Report a value, sending the 64-bit value (2x4), the 32-bit unit (4), and
|
---|
| 77 | * finally the name (zero terminated string). (RTTestValue) */
|
---|
| 78 | #define VMMDEV_TESTING_CMD_VALUE UINT32_C(0xcab1e005)
|
---|
[41416] | 79 | /** Report a failure, sending reason (zero terminated string). (RTTestSkipped) */
|
---|
| 80 | #define VMMDEV_TESTING_CMD_SKIPPED UINT32_C(0xcab1e006)
|
---|
[42585] | 81 | /** Report a value found in a VMM register, sending a string on the form
|
---|
| 82 | * "value-name:register-name". */
|
---|
| 83 | #define VMMDEV_TESTING_CMD_VALUE_REG UINT32_C(0xcab1e007)
|
---|
[30772] | 84 | /** @} */
|
---|
| 85 |
|
---|
| 86 | /** @name Value units
|
---|
| 87 | * @{ */
|
---|
| 88 | #define VMMDEV_TESTING_UNIT_PCT UINT8_C(0x01) /**< Percentage. */
|
---|
| 89 | #define VMMDEV_TESTING_UNIT_BYTES UINT8_C(0x02) /**< Bytes. */
|
---|
| 90 | #define VMMDEV_TESTING_UNIT_BYTES_PER_SEC UINT8_C(0x03) /**< Bytes per second. */
|
---|
| 91 | #define VMMDEV_TESTING_UNIT_KILOBYTES UINT8_C(0x04) /**< Kilobytes. */
|
---|
| 92 | #define VMMDEV_TESTING_UNIT_KILOBYTES_PER_SEC UINT8_C(0x05) /**< Kilobytes per second. */
|
---|
| 93 | #define VMMDEV_TESTING_UNIT_MEGABYTES UINT8_C(0x06) /**< Megabytes. */
|
---|
| 94 | #define VMMDEV_TESTING_UNIT_MEGABYTES_PER_SEC UINT8_C(0x07) /**< Megabytes per second. */
|
---|
| 95 | #define VMMDEV_TESTING_UNIT_PACKETS UINT8_C(0x08) /**< Packets. */
|
---|
| 96 | #define VMMDEV_TESTING_UNIT_PACKETS_PER_SEC UINT8_C(0x09) /**< Packets per second. */
|
---|
| 97 | #define VMMDEV_TESTING_UNIT_FRAMES UINT8_C(0x0a) /**< Frames. */
|
---|
| 98 | #define VMMDEV_TESTING_UNIT_FRAMES_PER_SEC UINT8_C(0x0b) /**< Frames per second. */
|
---|
| 99 | #define VMMDEV_TESTING_UNIT_OCCURRENCES UINT8_C(0x0c) /**< Occurrences. */
|
---|
| 100 | #define VMMDEV_TESTING_UNIT_OCCURRENCES_PER_SEC UINT8_C(0x0d) /**< Occurrences per second. */
|
---|
| 101 | #define VMMDEV_TESTING_UNIT_CALLS UINT8_C(0x0e) /**< Calls. */
|
---|
| 102 | #define VMMDEV_TESTING_UNIT_CALLS_PER_SEC UINT8_C(0x0f) /**< Calls per second. */
|
---|
| 103 | #define VMMDEV_TESTING_UNIT_ROUND_TRIP UINT8_C(0x10) /**< Round trips. */
|
---|
| 104 | #define VMMDEV_TESTING_UNIT_SECS UINT8_C(0x11) /**< Seconds. */
|
---|
| 105 | #define VMMDEV_TESTING_UNIT_MS UINT8_C(0x12) /**< Milliseconds. */
|
---|
| 106 | #define VMMDEV_TESTING_UNIT_NS UINT8_C(0x13) /**< Nanoseconds. */
|
---|
| 107 | #define VMMDEV_TESTING_UNIT_NS_PER_CALL UINT8_C(0x14) /**< Nanoseconds per call. */
|
---|
| 108 | #define VMMDEV_TESTING_UNIT_NS_PER_FRAME UINT8_C(0x15) /**< Nanoseconds per frame. */
|
---|
| 109 | #define VMMDEV_TESTING_UNIT_NS_PER_OCCURRENCE UINT8_C(0x16) /**< Nanoseconds per occurrence. */
|
---|
| 110 | #define VMMDEV_TESTING_UNIT_NS_PER_PACKET UINT8_C(0x17) /**< Nanoseconds per frame. */
|
---|
| 111 | #define VMMDEV_TESTING_UNIT_NS_PER_ROUND_TRIP UINT8_C(0x18) /**< Nanoseconds per round trip. */
|
---|
| 112 | #define VMMDEV_TESTING_UNIT_INSTRS UINT8_C(0x19) /**< Instructions. */
|
---|
| 113 | #define VMMDEV_TESTING_UNIT_INSTRS_PER_SEC UINT8_C(0x1a) /**< Instructions per second. */
|
---|
[38309] | 114 | #define VMMDEV_TESTING_UNIT_NONE UINT8_C(0x1b) /**< No unit. */
|
---|
[30772] | 115 | /** @} */
|
---|
| 116 |
|
---|
| 117 |
|
---|
[30715] | 118 | /** What the NOP accesses returns. */
|
---|
| 119 | #define VMMDEV_TESTING_NOP_RET UINT32_C(0x64726962) /* bird */
|
---|
| 120 |
|
---|
| 121 | #endif
|
---|
| 122 |
|
---|