diff options
Diffstat (limited to 'src/dev/pcidev.cc')
-rw-r--r-- | src/dev/pcidev.cc | 37 |
1 files changed, 6 insertions, 31 deletions
diff --git a/src/dev/pcidev.cc b/src/dev/pcidev.cc index d0e9d758a..8ea22cb24 100644 --- a/src/dev/pcidev.cc +++ b/src/dev/pcidev.cc @@ -39,6 +39,7 @@ #include <vector> #include "base/inifile.hh" +#include "base/intmath.hh" // for isPowerOf2( #include "base/misc.hh" #include "base/str.hh" // for to_number #include "base/trace.hh" @@ -56,8 +57,8 @@ using namespace std; PciDev::PciConfigPort::PciConfigPort(PciDev *dev, int busid, int devid, int funcid, Platform *p) - : PioPort(dev,p->system,"-pciconf"), device(dev), platform(p), - busId(busid), deviceId(devid), functionId(funcid) + : SimpleTimingPort(dev->name() + "-pciconf"), device(dev), platform(p), + busId(busid), deviceId(devid), functionId(funcid) { configAddr = platform->calcConfigAddr(busId, deviceId, functionId); } @@ -67,18 +68,9 @@ Tick PciDev::PciConfigPort::recvAtomic(Packet *pkt) { assert(pkt->result == Packet::Unknown); - assert(pkt->getAddr() >= configAddr && pkt->getAddr() < configAddr + - PCI_CONFIG_SIZE); - return device->recvConfig(pkt); -} - -void -PciDev::PciConfigPort::recvFunctional(Packet *pkt) -{ - assert(pkt->result == Packet::Unknown); - assert(pkt->getAddr() >= configAddr && pkt->getAddr() < configAddr + - PCI_CONFIG_SIZE); - device->recvConfig(pkt); + assert(pkt->getAddr() >= configAddr && + pkt->getAddr() < configAddr + PCI_CONFIG_SIZE); + return pkt->isRead() ? device->readConfig(pkt) : device->writeConfig(pkt); } void @@ -90,23 +82,6 @@ PciDev::PciConfigPort::getDeviceAddressRanges(AddrRangeList &resp, } -bool -PciDev::PciConfigPort::recvTiming(Packet *pkt) -{ - if (pkt->result == Packet::Nacked) { - resendNacked(pkt); - } else { - assert(pkt->result == Packet::Unknown); - assert(pkt->getAddr() >= configAddr && pkt->getAddr() < configAddr + - PCI_CONFIG_SIZE); - Tick latency = device->recvConfig(pkt); - // turn packet around to go back to requester - pkt->makeTimingResponse(); - sendTiming(pkt, latency); - } - return true; -} - PciDev::PciDev(Params *p) : DmaDevice(p), plat(p->platform), configData(p->configData), pioDelay(p->pio_delay), configDelay(p->config_delay), |