gem5 v24.0.0.0
Loading...
Searching...
No Matches
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
35namespace gem5
36{
37
38class 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:
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
58 Tick recvAtomic(PacketPtr pkt) override;
59
60 // FunctionalResponseProtocol
61 void recvFunctional(PacketPtr pkt) override;
62
63 private:
65 };
66
68 {
69 public:
70 OutgoingPort(const std::string &name, ThreadBridge &device);
71 void recvRangeChange() override;
72
73 // TimingRequestProtocol
74 bool recvTimingResp(PacketPtr pkt) override;
75 void recvReqRetry() override;
76
77 private:
79 };
80
83};
84
85} // namespace gem5
86#endif // __MEM_THREAD_BRIDGE_HH__
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
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: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_
Port Object Declaration.
Bitfield< 0 > p
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
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 Tue Jun 18 2024 16:24:05 for gem5 by doxygen 1.11.0