OpenCSD - CoreSight Trace Decode Library  1.0.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:
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 
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 
261 
265  const bool hasMemAccMapper() const { return (bool)(m_default_mapper != 0); };
266 
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 
357 
364  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 */
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.
void setExternMemAccMapper(TrcMemAccMapper *pMapper)
DecodeTreeElement * getDecoderElement(const uint8_t CSID) const
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