OpenCSD - CoreSight Trace Decode Library  0.14.0
trc_pkt_elem_etmv3.h
Go to the documentation of this file.
1 /*
2  * \file trc_pkt_elem_etmv3.h
3  * \brief OpenCSD :
4  *
5  * \copyright Copyright (c) 2015, ARM Limited. All Rights Reserved.
6  */
7 
8 
9 /*
10  * Redistribution and use in source and binary forms, with or without modification,
11  * are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright notice,
14  * this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright notice,
17  * this list of conditions and the following disclaimer in the documentation
18  * and/or other materials provided with the distribution.
19  *
20  * 3. Neither the name of the copyright holder nor the names of its contributors
21  * may be used to endorse or promote products derived from this software without
22  * specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27  * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
28  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 
36 #ifndef ARM_TRC_PKT_ELEM_ETMV3_H_INCLUDED
37 #define ARM_TRC_PKT_ELEM_ETMV3_H_INCLUDED
38 
39 #include "trc_pkt_types_etmv3.h"
42 
54 {
55 public:
58 
59 // conversions between C-API struct and C++ object types
60  // assign from C-API struct
62 
63  // allow const cast to C-API struct to pass C++ object
64  operator const ocsd_etmv3_pkt*() const { return &m_pkt_data; };
65  operator const ocsd_etmv3_pkt&() const { return m_pkt_data; };
66 
67  // override c_pkt to pass out the packet data struct.
68  virtual const void *c_pkt() const { return &m_pkt_data; };
69 
70 // update interface - set packet values
71  void Clear();
72  void ResetState();
73 
74  void SetType(const ocsd_etmv3_pkt_type p_type);
75  void SetErrType(const ocsd_etmv3_pkt_type e_type);
76  void UpdateAddress(const ocsd_vaddr_t partAddrVal, const int updateBits);
77  void SetException( const ocsd_armv7_exception type,
78  const uint16_t number,
79  const bool cancel,
80  const bool cm_type,
81  const int irq_n = 0,
82  const int resume = 0);
83  void UpdateNS(const int NS);
84  void UpdateAltISA(const int AltISA);
85  void UpdateHyp(const int Hyp);
86  void UpdateISA(const ocsd_isa isa);
87  void UpdateContextID(const uint32_t contextID);
88  void UpdateVMID(const uint8_t VMID);
89  void UpdateTimestamp(const uint64_t tsVal, const uint8_t updateBits);
90 
91  bool UpdateAtomFromPHdr(const uint8_t pHdr, const bool cycleAccurate);
92 
93  void SetDataOOOTag(const uint8_t tag);
94  void SetDataValue(const uint32_t value);
95  void UpdateDataAddress(const uint32_t value, const uint8_t valid_bits);
96  void UpdateDataEndian(const uint8_t BE_Val);
97  void SetCycleCount(const uint32_t cycleCount);
98  void SetISyncReason(const ocsd_iSync_reason reason);
99  void SetISyncHasCC();
100  void SetISyncIsLSiP();
101  void SetISyncNoAddr();
102 
103 // packet status interface - get packet info.
104  const ocsd_etmv3_pkt_type getType() const { return m_pkt_data.type; };
105  const bool isBadPacket() const;
106 
107  const int AltISA() const { return m_pkt_data.context.curr_alt_isa; };
108  const ocsd_isa ISA() const { return m_pkt_data.curr_isa; };
109  const bool changedISA() const { return m_pkt_data.curr_isa != m_pkt_data.prev_isa; };
110 
111  // any of the context elements updated?
112  const bool isCtxtUpdated() const;
113  const bool isCtxtFlagsUpdated() const { return (m_pkt_data.context.updated == 1); };
114  const bool isNS() const { return m_pkt_data.context.curr_NS; };
115  const bool isHyp() const { return m_pkt_data.context.curr_Hyp; };
116 
117  const bool isCtxtIDUpdated() const { return (m_pkt_data.context.updated_c == 1); }
118  const uint32_t getCtxtID() const { return m_pkt_data.context.ctxtID; };
119  const bool isVMIDUpdated() const { return (m_pkt_data.context.updated_v == 1); }
120  const uint32_t getVMID() const { return m_pkt_data.context.VMID; };
121 
122  const uint32_t getCycleCount() const { return m_pkt_data.cycle_count; };
123  const uint64_t getTS() const { return m_pkt_data.timestamp; };
124 
125  const bool isExcepPkt() const { return (m_pkt_data.exception.bits.present == 1); };
126  const ocsd_armv7_exception excepType() const { return m_pkt_data.exception.type; };
127  const uint16_t excepNum() const { return m_pkt_data.exception.number; };
128  const bool isExcepCancel() const { return (m_pkt_data.exception.bits.present == 1) && (m_pkt_data.exception.bits.cancel == 1); };
129 
130  const ocsd_iSync_reason getISyncReason() const { return m_pkt_data.isync_info.reason; };
131  const bool getISyncHasCC() const { return m_pkt_data.isync_info.has_cycle_count; };
132  const bool getISyncIsLSiPAddr() const { return m_pkt_data.isync_info.has_LSipAddress; };
133  const bool getISyncNoAddr() const { return m_pkt_data.isync_info.no_address; };
134 
135  const ocsd_vaddr_t getAddr() const { return m_pkt_data.addr.val; };
136  const ocsd_vaddr_t getDataAddr() const { return m_pkt_data.data.addr.val; };
137 
138  const ocsd_pkt_atom &getAtom() const { return m_pkt_data.atom; };
139  const uint8_t getPHdrFmt() const { return m_pkt_data.p_hdr_fmt; };
140 
141 
142 // printing
143  virtual void toString(std::string &str) const;
144  virtual void toStringFmt(const uint32_t fmtFlags, std::string &str) const;
145 
146 private:
147  const char *packetTypeName(const ocsd_etmv3_pkt_type type, const char **ppDesc) const;
148  void getBranchAddressStr(std::string &valStr) const;
149  void getAtomStr(std::string &valStr) const;
150  void getISyncStr(std::string &valStr) const;
151  void getISAStr(std::string &isaStr) const;
152  void getExcepStr(std::string &excepStr) const;
153 
154  ocsd_etmv3_pkt m_pkt_data;
155 };
156 
157 inline void EtmV3TrcPacket::UpdateNS(const int NS)
158 {
159  m_pkt_data.context.curr_NS = NS;
160  m_pkt_data.context.updated = 1;
161 };
162 
163 inline void EtmV3TrcPacket::UpdateAltISA(const int AltISA)
164 {
165  m_pkt_data.context.curr_alt_isa = AltISA;
166  m_pkt_data.context.updated = 1;
167 }
168 
169 inline void EtmV3TrcPacket::UpdateHyp(const int Hyp)
170 {
171  m_pkt_data.context.curr_Hyp = Hyp;
172  m_pkt_data.context.updated = 1;
173 }
174 
175 inline void EtmV3TrcPacket::UpdateISA(const ocsd_isa isa)
176 {
177  m_pkt_data.prev_isa = m_pkt_data.curr_isa;
178  m_pkt_data.curr_isa = isa;
179 }
180 
182 {
183  m_pkt_data.type = p_type;
184 }
185 
187 {
188  m_pkt_data.err_type = m_pkt_data.type;
189  m_pkt_data.type = e_type;
190 }
191 
192 inline const bool EtmV3TrcPacket::isBadPacket() const
193 {
194  return (m_pkt_data.type >= ETM3_PKT_BAD_SEQUENCE);
195 }
196 
197 inline void EtmV3TrcPacket::SetDataOOOTag(const uint8_t tag)
198 {
199  m_pkt_data.data.ooo_tag = tag;
200 }
201 
202 inline void EtmV3TrcPacket::SetDataValue(const uint32_t value)
203 {
204  m_pkt_data.data.value = value;
205  m_pkt_data.data.update_dval = 1;
206 }
207 
208 inline void EtmV3TrcPacket::UpdateContextID(const uint32_t contextID)
209 {
210  m_pkt_data.context.updated_c = 1;
211  m_pkt_data.context.ctxtID = contextID;
212 }
213 
214 inline void EtmV3TrcPacket::UpdateVMID(const uint8_t VMID)
215 {
216  m_pkt_data.context.updated_v = 1;
217  m_pkt_data.context.VMID = VMID;
218 }
219 
220 inline void EtmV3TrcPacket::UpdateDataEndian(const uint8_t BE_Val)
221 {
222  m_pkt_data.data.be = BE_Val;
223  m_pkt_data.data.update_be = 1;
224 }
225 
226 inline void EtmV3TrcPacket::SetCycleCount(const uint32_t cycleCount)
227 {
228  m_pkt_data.cycle_count = cycleCount;
229 }
230 
232 {
233  m_pkt_data.isync_info.reason = reason;
234 }
235 
237 {
238  m_pkt_data.isync_info.has_cycle_count = 1;
239 }
240 
242 {
243  m_pkt_data.isync_info.has_LSipAddress = 1;
244 }
245 
247 {
248  m_pkt_data.isync_info.no_address = 1;
249 }
250 
251 inline const bool EtmV3TrcPacket::isCtxtUpdated() const
252 {
253  return (m_pkt_data.context.updated_v == 1) ||
254  (m_pkt_data.context.updated == 1) ||
255  (m_pkt_data.context.updated_c == 1);
256 }
257 
259 #endif // ARM_TRC_PKT_ELEM_ETMV3_H_INCLUDED
260 
261 /* End of File trc_pkt_elem_etmv3.h */
EtmV3TrcPacket::excepNum
const uint16_t excepNum() const
Definition: trc_pkt_elem_etmv3.h:127
_ocsd_etmv3_pkt::prev_isa
ocsd_isa prev_isa
Definition: trc_pkt_types_etmv3.h:139
EtmV3TrcPacket::getISyncReason
const ocsd_iSync_reason getISyncReason() const
Definition: trc_pkt_elem_etmv3.h:130
_ocsd_etmv3_pkt::exception
ocsd_etmv3_excep exception
Definition: trc_pkt_types_etmv3.h:146
EtmV3TrcPacket::UpdateHyp
void UpdateHyp(const int Hyp)
Definition: trc_pkt_elem_etmv3.h:169
EtmV3TrcPacket::UpdateISA
void UpdateISA(const ocsd_isa isa)
Definition: trc_pkt_elem_etmv3.h:175
EtmV3TrcPacket::isHyp
const bool isHyp() const
Definition: trc_pkt_elem_etmv3.h:115
trc_printable_elem.h
OpenCSD : Standard printable element base class.
EtmV3TrcPacket::SetType
void SetType(const ocsd_etmv3_pkt_type p_type)
Definition: trc_pkt_elem_etmv3.h:181
_ocsd_etmv3_excep::bits
struct _ocsd_etmv3_excep::@1 bits
trc_pkt_elem_base.h
EtmV3TrcPacket::SetDataValue
void SetDataValue(const uint32_t value)
Definition: trc_pkt_elem_etmv3.h:202
EtmV3TrcPacket::changedISA
const bool changedISA() const
Definition: trc_pkt_elem_etmv3.h:109
EtmV3TrcPacket::isVMIDUpdated
const bool isVMIDUpdated() const
Definition: trc_pkt_elem_etmv3.h:119
EtmV3TrcPacket::UpdateNS
void UpdateNS(const int NS)
Definition: trc_pkt_elem_etmv3.h:157
_etmv3_context_t::curr_alt_isa
uint32_t curr_alt_isa
Definition: trc_pkt_types_etmv3.h:99
EtmV3TrcPacket::getISyncNoAddr
const bool getISyncNoAddr() const
Definition: trc_pkt_elem_etmv3.h:133
_ocsd_etmv3_pkt
Definition: trc_pkt_types_etmv3.h:134
EtmV3TrcPacket::getType
const ocsd_etmv3_pkt_type getType() const
Definition: trc_pkt_elem_etmv3.h:104
EtmV3TrcPacket::SetISyncIsLSiP
void SetISyncIsLSiP()
Definition: trc_pkt_elem_etmv3.h:241
EtmV3TrcPacket::toString
virtual void toString(std::string &str) const
ETM3_PKT_BAD_SEQUENCE
invalid sequence for packet type
Definition: trc_pkt_types_etmv3.h:79
ocsd_armv7_exception
enum _ocsd_armv7_exception ocsd_armv7_exception
EtmV3TrcPacket::SetDataOOOTag
void SetDataOOOTag(const uint8_t tag)
Definition: trc_pkt_elem_etmv3.h:197
EtmV3TrcPacket::ISA
const ocsd_isa ISA() const
Definition: trc_pkt_elem_etmv3.h:108
_ocsd_etmv3_pkt::p_hdr_fmt
uint8_t p_hdr_fmt
Definition: trc_pkt_types_etmv3.h:149
EtmV3TrcPacket::~EtmV3TrcPacket
~EtmV3TrcPacket()
EtmV3TrcPacket::c_pkt
virtual const void * c_pkt() const
return the underlying C API packet structure
Definition: trc_pkt_elem_etmv3.h:68
_ocsd_etmv3_pkt::type
ocsd_etmv3_pkt_type type
Definition: trc_pkt_types_etmv3.h:136
_ocsd_etmv3_pkt::err_type
ocsd_etmv3_pkt_type err_type
Definition: trc_pkt_types_etmv3.h:157
_etmv3_data_t::value
uint32_t value
Definition: trc_pkt_types_etmv3.h:113
EtmV3TrcPacket::AltISA
const int AltISA() const
Definition: trc_pkt_elem_etmv3.h:107
_etmv3_isync_t::has_LSipAddress
uint32_t has_LSipAddress
Definition: trc_pkt_types_etmv3.h:129
EtmV3TrcPacket::getTS
const uint64_t getTS() const
Definition: trc_pkt_elem_etmv3.h:123
EtmV3TrcPacket::SetCycleCount
void SetCycleCount(const uint32_t cycleCount)
Definition: trc_pkt_elem_etmv3.h:226
_etmv3_context_t::VMID
uint8_t VMID
Definition: trc_pkt_types_etmv3.h:107
EtmV3TrcPacket::EtmV3TrcPacket
EtmV3TrcPacket()
EtmV3TrcPacket::getISyncHasCC
const bool getISyncHasCC() const
Definition: trc_pkt_elem_etmv3.h:131
_ocsd_etmv3_pkt::isync_info
etmv3_isync_t isync_info
Definition: trc_pkt_types_etmv3.h:144
_etmv3_data_t::update_be
uint32_t update_be
Definition: trc_pkt_types_etmv3.h:119
_ocsd_etmv3_pkt::timestamp
uint64_t timestamp
Definition: trc_pkt_types_etmv3.h:152
EtmV3TrcPacket::SetISyncReason
void SetISyncReason(const ocsd_iSync_reason reason)
Definition: trc_pkt_elem_etmv3.h:231
EtmV3TrcPacket::UpdateAtomFromPHdr
bool UpdateAtomFromPHdr(const uint8_t pHdr, const bool cycleAccurate)
Interpret P Hdr, return true if valid, false if not.
EtmV3TrcPacket::UpdateAddress
void UpdateAddress(const ocsd_vaddr_t partAddrVal, const int updateBits)
TrcPacketBase
Definition: trc_pkt_elem_base.h:37
EtmV3TrcPacket::isExcepPkt
const bool isExcepPkt() const
Definition: trc_pkt_elem_etmv3.h:125
_etmv3_data_t::ooo_tag
uint32_t ooo_tag
Definition: trc_pkt_types_etmv3.h:117
ocsd_vaddr_t
uint64_t ocsd_vaddr_t
Definition: ocsd_if_types.h:308
_ocsd_etmv3_pkt::addr
ocsd_pkt_vaddr addr
Definition: trc_pkt_types_etmv3.h:142
EtmV3TrcPacket::getVMID
const uint32_t getVMID() const
Definition: trc_pkt_elem_etmv3.h:120
_etmv3_data_t::addr
ocsd_pkt_vaddr addr
Definition: trc_pkt_types_etmv3.h:114
EtmV3TrcPacket::operator=
EtmV3TrcPacket & operator=(const ocsd_etmv3_pkt *p_pkt)
_etmv3_context_t::curr_Hyp
uint32_t curr_Hyp
Definition: trc_pkt_types_etmv3.h:101
_ocsd_etmv3_excep::type
ocsd_armv7_exception type
Definition: trc_pkt_types_etmv3.h:86
_etmv3_isync_t::has_cycle_count
uint32_t has_cycle_count
Definition: trc_pkt_types_etmv3.h:128
_etmv3_context_t::updated
uint32_t updated
Definition: trc_pkt_types_etmv3.h:102
ocsd_etmv3_pkt_type
enum _ocsd_etmv3_pkt_type ocsd_etmv3_pkt_type
trcPrintableElem
Class to provide trace element strings for printing.
Definition: trc_printable_elem.h:55
EtmV3TrcPacket::getCtxtID
const uint32_t getCtxtID() const
Definition: trc_pkt_elem_etmv3.h:118
EtmV3TrcPacket::SetISyncHasCC
void SetISyncHasCC()
Definition: trc_pkt_elem_etmv3.h:236
_etmv3_isync_t::reason
ocsd_iSync_reason reason
Definition: trc_pkt_types_etmv3.h:126
trc_pkt_types_etmv3.h
EtmV3TrcPacket::UpdateDataEndian
void UpdateDataEndian(const uint8_t BE_Val)
Definition: trc_pkt_elem_etmv3.h:220
EtmV3TrcPacket::UpdateAltISA
void UpdateAltISA(const int AltISA)
Definition: trc_pkt_elem_etmv3.h:163
_etmv3_context_t::updated_c
uint32_t updated_c
Definition: trc_pkt_types_etmv3.h:103
_etmv3_isync_t::no_address
uint32_t no_address
Definition: trc_pkt_types_etmv3.h:130
_etmv3_context_t::curr_NS
uint32_t curr_NS
Definition: trc_pkt_types_etmv3.h:100
_ocsd_etmv3_pkt::atom
ocsd_pkt_atom atom
Definition: trc_pkt_types_etmv3.h:148
_ocsd_etmv3_excep::number
uint16_t number
Definition: trc_pkt_types_etmv3.h:87
EtmV3TrcPacket::isCtxtFlagsUpdated
const bool isCtxtFlagsUpdated() const
Definition: trc_pkt_elem_etmv3.h:113
EtmV3TrcPacket::isCtxtIDUpdated
const bool isCtxtIDUpdated() const
Definition: trc_pkt_elem_etmv3.h:117
_ocsd_etmv3_pkt::cycle_count
uint32_t cycle_count
Definition: trc_pkt_types_etmv3.h:150
EtmV3TrcPacket::getCycleCount
const uint32_t getCycleCount() const
Definition: trc_pkt_elem_etmv3.h:122
EtmV3TrcPacket::isCtxtUpdated
const bool isCtxtUpdated() const
Definition: trc_pkt_elem_etmv3.h:251
_ocsd_etmv3_pkt::context
etmv3_context_t context
Definition: trc_pkt_types_etmv3.h:141
_etmv3_context_t::updated_v
uint32_t updated_v
Definition: trc_pkt_types_etmv3.h:104
EtmV3TrcPacket::ResetState
void ResetState()
reset intra packet state data -on full decoder reset.
EtmV3TrcPacket::isExcepCancel
const bool isExcepCancel() const
Definition: trc_pkt_elem_etmv3.h:128
EtmV3TrcPacket
ETMv3 Trace Protocol Packet.
Definition: trc_pkt_elem_etmv3.h:53
EtmV3TrcPacket::getAtom
const ocsd_pkt_atom & getAtom() const
Definition: trc_pkt_elem_etmv3.h:138
EtmV3TrcPacket::UpdateTimestamp
void UpdateTimestamp(const uint64_t tsVal, const uint8_t updateBits)
EtmV3TrcPacket::excepType
const ocsd_armv7_exception excepType() const
Definition: trc_pkt_elem_etmv3.h:126
_ocsd_etmv3_excep::cancel
uint32_t cancel
Definition: trc_pkt_types_etmv3.h:90
_etmv3_data_t::update_dval
uint32_t update_dval
Definition: trc_pkt_types_etmv3.h:121
_etmv3_data_t::be
uint32_t be
Definition: trc_pkt_types_etmv3.h:118
_ocsd_etmv3_excep::present
uint32_t present
Definition: trc_pkt_types_etmv3.h:89
EtmV3TrcPacket::isNS
const bool isNS() const
Definition: trc_pkt_elem_etmv3.h:114
_etmv3_context_t::ctxtID
uint32_t ctxtID
Definition: trc_pkt_types_etmv3.h:106
EtmV3TrcPacket::getAddr
const ocsd_vaddr_t getAddr() const
Definition: trc_pkt_elem_etmv3.h:135
_ocsd_pkt_atom
Definition: trc_pkt_types.h:84
ocsd_iSync_reason
enum _ocsd_iSync_reason ocsd_iSync_reason
EtmV3TrcPacket::getPHdrFmt
const uint8_t getPHdrFmt() const
Definition: trc_pkt_elem_etmv3.h:139
EtmV3TrcPacket::UpdateVMID
void UpdateVMID(const uint8_t VMID)
Definition: trc_pkt_elem_etmv3.h:214
EtmV3TrcPacket::getDataAddr
const ocsd_vaddr_t getDataAddr() const
Definition: trc_pkt_elem_etmv3.h:136
EtmV3TrcPacket::UpdateDataAddress
void UpdateDataAddress(const uint32_t value, const uint8_t valid_bits)
EtmV3TrcPacket::SetErrType
void SetErrType(const ocsd_etmv3_pkt_type e_type)
Definition: trc_pkt_elem_etmv3.h:186
_ocsd_etmv3_pkt::data
etmv3_data_t data
Definition: trc_pkt_types_etmv3.h:155
_ocsd_pkt_vaddr::val
ocsd_vaddr_t val
Definition: trc_pkt_types.h:61
EtmV3TrcPacket::isBadPacket
const bool isBadPacket() const
Definition: trc_pkt_elem_etmv3.h:192
EtmV3TrcPacket::getISyncIsLSiPAddr
const bool getISyncIsLSiPAddr() const
Definition: trc_pkt_elem_etmv3.h:132
ocsd_isa
enum _ocsd_isa ocsd_isa
_ocsd_etmv3_pkt::curr_isa
ocsd_isa curr_isa
Definition: trc_pkt_types_etmv3.h:138
EtmV3TrcPacket::toStringFmt
virtual void toStringFmt(const uint32_t fmtFlags, std::string &str) const
EtmV3TrcPacket::SetISyncNoAddr
void SetISyncNoAddr()
Definition: trc_pkt_elem_etmv3.h:246
EtmV3TrcPacket::SetException
void SetException(const ocsd_armv7_exception type, const uint16_t number, const bool cancel, const bool cm_type, const int irq_n=0, const int resume=0)
EtmV3TrcPacket::UpdateContextID
void UpdateContextID(const uint32_t contextID)
Definition: trc_pkt_elem_etmv3.h:208
EtmV3TrcPacket::Clear
void Clear()
clear update data in packet ready for new one.