1 /*!
2  * \file       trc_frame_deformatter.h
3  * \brief      OpenCSD : De-format CoreSight formatted trace frame.
4  *
5  * \copyright  Copyright (c) 2015, ARM Limited. All Rights Reserved.
6  */
7 
8 /*
9  * Redistribution and use in source and binary forms, with or without modification,
10  * are permitted provided that the following conditions are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  *
19  * 3. Neither the name of the copyright holder nor the names of its contributors
20  * may be used to endorse or promote products derived from this software without
21  * specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26  * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
30  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 #ifndef ARM_TRC_FRAME_DEFORMATTER_H_INCLUDED
35 #define ARM_TRC_FRAME_DEFORMATTER_H_INCLUDED
36 
37 #include "opencsd/ocsd_if_types.h"
38 
39 #include "interfaces/trc_data_raw_in_i.h"
40 #include "comp_attach_pt_t.h"
41 
42 class ITrcRawFrameIn;
43 class ITrcDataMixIDIn;
44 class ITrcSrcIndexCreator;
45 class ITraceErrorLog;
46 class TraceFmtDcdImpl;
47 
48 /** @defgroup ocsd_deformatter  OpenCSD Library : Trace Frame Deformatter
49     @brief CoreSight Formatted Trace Frame  - deformatting functionality.
50 @{*/
51 
52 class TraceFormatterFrameDecoder : public ITrcDataIn
53 {
54 public:
55     TraceFormatterFrameDecoder();
56     TraceFormatterFrameDecoder(int instNum);
57     virtual ~TraceFormatterFrameDecoder();
58 
59     /* the data input interface from the reader */
60     virtual ocsd_datapath_resp_t TraceDataIn(  const ocsd_datapath_op_t op,
61                                                 const ocsd_trc_index_t index,
62                                                 const uint32_t dataBlockSize,
63                                                 const uint8_t *pDataBlock,
64                                                 uint32_t *numBytesProcessed);
65 
66     /* attach a data processor to a stream ID output */
67     componentAttachPt<ITrcDataIn> *getIDStreamAttachPt(uint8_t ID);
68 
69     /* attach a data processor to the raw frame output */
70     componentAttachPt<ITrcRawFrameIn> *getTrcRawFrameAttachPt();
71 
72     componentAttachPt<ITrcSrcIndexCreator> *getTrcSrcIndexAttachPt();
73 
74     componentAttachPt<ITraceErrorLog> *getErrLogAttachPt();
75 
76     /* configuration - set operational mode for incoming stream (has FSYNCS etc) */
77     ocsd_err_t Configure(uint32_t cfg_flags);
78     const uint32_t getConfigFlags() const;
79 
80     /* enable / disable ID streams - default as all enabled */
81     ocsd_err_t OutputFilterIDs(std::vector<uint8_t> &id_list, bool bEnable);
82     ocsd_err_t OutputFilterAllIDs(bool bEnable);
83 
84     /* decode control */
85     ocsd_datapath_resp_t Reset();    /* reset the decode to the start state, drop partial data - propogate to attached components */
86     ocsd_datapath_resp_t Flush();    /* flush existing data if possible, retain state - propogate to attached components */
87 
88 private:
89     TraceFmtDcdImpl *m_pDecoder;
90     int m_instNum;
91 };
92 
93 /** @}*/
94 
95 #endif // ARM_TRC_FRAME_DEFORMATTER_H_INCLUDED
96 
97 /* End of File trc_frame_deformatter.h */