summaryrefslogtreecommitdiff
path: root/src/mem/ruby/system/RubyPort.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/system/RubyPort.hh')
-rw-r--r--src/mem/ruby/system/RubyPort.hh58
1 files changed, 6 insertions, 52 deletions
diff --git a/src/mem/ruby/system/RubyPort.hh b/src/mem/ruby/system/RubyPort.hh
index 267b557ec..3a862e068 100644
--- a/src/mem/ruby/system/RubyPort.hh
+++ b/src/mem/ruby/system/RubyPort.hh
@@ -37,6 +37,7 @@
#include "mem/mem_object.hh"
#include "mem/tport.hh"
#include "mem/physical.hh"
+#include "mem/protocol/RequestStatus.hh"
#include "params/RubyPort.hh"
@@ -105,16 +106,7 @@ public:
Port *getPort(const std::string &if_name, int idx);
- virtual int64_t makeRequest(const RubyRequest & request) = 0;
-
- void registerHitCallback(void (*hit_callback)(int64_t request_id)) {
- //
- // Can't assign hit_callback twice and by default it is set to the
- // RubyPort's default callback function.
- //
- assert(m_hit_callback == ruby_hit_callback);
- m_hit_callback = hit_callback;
- }
+ virtual RequestStatus makeRequest(const RubyRequest & request) = 0;
//
// Called by the controller to give the sequencer a pointer.
@@ -124,55 +116,17 @@ public:
protected:
const string m_name;
- void (*m_hit_callback)(int64_t);
-
- int64_t makeUniqueRequestID() {
- // The request ID is generated by combining the port ID with a request count
- // so that request IDs can be formed concurrently by multiple threads.
- // IDs are formed as follows:
- //
- //
- // 0 PortID Request Count
- // +----+---------------+-----------------------------------------------------+
- // | 63 | 62-48 | 47-0 |
- // +----+---------------+-----------------------------------------------------+
- //
- //
- // This limits the system to a maximum of 2^11 == 2048 components
- // and 2^48 ~= 3x10^14 requests per component
-
- int64_t id = (static_cast<uint64_t>(m_port_id) << 48) | m_request_cnt;
- m_request_cnt++;
- // assert((m_request_cnt & (1<<48)) == 0);
- return id;
- }
+ void ruby_hit_callback(PacketPtr pkt);
+ void hit(PacketPtr pkt);
int m_version;
AbstractController* m_controller;
MessageBuffer* m_mandatory_q_ptr;
PioPort* pio_port;
- //
- // The pending request map is protected so that the Sequencer can access it.
- // This is a temporary fix until the libruby inteface is cleaned
- //
- struct RequestCookie {
- Packet *pkt;
- M5Port *m5Port;
- RequestCookie(Packet *p, M5Port *m5p)
- : pkt(p), m5Port(m5p)
- {}
- };
-
- typedef std::map<int64_t, RequestCookie*> RequestMap;
- static RequestMap pending_cpu_requests;
-
private:
- static uint16_t m_num_ports;
- uint16_t m_port_id;
- uint64_t m_request_cnt;
-
- static void ruby_hit_callback(int64_t req_id);
+ uint16_t m_port_id;
+ uint64_t m_request_cnt;
M5Port* physMemPort;