port.cc (13771:10d990934f15) | port.cc (13782:9f6654f478e2) |
---|---|
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 | 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 |
73bool 74BaseMasterPort::isConnected() const 75{ 76 return _baseSlavePort != NULL; 77} 78 | |
79BaseSlavePort::BaseSlavePort(const std::string &name, PortID _id) 80 : Port(name, _id), _baseMasterPort(NULL) 81{ 82} 83 84BaseSlavePort::~BaseSlavePort() 85{ 86} 87 88BaseMasterPort& 89BaseSlavePort::getMasterPort() const 90{ 91 if (_baseMasterPort == NULL) 92 panic("Cannot getMasterPort on slave port %s that is not connected\n", 93 name()); 94 95 return *_baseMasterPort; 96} 97 | 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 |
98bool 99BaseSlavePort::isConnected() const 100{ 101 return _baseMasterPort != NULL; 102} 103 | |
104/** 105 * Master port 106 */ 107MasterPort::MasterPort(const std::string& name, MemObject* _owner, PortID _id) 108 : BaseMasterPort(name, _id), _slavePort(NULL), owner(*_owner) 109{ 110} 111 112MasterPort::~MasterPort() 113{ 114} 115 116void | 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 |
117MasterPort::bind(BaseSlavePort& slave_port) | 105MasterPort::bind(Port &peer) |
118{ | 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 } |
|
119 // bind on the level of the base ports | 112 // bind on the level of the base ports |
120 _baseSlavePort = &slave_port; | 113 _baseSlavePort = slave_port; |
121 | 114 |
122 // also attempt to base the slave to the appropriate type 123 SlavePort* cast_slave_port = dynamic_cast<SlavePort*>(&slave_port); 124 125 // if this port is compatible, then proceed with the binding 126 if (cast_slave_port != NULL) { 127 // master port keeps track of the slave port 128 _slavePort = cast_slave_port; 129 // slave port also keeps track of master port 130 _slavePort->bind(*this); 131 } else { 132 fatal("Master port %s cannot bind to %s\n", name(), 133 slave_port.name()); 134 } | 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); |
135} 136 137void 138MasterPort::unbind() 139{ 140 if (_slavePort == NULL) 141 panic("Attempting to unbind master port %s that is not connected\n", 142 name()); | 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()); |
143 _slavePort->unbind(); | 128 _slavePort->slaveUnbind(); |
144 _slavePort = NULL; | 129 _slavePort = NULL; |
130 _connected = false; |
|
145 _baseSlavePort = NULL; 146} 147 148AddrRangeList 149MasterPort::getAddrRanges() const 150{ 151 return _slavePort->getAddrRanges(); 152} --- 60 unchanged lines hidden (view full) --- 213{ 214} 215 216SlavePort::~SlavePort() 217{ 218} 219 220void | 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 |
221SlavePort::unbind() | 207SlavePort::slaveUnbind() |
222{ 223 _baseMasterPort = NULL; 224 _masterPort = NULL; | 208{ 209 _baseMasterPort = NULL; 210 _masterPort = NULL; |
211 _connected = false; |
|
225} 226 227void | 212} 213 214void |
228SlavePort::bind(MasterPort& master_port) | 215SlavePort::slaveBind(MasterPort& master_port) |
229{ 230 _baseMasterPort = &master_port; 231 _masterPort = &master_port; | 216{ 217 _baseMasterPort = &master_port; 218 _masterPort = &master_port; |
219 _connected = true; |
|
232} 233 234Tick 235SlavePort::sendAtomicSnoop(PacketPtr pkt) 236{ 237 assert(pkt->isRequest()); 238 return _masterPort->recvAtomicSnoop(pkt); 239} --- 33 unchanged lines hidden --- | 220} 221 222Tick 223SlavePort::sendAtomicSnoop(PacketPtr pkt) 224{ 225 assert(pkt->isRequest()); 226 return _masterPort->recvAtomicSnoop(pkt); 227} --- 33 unchanged lines hidden --- |