diff options
author | Gabe Black <gabeblack@google.com> | 2018-12-12 16:43:18 -0800 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2019-01-09 01:35:21 +0000 |
commit | e345154b19939db37fb391111d4dad190c62e81c (patch) | |
tree | 2bb6f5a3fe3a13f447f8b179337afc20e11b3648 /src/systemc/ext/tlm_core/2/generic_payload/phase.hh | |
parent | 8c560b6c80e641a1937d9af98cb75588ec4eac05 (diff) | |
download | gem5-e345154b19939db37fb391111d4dad190c62e81c.tar.xz |
systemc: Rename tlm_core header files to have a .hh extentension.
This makes those files more consistent with other headers in gem5. The
top level headers (tlm and tlm.h) and the tlm_utils headers were left
alone since the user might reasonably expect those to have a well known
name. The tlm_core headers by comparison are an implementation detail,
and users shouldn't include them directly by name.
Change-Id: Ibc82e8159e47717c79d76f50ed96fdd619294a06
Reviewed-on: https://gem5-review.googlesource.com/c/15067
Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com>
Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com>
Diffstat (limited to 'src/systemc/ext/tlm_core/2/generic_payload/phase.hh')
-rw-r--r-- | src/systemc/ext/tlm_core/2/generic_payload/phase.hh | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/systemc/ext/tlm_core/2/generic_payload/phase.hh b/src/systemc/ext/tlm_core/2/generic_payload/phase.hh new file mode 100644 index 000000000..db5866a6b --- /dev/null +++ b/src/systemc/ext/tlm_core/2/generic_payload/phase.hh @@ -0,0 +1,117 @@ +/***************************************************************************** + + 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 __SYSTEMC_EXT_TLM_CORE_2_GENERIC_PAYLOAD_PHASE_HH__ +#define __SYSTEMC_EXT_TLM_CORE_2_GENERIC_PAYLOAD_PHASE_HH__ + +#include <iostream> +#include <typeinfo> +#include <vector> + +#define SC_CONCAT_HELPER_(a, b) SC_CONCAT_HELPER_DEFERRED_(a, b) +#define SC_CONCAT_HELPER_DEFERRED_(a, b) SC_CONCAT_HELPER_MORE_DEFERRED_(a, b) +#define SC_CONCAT_HELPER_MORE_DEFERRED_(a, b) a ## b + +#define SC_STRINGIFY_HELPER_(a) SC_STRINGIFY_HELPER_DEFERRED_(a) +#define SC_STRINGIFY_HELPER_DEFERRED_(a) SC_STRINGIFY_HELPER_MORE_DEFERRED_(a) +#define SC_STRINGIFY_HELPER_MORE_DEFERRED_(a) #a + +namespace tlm +{ + +enum tlm_phase_enum +{ + UNINITIALIZED_PHASE = 0, + BEGIN_REQ = 1, + END_REQ, + BEGIN_RESP, + END_RESP +}; + +class tlm_phase +{ + public: + tlm_phase(); + tlm_phase(unsigned int id); + + 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 + +#undef SC_CONCAT_HELPER_ +#undef SC_CONCAT_HELPER_DEFERRED_ +#undef SC_CONCAT_HELPER_MORE_DEFERRED_ + +#undef SC_STRINGIFY_HELPER_ +#undef SC_STRINGIFY_HELPER_DEFERRED_ +#undef SC_STRINGIFY_HELPER_MORE_DEFERRED_ + +#endif /* __SYSTEMC_EXT_TLM_CORE_2_GENERIC_PAYLOAD_PHASE_HH__ */ |