gem5 v24.0.0.0
Loading...
Searching...
No Matches
thread_bridge.cc
Go to the documentation of this file.
1/*
2 * Copyright 2022 Google, LLC
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met: redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer;
8 * redistributions in binary form must reproduce the above copyright
9 * notice, this list of conditions and the following disclaimer in the
10 * documentation and/or other materials provided with the distribution;
11 * neither the name of the copyright holders nor the names of its
12 * contributors may be used to endorse or promote products derived from
13 * this software without specific prior written permission.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include "mem/thread_bridge.hh"
29
30#include "base/trace.hh"
31#include "sim/eventq.hh"
32
33namespace gem5
34{
35
36ThreadBridge::ThreadBridge(const ThreadBridgeParams &p)
37 : SimObject(p), in_port_("in_port", *this), out_port_("out_port", *this)
38{
39}
40
42 ThreadBridge &device)
43 : ResponsePort(name), device_(device)
44{
45}
46
49{
50 return device_.out_port_.getAddrRanges();
51}
52
53// TimingResponseProtocol
54bool
56{
57 panic("ThreadBridge only supports atomic/functional access.");
58}
59void
61{
62 panic("ThreadBridge only supports atomic/functional access.");
63}
64
65// AtomicResponseProtocol
66Tick
68{
69 EventQueue::ScopedMigration migrate(device_.eventQueue());
70 return device_.out_port_.sendAtomic(pkt);
71}
72
73// FunctionalResponseProtocol
74void
76{
77 EventQueue::ScopedMigration migrate(device_.eventQueue());
78 device_.out_port_.sendFunctional(pkt);
79}
80
82 ThreadBridge &device)
83 : RequestPort(name), device_(device)
84{
85}
86
87void
89{
90 device_.in_port_.sendRangeChange();
91}
92
93// TimingRequestProtocol
94bool
96{
97 panic("ThreadBridge only supports atomic/functional access.");
98}
99void
101{
102 panic("ThreadBridge only supports atomic/functional access.");
103}
104
105Port &
106ThreadBridge::getPort(const std::string &if_name, PortID idx)
107{
108 if (if_name == "in_port")
109 return in_port_;
110 if (if_name == "out_port")
111 return out_port_;
112 return SimObject::getPort(if_name, idx);
113}
114
115} // namespace gem5
virtual std::string name() const
Definition named.hh:47
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition packet.hh:295
Ports are used to interface objects to each other.
Definition port.hh:62
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
Definition port.hh:136
A ResponsePort is a specialization of a port.
Definition port.hh:349
Abstract superclass for simulation objects.
bool recvTimingReq(PacketPtr pkt) override
Receive a timing request from the peer.
IncomingPort(const std::string &name, ThreadBridge &device)
Tick recvAtomic(PacketPtr pkt) override
Receive an atomic request packet from the peer.
void recvRespRetry() override
Called by the peer if sendTimingResp was called on this protocol (causing recvTimingResp to be called...
AddrRangeList getAddrRanges() const override
Get a list of the non-overlapping address ranges the owner is responsible for.
void recvFunctional(PacketPtr pkt) override
Receive a functional request packet from the peer.
OutgoingPort(const std::string &name, ThreadBridge &device)
bool recvTimingResp(PacketPtr pkt) override
Receive a timing response from the peer.
void recvRangeChange() override
Called to receive an address range change from the peer response port.
void recvReqRetry() override
Called by the peer if sendTimingReq was called on this peer (causing recvTimingReq to be called on th...
ThreadBridge(const ThreadBridgeParams &p)
IncomingPort in_port_
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
OutgoingPort out_port_
#define panic(...)
This implements a cprintf based panic() function.
Definition logging.hh:188
virtual Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
Get a port with a given name and index.
Bitfield< 0 > p
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition types.hh:245
uint64_t Tick
Tick count type.
Definition types.hh:58
const std::string & name()
Definition trace.cc:48

Generated on Tue Jun 18 2024 16:24:05 for gem5 by doxygen 1.11.0