OpenCSD - CoreSight Trace Decode Library  0.14.0
ocsd_dcd_tree.h
Go to the documentation of this file.
1 
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_OCSD_DCD_TREE_H_INCLUDED
37 #define ARM_OCSD_DCD_TREE_H_INCLUDED
38 
39 #include <vector>
40 #include <list>
41 
42 #include "opencsd.h"
43 #include "ocsd_dcd_tree_elem.h"
44 
61 class DecodeTree : public ITrcDataIn
62 {
63 public:
66  DecodeTree();
67  ~DecodeTree();
68 
78  static DecodeTree *CreateDecodeTree(const ocsd_dcd_tree_src_t src_type, const uint32_t formatterCfgFlags);
79 
81  static void DestroyDecodeTree(DecodeTree *p_dcd_tree);
82 
89  static ocsdDefaultErrorLogger* getDefaultErrorLogger() { return &s_error_logger; };
90 
92  static ITraceErrorLog *getCurrentErrorLogI() { return s_i_error_logger; };
93 
95  static void setAlternateErrorLogger(ITraceErrorLog *p_error_logger);
96 
98  std::vector<ItemPrinter *> &getPrinterList() { return m_printer_list; };
99 
101  ocsd_err_t addPacketPrinter(uint8_t CSID, bool bMonitor, ItemPrinter **ppPrinter);
102 
104  ocsd_err_t addRawFramePrinter(RawFramePrinter **ppPrinter, uint32_t flags);
105 
107  ocsd_err_t addGenElemPrinter(TrcGenericElementPrinter **ppPrinter);
108 
109 
110 
122  const ocsd_trc_index_t index,
123  const uint32_t dataBlockSize,
124  const uint8_t *pDataBlock,
125  uint32_t *numBytesProcessed);
126 
135  void setGenTraceElemOutI(ITrcGenElemIn *i_gen_trace_elem);
136 
138  ITrcGenElemIn *getGenTraceElemOutI() const { return m_i_gen_elem_out; };
139 
157  ocsd_err_t createDecoder(const std::string &decoderName, const int createFlags, const CSConfig *pConfig);
158 
159  /* */
169  ocsd_err_t removeDecoder(const uint8_t CSID);
170 
171 
172 /* get decoder elements currently in use */
173 
177  DecodeTreeElement *getDecoderElement(const uint8_t CSID) const;
178  /* iterate decoder elements */
179 
185  DecodeTreeElement *getFirstElement(uint8_t &elemID);
191  DecodeTreeElement *getNextElement(uint8_t &elemID);
192 
193 /* set key interfaces - attach / replace on any existing tree components */
194 
200  void setInstrDecoder(IInstrDecode *i_instr_decode);
207  void setMemAccessI(ITargetMemAccess *i_mem_access);
208 
209 
238  /* */
247 
252  TrcMemAccMapper *getMemAccMapper() const { return m_default_mapper; };
253 
260  void setExternMemAccMapper(TrcMemAccMapper * pMapper);
261 
265  const bool hasMemAccMapper() const { return (bool)(m_default_mapper != 0); };
266 
267  void logMappedRanges();
268 
288  ocsd_err_t addBufferMemAcc(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const uint8_t *p_mem_buffer, const uint32_t mem_length);
289 
299  ocsd_err_t addBinFileMemAcc(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const std::string &filepath);
300 
314  ocsd_err_t addBinFileRegionMemAcc(const ocsd_file_mem_region_t *region_array, const int num_regions, const ocsd_mem_space_acc_t mem_space, const std::string &filepath);
315 
316 
330  ocsd_err_t updateBinFileRegionMemAcc(const ocsd_file_mem_region_t *region_array, const int num_regions, const ocsd_mem_space_acc_t mem_space, const std::string &filepath);
331 
345  ocsd_err_t addCallbackMemAcc(const ocsd_vaddr_t st_address, const ocsd_vaddr_t en_address, const ocsd_mem_space_acc_t mem_space, Fn_MemAcc_CB p_cb_func, const void *p_context);
346  ocsd_err_t addCallbackIDMemAcc(const ocsd_vaddr_t st_address, const ocsd_vaddr_t en_address, const ocsd_mem_space_acc_t mem_space, Fn_MemAccID_CB p_cb_func, const void *p_context);
347 
356  ocsd_err_t removeMemAccByAddress(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space);
357 
363  TraceFormatterFrameDecoder *getFrameDeformatter() const { return m_frame_deformatter_root; };
365 
366 
375  ocsd_err_t setIDFilter(std::vector<uint8_t> &ids); // only supplied IDs will be decoded
376 
378 
381 private:
382  bool initialise(const ocsd_dcd_tree_src_t type, uint32_t formatterCfgFlags);
383  const bool usingFormatter() const { return (bool)(m_dcd_tree_type == OCSD_TRC_SRC_FRAME_FORMATTED); };
384  void setSingleRoot(TrcPktProcI *pComp);
385  ocsd_err_t createDecodeElement(const uint8_t CSID);
386  void destroyDecodeElement(const uint8_t CSID);
387  void destroyMemAccMapper();
388  ocsd_err_t initCallbackMemAcc(const ocsd_vaddr_t st_address, const ocsd_vaddr_t en_address,
389  const ocsd_mem_space_acc_t mem_space, void *p_cb_func, bool IDfn, const void *p_context);
390 
391 
392  ocsd_dcd_tree_src_t m_dcd_tree_type;
393 
394  IInstrDecode *m_i_instr_decode;
395  ITargetMemAccess *m_i_mem_access;
396  ITrcGenElemIn *m_i_gen_elem_out;
397 
398  ITrcDataIn* m_i_decoder_root;
400  TraceFormatterFrameDecoder *m_frame_deformatter_root;
401 
402  DecodeTreeElement *m_decode_elements[0x80];
403 
404  uint8_t m_decode_elem_iter;
405 
406  TrcMemAccMapper *m_default_mapper;
407  bool m_created_mapper;
408 
409  std::vector<ItemPrinter *> m_printer_list;
410 
411  /* global error logger - all sources */
412  static ITraceErrorLog *s_i_error_logger;
413  static std::list<DecodeTree *> s_trace_dcd_trees;
414 
416  static ocsdDefaultErrorLogger s_error_logger;
417 
419  static TrcIDecode s_instruction_decoder;
420 };
421 
424 #endif // ARM_OCSD_DCD_TREE_H_INCLUDED
425 
426 /* End of File ocsd_dcd_tree.h */
DecodeTree::updateBinFileRegionMemAcc
ocsd_err_t updateBinFileRegionMemAcc(const ocsd_file_mem_region_t *region_array, const int num_regions, const ocsd_mem_space_acc_t mem_space, const std::string &filepath)
DecodeTree::~DecodeTree
~DecodeTree()
default destructor
ocsd_datapath_resp_t
enum _ocsd_datapath_resp_t ocsd_datapath_resp_t
TraceFormatterFrameDecoder
Definition: trc_frame_deformatter.h:52
DecodeTree::setExternMemAccMapper
void setExternMemAccMapper(TrcMemAccMapper *pMapper)
DecodeTree::createMemAccMapper
ocsd_err_t createMemAccMapper(memacc_mapper_t type=MEMACC_MAP_GLOBAL)
Fn_MemAcc_CB
uint32_t(* Fn_MemAcc_CB)(const void *p_context, const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const uint32_t reqBytes, uint8_t *byteBuffer)
Definition: ocsd_if_types.h:460
DecodeTree::TraceDataIn
virtual ocsd_datapath_resp_t TraceDataIn(const ocsd_datapath_op_t op, const ocsd_trc_index_t index, const uint32_t dataBlockSize, const uint8_t *pDataBlock, uint32_t *numBytesProcessed)
Trace Data input interface (ITrcDataIn)
OCSD_TRC_SRC_FRAME_FORMATTED
@ OCSD_TRC_SRC_FRAME_FORMATTED
Definition: ocsd_if_types.h:239
DecodeTree::hasMemAccMapper
const bool hasMemAccMapper() const
Definition: ocsd_dcd_tree.h:265
DecodeTree::CreateDecodeTree
static DecodeTree * CreateDecodeTree(const ocsd_dcd_tree_src_t src_type, const uint32_t formatterCfgFlags)
Create a decode tree. Automatically creates a trace frame deformatter if required and a default error...
CSConfig
Base class for configuration data on CoreSight trace component.
Definition: trc_cs_config.h:49
DecodeTree::clearIDFilter
ocsd_err_t clearIDFilter()
remove filter, all IDs will be decoded
DecodeTree::getGenTraceElemOutI
ITrcGenElemIn * getGenTraceElemOutI() const
Return the connected generic element interface.
Definition: ocsd_dcd_tree.h:138
ITraceErrorLog
Error logging interface.
Definition: trc_error_log_i.h:56
DecodeTree::getMemAccMapper
TrcMemAccMapper * getMemAccMapper() const
Definition: ocsd_dcd_tree.h:252
DecodeTree::getNextElement
DecodeTreeElement * getNextElement(uint8_t &elemID)
DecodeTree
Class to manage the decoding of data from a single trace sink .
Definition: ocsd_dcd_tree.h:61
ocsd_dcd_tree_src_t
enum _ocsd_dcd_tree_src_t ocsd_dcd_tree_src_t
DecodeTree::setInstrDecoder
void setInstrDecoder(IInstrDecode *i_instr_decode)
DecodeTree::removeDecoder
ocsd_err_t removeDecoder(const uint8_t CSID)
MEMACC_MAP_GLOBAL
@ MEMACC_MAP_GLOBAL
Definition: trc_mem_acc_mapper.h:47
ITrcGenElemIn
Interface for the input of generic trace elements.
Definition: trc_gen_elem_in_i.h:51
ocsd_vaddr_t
uint64_t ocsd_vaddr_t
Definition: ocsd_if_types.h:308
DecodeTree::addPacketPrinter
ocsd_err_t addPacketPrinter(uint8_t CSID, bool bMonitor, ItemPrinter **ppPrinter)
DecodeTree::getCurrentErrorLogI
static ITraceErrorLog * getCurrentErrorLogI()
Definition: ocsd_dcd_tree.h:92
DecodeTree::addCallbackMemAcc
ocsd_err_t addCallbackMemAcc(const ocsd_vaddr_t st_address, const ocsd_vaddr_t en_address, const ocsd_mem_space_acc_t mem_space, Fn_MemAcc_CB p_cb_func, const void *p_context)
ocsd_err_t
enum _ocsd_err_t ocsd_err_t
DecodeTree::addCallbackIDMemAcc
ocsd_err_t addCallbackIDMemAcc(const ocsd_vaddr_t st_address, const ocsd_vaddr_t en_address, const ocsd_mem_space_acc_t mem_space, Fn_MemAccID_CB p_cb_func, const void *p_context)
ocsd_dcd_tree_elem.h
OpenCSD : Decode tree element.
DecodeTree::addBinFileRegionMemAcc
ocsd_err_t addBinFileRegionMemAcc(const ocsd_file_mem_region_t *region_array, const int num_regions, const ocsd_mem_space_acc_t mem_space, const std::string &filepath)
opencsd.h
OpenCSD: Open CoreSight Trace Decoder -Master include file for C++ library.
ITargetMemAccess
Interface to target memory access.
Definition: trc_tgt_mem_access_i.h:56
ocsd_datapath_op_t
enum _ocsd_datapath_op_t ocsd_datapath_op_t
DecodeTree::getDefaultErrorLogger
static ocsdDefaultErrorLogger * getDefaultErrorLogger()
The library default error logger.
Definition: ocsd_dcd_tree.h:89
memacc_mapper_t
enum _memacc_mapper_t memacc_mapper_t
DecodeTree::getDecoderElement
DecodeTreeElement * getDecoderElement(const uint8_t CSID) const
IInstrDecode
Interface class to an instruction opcode decoder.
Definition: trc_instr_decode_i.h:47
Fn_MemAccID_CB
uint32_t(* Fn_MemAccID_CB)(const void *p_context, const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const uint8_t trcID, const uint32_t reqBytes, uint8_t *byteBuffer)
Definition: ocsd_if_types.h:484
DecodeTree::addBufferMemAcc
ocsd_err_t addBufferMemAcc(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const uint8_t *p_mem_buffer, const uint32_t mem_length)
TrcMemAccMapper
Definition: trc_mem_acc_mapper.h:50
DecodeTreeElement
Decode tree element.
Definition: ocsd_dcd_tree_elem.h:68
ocsd_trc_index_t
uint32_t ocsd_trc_index_t
Definition: ocsd_if_types.h:67
DecodeTree::getFirstElement
DecodeTreeElement * getFirstElement(uint8_t &elemID)
DecodeTree::setAlternateErrorLogger
static void setAlternateErrorLogger(ITraceErrorLog *p_error_logger)
ocsd_mem_space_acc_t
enum _ocsd_mem_space_acc_t ocsd_mem_space_acc_t
DecodeTree::getPrinterList
std::vector< ItemPrinter * > & getPrinterList()
Definition: ocsd_dcd_tree.h:98
_ocsd_file_mem_region
Definition: ocsd_if_types.h:488
DecodeTree::setIDFilter
ocsd_err_t setIDFilter(std::vector< uint8_t > &ids)
ID filtering - sets the output filter on the trace deformatter.
DecodeTree::logMappedRanges
void logMappedRanges()
Log the mapped memory ranges to the default message logger.
DecodeTree::createDecoder
ocsd_err_t createDecoder(const std::string &decoderName, const int createFlags, const CSConfig *pConfig)
DecodeTree::setGenTraceElemOutI
void setGenTraceElemOutI(ITrcGenElemIn *i_gen_trace_elem)
Decoded Trace output.
ocsdDefaultErrorLogger
Definition: ocsd_error_logger.h:46
DecodeTree::addGenElemPrinter
ocsd_err_t addGenElemPrinter(TrcGenericElementPrinter **ppPrinter)
DecodeTree::addBinFileMemAcc
ocsd_err_t addBinFileMemAcc(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const std::string &filepath)
DecodeTree::removeMemAccByAddress
ocsd_err_t removeMemAccByAddress(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space)
TrcPktProcI
Base Packet processing interface.
Definition: trc_pkt_proc_base.h:64
DecodeTree::setMemAccessI
void setMemAccessI(ITargetMemAccess *i_mem_access)
DecodeTree::DestroyDecodeTree
static void DestroyDecodeTree(DecodeTree *p_dcd_tree)
Destroy a decode tree.
DecodeTree::addRawFramePrinter
ocsd_err_t addRawFramePrinter(RawFramePrinter **ppPrinter, uint32_t flags)
DecodeTree::DecodeTree
DecodeTree()
default constructor
DecodeTree::getFrameDeformatter
TraceFormatterFrameDecoder * getFrameDeformatter() const
Get the Trace Frame de-mux.
Definition: ocsd_dcd_tree.h:364
ITrcDataIn
Interface to either trace data frame deformatter or packet processor.
Definition: trc_data_raw_in_i.h:52