VirtualBox

source: vbox/trunk/src/VBox/VMM/VMMR3/CPUMR3Msr-x86.h

Last change on this file was 109008, checked in by vboxsync, 2 weeks ago

VMM,Main: Working on ARM CPU profile support, which is neede/useful for getting info about the host CPU as well. The CPUDBENTRY typedef is used externally by Main, so we can't have two definitions of it, so left the bits that are common to both x86 and ARM in CPUDBENTRY and created sub-structures for each of the two targets/platforms. Also started reworking the VBoxCpuReport tool so we can use it on arm as well (much left to do there, though). jiraref:VBP-1598

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
  • Property svn:mergeinfo set to (toggle deleted branches)
    /branches/VBox-3.0/src/VBox/VMM/VMMR3/CPUMR3Db.cpp58652,​70973
    /branches/VBox-3.2/src/VBox/VMM/VMMR3/CPUMR3Db.cpp66309,​66318
    /branches/VBox-4.0/src/VBox/VMM/VMMR3/CPUMR3Db.cpp70873
    /branches/VBox-4.1/src/VBox/VMM/VMMR3/CPUMR3Db.cpp74233,​78414,​78691,​81841,​82127,​85941,​85944-85947,​85949-85950,​85953,​86701,​86728,​87009
    /branches/VBox-4.2/src/VBox/VMM/VMMR3/CPUMR3Db.cpp86229-86230,​86234,​86529,​91503-91504,​91506-91508,​91510,​91514-91515,​91521,​108112,​108114,​108127
    /branches/VBox-4.3/src/VBox/VMM/VMMR3/CPUMR3Db.cpp89714,​91223,​93628-93629,​94066,​94839,​94897,​95154,​95164,​95167,​95295,​95338,​95353-95354,​95356,​95367,​95451,​95475,​95477,​95480,​95507,​95640,​95659,​95661,​95663,​98913-98914
    /branches/VBox-4.3/trunk/src/VBox/VMM/VMMR3/CPUMR3Db.cpp91223
    /branches/VBox-5.0/src/VBox/VMM/VMMR3/CPUMR3Db.cpp104938,​104943,​104950,​104987-104988,​104990,​106453
    /branches/VBox-5.1/src/VBox/VMM/VMMR3/CPUMR3Db.cpp112367,​116543,​116550,​116568,​116573
    /branches/VBox-5.2/src/VBox/VMM/VMMR3/CPUMR3Db.cpp119536,​120083,​120099,​120213,​120221,​120239,​123597-123598,​123600-123601,​123755,​124263,​124273,​124277-124279,​124284-124286,​124288-124290,​125768,​125779-125780,​125812,​127158-127159,​127162-127167,​127180
    /branches/VBox-6.0/src/VBox/VMM/VMMR3/CPUMR3Db.cpp130474-130475,​130477,​130479,​131352
    /branches/VBox-6.1/src/VBox/VMM/VMMR3/CPUMR3Db.cpp141521,​141567-141568,​141588-141590,​141592-141595,​141652,​141920,​158257-158259
    /branches/VBox-7.0/src/VBox/VMM/VMMR3/CPUMR3Db.cpp156229,​156768
    /branches/aeichner/vbox-chromium-cleanup/src/VBox/VMM/VMMR3/CPUMR3Db.cpp129818-129851,​129853-129861,​129871-129872,​129876,​129880,​129882,​130013-130015,​130094-130095
    /branches/andy/draganddrop/src/VBox/VMM/VMMR3/CPUMR3Db.cpp90781-91268
    /branches/andy/guestctrl20/src/VBox/VMM/VMMR3/CPUMR3Db.cpp78916,​78930
    /branches/andy/pdmaudio/src/VBox/VMM/VMMR3/CPUMR3Db.cpp94582,​94641,​94654,​94688,​94778,​94783,​94816,​95197,​95215-95216,​95250,​95279,​95505-95506,​95543,​95694,​96323,​96470-96471,​96582,​96587,​96802-96803,​96817,​96904,​96967,​96999,​97020-97021,​97025,​97050,​97099
    /branches/bird/hardenedwindows/src/VBox/VMM/VMMR3/CPUMR3Db.cpp92692-94610
    /branches/dsen/gui/src/VBox/VMM/VMMR3/CPUMR3Db.cpp79076-79078,​79089,​79109-79110,​79112-79113,​79127-79130,​79134,​79141,​79151,​79155,​79157-79159,​79193,​79197
    /branches/dsen/gui2/src/VBox/VMM/VMMR3/CPUMR3Db.cpp79224,​79228,​79233,​79235,​79258,​79262-79263,​79273,​79341,​79345,​79354,​79357,​79387-79388,​79559-79569,​79572-79573,​79578,​79581-79582,​79590-79591,​79598-79599,​79602-79603,​79605-79606,​79632,​79635,​79637,​79644
    /branches/dsen/gui3/src/VBox/VMM/VMMR3/CPUMR3Db.cpp79645-79692
    /branches/dsen/gui4/src/VBox/VMM/VMMR3/CPUMR3Db.cpp155183-155185,​155187,​155198,​155200-155201,​155205,​155228,​155235,​155243,​155248,​155282,​155285,​155287-155288,​155311,​155316,​155336,​155342,​155344,​155437-155438,​155441,​155443,​155488,​155509-155513,​155526-155527,​155559,​155572,​155576-155577,​155592-155593
File size: 6.3 KB
Line 
1/* $Id: CPUMR3Msr-x86.h 109008 2025-04-16 20:59:36Z vboxsync $ */
2/** @file
3 * CPUM - x86 MSR macros.
4 */
5
6/*
7 * Copyright (C) 2013-2024 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28
29#ifndef VMM_INCLUDED_SRC_VMMR3_CPUMR3Msr_x86_h
30#define VMM_INCLUDED_SRC_VMMR3_CPUMR3Msr_x86_h
31#ifndef RT_WITHOUT_PRAGMA_ONCE
32# pragma once
33#endif
34
35/** @name Short macros for the MSR range entries.
36 *
37 * These are rather cryptic, but this is to reduce the attack on the right
38 * margin.
39 *
40 * @{ */
41/** Alias one MSR onto another (a_uTarget). */
42#define MAL(a_uMsr, a_szName, a_uTarget) \
43 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_MsrAlias, kCpumMsrWrFn_MsrAlias, 0, a_uTarget, 0, 0, a_szName)
44/** Functions handles everything. */
45#define MFN(a_uMsr, a_szName, a_enmRdFnSuff, a_enmWrFnSuff) \
46 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, 0, 0, 0, 0, a_szName)
47/** Functions handles everything, with GP mask. */
48#define MFG(a_uMsr, a_szName, a_enmRdFnSuff, a_enmWrFnSuff, a_fWrGpMask) \
49 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, 0, 0, 0, a_fWrGpMask, a_szName)
50/** Function handlers, read-only. */
51#define MFO(a_uMsr, a_szName, a_enmRdFnSuff) \
52 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_ReadOnly, 0, 0, 0, UINT64_MAX, a_szName)
53/** Function handlers, ignore all writes. */
54#define MFI(a_uMsr, a_szName, a_enmRdFnSuff) \
55 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_IgnoreWrite, 0, 0, UINT64_MAX, 0, a_szName)
56/** Function handlers, with value. */
57#define MFV(a_uMsr, a_szName, a_enmRdFnSuff, a_enmWrFnSuff, a_uValue) \
58 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, 0, a_uValue, 0, 0, a_szName)
59/** Function handlers, with write ignore mask. */
60#define MFW(a_uMsr, a_szName, a_enmRdFnSuff, a_enmWrFnSuff, a_fWrIgnMask) \
61 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, 0, 0, a_fWrIgnMask, 0, a_szName)
62/** Function handlers, extended version. */
63#define MFX(a_uMsr, a_szName, a_enmRdFnSuff, a_enmWrFnSuff, a_uValue, a_fWrIgnMask, a_fWrGpMask) \
64 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, 0, a_uValue, a_fWrIgnMask, a_fWrGpMask, a_szName)
65/** Function handlers, with CPUMCPU storage variable. */
66#define MFS(a_uMsr, a_szName, a_enmRdFnSuff, a_enmWrFnSuff, a_CpumCpuMember) \
67 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, \
68 RT_OFFSETOF(CPUMCPU, a_CpumCpuMember), 0, 0, 0, a_szName)
69/** Function handlers, with CPUMCPU storage variable, ignore mask and GP mask. */
70#define MFZ(a_uMsr, a_szName, a_enmRdFnSuff, a_enmWrFnSuff, a_CpumCpuMember, a_fWrIgnMask, a_fWrGpMask) \
71 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, \
72 RT_OFFSETOF(CPUMCPU, a_CpumCpuMember), 0, a_fWrIgnMask, a_fWrGpMask, a_szName)
73/** Read-only fixed value. */
74#define MVO(a_uMsr, a_szName, a_uValue) \
75 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_FixedValue, kCpumMsrWrFn_ReadOnly, 0, a_uValue, 0, UINT64_MAX, a_szName)
76/** Read-only fixed value, ignores all writes. */
77#define MVI(a_uMsr, a_szName, a_uValue) \
78 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_FixedValue, kCpumMsrWrFn_IgnoreWrite, 0, a_uValue, UINT64_MAX, 0, a_szName)
79/** Read fixed value, ignore writes outside GP mask. */
80#define MVG(a_uMsr, a_szName, a_uValue, a_fWrGpMask) \
81 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_FixedValue, kCpumMsrWrFn_IgnoreWrite, 0, a_uValue, 0, a_fWrGpMask, a_szName)
82/** Read fixed value, extended version with both GP and ignore masks. */
83#define MVX(a_uMsr, a_szName, a_uValue, a_fWrIgnMask, a_fWrGpMask) \
84 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_FixedValue, kCpumMsrWrFn_IgnoreWrite, 0, a_uValue, a_fWrIgnMask, a_fWrGpMask, a_szName)
85/** The short form, no CPUM backing. */
86#define MSN(a_uMsr, a_szName, a_enmRdFnSuff, a_enmWrFnSuff, a_uInitOrReadValue, a_fWrIgnMask, a_fWrGpMask) \
87 RINT(a_uMsr, a_uMsr, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, 0, \
88 a_uInitOrReadValue, a_fWrIgnMask, a_fWrGpMask, a_szName)
89
90/** Range: Functions handles everything. */
91#define RFN(a_uFirst, a_uLast, a_szName, a_enmRdFnSuff, a_enmWrFnSuff) \
92 RINT(a_uFirst, a_uLast, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, 0, 0, 0, 0, a_szName)
93/** Range: Read fixed value, read-only. */
94#define RVO(a_uFirst, a_uLast, a_szName, a_uValue) \
95 RINT(a_uFirst, a_uLast, kCpumMsrRdFn_FixedValue, kCpumMsrWrFn_ReadOnly, 0, a_uValue, 0, UINT64_MAX, a_szName)
96/** Range: Read fixed value, ignore writes. */
97#define RVI(a_uFirst, a_uLast, a_szName, a_uValue) \
98 RINT(a_uFirst, a_uLast, kCpumMsrRdFn_FixedValue, kCpumMsrWrFn_IgnoreWrite, 0, a_uValue, UINT64_MAX, 0, a_szName)
99/** Range: The short form, no CPUM backing. */
100#define RSN(a_uFirst, a_uLast, a_szName, a_enmRdFnSuff, a_enmWrFnSuff, a_uInitOrReadValue, a_fWrIgnMask, a_fWrGpMask) \
101 RINT(a_uFirst, a_uLast, kCpumMsrRdFn_##a_enmRdFnSuff, kCpumMsrWrFn_##a_enmWrFnSuff, 0, \
102 a_uInitOrReadValue, a_fWrIgnMask, a_fWrGpMask, a_szName)
103
104/** Internal form used by the macros. */
105#ifdef VBOX_WITH_STATISTICS
106# define RINT(a_uFirst, a_uLast, a_enmRdFn, a_enmWrFn, a_offCpumCpu, a_uInitOrReadValue, a_fWrIgnMask, a_fWrGpMask, a_szName) \
107 { a_uFirst, a_uLast, a_enmRdFn, a_enmWrFn, a_offCpumCpu, 0, a_uInitOrReadValue, a_fWrIgnMask, a_fWrGpMask, a_szName, \
108 { 0 }, { 0 }, { 0 }, { 0 } }
109#else
110# define RINT(a_uFirst, a_uLast, a_enmRdFn, a_enmWrFn, a_offCpumCpu, a_uInitOrReadValue, a_fWrIgnMask, a_fWrGpMask, a_szName) \
111 { a_uFirst, a_uLast, a_enmRdFn, a_enmWrFn, a_offCpumCpu, 0, a_uInitOrReadValue, a_fWrIgnMask, a_fWrGpMask, a_szName }
112#endif
113/** @} */
114
115#endif /* !VMM_INCLUDED_SRC_VMMR3_CPUMR3Msr_x86_h */
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette