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:
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 
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 
285 
289  const bool hasMemAccMapper() const { return (bool)(m_default_mapper != 0); };
290 
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 
381 
388  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 */
Base class for configuration data on CoreSight trace component.
Definition: trc_cs_config.h:50
Decode tree element.
Class to manage the decoding of data from a single trace sink .
Definition: ocsd_dcd_tree.h:62
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)
DecodeTreeElement * getNextElement(uint8_t &elemID)
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 removeDecoder(const uint8_t CSID)
const bool hasMemAccMapper() const
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)
TraceFormatterFrameDecoder * getFrameDeformatter() const
Get the Trace Frame de-mux.
ocsd_err_t setIDFilter(std::vector< uint8_t > &ids)
ID filtering - sets the output filter on the trace deformatter.
ocsd_err_t addBinFileMemAcc(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const std::string &filepath)
DecodeTreeElement * getFirstElement(uint8_t &elemID)
DecodeTree()
default constructor
static ocsdDefaultErrorLogger * getDefaultErrorLogger()
The library default error logger.
Definition: ocsd_dcd_tree.h:89
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 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)
ocsd_err_t createDecoder(const std::string &decoderName, const int createFlags, const CSConfig *pConfig)
static void setAlternateErrorLogger(ITraceErrorLog *p_error_logger)
ocsd_err_t removeMemAccByAddress(const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space)
void setInstrDecoder(IInstrDecode *i_instr_decode)
void logMappedRanges()
Log the mapped memory ranges to the default message logger.
ocsd_err_t getDecoderStats(const uint8_t CSID, ocsd_decode_stats_t **p_stats_block)
void setExternMemAccMapper(TrcMemAccMapper *pMapper)
DecodeTreeElement * getDecoderElement(const uint8_t CSID) const
ocsd_err_t resetDecoderStats(const uint8_t CSID)
void setMemAccessI(ITargetMemAccess *i_mem_access)
void setGenTraceElemOutI(ITrcGenElemIn *i_gen_trace_elem)
Decoded Trace output.
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)
ocsd_err_t createMemAccMapper(memacc_mapper_t type=MEMACC_MAP_GLOBAL)
ocsd_err_t clearIDFilter()
remove filter, all IDs will be decoded
ocsd_err_t addPacketPrinter(uint8_t CSID, bool bMonitor, ItemPrinter **ppPrinter)
static ITraceErrorLog * getCurrentErrorLogI()
Definition: ocsd_dcd_tree.h:92
ocsd_err_t addRawFramePrinter(RawFramePrinter **ppPrinter, uint32_t flags)
ocsd_err_t addGenElemPrinter(TrcGenericElementPrinter **ppPrinter)
std::vector< ItemPrinter * > & getPrinterList()
Definition: ocsd_dcd_tree.h:98
static void DestroyDecodeTree(DecodeTree *p_dcd_tree)
Destroy a decode tree.
ITrcGenElemIn * getGenTraceElemOutI() const
Return the connected generic element interface.
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...
TrcMemAccMapper * getMemAccMapper() const
~DecodeTree()
default destructor
Interface class to an instruction opcode decoder.
Interface to target memory access.
Error logging interface.
Interface to either trace data frame deformatter or packet processor.
Interface for the input of generic trace elements.
Base Packet processing interface.
enum _ocsd_dcd_tree_src_t ocsd_dcd_tree_src_t
uint32_t ocsd_trc_index_t
Definition: ocsd_if_types.h:67
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)
enum _ocsd_datapath_resp_t ocsd_datapath_resp_t
enum _ocsd_mem_space_acc_t ocsd_mem_space_acc_t
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)
enum _ocsd_datapath_op_t ocsd_datapath_op_t
enum _ocsd_err_t ocsd_err_t
uint64_t ocsd_vaddr_t
@ OCSD_TRC_SRC_FRAME_FORMATTED
OpenCSD : Decode tree element.
OpenCSD: Open CoreSight Trace Decoder -Master include file for C++ library.
@ MEMACC_MAP_GLOBAL
enum _memacc_mapper_t memacc_mapper_t