diff options
Diffstat (limited to 'src/mem/ruby/system/RubyPort.hh')
-rw-r--r-- | src/mem/ruby/system/RubyPort.hh | 58 |
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; |