bridge.hh revision 8713
12568SN/A/* 28713Sandreas.hansson@arm.com * Copyright (c) 2011 ARM Limited 38713Sandreas.hansson@arm.com * All rights reserved 48713Sandreas.hansson@arm.com * 58713Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall 68713Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual 78713Sandreas.hansson@arm.com * property including but not limited to intellectual property relating 88713Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software 98713Sandreas.hansson@arm.com * licensed hereunder. You may use the software subject to the license 108713Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated 118713Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software, 128713Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form. 138713Sandreas.hansson@arm.com * 142568SN/A * Copyright (c) 2006 The Regents of The University of Michigan 152568SN/A * All rights reserved. 162568SN/A * 172568SN/A * Redistribution and use in source and binary forms, with or without 182568SN/A * modification, are permitted provided that the following conditions are 192568SN/A * met: redistributions of source code must retain the above copyright 202568SN/A * notice, this list of conditions and the following disclaimer; 212568SN/A * redistributions in binary form must reproduce the above copyright 222568SN/A * notice, this list of conditions and the following disclaimer in the 232568SN/A * documentation and/or other materials provided with the distribution; 242568SN/A * neither the name of the copyright holders nor the names of its 252568SN/A * contributors may be used to endorse or promote products derived from 262568SN/A * this software without specific prior written permission. 272568SN/A * 282568SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 292568SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 302568SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 312568SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 322568SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 332568SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 342568SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 352568SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 362568SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 372568SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 382568SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 392665Ssaidi@eecs.umich.edu * 402665Ssaidi@eecs.umich.edu * Authors: Ali Saidi 412665Ssaidi@eecs.umich.edu * Steve Reinhardt 428713Sandreas.hansson@arm.com * Andreas Hansson 432568SN/A */ 442568SN/A 452568SN/A/** 462982Sstever@eecs.umich.edu * @file 478713Sandreas.hansson@arm.com * Declaration of a memory-mapped bus bridge that connects a master 488713Sandreas.hansson@arm.com * and a slave through a request and response queue. 492568SN/A */ 502568SN/A 512568SN/A#ifndef __MEM_BRIDGE_HH__ 522568SN/A#define __MEM_BRIDGE_HH__ 532568SN/A 542568SN/A#include <list> 552568SN/A#include <queue> 568229Snate@binkert.org#include <string> 572568SN/A 585386Sstever@gmail.com#include "base/fast_alloc.hh" 596215Snate@binkert.org#include "base/types.hh" 602568SN/A#include "mem/mem_object.hh" 612568SN/A#include "mem/packet.hh" 622568SN/A#include "mem/port.hh" 634762Snate@binkert.org#include "params/Bridge.hh" 642568SN/A#include "sim/eventq.hh" 652568SN/A 668713Sandreas.hansson@arm.com/** 678713Sandreas.hansson@arm.com * A bridge is used to interface two different busses (or in general a 688713Sandreas.hansson@arm.com * memory-mapped master and slave), with buffering for requests and 698713Sandreas.hansson@arm.com * responses. The bridge has a fixed delay for packets passing through 708713Sandreas.hansson@arm.com * it and responds to a fixed set of address ranges. 718713Sandreas.hansson@arm.com * 728713Sandreas.hansson@arm.com * The bridge comprises a slave port and a master port, that buffer 738713Sandreas.hansson@arm.com * outgoing responses and requests respectively. Buffer space is 748713Sandreas.hansson@arm.com * reserved when a request arrives, also reserving response space 758713Sandreas.hansson@arm.com * before forwarding the request. An incoming request is always 768713Sandreas.hansson@arm.com * accepted (recvTiming returns true), but is potentially NACKed if 778713Sandreas.hansson@arm.com * there is no request space or response space. 788713Sandreas.hansson@arm.com */ 792568SN/Aclass Bridge : public MemObject 802568SN/A{ 812568SN/A protected: 828713Sandreas.hansson@arm.com 838713Sandreas.hansson@arm.com /** 848713Sandreas.hansson@arm.com * A packet buffer stores packets along with their sender state 858713Sandreas.hansson@arm.com * and scheduled time for transmission. 868713Sandreas.hansson@arm.com */ 878713Sandreas.hansson@arm.com class PacketBuffer : public Packet::SenderState, public FastAlloc { 888713Sandreas.hansson@arm.com 898713Sandreas.hansson@arm.com public: 908713Sandreas.hansson@arm.com Tick ready; 918713Sandreas.hansson@arm.com PacketPtr pkt; 928713Sandreas.hansson@arm.com bool nackedHere; 938713Sandreas.hansson@arm.com Packet::SenderState *origSenderState; 948713Sandreas.hansson@arm.com short origSrc; 958713Sandreas.hansson@arm.com bool expectResponse; 968713Sandreas.hansson@arm.com 978713Sandreas.hansson@arm.com PacketBuffer(PacketPtr _pkt, Tick t, bool nack = false) 988713Sandreas.hansson@arm.com : ready(t), pkt(_pkt), nackedHere(nack), 998713Sandreas.hansson@arm.com origSenderState(_pkt->senderState), 1008713Sandreas.hansson@arm.com origSrc(nack ? _pkt->getDest() : _pkt->getSrc() ), 1018713Sandreas.hansson@arm.com expectResponse(_pkt->needsResponse() && !nack) 1028713Sandreas.hansson@arm.com 1038713Sandreas.hansson@arm.com { 1048713Sandreas.hansson@arm.com if (!pkt->isResponse() && !nack) 1058713Sandreas.hansson@arm.com pkt->senderState = this; 1068713Sandreas.hansson@arm.com } 1078713Sandreas.hansson@arm.com 1088713Sandreas.hansson@arm.com void fixResponse(PacketPtr pkt) 1098713Sandreas.hansson@arm.com { 1108713Sandreas.hansson@arm.com assert(pkt->senderState == this); 1118713Sandreas.hansson@arm.com pkt->setDest(origSrc); 1128713Sandreas.hansson@arm.com pkt->senderState = origSenderState; 1138713Sandreas.hansson@arm.com } 1148713Sandreas.hansson@arm.com }; 1158713Sandreas.hansson@arm.com 1168713Sandreas.hansson@arm.com // Forward declaration to allow the slave port to have a pointer 1178713Sandreas.hansson@arm.com class BridgeMasterPort; 1188713Sandreas.hansson@arm.com 1198713Sandreas.hansson@arm.com /** 1208713Sandreas.hansson@arm.com * The port on the side that receives requests and sends 1218713Sandreas.hansson@arm.com * responses. The slave port has a set of address ranges that it 1228713Sandreas.hansson@arm.com * is responsible for. The slave port also has a buffer for the 1238713Sandreas.hansson@arm.com * responses not yet sent. 1248713Sandreas.hansson@arm.com */ 1258713Sandreas.hansson@arm.com class BridgeSlavePort : public Port 1262568SN/A { 1278713Sandreas.hansson@arm.com 1288713Sandreas.hansson@arm.com private: 1298713Sandreas.hansson@arm.com 1302643Sstever@eecs.umich.edu /** A pointer to the bridge to which this port belongs. */ 1312568SN/A Bridge *bridge; 1322568SN/A 1332643Sstever@eecs.umich.edu /** 1348713Sandreas.hansson@arm.com * Pointer to the master port on the other side of the bridge 1352643Sstever@eecs.umich.edu * (connected to the other bus). 1362643Sstever@eecs.umich.edu */ 1378713Sandreas.hansson@arm.com BridgeMasterPort* masterPort; 1388713Sandreas.hansson@arm.com 1398713Sandreas.hansson@arm.com /** Minimum request delay though this bridge. */ 1408713Sandreas.hansson@arm.com Tick delay; 1418713Sandreas.hansson@arm.com 1428713Sandreas.hansson@arm.com /** Min delay to respond with a nack. */ 1438713Sandreas.hansson@arm.com Tick nackDelay; 1448713Sandreas.hansson@arm.com 1458713Sandreas.hansson@arm.com /** Address ranges to pass through the bridge */ 1468713Sandreas.hansson@arm.com AddrRangeList ranges; 1478713Sandreas.hansson@arm.com 1488713Sandreas.hansson@arm.com /** 1498713Sandreas.hansson@arm.com * Response packet queue. Response packets are held in this 1508713Sandreas.hansson@arm.com * queue for a specified delay to model the processing delay 1518713Sandreas.hansson@arm.com * of the bridge. 1528713Sandreas.hansson@arm.com */ 1538713Sandreas.hansson@arm.com std::list<PacketBuffer*> responseQueue; 1548713Sandreas.hansson@arm.com 1558713Sandreas.hansson@arm.com /** Counter to track the outstanding responses. */ 1568713Sandreas.hansson@arm.com unsigned int outstandingResponses; 1578713Sandreas.hansson@arm.com 1588713Sandreas.hansson@arm.com /** If we're waiting for a retry to happen. */ 1598713Sandreas.hansson@arm.com bool inRetry; 1608713Sandreas.hansson@arm.com 1618713Sandreas.hansson@arm.com /** Max queue size for reserved responses. */ 1628713Sandreas.hansson@arm.com unsigned int respQueueLimit; 1638713Sandreas.hansson@arm.com 1648713Sandreas.hansson@arm.com /** 1658713Sandreas.hansson@arm.com * Is this side blocked from accepting new response packets. 1668713Sandreas.hansson@arm.com * 1678713Sandreas.hansson@arm.com * @return true if the reserved space has reached the set limit 1688713Sandreas.hansson@arm.com */ 1698713Sandreas.hansson@arm.com bool respQueueFull(); 1708713Sandreas.hansson@arm.com 1718713Sandreas.hansson@arm.com /** 1728713Sandreas.hansson@arm.com * Turn the request packet into a NACK response and put it in 1738713Sandreas.hansson@arm.com * the response queue and schedule its transmission. 1748713Sandreas.hansson@arm.com * 1758713Sandreas.hansson@arm.com * @param pkt the request packet to NACK 1768713Sandreas.hansson@arm.com */ 1778713Sandreas.hansson@arm.com void nackRequest(PacketPtr pkt); 1788713Sandreas.hansson@arm.com 1798713Sandreas.hansson@arm.com /** 1808713Sandreas.hansson@arm.com * Handle send event, scheduled when the packet at the head of 1818713Sandreas.hansson@arm.com * the response queue is ready to transmit (for timing 1828713Sandreas.hansson@arm.com * accesses only). 1838713Sandreas.hansson@arm.com */ 1848713Sandreas.hansson@arm.com void trySend(); 1858713Sandreas.hansson@arm.com 1868713Sandreas.hansson@arm.com /** 1878713Sandreas.hansson@arm.com * Private class for scheduling sending of responses from the 1888713Sandreas.hansson@arm.com * response queue. 1898713Sandreas.hansson@arm.com */ 1908713Sandreas.hansson@arm.com class SendEvent : public Event 1918713Sandreas.hansson@arm.com { 1928713Sandreas.hansson@arm.com BridgeSlavePort *port; 1938713Sandreas.hansson@arm.com 1948713Sandreas.hansson@arm.com public: 1958713Sandreas.hansson@arm.com SendEvent(BridgeSlavePort *p) : port(p) {} 1968713Sandreas.hansson@arm.com virtual void process() { port->trySend(); } 1978713Sandreas.hansson@arm.com virtual const char *description() const { return "bridge send"; } 1988713Sandreas.hansson@arm.com }; 1998713Sandreas.hansson@arm.com 2008713Sandreas.hansson@arm.com /** Send event for the response queue. */ 2018713Sandreas.hansson@arm.com SendEvent sendEvent; 2028713Sandreas.hansson@arm.com 2038713Sandreas.hansson@arm.com public: 2048713Sandreas.hansson@arm.com 2058713Sandreas.hansson@arm.com /** 2068713Sandreas.hansson@arm.com * Constructor for the BridgeSlavePort. 2078713Sandreas.hansson@arm.com * 2088713Sandreas.hansson@arm.com * @param _name the port name including the owner 2098713Sandreas.hansson@arm.com * @param _bridge the structural owner 2108713Sandreas.hansson@arm.com * @param _masterPort the master port on the other side of the bridge 2118713Sandreas.hansson@arm.com * @param _delay the delay from seeing a response to sending it 2128713Sandreas.hansson@arm.com * @param _nack_delay the delay from a NACK to sending the response 2138713Sandreas.hansson@arm.com * @param _resp_limit the size of the response queue 2148713Sandreas.hansson@arm.com * @param _ranges a number of address ranges to forward 2158713Sandreas.hansson@arm.com */ 2168713Sandreas.hansson@arm.com BridgeSlavePort(const std::string &_name, Bridge *_bridge, 2178713Sandreas.hansson@arm.com BridgeMasterPort* _masterPort, int _delay, 2188713Sandreas.hansson@arm.com int _nack_delay, int _resp_limit, 2198713Sandreas.hansson@arm.com std::vector<Range<Addr> > _ranges); 2208713Sandreas.hansson@arm.com 2218713Sandreas.hansson@arm.com /** 2228713Sandreas.hansson@arm.com * Queue a response packet to be sent out later and also schedule 2238713Sandreas.hansson@arm.com * a send if necessary. 2248713Sandreas.hansson@arm.com * 2258713Sandreas.hansson@arm.com * @param pkt a response to send out after a delay 2268713Sandreas.hansson@arm.com */ 2278713Sandreas.hansson@arm.com void queueForSendTiming(PacketPtr pkt); 2288713Sandreas.hansson@arm.com 2298713Sandreas.hansson@arm.com protected: 2308713Sandreas.hansson@arm.com 2318713Sandreas.hansson@arm.com /** When receiving a timing request from the peer port, 2328713Sandreas.hansson@arm.com pass it to the bridge. */ 2338713Sandreas.hansson@arm.com virtual bool recvTiming(PacketPtr pkt); 2348713Sandreas.hansson@arm.com 2358713Sandreas.hansson@arm.com /** When receiving a retry request from the peer port, 2368713Sandreas.hansson@arm.com pass it to the bridge. */ 2378713Sandreas.hansson@arm.com virtual void recvRetry(); 2388713Sandreas.hansson@arm.com 2398713Sandreas.hansson@arm.com /** When receiving a Atomic requestfrom the peer port, 2408713Sandreas.hansson@arm.com pass it to the bridge. */ 2418713Sandreas.hansson@arm.com virtual Tick recvAtomic(PacketPtr pkt); 2428713Sandreas.hansson@arm.com 2438713Sandreas.hansson@arm.com /** When receiving a Functional request from the peer port, 2448713Sandreas.hansson@arm.com pass it to the bridge. */ 2458713Sandreas.hansson@arm.com virtual void recvFunctional(PacketPtr pkt); 2468713Sandreas.hansson@arm.com 2478713Sandreas.hansson@arm.com /** 2488713Sandreas.hansson@arm.com * When receiving a range change on the slave side do nothing. 2498713Sandreas.hansson@arm.com */ 2508713Sandreas.hansson@arm.com virtual void recvRangeChange(); 2518713Sandreas.hansson@arm.com 2528713Sandreas.hansson@arm.com /** When receiving a address range request the peer port, 2538713Sandreas.hansson@arm.com pass it to the bridge. */ 2548713Sandreas.hansson@arm.com virtual AddrRangeList getAddrRanges(); 2558713Sandreas.hansson@arm.com }; 2568713Sandreas.hansson@arm.com 2578713Sandreas.hansson@arm.com 2588713Sandreas.hansson@arm.com /** 2598713Sandreas.hansson@arm.com * Port on the side that forwards requests and receives 2608713Sandreas.hansson@arm.com * responses. The master port has a buffer for the requests not 2618713Sandreas.hansson@arm.com * yet sent. 2628713Sandreas.hansson@arm.com */ 2638713Sandreas.hansson@arm.com class BridgeMasterPort : public Port 2648713Sandreas.hansson@arm.com { 2658713Sandreas.hansson@arm.com 2668713Sandreas.hansson@arm.com private: 2678713Sandreas.hansson@arm.com 2688713Sandreas.hansson@arm.com /** A pointer to the bridge to which this port belongs. */ 2698713Sandreas.hansson@arm.com Bridge* bridge; 2708713Sandreas.hansson@arm.com 2718713Sandreas.hansson@arm.com /** 2728713Sandreas.hansson@arm.com * Pointer to the slave port on the other side of the bridge 2738713Sandreas.hansson@arm.com * (connected to the other bus). 2748713Sandreas.hansson@arm.com */ 2758713Sandreas.hansson@arm.com BridgeSlavePort* slavePort; 2762643Sstever@eecs.umich.edu 2772643Sstever@eecs.umich.edu /** Minimum delay though this bridge. */ 2782643Sstever@eecs.umich.edu Tick delay; 2792643Sstever@eecs.umich.edu 2808713Sandreas.hansson@arm.com /** 2818713Sandreas.hansson@arm.com * Request packet queue. Request packets are held in this 2828713Sandreas.hansson@arm.com * queue for a specified delay to model the processing delay 2838713Sandreas.hansson@arm.com * of the bridge. 2848713Sandreas.hansson@arm.com */ 2858713Sandreas.hansson@arm.com std::list<PacketBuffer*> requestQueue; 2864435Ssaidi@eecs.umich.edu 2878713Sandreas.hansson@arm.com /** If we're waiting for a retry to happen. */ 2884435Ssaidi@eecs.umich.edu bool inRetry; 2894435Ssaidi@eecs.umich.edu 2908713Sandreas.hansson@arm.com /** Max queue size for request packets */ 2918713Sandreas.hansson@arm.com unsigned int reqQueueLimit; 2924433Ssaidi@eecs.umich.edu 2932643Sstever@eecs.umich.edu /** 2942643Sstever@eecs.umich.edu * Handle send event, scheduled when the packet at the head of 2952643Sstever@eecs.umich.edu * the outbound queue is ready to transmit (for timing 2962643Sstever@eecs.umich.edu * accesses only). 2972643Sstever@eecs.umich.edu */ 2982643Sstever@eecs.umich.edu void trySend(); 2992643Sstever@eecs.umich.edu 3008713Sandreas.hansson@arm.com /** 3018713Sandreas.hansson@arm.com * Private class for scheduling sending of requests from the 3028713Sandreas.hansson@arm.com * request queue. 3038713Sandreas.hansson@arm.com */ 3042643Sstever@eecs.umich.edu class SendEvent : public Event 3052643Sstever@eecs.umich.edu { 3068713Sandreas.hansson@arm.com BridgeMasterPort *port; 3072643Sstever@eecs.umich.edu 3082643Sstever@eecs.umich.edu public: 3098713Sandreas.hansson@arm.com SendEvent(BridgeMasterPort *p) : port(p) {} 3102643Sstever@eecs.umich.edu virtual void process() { port->trySend(); } 3115336Shines@cs.fsu.edu virtual const char *description() const { return "bridge send"; } 3122643Sstever@eecs.umich.edu }; 3132643Sstever@eecs.umich.edu 3148713Sandreas.hansson@arm.com /** Send event for the request queue. */ 3152643Sstever@eecs.umich.edu SendEvent sendEvent; 3162568SN/A 3172568SN/A public: 3188713Sandreas.hansson@arm.com 3198713Sandreas.hansson@arm.com /** 3208713Sandreas.hansson@arm.com * Constructor for the BridgeMasterPort. 3218713Sandreas.hansson@arm.com * 3228713Sandreas.hansson@arm.com * @param _name the port name including the owner 3238713Sandreas.hansson@arm.com * @param _bridge the structural owner 3248713Sandreas.hansson@arm.com * @param _slavePort the slave port on the other side of the bridge 3258713Sandreas.hansson@arm.com * @param _delay the delay from seeing a request to sending it 3268713Sandreas.hansson@arm.com * @param _req_limit the size of the request queue 3278713Sandreas.hansson@arm.com */ 3288713Sandreas.hansson@arm.com BridgeMasterPort(const std::string &_name, Bridge *_bridge, 3298713Sandreas.hansson@arm.com BridgeSlavePort* _slavePort, int _delay, 3308713Sandreas.hansson@arm.com int _req_limit); 3318713Sandreas.hansson@arm.com 3328713Sandreas.hansson@arm.com /** 3338713Sandreas.hansson@arm.com * Is this side blocked from accepting new request packets. 3348713Sandreas.hansson@arm.com * 3358713Sandreas.hansson@arm.com * @return true if the occupied space has reached the set limit 3368713Sandreas.hansson@arm.com */ 3378713Sandreas.hansson@arm.com bool reqQueueFull(); 3388713Sandreas.hansson@arm.com 3398713Sandreas.hansson@arm.com /** 3408713Sandreas.hansson@arm.com * Queue a request packet to be sent out later and also schedule 3418713Sandreas.hansson@arm.com * a send if necessary. 3428713Sandreas.hansson@arm.com * 3438713Sandreas.hansson@arm.com * @param pkt a request to send out after a delay 3448713Sandreas.hansson@arm.com */ 3458713Sandreas.hansson@arm.com void queueForSendTiming(PacketPtr pkt); 3468713Sandreas.hansson@arm.com 3478713Sandreas.hansson@arm.com /** 3488713Sandreas.hansson@arm.com * Check a functional request against the packets in our 3498713Sandreas.hansson@arm.com * request queue. 3508713Sandreas.hansson@arm.com * 3518713Sandreas.hansson@arm.com * @param pkt packet to check against 3528713Sandreas.hansson@arm.com * 3538713Sandreas.hansson@arm.com * @return true if we find a match 3548713Sandreas.hansson@arm.com */ 3558713Sandreas.hansson@arm.com bool checkFunctional(PacketPtr pkt); 3562568SN/A 3572568SN/A protected: 3582568SN/A 3592643Sstever@eecs.umich.edu /** When receiving a timing request from the peer port, 3602643Sstever@eecs.umich.edu pass it to the bridge. */ 3613349Sbinkertn@umich.edu virtual bool recvTiming(PacketPtr pkt); 3622568SN/A 3632643Sstever@eecs.umich.edu /** When receiving a retry request from the peer port, 3642568SN/A pass it to the bridge. */ 3652657Ssaidi@eecs.umich.edu virtual void recvRetry(); 3662568SN/A 3672643Sstever@eecs.umich.edu /** When receiving a Atomic requestfrom the peer port, 3682568SN/A pass it to the bridge. */ 3693349Sbinkertn@umich.edu virtual Tick recvAtomic(PacketPtr pkt); 3702568SN/A 3712643Sstever@eecs.umich.edu /** When receiving a Functional request from the peer port, 3722568SN/A pass it to the bridge. */ 3733349Sbinkertn@umich.edu virtual void recvFunctional(PacketPtr pkt); 3742568SN/A 3758711Sandreas.hansson@arm.com /** 3768711Sandreas.hansson@arm.com * When receiving a range change, pass it through the bridge. 3778711Sandreas.hansson@arm.com */ 3788711Sandreas.hansson@arm.com virtual void recvRangeChange(); 3792568SN/A }; 3802568SN/A 3818713Sandreas.hansson@arm.com /** Slave port of the bridge. */ 3828713Sandreas.hansson@arm.com BridgeSlavePort slavePort; 3838713Sandreas.hansson@arm.com 3848713Sandreas.hansson@arm.com /** Master port of the bridge. */ 3858713Sandreas.hansson@arm.com BridgeMasterPort masterPort; 3862568SN/A 3872568SN/A /** If this bridge should acknowledge writes. */ 3882568SN/A bool ackWrites; 3892568SN/A 3902568SN/A public: 3914762Snate@binkert.org typedef BridgeParams Params; 3924435Ssaidi@eecs.umich.edu 3934435Ssaidi@eecs.umich.edu protected: 3944435Ssaidi@eecs.umich.edu Params *_params; 3954435Ssaidi@eecs.umich.edu 3964435Ssaidi@eecs.umich.edu public: 3974435Ssaidi@eecs.umich.edu const Params *params() const { return _params; } 3982568SN/A 3992568SN/A /** A function used to return the port associated with this bus object. */ 4002738Sstever@eecs.umich.edu virtual Port *getPort(const std::string &if_name, int idx = -1); 4012568SN/A 4022568SN/A virtual void init(); 4032568SN/A 4044435Ssaidi@eecs.umich.edu Bridge(Params *p); 4052568SN/A}; 4062568SN/A 4072568SN/A#endif //__MEM_BUS_HH__ 408