xref: /freebsd-src/contrib/opencsd/decoder/source/etmv3/trc_pkt_proc_etmv3.cpp (revision c120c5646da1a1d2c4d90fd069a7e2a8d559eb46)
1*c120c564SAndrew Turner /*
2*c120c564SAndrew Turner  * \file       trc_pkt_proc_etmv3.cpp
3*c120c564SAndrew Turner  * \brief      OpenCSD :
4*c120c564SAndrew Turner  *
5*c120c564SAndrew Turner  * \copyright  Copyright (c) 2015, ARM Limited. All Rights Reserved.
6*c120c564SAndrew Turner  */
7*c120c564SAndrew Turner 
8*c120c564SAndrew Turner 
9*c120c564SAndrew Turner /*
10*c120c564SAndrew Turner  * Redistribution and use in source and binary forms, with or without modification,
11*c120c564SAndrew Turner  * are permitted provided that the following conditions are met:
12*c120c564SAndrew Turner  *
13*c120c564SAndrew Turner  * 1. Redistributions of source code must retain the above copyright notice,
14*c120c564SAndrew Turner  * this list of conditions and the following disclaimer.
15*c120c564SAndrew Turner  *
16*c120c564SAndrew Turner  * 2. Redistributions in binary form must reproduce the above copyright notice,
17*c120c564SAndrew Turner  * this list of conditions and the following disclaimer in the documentation
18*c120c564SAndrew Turner  * and/or other materials provided with the distribution.
19*c120c564SAndrew Turner  *
20*c120c564SAndrew Turner  * 3. Neither the name of the copyright holder nor the names of its contributors
21*c120c564SAndrew Turner  * may be used to endorse or promote products derived from this software without
22*c120c564SAndrew Turner  * specific prior written permission.
23*c120c564SAndrew Turner  *
24*c120c564SAndrew Turner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
25*c120c564SAndrew Turner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26*c120c564SAndrew Turner  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27*c120c564SAndrew Turner  * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
28*c120c564SAndrew Turner  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29*c120c564SAndrew Turner  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30*c120c564SAndrew Turner  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31*c120c564SAndrew Turner  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32*c120c564SAndrew Turner  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33*c120c564SAndrew Turner  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*c120c564SAndrew Turner  */
35*c120c564SAndrew Turner 
36*c120c564SAndrew Turner #include "opencsd/etmv3/trc_pkt_proc_etmv3.h"
37*c120c564SAndrew Turner #include "trc_pkt_proc_etmv3_impl.h"
38*c120c564SAndrew Turner #include "common/ocsd_error.h"
39*c120c564SAndrew Turner 
40*c120c564SAndrew Turner #ifdef __GNUC__
41*c120c564SAndrew Turner // G++ doesn't like the ## pasting
42*c120c564SAndrew Turner #define ETMV3_PKTS_NAME "PKTP_ETMV3"
43*c120c564SAndrew Turner #else
44*c120c564SAndrew Turner #define ETMV3_PKTS_NAME OCSD_CMPNAME_PREFIX_PKTPROC##"_"##OCSD_BUILTIN_DCD_ETMV3
45*c120c564SAndrew Turner #endif
46*c120c564SAndrew Turner 
47*c120c564SAndrew Turner static const uint32_t ETMV3_SUPPORTED_OP_FLAGS = OCSD_OPFLG_PKTPROC_COMMON |
48*c120c564SAndrew Turner     ETMV3_OPFLG_UNFORMATTED_SOURCE;
49*c120c564SAndrew Turner 
TrcPktProcEtmV3()50*c120c564SAndrew Turner TrcPktProcEtmV3::TrcPktProcEtmV3() : TrcPktProcBase(ETMV3_PKTS_NAME),
51*c120c564SAndrew Turner     m_pProcessor(0)
52*c120c564SAndrew Turner {
53*c120c564SAndrew Turner     m_supported_op_flags = ETMV3_SUPPORTED_OP_FLAGS;
54*c120c564SAndrew Turner }
55*c120c564SAndrew Turner 
TrcPktProcEtmV3(int instIDNum)56*c120c564SAndrew Turner TrcPktProcEtmV3::TrcPktProcEtmV3(int instIDNum) : TrcPktProcBase(ETMV3_PKTS_NAME, instIDNum),
57*c120c564SAndrew Turner     m_pProcessor(0)
58*c120c564SAndrew Turner {
59*c120c564SAndrew Turner     m_supported_op_flags = ETMV3_SUPPORTED_OP_FLAGS;
60*c120c564SAndrew Turner }
61*c120c564SAndrew Turner 
~TrcPktProcEtmV3()62*c120c564SAndrew Turner TrcPktProcEtmV3::~TrcPktProcEtmV3()
63*c120c564SAndrew Turner {
64*c120c564SAndrew Turner     if(m_pProcessor)
65*c120c564SAndrew Turner         delete m_pProcessor;
66*c120c564SAndrew Turner     m_pProcessor = 0;
67*c120c564SAndrew Turner }
68*c120c564SAndrew Turner 
onProtocolConfig()69*c120c564SAndrew Turner ocsd_err_t TrcPktProcEtmV3::onProtocolConfig()
70*c120c564SAndrew Turner {
71*c120c564SAndrew Turner     if(m_pProcessor == 0)
72*c120c564SAndrew Turner     {
73*c120c564SAndrew Turner         m_pProcessor = new (std::nothrow) EtmV3PktProcImpl();
74*c120c564SAndrew Turner         if(m_pProcessor == 0)
75*c120c564SAndrew Turner         {
76*c120c564SAndrew Turner             LogError(ocsdError(OCSD_ERR_SEV_ERROR,OCSD_ERR_MEM));
77*c120c564SAndrew Turner             return OCSD_ERR_MEM;
78*c120c564SAndrew Turner         }
79*c120c564SAndrew Turner         m_pProcessor->Initialise(this);
80*c120c564SAndrew Turner     }
81*c120c564SAndrew Turner     return m_pProcessor->Configure(m_config);
82*c120c564SAndrew Turner }
83*c120c564SAndrew Turner 
processData(const ocsd_trc_index_t index,const uint32_t dataBlockSize,const uint8_t * pDataBlock,uint32_t * numBytesProcessed)84*c120c564SAndrew Turner ocsd_datapath_resp_t TrcPktProcEtmV3::processData(  const ocsd_trc_index_t index,
85*c120c564SAndrew Turner                                                 const uint32_t dataBlockSize,
86*c120c564SAndrew Turner                                                 const uint8_t *pDataBlock,
87*c120c564SAndrew Turner                                                 uint32_t *numBytesProcessed)
88*c120c564SAndrew Turner {
89*c120c564SAndrew Turner     if(m_pProcessor)
90*c120c564SAndrew Turner         return m_pProcessor->processData(index,dataBlockSize,pDataBlock,numBytesProcessed);
91*c120c564SAndrew Turner     return OCSD_RESP_FATAL_NOT_INIT;
92*c120c564SAndrew Turner }
93*c120c564SAndrew Turner 
onEOT()94*c120c564SAndrew Turner ocsd_datapath_resp_t TrcPktProcEtmV3::onEOT()
95*c120c564SAndrew Turner {
96*c120c564SAndrew Turner     if(m_pProcessor)
97*c120c564SAndrew Turner         return m_pProcessor->onEOT();
98*c120c564SAndrew Turner     return OCSD_RESP_FATAL_NOT_INIT;
99*c120c564SAndrew Turner }
100*c120c564SAndrew Turner 
onReset()101*c120c564SAndrew Turner ocsd_datapath_resp_t TrcPktProcEtmV3::onReset()
102*c120c564SAndrew Turner {
103*c120c564SAndrew Turner     if(m_pProcessor)
104*c120c564SAndrew Turner         return m_pProcessor->onReset();
105*c120c564SAndrew Turner     return OCSD_RESP_FATAL_NOT_INIT;
106*c120c564SAndrew Turner }
107*c120c564SAndrew Turner 
onFlush()108*c120c564SAndrew Turner ocsd_datapath_resp_t TrcPktProcEtmV3::onFlush()
109*c120c564SAndrew Turner {
110*c120c564SAndrew Turner     if(m_pProcessor)
111*c120c564SAndrew Turner         return m_pProcessor->onFlush();
112*c120c564SAndrew Turner     return OCSD_RESP_FATAL_NOT_INIT;
113*c120c564SAndrew Turner }
114*c120c564SAndrew Turner 
isBadPacket() const115*c120c564SAndrew Turner const bool TrcPktProcEtmV3::isBadPacket() const
116*c120c564SAndrew Turner {
117*c120c564SAndrew Turner     if(m_pProcessor)
118*c120c564SAndrew Turner         return m_pProcessor->isBadPacket();
119*c120c564SAndrew Turner     return false;
120*c120c564SAndrew Turner }
121*c120c564SAndrew Turner 
122*c120c564SAndrew Turner /* End of File trc_pkt_proc_etmv3.cpp */
123