OpenCSD - CoreSight Trace Decode Library
1.8.3
Toggle main menu visibility
Loading...
Searching...
No Matches
include
mem_acc
trc_mem_acc_base.h
Go to the documentation of this file.
1
7
8
/*
9
* Redistribution and use in source and binary forms, with or without modification,
10
* are permitted provided that the following conditions are met:
11
*
12
* 1. Redistributions of source code must retain the above copyright notice,
13
* this list of conditions and the following disclaimer.
14
*
15
* 2. Redistributions in binary form must reproduce the above copyright notice,
16
* this list of conditions and the following disclaimer in the documentation
17
* and/or other materials provided with the distribution.
18
*
19
* 3. Neither the name of the copyright holder nor the names of its contributors
20
* may be used to endorse or promote products derived from this software without
21
* specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
24
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
30
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
*/
34
35
#ifndef ARM_TRC_MEM_ACC_BASE_H_INCLUDED
36
#define ARM_TRC_MEM_ACC_BASE_H_INCLUDED
37
38
#include "
opencsd/ocsd_if_types.h
"
39
#include <string>
40
52
class
TrcMemAccessorBase
53
{
54
public
:
55
57
enum
MemAccTypes
{
58
MEMACC_UNKNOWN
,
59
MEMACC_FILE
,
//<! Binary data file accessor
60
MEMACC_BUFPTR
,
//<! memory buffer accessor
61
MEMACC_CB_IF
,
//<! callback interface accessor - use for live memory access
62
};
63
65
TrcMemAccessorBase
(
MemAccTypes
type);
66
68
TrcMemAccessorBase
(
MemAccTypes
type,
ocsd_vaddr_t
startAddr,
ocsd_vaddr_t
endAddr);
69
71
virtual
~TrcMemAccessorBase
() {};
72
79
void
setRange
(
ocsd_vaddr_t
startAddr,
ocsd_vaddr_t
endAddr);
80
88
virtual
const
bool
addrInRange
(
const
ocsd_vaddr_t
s_address)
const
;
89
90
98
virtual
const
bool
addrStartOfRange
(
const
ocsd_vaddr_t
s_address)
const
;
99
110
virtual
const
uint32_t
bytesInRange
(
const
ocsd_vaddr_t
s_address,
const
uint32_t reqBytes)
const
;
111
119
virtual
const
bool
overLapRange
(
const
TrcMemAccessorBase
*p_test_acc)
const
;
120
132
virtual
const
uint32_t
readBytes
(
const
ocsd_vaddr_t
s_address,
const
ocsd_mem_space_acc_t
memSpace,
const
uint8_t trcID,
const
uint32_t reqBytes, uint8_t *byteBuffer) = 0;
133
139
virtual
const
bool
validateRange
();
140
141
142
const
enum
MemAccTypes
getType
()
const
{
return
m_type
; };
143
144
/* handle memory spaces */
145
void
setMemSpace
(
ocsd_mem_space_acc_t
memSpace) {
m_mem_space
= memSpace; };
146
const
ocsd_mem_space_acc_t
getMemSpace
()
const
{
return
m_mem_space
; };
147
const
bool
inMemSpace
(
const
ocsd_mem_space_acc_t
mem_space)
const
{
return
(
bool
)(((uint8_t)
m_mem_space
& (uint8_t)mem_space) != 0); };
148
149
/* memory access info logging */
150
virtual
void
getMemAccString
(std::string &accStr)
const
;
151
152
static
void
getMemAccSpaceString
(std::string& spaceStr,
const
ocsd_mem_space_acc_t
mem_space);
153
154
protected
:
155
ocsd_vaddr_t
m_startAddress
;
156
ocsd_vaddr_t
m_endAddress
;
157
const
MemAccTypes
m_type
;
158
ocsd_mem_space_acc_t
m_mem_space
;
159
};
160
161
inline
TrcMemAccessorBase::TrcMemAccessorBase
(
MemAccTypes
accType,
ocsd_vaddr_t
startAddr,
ocsd_vaddr_t
endAddr) :
162
m_startAddress
(startAddr),
163
m_endAddress
(endAddr),
164
m_type
(accType),
165
m_mem_space
(
OCSD_MEM_SPACE_ANY
)
166
{
167
}
168
169
inline
TrcMemAccessorBase::TrcMemAccessorBase
(
MemAccTypes
accType) :
170
m_startAddress
(0),
171
m_endAddress
(0),
172
m_type
(accType),
173
m_mem_space
(
OCSD_MEM_SPACE_ANY
)
174
{
175
}
176
177
inline
void
TrcMemAccessorBase::setRange
(
ocsd_vaddr_t
startAddr,
ocsd_vaddr_t
endAddr)
178
{
179
m_startAddress
= startAddr;
180
m_endAddress
= endAddr;
181
}
182
183
inline
const
bool
TrcMemAccessorBase::addrInRange
(
const
ocsd_vaddr_t
s_address)
const
184
{
185
return
(s_address >=
m_startAddress
) && (s_address <=
m_endAddress
);
186
}
187
188
inline
const
bool
TrcMemAccessorBase::addrStartOfRange
(
const
ocsd_vaddr_t
s_address)
const
189
{
190
return
(s_address ==
m_startAddress
);
191
}
192
193
194
inline
const
uint32_t
TrcMemAccessorBase::bytesInRange
(
const
ocsd_vaddr_t
s_address,
const
uint32_t reqBytes)
const
195
{
196
ocsd_vaddr_t
bytesInRange
= 0;
197
if
(
addrInRange
(s_address))
// start not in range, return 0.
198
{
199
// bytes available till end address.
200
bytesInRange
=
m_endAddress
- s_address + 1;
201
if
(
bytesInRange
> reqBytes)
202
bytesInRange
= reqBytes;
203
}
204
return
(uint32_t)
bytesInRange
;
205
}
206
207
inline
const
bool
TrcMemAccessorBase::overLapRange
(
const
TrcMemAccessorBase
*p_test_acc)
const
208
{
209
if
(
addrInRange
(p_test_acc->
m_startAddress
) ||
210
addrInRange
(p_test_acc->
m_endAddress
)
211
)
212
return
true
;
213
return
false
;
214
}
215
216
inline
const
bool
TrcMemAccessorBase::validateRange
()
217
{
218
if
(
m_startAddress
& 0x1)
// at least hword aligned for thumb
219
return
false
;
220
if
((
m_endAddress
+ 1) & 0x1)
221
return
false
;
222
if
(
m_startAddress
==
m_endAddress
)
// zero length range.
223
return
false
;
224
if
(
m_startAddress
>
m_endAddress
)
// values bakcwards / invalid
225
return
false
;
226
return
true
;
227
}
228
229
230
class
TrcMemAccFactory
231
{
232
public
:
234
static
ocsd_err_t
CreateBufferAccessor
(
TrcMemAccessorBase
**pAccessor,
const
ocsd_vaddr_t
s_address,
const
uint8_t *p_buffer,
const
uint32_t size);
235
static
ocsd_err_t
CreateFileAccessor
(
TrcMemAccessorBase
**pAccessor,
const
std::string &pathToFile,
ocsd_vaddr_t
startAddr,
size_t
offset = 0,
size_t
size = 0);
236
static
ocsd_err_t
CreateCBAccessor
(
TrcMemAccessorBase
**pAccessor,
const
ocsd_vaddr_t
s_address,
const
ocsd_vaddr_t
e_address,
const
ocsd_mem_space_acc_t
mem_space);
237
239
static
void
DestroyAccessor
(
TrcMemAccessorBase
*pAccessor);
240
private
:
241
TrcMemAccFactory() {};
242
~TrcMemAccFactory
() {};
243
};
244
245
#endif
// ARM_TRC_MEM_ACC_BASE_H_INCLUDED
246
247
/* End of File trc_mem_acc_base.h */
TrcMemAccFactory
Definition
trc_mem_acc_base.h:231
TrcMemAccFactory::DestroyAccessor
static void DestroyAccessor(TrcMemAccessorBase *pAccessor)
TrcMemAccFactory::CreateCBAccessor
static ocsd_err_t CreateCBAccessor(TrcMemAccessorBase **pAccessor, const ocsd_vaddr_t s_address, const ocsd_vaddr_t e_address, const ocsd_mem_space_acc_t mem_space)
TrcMemAccFactory::CreateFileAccessor
static ocsd_err_t CreateFileAccessor(TrcMemAccessorBase **pAccessor, const std::string &pathToFile, ocsd_vaddr_t startAddr, size_t offset=0, size_t size=0)
TrcMemAccFactory::CreateBufferAccessor
static ocsd_err_t CreateBufferAccessor(TrcMemAccessorBase **pAccessor, const ocsd_vaddr_t s_address, const uint8_t *p_buffer, const uint32_t size)
TrcMemAccessorBase
Memory range to access by trace decoder.
Definition
trc_mem_acc_base.h:53
TrcMemAccessorBase::m_type
const MemAccTypes m_type
Definition
trc_mem_acc_base.h:157
TrcMemAccessorBase::overLapRange
virtual const bool overLapRange(const TrcMemAccessorBase *p_test_acc) const
Definition
trc_mem_acc_base.h:207
TrcMemAccessorBase::setMemSpace
void setMemSpace(ocsd_mem_space_acc_t memSpace)
Definition
trc_mem_acc_base.h:145
TrcMemAccessorBase::setRange
void setRange(ocsd_vaddr_t startAddr, ocsd_vaddr_t endAddr)
Definition
trc_mem_acc_base.h:177
TrcMemAccessorBase::readBytes
virtual const uint32_t readBytes(const ocsd_vaddr_t s_address, const ocsd_mem_space_acc_t memSpace, const uint8_t trcID, const uint32_t reqBytes, uint8_t *byteBuffer)=0
TrcMemAccessorBase::getMemSpace
const ocsd_mem_space_acc_t getMemSpace() const
Definition
trc_mem_acc_base.h:146
TrcMemAccessorBase::addrInRange
virtual const bool addrInRange(const ocsd_vaddr_t s_address) const
Definition
trc_mem_acc_base.h:183
TrcMemAccessorBase::TrcMemAccessorBase
TrcMemAccessorBase(MemAccTypes type)
Definition
trc_mem_acc_base.h:169
TrcMemAccessorBase::MemAccTypes
MemAccTypes
Definition
trc_mem_acc_base.h:57
TrcMemAccessorBase::MEMACC_FILE
@ MEMACC_FILE
Definition
trc_mem_acc_base.h:59
TrcMemAccessorBase::MEMACC_BUFPTR
@ MEMACC_BUFPTR
Definition
trc_mem_acc_base.h:60
TrcMemAccessorBase::MEMACC_UNKNOWN
@ MEMACC_UNKNOWN
Definition
trc_mem_acc_base.h:58
TrcMemAccessorBase::MEMACC_CB_IF
@ MEMACC_CB_IF
Definition
trc_mem_acc_base.h:61
TrcMemAccessorBase::m_mem_space
ocsd_mem_space_acc_t m_mem_space
Definition
trc_mem_acc_base.h:158
TrcMemAccessorBase::getType
enum MemAccTypes getType() const
Definition
trc_mem_acc_base.h:142
TrcMemAccessorBase::bytesInRange
virtual const uint32_t bytesInRange(const ocsd_vaddr_t s_address, const uint32_t reqBytes) const
Definition
trc_mem_acc_base.h:194
TrcMemAccessorBase::validateRange
virtual const bool validateRange()
Definition
trc_mem_acc_base.h:216
TrcMemAccessorBase::m_endAddress
ocsd_vaddr_t m_endAddress
Definition
trc_mem_acc_base.h:156
TrcMemAccessorBase::getMemAccString
virtual void getMemAccString(std::string &accStr) const
TrcMemAccessorBase::addrStartOfRange
virtual const bool addrStartOfRange(const ocsd_vaddr_t s_address) const
Definition
trc_mem_acc_base.h:188
TrcMemAccessorBase::~TrcMemAccessorBase
virtual ~TrcMemAccessorBase()
Definition
trc_mem_acc_base.h:71
TrcMemAccessorBase::getMemAccSpaceString
static void getMemAccSpaceString(std::string &spaceStr, const ocsd_mem_space_acc_t mem_space)
TrcMemAccessorBase::inMemSpace
const bool inMemSpace(const ocsd_mem_space_acc_t mem_space) const
Definition
trc_mem_acc_base.h:147
TrcMemAccessorBase::m_startAddress
ocsd_vaddr_t m_startAddress
Definition
trc_mem_acc_base.h:155
ocsd_mem_space_acc_t
enum _ocsd_mem_space_acc_t ocsd_mem_space_acc_t
ocsd_err_t
enum _ocsd_err_t ocsd_err_t
ocsd_vaddr_t
uint64_t ocsd_vaddr_t
Definition
ocsd_if_types.h:306
OCSD_MEM_SPACE_ANY
@ OCSD_MEM_SPACE_ANY
Definition
ocsd_if_types.h:443
ocsd_if_types.h
OpenCSD : Standard Types used in the library interfaces.
Generated on
for OpenCSD - CoreSight Trace Decode Library by
1.17.0