OpenCSD - CoreSight Trace Decode Library  0.12.1
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 */
enum _ocsd_datapath_op_t ocsd_datapath_op_t
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 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.