]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/opencsd/decoder/source/etmv4/trc_pkt_proc_etmv4.cpp
Re-add opencsd as a vendor import from the dist directory
[FreeBSD/FreeBSD.git] / contrib / opencsd / decoder / source / etmv4 / trc_pkt_proc_etmv4.cpp
1 /*
2  * \file       trc_pkt_proc_etmv4.cpp
3  * \brief      OpenCSD : 
4  * 
5  * \copyright  Copyright (c) 2015, ARM Limited. All Rights Reserved.
6  */
7
8
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 #include "opencsd/etmv4/trc_pkt_proc_etmv4.h"
37 #include "trc_pkt_proc_etmv4i_impl.h"
38 #include "common/ocsd_error.h"
39
40 #ifdef __GNUC__
41 // G++ doesn't like the ## pasting
42 #define ETMV4I_PKTS_NAME "PKTP_ETMV4I"
43 #else
44 // VC++ is fine
45 #define ETMV4I_PKTS_NAME OCSD_CMPNAME_PREFIX_PKTPROC##"_ETMV4I"
46 #endif
47
48 static const uint32_t ETMV4_SUPPORTED_OP_FLAGS = OCSD_OPFLG_PKTPROC_COMMON;
49
50 /***************************************************************************/
51 /*******************ETM V4 INSTRUCTION *************************************/
52 /***************************************************************************/
53
54 TrcPktProcEtmV4I::TrcPktProcEtmV4I() : TrcPktProcBase(ETMV4I_PKTS_NAME), 
55     m_pProcessor(0)
56 {
57     m_supported_op_flags = ETMV4_SUPPORTED_OP_FLAGS;
58 }
59
60 TrcPktProcEtmV4I::TrcPktProcEtmV4I(int instIDNum) : TrcPktProcBase(ETMV4I_PKTS_NAME, instIDNum),
61     m_pProcessor(0)
62 {
63     m_supported_op_flags = ETMV4_SUPPORTED_OP_FLAGS;
64 }
65
66 TrcPktProcEtmV4I::~TrcPktProcEtmV4I()
67 {
68     if(m_pProcessor)
69         delete m_pProcessor;
70     m_pProcessor = 0;
71 }
72
73 ocsd_err_t TrcPktProcEtmV4I::onProtocolConfig()
74 {
75     if(m_pProcessor == 0)
76     {
77         m_pProcessor = new (std::nothrow) EtmV4IPktProcImpl();
78         if(m_pProcessor == 0)
79         {           
80             LogError(ocsdError(OCSD_ERR_SEV_ERROR,OCSD_ERR_MEM));
81             return OCSD_ERR_MEM;
82         }
83         m_pProcessor->Initialise(this);
84     }
85     return m_pProcessor->Configure(m_config);
86 }
87
88 ocsd_datapath_resp_t TrcPktProcEtmV4I::processData(  const ocsd_trc_index_t index,
89                                                 const uint32_t dataBlockSize,
90                                                 const uint8_t *pDataBlock,
91                                                 uint32_t *numBytesProcessed)
92 {
93     if(m_pProcessor)
94         return m_pProcessor->processData(index,dataBlockSize,pDataBlock,numBytesProcessed);
95     return OCSD_RESP_FATAL_NOT_INIT;
96 }
97
98 ocsd_datapath_resp_t TrcPktProcEtmV4I::onEOT()
99 {
100     if(m_pProcessor)
101         return m_pProcessor->onEOT();
102     return OCSD_RESP_FATAL_NOT_INIT;
103 }
104
105 ocsd_datapath_resp_t TrcPktProcEtmV4I::onReset()
106 {
107     if(m_pProcessor)
108         return m_pProcessor->onReset();
109     return OCSD_RESP_FATAL_NOT_INIT;
110 }
111
112 ocsd_datapath_resp_t TrcPktProcEtmV4I::onFlush()
113 {
114     if(m_pProcessor)
115         return m_pProcessor->onFlush();
116     return OCSD_RESP_FATAL_NOT_INIT;
117 }
118
119 const bool TrcPktProcEtmV4I::isBadPacket() const
120 {
121     if(m_pProcessor)
122         return m_pProcessor->isBadPacket();
123     return false;
124 }
125
126 /* End of File trc_pkt_proc_etmv4.cpp */