From e345154b19939db37fb391111d4dad190c62e81c Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 12 Dec 2018 16:43:18 -0800 Subject: 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 Maintainer: Anthony Gutierrez --- .../channels/req_rsp_channels/put_get_imp.hh | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/systemc/ext/tlm_core/1/req_rsp/channels/req_rsp_channels/put_get_imp.hh (limited to 'src/systemc/ext/tlm_core/1/req_rsp/channels/req_rsp_channels/put_get_imp.hh') diff --git a/src/systemc/ext/tlm_core/1/req_rsp/channels/req_rsp_channels/put_get_imp.hh b/src/systemc/ext/tlm_core/1/req_rsp/channels/req_rsp_channels/put_get_imp.hh new file mode 100644 index 000000000..f9821dbef --- /dev/null +++ b/src/systemc/ext/tlm_core/1/req_rsp/channels/req_rsp_channels/put_get_imp.hh @@ -0,0 +1,115 @@ +/***************************************************************************** + + 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_1_REQ_RSP_CHANNELS_REQ_RSP_CHANNELS_PUT_GET_IMP_HH__ +#define \ + __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_CHANNELS_REQ_RSP_CHANNELS_PUT_GET_IMP_HH__ + +#include "tlm_core/1/req_rsp/interfaces/master_slave_ifs.hh" + +namespace tlm +{ + +template +class tlm_put_get_imp : private virtual tlm_put_if, + private virtual tlm_get_peek_if +{ + public: + tlm_put_get_imp(tlm_put_if &p, tlm_get_peek_if &g) : + put_fifo(p), get_fifo(g) + {} + + // Put interface. + void put(const PUT_DATA &t) { put_fifo.put(t); } + bool nb_put(const PUT_DATA &t) { return put_fifo.nb_put(t); } + bool + nb_can_put(tlm_tag *t=nullptr) const + { + return put_fifo.nb_can_put(t); + } + const sc_core::sc_event & + ok_to_put(tlm_tag *t=nullptr) const + { + return put_fifo.ok_to_put(t); + } + + // Get interface. + GET_DATA get(tlm_tag * =nullptr) { return get_fifo.get(); } + bool nb_get(GET_DATA &t) { return get_fifo.nb_get(t); } + bool + nb_can_get(tlm_tag *t=nullptr) const + { + return get_fifo.nb_can_get(t); + } + + virtual const sc_core::sc_event & + ok_to_get(tlm_tag *t=nullptr) const + { + return get_fifo.ok_to_get(t); + } + + // Peek interface. + GET_DATA + peek(tlm_tag * =nullptr) const + { + return get_fifo.peek(); + } + bool nb_peek(GET_DATA &t) const { return get_fifo.nb_peek(t); } + bool + nb_can_peek(tlm_tag *t=nullptr) const + { + return get_fifo.nb_can_peek(t); + } + + virtual const sc_core::sc_event & + ok_to_peek(tlm_tag *t=nullptr) const + { + return get_fifo.ok_to_peek(t); + } + + private: + tlm_put_if &put_fifo; + tlm_get_peek_if &get_fifo; +}; + +template +class tlm_master_imp : private tlm_put_get_imp, + public virtual tlm_master_if +{ + public: + tlm_master_imp(tlm_put_if &req, tlm_get_peek_if &rsp) : + tlm_put_get_imp(req, rsp) + {} +}; + +template +class tlm_slave_imp : private tlm_put_get_imp, + public virtual tlm_slave_if +{ + public: + tlm_slave_imp(tlm_get_peek_if &req, tlm_put_if &rsp) : + tlm_put_get_imp(rsp, req) + {} +}; + +} // namespace tlm + +#endif +/*__SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_CHANNELS_REQ_RSP_CHANNELS_PUT_GET_IMP_HH__*/ -- cgit v1.2.3