OpenCSD - CoreSight Trace Decode Library  1.3.3
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 
182  ocsd_err_t getDecoderStats(const uint8_t CSID, ocsd_decode_stats_t **p_stats_block);
183 
194  ocsd_err_t resetDecoderStats(const uint8_t CSID);
195 
196 /* get decoder elements currently in use */
197 
201  DecodeTreeElement *getDecoderElement(const uint8_t CSID) const;
202  /* iterate decoder elements */
203 
209  DecodeTreeElement *getFirstElement(uint8_t &elemID);
215  DecodeTreeElement *getNextElement(uint8_t &elemID);
216 
217 /* set key interfaces - attach / replace on any existing tree components */
218 
224  void setInstrDecoder(IInstrDecode *i_instr_decode);
231  void setMemAccessI(ITargetMemAccess *i_mem_access);
232 
233 
262  /* */
271 
276  TrcMemAccMapper *getMemAccMapper() const { return m_default_mapper; };
277 
284  void setExternMemAccMapper(TrcMemAccMapper * pMapper);
285 
289  const bool hasMemAccMapper() const { return (bool)(m_default_mapper != 0); };
290 
291  void logMappedRanges();
292 
312  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);
313 
323  ocsd_err_t addBinFileMemAcc(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const std::string &filepath);
324 
338  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);
339 
340 
354  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);
355 
369  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);
370  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);
371 
380  ocsd_err_t removeMemAccByAddress(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space);
381 
387  TraceFormatterFrameDecoder *getFrameDeformatter() const { return m_frame_deformatter_root; };
389 
390 
399  ocsd_err_t setIDFilter(std::vector<uint8_t> &ids); // only supplied IDs will be decoded
400 
402 
405 private:
406  bool initialise(const ocsd_dcd_tree_src_t type, uint32_t formatterCfgFlags);
407  const bool usingFormatter() const { return (bool)(m_dcd_tree_type == OCSD_TRC_SRC_FRAME_FORMATTED); };
408  void setSingleRoot(TrcPktProcI *pComp);
409  ocsd_err_t createDecodeElement(const uint8_t CSID);
410  void destroyDecodeElement(const uint8_t CSID);
411  void destroyMemAccMapper();
412  ocsd_err_t initCallbackMemAcc(const ocsd_vaddr_t st_address, const ocsd_vaddr_t en_address,
413  const ocsd_mem_space_acc_t mem_space, void *p_cb_func, bool IDfn, const void *p_context);
414  TrcPktProcI *getPktProcI(const uint8_t CSID);
415 
416  ocsd_dcd_tree_src_t m_dcd_tree_type;
417 
418  IInstrDecode *m_i_instr_decode;
419  ITargetMemAccess *m_i_mem_access;
420  ITrcGenElemIn *m_i_gen_elem_out;
421 
422  ITrcDataIn* m_i_decoder_root;
424  TraceFormatterFrameDecoder *m_frame_deformatter_root;
425 
426  DecodeTreeElement *m_decode_elements[0x80];
427 
428  uint8_t m_decode_elem_iter;
429 
430  TrcMemAccMapper *m_default_mapper;
431  bool m_created_mapper;
432 
433  std::vector<ItemPrinter *> m_printer_list;
434 
435  /* global error logger - all sources */
436  static ITraceErrorLog *s_i_error_logger;
437  static std::list<DecodeTree *> s_trace_dcd_trees;
438 
440  static ocsdDefaultErrorLogger s_error_logger;
441 
443  static TrcIDecode s_instruction_decoder;
444 
446  ocsd_demux_stats_t m_demux_stats;
447 };
448 
451 #endif // ARM_OCSD_DCD_TREE_H_INCLUDED
452 
453 /* End of File ocsd_dcd_tree.h */
enum _ocsd_datapath_op_t ocsd_datapath_op_t
ocsd_err_t getDecoderStats(const uint8_t CSID, ocsd_decode_stats_t **p_stats_block)
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)
static void DestroyDecodeTree(DecodeTree *p_dcd_tree)
Destroy a decode tree.
const bool hasMemAccMapper() const
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)
ocsd_err_t setIDFilter(std::vector< uint8_t > &ids)
ID filtering - sets the output filter on the trace deformatter.
ocsd_err_t addRawFramePrinter(RawFramePrinter **ppPrinter, uint32_t flags)
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_err_t clearIDFilter()
remove filter, all IDs will be decoded
void setMemAccessI(ITargetMemAccess *i_mem_access)
Interface to target memory access.
DecodeTreeElement * getNextElement(uint8_t &elemID)
void setExternMemAccMapper(TrcMemAccMapper *pMapper)
Decode tree element.
uint64_t ocsd_vaddr_t
Class to manage the decoding of data from a single trace sink .
Definition: ocsd_dcd_tree.h:61
ITrcGenElemIn * getGenTraceElemOutI() const
Return the connected generic element interface.
enum _ocsd_datapath_resp_t ocsd_datapath_resp_t
std::vector< ItemPrinter * > & getPrinterList()
Definition: ocsd_dcd_tree.h:98
DecodeTreeElement * getDecoderElement(const uint8_t CSID) const
void logMappedRanges()
Log the mapped memory ranges to the default message logger.
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)
ocsd_err_t removeDecoder(const uint8_t CSID)
ocsd_err_t resetDecoderStats(const uint8_t CSID)
ocsd_err_t addPacketPrinter(uint8_t CSID, bool bMonitor, ItemPrinter **ppPrinter)
ocsd_err_t removeMemAccByAddress(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space)
enum _ocsd_dcd_tree_src_t ocsd_dcd_tree_src_t
static ocsdDefaultErrorLogger * getDefaultErrorLogger()
The library default error logger.
Definition: ocsd_dcd_tree.h:89
Interface class to an instruction opcode decoder.
enum _ocsd_err_t ocsd_err_t
OpenCSD: Open CoreSight Trace Decoder -Master include file for C++ library.
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...
Interface to either trace data frame deformatter or packet processor.
Interface for the input of generic trace elements.
ocsd_err_t addGenElemPrinter(TrcGenericElementPrinter **ppPrinter)
void setGenTraceElemOutI(ITrcGenElemIn *i_gen_trace_elem)
Decoded Trace output.
Base class for configuration data on CoreSight trace component.
Definition: trc_cs_config.h:49
enum _ocsd_mem_space_acc_t ocsd_mem_space_acc_t
Base Packet processing interface.
DecodeTreeElement * getFirstElement(uint8_t &elemID)
TrcMemAccMapper * getMemAccMapper() const
enum _memacc_mapper_t memacc_mapper_t
void setInstrDecoder(IInstrDecode *i_instr_decode)
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)
ocsd_err_t addBinFileMemAcc(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const std::string &filepath)
Error logging interface.This class provides a standard interface to the decoder error logger for all ...
uint32_t ocsd_trc_index_t
Definition: ocsd_if_types.h:67
DecodeTree()
default constructor
OpenCSD : Decode tree element.
static void setAlternateErrorLogger(ITraceErrorLog *p_error_logger)
ocsd_err_t createDecoder(const std::string &decoderName, const int createFlags, const CSConfig *pConfig)
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_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)
~DecodeTree()
default destructor
ocsd_err_t createMemAccMapper(memacc_mapper_t type=MEMACC_MAP_GLOBAL)
static ITraceErrorLog * getCurrentErrorLogI()
Definition: ocsd_dcd_tree.h:92
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)
TraceFormatterFrameDecoder * getFrameDeformatter() const
Get the Trace Frame de-mux.