36 #ifndef ARM_TRC_PKT_ELEM_ETMV4I_H_INCLUDED 37 #define ARM_TRC_PKT_ELEM_ETMV4I_H_INCLUDED 66 m_v_addr[2] = m_v_addr[1];
67 m_v_addr[1] = m_v_addr[0];
69 m_v_addr_ISA[2] = m_v_addr_ISA[1];
70 m_v_addr_ISA[1] = m_v_addr_ISA[0];
71 m_v_addr_ISA[0] = isa;
78 vaddr = m_v_addr[idx];
79 isa = m_v_addr_ISA[idx];
86 for (
int i = 0; i < 3; i++)
99 uint8_t m_v_addr_ISA[3];
121 void initStartState();
122 void initNextPacket();
127 void clearTraceInfo();
128 void setTraceInfo(
const uint32_t infoVal);
129 void setTraceInfoKey(
const uint32_t keyVal);
130 void setTraceInfoSpec(
const uint32_t specVal);
131 void setTraceInfoCyct(
const uint32_t cyctVal);
133 void setTS(
const uint64_t value,
const uint8_t bits);
134 void setCycleCount(
const uint32_t value);
135 void setCommitElements(
const uint32_t commit_elem);
136 void setCancelElements(
const uint32_t cancel_elem);
137 void setAtomPacket(
const ocsd_pkt_atm_type type,
const uint32_t En_bits,
const uint8_t num);
139 void setCondIF1(uint32_t
const cond_key);
140 void setCondIF2(uint8_t
const c_elem_idx);
141 void setCondIF3(uint8_t
const num_c_elem,
const bool finalElem);
143 void setCondRF1(
const uint32_t key[2],
const uint8_t res[2],
const uint8_t CI[2],
const bool set2Keys);
144 void setCondRF2(
const uint8_t key_incr,
const uint8_t token);
145 void setCondRF3(
const uint16_t tokens);
146 void setCondRF4(
const uint8_t token);
148 void setContextInfo(
const bool update,
const uint8_t EL = 0,
const uint8_t NS = 0,
const uint8_t SF = 0,
const uint8_t NSE = 0);
149 void setContextVMID(
const uint32_t VMID);
150 void setContextCID(
const uint32_t CID);
152 void setExceptionInfo(
const uint16_t excep_type,
const uint8_t addr_interp,
const uint8_t m_fault_pending,
const uint8_t m_type);
154 void set64BitAddress(
const uint64_t addr,
const uint8_t IS);
155 void set32BitAddress(
const uint32_t addr,
const uint8_t IS);
156 void updateShortAddress(
const uint32_t addr,
const uint8_t IS,
const uint8_t update_bits);
157 void setAddressExactMatch(
const uint8_t idx);
159 void setDataSyncMarker(
const uint8_t dsm_val);
160 void setEvent(
const uint8_t event_val);
162 void setQType(
const bool has_count,
const uint32_t count,
const bool has_addr,
const bool addr_match,
const uint8_t type);
171 return pkt_valid.bits.commit_elem_valid ? true :
false;
176 const uint32_t getCCThreshold()
const;
177 const uint32_t getP0Key()
const;
178 const uint32_t getCurrSpecDepth()
const;
190 const uint8_t &
getAddrIS()
const {
return v_addr_ISA; };
194 const uint64_t
getTS()
const {
return pkt_valid.bits.ts_valid ? ts.timestamp : 0; };
197 const uint32_t
getCC()
const {
return pkt_valid.bits.cc_valid ? cycle_count : 0; };
204 const bool isBadPacket()
const;
207 virtual void toString(std::string &str)
const;
208 virtual void toStringFmt(
const uint32_t fmtFlags, std::string &str)
const;
214 void contextStr(std::string &ctxtStr)
const;
215 void atomSeq(std::string &valStr)
const;
216 void addrMatchIdx(std::string &valStr)
const;
217 void exceptionInfo(std::string &valStr)
const;
220 void pop_vaddr_idx(
const uint8_t idx);
222 const bool isETE()
const {
return (protocol_version & 0xF0) == 0x50; };
232 err_hdr_val = err_val;
237 pkt_valid.bits.ts_valid = 0;
238 pkt_valid.bits.trace_info_valid = 0;
239 pkt_valid.bits.p0_key_valid = 0;
240 pkt_valid.bits.spec_depth_valid = 0;
241 pkt_valid.bits.cc_thresh_valid = 0;
248 m_addr_stack.reset_stack();
249 m_addr_stack.get_idx(0, v_addr, v_addr_ISA);
254 trace_info.val = infoVal;
255 pkt_valid.bits.trace_info_valid = 1;
261 pkt_valid.bits.p0_key_valid = 1;
266 curr_spec_depth = specVal;
267 pkt_valid.bits.spec_depth_valid = 1;
272 cc_threshold = cyctVal;
273 pkt_valid.bits.cc_thresh_valid = 1;
278 uint64_t mask = (uint64_t)-1LL;
279 if(bits < 64) mask = (1ULL << bits) - 1;
280 ts.timestamp = (ts.timestamp & ~mask) | (value & mask);
281 ts.bits_changed = bits;
282 pkt_valid.bits.ts_valid = 1;
287 pkt_valid.bits.cc_valid = 1;
293 pkt_valid.bits.commit_elem_valid = 1;
294 commit_elements = commit_elem;
299 if(pkt_valid.bits.cc_thresh_valid)
306 if(pkt_valid.bits.p0_key_valid)
313 if(pkt_valid.bits.spec_depth_valid)
314 return curr_spec_depth;
320 cancel_elements = cancel_elem;
327 uint32_t bit_patt = En_bits & 0x1;
331 bit_patt = (bit_patt << num) - 1;
333 atom.En_bits = bit_patt;
336 atom.En_bits = En_bits;
342 cond_instr.cond_key_set = 1;
343 cond_instr.f3_final_elem = 0;
344 cond_instr.f2_cond_incr = 0;
345 cond_instr.num_c_elem = 1;
346 cond_instr.cond_c_key = cond_key;
351 cond_instr.cond_key_set = 0;
352 cond_instr.f3_final_elem = 0;
353 switch(c_elem_idx & 0x3)
356 cond_instr.f2_cond_incr = 1;
357 cond_instr.num_c_elem = 1;
361 cond_instr.f2_cond_incr = 0;
362 cond_instr.num_c_elem = 1;
366 cond_instr.f2_cond_incr = 1;
367 cond_instr.num_c_elem = 2;
374 cond_instr.cond_key_set = 0;
375 cond_instr.f3_final_elem = finalElem ? 1: 0;
376 cond_instr.f2_cond_incr = 0;
377 cond_instr.num_c_elem = num_c_elem;
382 cond_result.key_res_0_set = 1;
383 cond_result.cond_r_key_0 = key[0];
384 cond_result.res_0 = res[0];
385 cond_result.ci_0 = CI[0];
389 cond_result.key_res_1_set = 1;
390 cond_result.cond_r_key_1 = key[1];
391 cond_result.res_1 = res[1];
392 cond_result.ci_1 = CI[1];
399 cond_result.key_res_0_set = 0;
400 cond_result.key_res_1_set = 0;
401 cond_result.f2_key_incr = key_incr;
402 cond_result.f2f4_token = token;
407 cond_result.key_res_0_set = 0;
408 cond_result.key_res_1_set = 0;
409 cond_result.f3_tokens = tokens;
414 cond_result.key_res_0_set = 0;
415 cond_result.key_res_1_set = 0;
416 cond_result.f2f4_token = token;
421 pkt_valid.bits.context_valid = 1;
434 pkt_valid.bits.context_valid = 1;
437 context.updated_v = 1;
442 pkt_valid.bits.context_valid = 1;
444 context.ctxtID = CID;
445 context.updated_c = 1;
450 exception_info.exceptionType = excep_type;
451 exception_info.addr_interp = addr_interp;
452 exception_info.m_fault_pending = m_fault_pending;
453 exception_info.m_type = m_type;
458 v_addr.pkt_bits = 64;
459 v_addr.valid_bits = 64;
469 v_addr.pkt_bits = 32;
471 if (pkt_valid.bits.context_valid && context.SF)
474 v_addr.val = (v_addr.val & ~mask) | (addr & mask);
482 if (v_addr.valid_bits < 32)
483 v_addr.valid_bits = 32;
492 v_addr.pkt_bits = update_bits;
493 if(v_addr.valid_bits < update_bits)
494 v_addr.valid_bits = update_bits;
496 v_addr.val = (v_addr.val & ~update_mask) | (addr & update_mask);
503 addr_exact_match_idx = idx;
515 event_val = event_value;
518 inline void EtmV4ITrcPacket::setQType(
const bool has_count,
const uint32_t count,
const bool has_addr,
const bool addr_match,
const uint8_t type)
520 Q_pkt.q_count = count;
522 Q_pkt.count_present = has_count ? 1 : 0;
523 Q_pkt.addr_present = has_addr ? 1: 0;
524 Q_pkt.addr_match = addr_match ? 1 :0;
532 inline void EtmV4ITrcPacket::push_vaddr()
534 m_addr_stack.push(v_addr, v_addr_ISA);
537 inline void EtmV4ITrcPacket::pop_vaddr_idx(
const uint8_t idx)
539 m_addr_stack.get_idx(idx, v_addr, v_addr_ISA);
544 #endif // ARM_TRC_PKT_ELEM_ETMV4I_H_INCLUDED const ocsd_vaddr_t & getAddrVal() const
virtual const void * c_pkt() const
return the underlying C API packet structure
void setDataSyncMarker(const uint8_t dsm_val)
const uint32_t getCC() const
#define OCSD_MAX_VA_BITSIZE
const bool hasCommitElementsCount() const
return true if this packet has set the commit packet count.
void setAtomPacket(const ocsd_pkt_atm_type type, const uint32_t En_bits, const uint8_t num)
const etmv4_trace_info_t & getTraceInfo() const
const uint32_t getCurrSpecDepth() const
void set32BitAddress(const uint32_t addr, const uint8_t IS)
void setCommitElements(const uint32_t commit_elem)
void get_idx(const uint8_t idx, ocsd_pkt_vaddr &vaddr, uint8_t &isa)
const uint64_t getTS() const
const uint32_t getCCThreshold() const
void setCondRF2(const uint8_t key_incr, const uint8_t token)
void setTraceInfoCyct(const uint32_t cyctVal)
const bool isBadPacket() const
enum _ocsd_etmv4_i_pkt_type ocsd_etmv4_i_pkt_type
OpenCSD : Standard printable element base class.
void setTraceInfoKey(const uint32_t keyVal)
void setCondIF1(uint32_t const cond_key)
const bool getAddr64Bit() const
const ocsd_etmv4_i_pkt_type getType() const
void setTraceInfoSpec(const uint32_t specVal)
ETMv4 Address packet values stackThis class represents a stack of recent broadcast address values - u...
void setCondRF3(const uint16_t tokens)
const int getCancelElem() const
void updateErrType(const ocsd_etmv4_i_pkt_type err_pkt_type, const uint8_t val=0)
const int getNumAtoms() const
void setExceptionInfo(const uint16_t excep_type, const uint8_t addr_interp, const uint8_t m_fault_pending, const uint8_t m_type)
void setCycleCount(const uint32_t value)
void setAddressExactMatch(const uint8_t idx)
const ocsd_pkt_atom & getAtom() const
void setCondRF4(const uint8_t token)
void setCondIF3(uint8_t const num_c_elem, const bool finalElem)
void setTraceInfo(const uint32_t infoVal)
void updateShortAddress(const uint32_t addr, const uint8_t IS, const uint8_t update_bits)
void clearTraceInfo()
clear all the trace info data prior to setting for new trace info packet.
void setType(const ocsd_etmv4_i_pkt_type pkt_type)
void set64BitAddress(const uint64_t addr, const uint8_t IS)
enum _ocsd_pkt_atm_type ocsd_pkt_atm_type
void setContextInfo(const bool update, const uint8_t EL=0, const uint8_t NS=0, const uint8_t SF=0, const uint8_t NSE=0)
Class to provide trace element strings for printing.
const uint32_t getP0Key() const
const uint8_t & getAddrMatch() const
void setContextVMID(const uint32_t VMID)
void setQType(const bool has_count, const uint32_t count, const bool has_addr, const bool addr_match, const uint8_t type)
void setCondRF1(const uint32_t key[2], const uint8_t res[2], const uint8_t CI[2], const bool set2Keys)
#define OCSD_BIT_MASK(bits)
void setCondIF2(uint8_t const c_elem_idx)
ETMv4 Instuction Trace Protocol Packet.This class represents a single ETMv4 data trace packet...
const etmv4_context_t & getContext() const
const ocsd_etmv4_i_pkt_type getErrType() const
void setCancelElements(const uint32_t cancel_elem)
void setProtocolVersion(const uint8_t version)
void setEvent(const uint8_t event_val)
const uint8_t & getAddrIS() const
void setTS(const uint64_t value, const uint8_t bits)
void setContextCID(const uint32_t CID)
void push(const ocsd_pkt_vaddr vaddr, const uint8_t isa)
const int getCommitElem() const