gem5
v20.1.0.0
mem
backdoor.hh
Go to the documentation of this file.
1
/*
2
* Copyright 2019 Google, Inc.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are
6
* met: redistributions of source code must retain the above copyright
7
* notice, this list of conditions and the following disclaimer;
8
* redistributions in binary form must reproduce the above copyright
9
* notice, this list of conditions and the following disclaimer in the
10
* documentation and/or other materials provided with the distribution;
11
* neither the name of the copyright holders nor the names of its
12
* contributors may be used to endorse or promote products derived from
13
* this software without specific prior written permission.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
*/
27
28
#ifndef __MEM_BACKDOOR_HH__
29
#define __MEM_BACKDOOR_HH__
30
31
#include <cstdint>
32
#include <functional>
33
#include <memory>
34
35
#include "
base/addr_range.hh
"
36
#include "
base/callback.hh
"
37
38
class
MemBackdoor
39
{
40
public
:
41
// Callbacks from this back door are set up using a callable which accepts
42
// a const reference to this back door as their only parameter.
43
typedef
std::function<void(
const
MemBackdoor
&backdoor)>
CbFunction
;
44
45
public
:
46
enum
Flags
{
47
// How data is allowed to be accessed through this backdoor.
48
NoAccess
= 0x0,
49
Readable
= 0x1,
50
Writeable
= 0x2
51
};
52
53
// The range in the guest address space covered by this back door.
54
const
AddrRange
&
range
()
const
{
return
_range
; }
55
void
range
(
const
AddrRange
&
r
) {
_range
=
r
; }
56
57
// A pointer to the data accessible through this back door.
58
uint8_t *
ptr
()
const
{
return
_ptr
; }
59
void
ptr
(uint8_t *
p
) {
_ptr
=
p
; }
60
61
/*
62
* Helper functions to make it easier to set/check particular flags.
63
*/
64
65
bool
readable
()
const
{
return
_flags
&
Readable
; }
66
void
67
readable
(
bool
r
)
68
{
69
if
(
r
)
70
_flags
= (
Flags
)(
_flags
|
Readable
);
71
else
72
_flags
= (
Flags
)(
_flags
& ~
Readable
);
73
}
74
75
bool
writeable
()
const
{
return
_flags
&
Writeable
; }
76
void
77
writeable
(
bool
w
)
78
{
79
if
(
w
)
80
_flags
= (
Flags
)(
_flags
|
Writeable
);
81
else
82
_flags
= (
Flags
)(
_flags
& ~
Writeable
);
83
}
84
85
Flags
flags
()
const
{
return
_flags
; }
86
void
flags
(
Flags
f
) {
_flags
=
f
; }
87
88
MemBackdoor
(
AddrRange
r
, uint8_t *
p
,
Flags
flags
) :
89
_range
(
r
),
_ptr
(
p
),
_flags
(
flags
)
90
{}
91
92
MemBackdoor
() :
MemBackdoor
(
AddrRange
(), nullptr,
NoAccess
)
93
{}
94
95
// Set up a callable to be called when this back door is invalidated. This
96
// lets holders update their bookkeeping to remove any references to it,
97
// and/or to propogate that invalidation to other interested parties.
98
void
99
addInvalidationCallback
(
CbFunction
func)
100
{
101
invalidationCallbacks
.push_back([
this
,func](){ func(*
this
); });
102
}
103
104
// Notify and clear invalidation callbacks when the data in the backdoor
105
// structure is no longer valid/current. The backdoor might then be
106
// updated or even deleted without having to worry about stale data being
107
// used.
108
void
109
invalidate
()
110
{
111
invalidationCallbacks
.
process
();
112
invalidationCallbacks
.clear();
113
}
114
115
private
:
116
CallbackQueue
invalidationCallbacks
;
117
118
AddrRange
_range
;
119
uint8_t *
_ptr
;
120
Flags
_flags
;
121
};
122
123
typedef
MemBackdoor
*
MemBackdoorPtr
;
124
125
#endif //__MEM_BACKDOOR_HH__
MemBackdoor
Definition:
backdoor.hh:38
MemBackdoor::MemBackdoor
MemBackdoor(AddrRange r, uint8_t *p, Flags flags)
Definition:
backdoor.hh:88
Flags
Definition:
flags.hh:33
MemBackdoor::NoAccess
@ NoAccess
Definition:
backdoor.hh:48
MemBackdoor::writeable
void writeable(bool w)
Definition:
backdoor.hh:77
MemBackdoor::flags
void flags(Flags f)
Definition:
backdoor.hh:86
MemBackdoor::flags
Flags flags() const
Definition:
backdoor.hh:85
CallbackQueue
Definition:
callback.hh:35
MemBackdoor::invalidate
void invalidate()
Definition:
backdoor.hh:109
MemBackdoor::_range
AddrRange _range
Definition:
backdoor.hh:118
MemBackdoor::readable
void readable(bool r)
Definition:
backdoor.hh:67
AddrRange
The AddrRange class encapsulates an address range, and supports a number of tests to check if two ran...
Definition:
addr_range.hh:68
MipsISA::w
Bitfield< 0 > w
Definition:
pra_constants.hh:278
MemBackdoor::ptr
uint8_t * ptr() const
Definition:
backdoor.hh:58
MipsISA::r
r
Definition:
pra_constants.hh:95
MemBackdoor::Readable
@ Readable
Definition:
backdoor.hh:49
MemBackdoor::range
const AddrRange & range() const
Definition:
backdoor.hh:54
MemBackdoor::MemBackdoor
MemBackdoor()
Definition:
backdoor.hh:92
MemBackdoor::range
void range(const AddrRange &r)
Definition:
backdoor.hh:55
MemBackdoor::CbFunction
std::function< void(const MemBackdoor &backdoor)> CbFunction
Definition:
backdoor.hh:43
addr_range.hh
MemBackdoorPtr
MemBackdoor * MemBackdoorPtr
Definition:
backdoor.hh:123
MemBackdoor::addInvalidationCallback
void addInvalidationCallback(CbFunction func)
Definition:
backdoor.hh:99
MemBackdoor::_flags
Flags _flags
Definition:
backdoor.hh:120
MemBackdoor::readable
bool readable() const
Definition:
backdoor.hh:65
MemBackdoor::_ptr
uint8_t * _ptr
Definition:
backdoor.hh:119
MemBackdoor::invalidationCallbacks
CallbackQueue invalidationCallbacks
Definition:
backdoor.hh:116
CallbackQueue::process
void process()
Definition:
callback.hh:46
MemBackdoor::Flags
Flags
Definition:
backdoor.hh:46
MipsISA::p
Bitfield< 0 > p
Definition:
pra_constants.hh:323
MemBackdoor::ptr
void ptr(uint8_t *p)
Definition:
backdoor.hh:59
MemBackdoor::writeable
bool writeable() const
Definition:
backdoor.hh:75
MemBackdoor::Writeable
@ Writeable
Definition:
backdoor.hh:50
callback.hh
ArmISA::f
Bitfield< 6 > f
Definition:
miscregs_types.hh:64
Generated on Wed Sep 30 2020 14:02:12 for gem5 by
doxygen
1.8.17