From c62fe43ba9134e62932105313a42d43589c413f8 Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Mon, 9 Nov 2015 13:44:04 +0000 Subject: [PATCH] dev: Don't access the platform directly in PCI devices Cleanup PCI devices to avoid using the PciDevice::platform pointer directly. The PCI-specific functionality provided by the Platform should be accessed through the wrappers in PciDevice. --- src/dev/copy_engine.cc | 20 ++++++++++---------- src/dev/i8254xGBe.hh | 2 +- src/dev/pcidev.hh | 4 +++- src/dev/sinic.cc | 6 ++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/dev/copy_engine.cc b/src/dev/copy_engine.cc index 646393b8f..dfeaf1218 100644 --- a/src/dev/copy_engine.cc +++ b/src/dev/copy_engine.cc @@ -445,14 +445,14 @@ CopyEngine::CopyEngineChannel::fetchDescriptor(Addr address) anDq(); anBegin("FetchDescriptor"); DPRINTF(DMACopyEngine, "Reading descriptor from at memory location %#x(%#x)\n", - address, ce->platform->pciToDma(address)); + address, ce->pciToDma(address)); assert(address); busy = true; DPRINTF(DMACopyEngine, "dmaAction: %#x, %d bytes, to addr %#x\n", - ce->platform->pciToDma(address), sizeof(DmaDesc), curDmaDesc); + ce->pciToDma(address), sizeof(DmaDesc), curDmaDesc); - cePort.dmaAction(MemCmd::ReadReq, ce->platform->pciToDma(address), + cePort.dmaAction(MemCmd::ReadReq, ce->pciToDma(address), sizeof(DmaDesc), &fetchCompleteEvent, (uint8_t*)curDmaDesc, latBeforeBegin); lastDescriptorAddr = address; @@ -495,8 +495,8 @@ CopyEngine::CopyEngineChannel::readCopyBytes() anBegin("ReadCopyBytes"); DPRINTF(DMACopyEngine, "Reading %d bytes from buffer to memory location %#x(%#x)\n", curDmaDesc->len, curDmaDesc->dest, - ce->platform->pciToDma(curDmaDesc->src)); - cePort.dmaAction(MemCmd::ReadReq, ce->platform->pciToDma(curDmaDesc->src), + ce->pciToDma(curDmaDesc->src)); + cePort.dmaAction(MemCmd::ReadReq, ce->pciToDma(curDmaDesc->src), curDmaDesc->len, &readCompleteEvent, copyBuffer, 0); } @@ -516,9 +516,9 @@ CopyEngine::CopyEngineChannel::writeCopyBytes() anBegin("WriteCopyBytes"); DPRINTF(DMACopyEngine, "Writing %d bytes from buffer to memory location %#x(%#x)\n", curDmaDesc->len, curDmaDesc->dest, - ce->platform->pciToDma(curDmaDesc->dest)); + ce->pciToDma(curDmaDesc->dest)); - cePort.dmaAction(MemCmd::WriteReq, ce->platform->pciToDma(curDmaDesc->dest), + cePort.dmaAction(MemCmd::WriteReq, ce->pciToDma(curDmaDesc->dest), curDmaDesc->len, &writeCompleteEvent, copyBuffer, 0); ce->bytesCopied[channelId] += curDmaDesc->len; @@ -585,10 +585,10 @@ CopyEngine::CopyEngineChannel::writeCompletionStatus() anBegin("WriteCompletionStatus"); DPRINTF(DMACopyEngine, "Writing completion status %#x to address %#x(%#x)\n", completionDataReg, cr.completionAddr, - ce->platform->pciToDma(cr.completionAddr)); + ce->pciToDma(cr.completionAddr)); cePort.dmaAction(MemCmd::WriteReq, - ce->platform->pciToDma(cr.completionAddr), + ce->pciToDma(cr.completionAddr), sizeof(completionDataReg), &statusCompleteEvent, (uint8_t*)&completionDataReg, latAfterCompletion); } @@ -607,7 +607,7 @@ CopyEngine::CopyEngineChannel::fetchNextAddr(Addr address) DPRINTF(DMACopyEngine, "Fetching next address...\n"); busy = true; cePort.dmaAction(MemCmd::ReadReq, - ce->platform->pciToDma(address + offsetof(DmaDesc, next)), + ce->pciToDma(address + offsetof(DmaDesc, next)), sizeof(Addr), &addrCompleteEvent, (uint8_t*)curDmaDesc + offsetof(DmaDesc, next), 0); } diff --git a/src/dev/i8254xGBe.hh b/src/dev/i8254xGBe.hh index f1802ab24..f46bf51d3 100644 --- a/src/dev/i8254xGBe.hh +++ b/src/dev/i8254xGBe.hh @@ -263,7 +263,7 @@ class IGbE : public EtherDevice EthPacketPtr pktPtr; /** Shortcut for DMA address translation */ - Addr pciToDma(Addr a) { return igbe->platform->pciToDma(a); } + Addr pciToDma(Addr a) { return igbe->pciToDma(a); } public: /** Annotate sm*/ diff --git a/src/dev/pcidev.hh b/src/dev/pcidev.hh index 284b64f09..0afcba154 100644 --- a/src/dev/pcidev.hh +++ b/src/dev/pcidev.hh @@ -190,8 +190,10 @@ class PciDevice : public DmaDevice return true; } - protected: + private: Platform *platform; + + protected: Tick pioDelay; Tick configDelay; PciConfigPort configPort; diff --git a/src/dev/sinic.cc b/src/dev/sinic.cc index e2b9e28fb..18642efb7 100644 --- a/src/dev/sinic.cc +++ b/src/dev/sinic.cc @@ -871,8 +871,7 @@ Device::rxKick() if (dmaPending() || drainState() != DrainState::Running) goto exit; - rxDmaAddr = params()->platform->pciToDma( - Regs::get_RxData_Addr(vnic->RxData)); + rxDmaAddr = pciToDma(Regs::get_RxData_Addr(vnic->RxData)); rxDmaLen = min(Regs::get_RxData_Len(vnic->RxData), vnic->rxPacketBytes); @@ -1071,8 +1070,7 @@ Device::txKick() if (dmaPending() || drainState() != DrainState::Running) goto exit; - txDmaAddr = params()->platform->pciToDma( - Regs::get_TxData_Addr(vnic->TxData)); + txDmaAddr = pciToDma(Regs::get_TxData_Addr(vnic->TxData)); txDmaLen = Regs::get_TxData_Len(vnic->TxData); txDmaData = txPacket->data + txPacketOffset; txState = txCopy; -- 2.30.2