1/* 2 * Copyright (c) 2012,2015,2017 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 56 unchanged lines hidden (view full) --- 65{ 66 if (_baseSlavePort == NULL) 67 panic("Cannot getSlavePort on master port %s that is not connected\n", 68 name()); 69 70 return *_baseSlavePort; 71} 72 |
73BaseSlavePort::BaseSlavePort(const std::string &name, PortID _id) 74 : Port(name, _id), _baseMasterPort(NULL) 75{ 76} 77 78BaseSlavePort::~BaseSlavePort() 79{ 80} 81 82BaseMasterPort& 83BaseSlavePort::getMasterPort() const 84{ 85 if (_baseMasterPort == NULL) 86 panic("Cannot getMasterPort on slave port %s that is not connected\n", 87 name()); 88 89 return *_baseMasterPort; 90} 91 |
92/** 93 * Master port 94 */ 95MasterPort::MasterPort(const std::string& name, MemObject* _owner, PortID _id) 96 : BaseMasterPort(name, _id), _slavePort(NULL), owner(*_owner) 97{ 98} 99 100MasterPort::~MasterPort() 101{ 102} 103 104void |
105MasterPort::bind(Port &peer) |
106{ |
107 auto *slave_port = dynamic_cast<SlavePort *>(&peer); 108 if (!slave_port) { 109 fatal("Attempt to bind port %s to non-slave port %s.", 110 name(), peer.name()); 111 } |
112 // bind on the level of the base ports |
113 _baseSlavePort = slave_port; |
114 |
115 // master port keeps track of the slave port 116 _slavePort = slave_port; 117 _connected = true; 118 // slave port also keeps track of master port 119 _slavePort->slaveBind(*this); |
120} 121 122void 123MasterPort::unbind() 124{ 125 if (_slavePort == NULL) 126 panic("Attempting to unbind master port %s that is not connected\n", 127 name()); |
128 _slavePort->slaveUnbind(); |
129 _slavePort = NULL; |
130 _connected = false; |
131 _baseSlavePort = NULL; 132} 133 134AddrRangeList 135MasterPort::getAddrRanges() const 136{ 137 return _slavePort->getAddrRanges(); 138} --- 60 unchanged lines hidden (view full) --- 199{ 200} 201 202SlavePort::~SlavePort() 203{ 204} 205 206void |
207SlavePort::slaveUnbind() |
208{ 209 _baseMasterPort = NULL; 210 _masterPort = NULL; |
211 _connected = false; |
212} 213 214void |
215SlavePort::slaveBind(MasterPort& master_port) |
216{ 217 _baseMasterPort = &master_port; 218 _masterPort = &master_port; |
219 _connected = true; |
220} 221 222Tick 223SlavePort::sendAtomicSnoop(PacketPtr pkt) 224{ 225 assert(pkt->isRequest()); 226 return _masterPort->recvAtomicSnoop(pkt); 227} --- 33 unchanged lines hidden --- |