summaryrefslogtreecommitdiffstats
path: root/src/VBox/VMM/include/GIMInternal.h
blob: e8b59f21a9227a59a5edf632e1972b49bc31abf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* $Id: GIMInternal.h $ */
/** @file
 * GIM - Internal header file.
 */

/*
 * Copyright (C) 2014-2023 Oracle and/or its affiliates.
 *
 * This file is part of VirtualBox base platform packages, as
 * available from https://www.virtualbox.org.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, in version 3 of the
 * License.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <https://www.gnu.org/licenses>.
 *
 * SPDX-License-Identifier: GPL-3.0-only
 */

#ifndef VMM_INCLUDED_SRC_include_GIMInternal_h
#define VMM_INCLUDED_SRC_include_GIMInternal_h
#ifndef RT_WITHOUT_PRAGMA_ONCE
# pragma once
#endif

#include <VBox/vmm/gim.h>
#include <VBox/vmm/pgm.h>
#include "GIMHvInternal.h"
#include "GIMKvmInternal.h"
#include "GIMMinimalInternal.h"

RT_C_DECLS_BEGIN

/** @defgroup grp_gim_int       Internal
 * @ingroup grp_gim
 * @internal
 * @{
 */

/** The saved state version. */
#define GIM_SAVED_STATE_VERSION         1

/**
 * GIM VM Instance data.
 */
typedef struct GIM
{
    /** The provider that is active for this VM. */
    GIMPROVIDERID                    enmProviderId;
    /** The interface implementation version. */
    uint32_t                         u32Version;

    /** Physical access handler type for semi-read-only MMIO2 memory. Lazy creation. */
    PGMPHYSHANDLERTYPE              hSemiReadOnlyMmio2Handler;

    /** Pointer to the GIM device - R3 ptr. */
    R3PTRTYPE(PPDMDEVINS)            pDevInsR3;
    /** The debug struct - R3 ptr. */
    R3PTRTYPE(PGIMDEBUG)             pDbgR3;

    /** The provider specific data. */
    union
    {
        GIMHV  Hv;
        GIMKVM Kvm;
    } u;

    /** Number of hypercalls initiated. */
    STAMCOUNTER                      StatHypercalls;
    /** Debug packets sent. */
    STAMCOUNTER                      StatDbgXmit;
    /** Debug bytes sent. */
    STAMCOUNTER                      StatDbgXmitBytes;
    /** Debug packets received. */
    STAMCOUNTER                      StatDbgRecv;
    /** Debug bytes received. */
    STAMCOUNTER                      StatDbgRecvBytes;
} GIM;
/** Pointer to GIM VM instance data. */
typedef GIM *PGIM;

/**
 * GIM VMCPU Instance data.
 */
typedef struct GIMCPU
{
    union
    {
        GIMKVMCPU KvmCpu;
        GIMHVCPU  HvCpu;
    } u;
} GIMCPU;
/** Pointer to GIM VMCPU instance data. */
typedef GIMCPU *PGIMCPU;

/**
 * Callback when a debug buffer read has completed and before signalling the next
 * read.
 *
 * @param   pVM             The cross context VM structure.
 */
typedef DECLCALLBACKTYPE(void, FNGIMDEBUGBUFREADCOMPLETED,(PVM pVM));
/** Pointer to GIM debug buffer read completion callback. */
typedef FNGIMDEBUGBUFREADCOMPLETED *PFNGIMDEBUGBUFREADCOMPLETED;

#ifdef IN_RING3
#if 0
VMMR3_INT_DECL(int)           gimR3Mmio2Unmap(PVM pVM, PGIMMMIO2REGION pRegion);
VMMR3_INT_DECL(int)           gimR3Mmio2Map(PVM pVM, PGIMMMIO2REGION pRegion, RTGCPHYS GCPhysRegion);
VMMR3_INT_DECL(int)           gimR3Mmio2HandlerPhysicalRegister(PVM pVM, PGIMMMIO2REGION pRegion);
VMMR3_INT_DECL(int)           gimR3Mmio2HandlerPhysicalDeregister(PVM pVM, PGIMMMIO2REGION pRegion);
#endif

VMMR3_INT_DECL(int)           gimR3DebugRead(PVM pVM, void *pvRead, size_t *pcbRead, PFNGIMDEBUGBUFREADCOMPLETED pfnReadComplete);
VMMR3_INT_DECL(int)           gimR3DebugWrite(PVM pVM, void *pvWrite, size_t *pcbWrite);
#endif /* IN_RING3 */

/** @} */

RT_C_DECLS_END

#endif /* !VMM_INCLUDED_SRC_include_GIMInternal_h */