gem5  v22.1.0.0
thread_bridge.hh
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 #ifndef __MEM_THREAD_BRIDGE_HH__
29 #define __MEM_THREAD_BRIDGE_HH__
30 
31 #include "mem/port.hh"
32 #include "params/ThreadBridge.hh"
33 #include "sim/sim_object.hh"
34 
35 namespace gem5
36 {
37 
38 class ThreadBridge : public SimObject
39 {
40  public:
41  explicit ThreadBridge(const ThreadBridgeParams &p);
42 
43  Port &getPort(const std::string &if_name,
44  PortID idx = InvalidPortID) override;
45 
46  private:
47  class IncomingPort : public ResponsePort
48  {
49  public:
50  IncomingPort(const std::string &name, ThreadBridge &device);
51  AddrRangeList getAddrRanges() const override;
52 
53  // TimingResponseProtocol
54  bool recvTimingReq(PacketPtr pkt) override;
55  void recvRespRetry() override;
56 
57  // AtomicResponseProtocol
59  MemBackdoorPtr &backdoor) override;
60  Tick recvAtomic(PacketPtr pkt) override;
61 
62  // FunctionalResponseProtocol
63  void recvFunctional(PacketPtr pkt) override;
64 
65  private:
67  };
68 
69  class OutgoingPort : public RequestPort
70  {
71  public:
72  OutgoingPort(const std::string &name, ThreadBridge &device);
73  void recvRangeChange() override;
74 
75  // TimingRequestProtocol
76  bool recvTimingResp(PacketPtr pkt) override;
77  void recvReqRetry() override;
78 
79  private:
81  };
82 
85 };
86 
87 } // namespace gem5
88 #endif // __MEM_THREAD_BRIDGE_HH__
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:294
Ports are used to interface objects to each other.
Definition: port.hh:62
const std::string name() const
Return port name (for DPRINTF).
Definition: port.hh:111
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
Definition: port.hh:79
A ResponsePort is a specialization of a port.
Definition: port.hh:270
Abstract superclass for simulation objects.
Definition: sim_object.hh:148
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...
Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor) override
Default implementations.
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_
Port Object Declaration.
Bitfield< 54 > p
Definition: pagetable.hh:70
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
const PortID InvalidPortID
Definition: types.hh:246
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

Generated on Wed Dec 21 2022 10:22:39 for gem5 by doxygen 1.9.1