OpenCSD - CoreSight Trace Decode Library 1.5.1
Loading...
Searching...
No Matches
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
61class DecodeTree : public ITrcDataIn
62{
63public:
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
405private:
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.
Decode tree element.
Class to manage the decoding of data from a single trace sink .
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 * getFirstElement(uint8_t &elemID)
ITrcGenElemIn * getGenTraceElemOutI() const
Return the connected generic element interface.
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)
DecodeTreeElement * getDecoderElement(const uint8_t CSID) const
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)
static ITraceErrorLog * getCurrentErrorLogI()
DecodeTree()
default constructor
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)
TraceFormatterFrameDecoder * getFrameDeformatter() const
Get the Trace Frame de-mux.
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)
DecodeTreeElement * getNextElement(uint8_t &elemID)
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)
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...
std::vector< ItemPrinter * > & getPrinterList()
void setExternMemAccMapper(TrcMemAccMapper *pMapper)
ocsd_err_t resetDecoderStats(const uint8_t CSID)
static ocsdDefaultErrorLogger * getDefaultErrorLogger()
The library default error logger.
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)
ocsd_err_t addRawFramePrinter(RawFramePrinter **ppPrinter, uint32_t flags)
ocsd_err_t addGenElemPrinter(TrcGenericElementPrinter **ppPrinter)
static void DestroyDecodeTree(DecodeTree *p_dcd_tree)
Destroy a decode tree.
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
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