diff options
author | Gabe Black <gabeblack@google.com> | 2018-12-08 01:58:26 -0800 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2019-01-09 01:31:53 +0000 |
commit | 7364acfc758a30f81aa75844f6b96b1e4e19990a (patch) | |
tree | 1b38a95be59607d1199d3ba52b46d04afc4cbee4 /src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h | |
parent | 3e1e21da61d79b79534a18398b1dde2cc4e473cb (diff) | |
download | gem5-7364acfc758a30f81aa75844f6b96b1e4e19990a.tar.xz |
systemc: Initial import of TLM headers from Accellera.
These headers will need to be cleaned up and have some Accellera
specific quirks ironed out of them, but I'll do that in a later change
to make it clear what those changes are.
Change-Id: Ia4e08633ab552b4c616c66c9b7e2bbd78ebfe7b9
Reviewed-on: https://gem5-review.googlesource.com/c/15055
Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com>
Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com>
Diffstat (limited to 'src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h')
-rw-r--r-- | src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h b/src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h new file mode 100644 index 000000000..a06ccc443 --- /dev/null +++ b/src/systemc/ext/tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h @@ -0,0 +1,108 @@ +/***************************************************************************** + + Licensed to Accellera Systems Initiative Inc. (Accellera) under one or + more contributor license agreements. See the NOTICE file distributed + with this work for additional information regarding copyright ownership. + Accellera licenses this file to you under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with the + License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. + + *****************************************************************************/ + +#ifndef TLM_CORE_TLM2_TLM_PHASE_H_INCLUDED_ +#define TLM_CORE_TLM2_TLM_PHASE_H_INCLUDED_ + +#include <string> +#include <iostream> +#include <typeinfo> +#include <vector> + +#include "sysc/kernel/sc_cmnhdr.h" // SC_API +#include "sysc/kernel/sc_macros.h" // SC_CONCAT_HELPER_, SC_STRINGIFY_HELPER_ + +namespace tlm { + +enum SC_API tlm_phase_enum +{ + UNINITIALIZED_PHASE=0, + BEGIN_REQ=1, + END_REQ, + BEGIN_RESP, + END_RESP +}; + +class SC_API tlm_phase +{ +public: + tlm_phase(); + tlm_phase(unsigned int id); // TODO: should be dropped + + tlm_phase(tlm_phase_enum standard); + tlm_phase& operator=(tlm_phase_enum standard); + + operator unsigned int() const { return m_id; } + const char* get_name() const; + +protected: + // register extended phase + tlm_phase( const std::type_info & type, const char* name ); + +private: + unsigned int m_id; +}; + +inline +tlm_phase::tlm_phase() + : m_id( UNINITIALIZED_PHASE ) +{} + +inline +tlm_phase::tlm_phase( tlm_phase_enum standard ) + : m_id( standard ) +{} + +inline +tlm_phase& tlm_phase::operator=( tlm_phase_enum standard ) +{ + m_id = standard; + return *this; +} + +inline +std::ostream& operator<<(std::ostream& s, const tlm_phase& p) +{ + s << p.get_name(); + return s; +} + +#define TLM_DECLARE_EXTENDED_PHASE(name_arg) \ + static class SC_CONCAT_HELPER_(tlm_phase_, name_arg) \ + : public ::tlm::tlm_phase \ + { \ + typedef SC_CONCAT_HELPER_(tlm_phase_, name_arg) this_type; \ + public: \ + SC_CONCAT_HELPER_(tlm_phase_, name_arg)() /* register extended phase */ \ + : ::tlm::tlm_phase( typeid(*this), SC_STRINGIFY_HELPER_(name_arg) ) \ + {} \ + \ + static const this_type& get_phase() /* needed only for IEEE 1666-2011 */ \ + { static this_type this_; return this_; } \ + } \ + const name_arg + +// for backwards-compatibility +#define DECLARE_EXTENDED_PHASE( NameArg ) \ + TLM_DECLARE_EXTENDED_PHASE( NameArg ) + +} // namespace tlm + +#endif /* TLM_CORE_TLM2_TLM_PHASE_H_INCLUDED_ */ +// Taf! |