diff options
-rw-r--r-- | src/dev/ide_disk.hh | 2 | ||||
-rw-r--r-- | src/dev/io_device.cc | 1 | ||||
-rw-r--r-- | src/dev/io_device.hh | 33 | ||||
-rw-r--r-- | src/dev/pcidev.cc | 13 | ||||
-rw-r--r-- | src/mem/tport.hh | 18 |
5 files changed, 35 insertions, 32 deletions
diff --git a/src/dev/ide_disk.hh b/src/dev/ide_disk.hh index fb0614d4d..0bc0b73ab 100644 --- a/src/dev/ide_disk.hh +++ b/src/dev/ide_disk.hh @@ -43,6 +43,8 @@ #include "dev/io_device.hh" #include "sim/eventq.hh" +class ChunkGenerator; + #define DMA_BACKOFF_PERIOD 200 #define MAX_DMA_SIZE (131072) // 128K diff --git a/src/dev/io_device.cc b/src/dev/io_device.cc index b51a93190..b06e8b85d 100644 --- a/src/dev/io_device.cc +++ b/src/dev/io_device.cc @@ -29,6 +29,7 @@ * Nathan Binkert */ +#include "base/chunk_generator.hh" #include "base/trace.hh" #include "dev/io_device.hh" #include "sim/builder.hh" diff --git a/src/dev/io_device.hh b/src/dev/io_device.hh index 710b22b2c..d91304301 100644 --- a/src/dev/io_device.hh +++ b/src/dev/io_device.hh @@ -32,13 +32,12 @@ #ifndef __DEV_IO_DEVICE_HH__ #define __DEV_IO_DEVICE_HH__ -#include "base/chunk_generator.hh" #include "mem/mem_object.hh" #include "mem/packet_impl.hh" -#include "sim/eventq.hh" #include "sim/sim_object.hh" #include "mem/tport.hh" +class Event; class Platform; class PioDevice; class DmaDevice; @@ -49,8 +48,8 @@ class System; * sensitive to an address range use. The port takes all the memory * access types and roles them into one read() and write() call that the device * must respond to. The device must also provide the addressRanges() function - * with which it returns the address ranges it is interested in. */ - + * with which it returns the address ranges it is interested in. + */ class PioPort : public SimpleTimingPort { protected: @@ -73,7 +72,8 @@ class PioPort : public SimpleTimingPort virtual void recvStatusChange(Status status) { peerStatus = status; } - virtual void getDeviceAddressRanges(AddrRangeList &resp, AddrRangeList &snoop); + virtual void getDeviceAddressRanges(AddrRangeList &resp, + AddrRangeList &snoop); public: PioPort(PioDevice *dev, System *s, std::string pname = "-pioport"); @@ -132,7 +132,8 @@ class DmaPort : public Port virtual void recvRetry() ; - virtual void getDeviceAddressRanges(AddrRangeList &resp, AddrRangeList &snoop) + virtual void getDeviceAddressRanges(AddrRangeList &resp, + AddrRangeList &snoop) { resp.clear(); snoop.clear(); } void sendDma(Packet *pkt, bool front = false); @@ -155,7 +156,6 @@ class DmaPort : public Port * mode we are in, etc is handled by the PioPort so the device doesn't have to * bother. */ - class PioDevice : public MemObject { protected: @@ -172,13 +172,14 @@ class PioDevice : public MemObject virtual void addressRanges(AddrRangeList &range_list) = 0; - /** As far as the devices are concerned they only accept atomic transactions - * which are converted to either a write or a read. */ + /** As far as the devices are concerned they only accept atomic + * transactions which are converted to either a write or a + * read. */ Tick recvAtomic(Packet *pkt) { return pkt->isRead() ? this->read(pkt) : this->write(pkt); } - /** Pure virtual function that the device must implement. Called when a read - * command is recieved by the port. + /** Pure virtual function that the device must implement. Called + * when a read command is recieved by the port. * @param pkt Packet describing this request * @return number of ticks it took to complete */ @@ -192,10 +193,9 @@ class PioDevice : public MemObject virtual Tick write(Packet *pkt) = 0; public: - /** Params struct which is extended through each device based on the - * parameters it needs. Since we are re-writing everything, we might as well - * start from the bottom this time. */ - + /** Params struct which is extended through each device based on + * the parameters it needs. Since we are re-writing everything, we + * might as well start from the bottom this time. */ struct Params { std::string name; @@ -255,7 +255,8 @@ class BasicPioDevice : public PioDevice public: BasicPioDevice(Params *p) - : PioDevice(p), pioAddr(p->pio_addr), pioSize(0), pioDelay(p->pio_delay) + : PioDevice(p), pioAddr(p->pio_addr), pioSize(0), + pioDelay(p->pio_delay) {} /** return the address ranges that this device responds to. diff --git a/src/dev/pcidev.cc b/src/dev/pcidev.cc index d0e9d758a..a8fb44c39 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" @@ -67,8 +68,8 @@ Tick PciDev::PciConfigPort::recvAtomic(Packet *pkt) { assert(pkt->result == Packet::Unknown); - assert(pkt->getAddr() >= configAddr && pkt->getAddr() < configAddr + - PCI_CONFIG_SIZE); + assert(pkt->getAddr() >= configAddr && + pkt->getAddr() < configAddr + PCI_CONFIG_SIZE); return device->recvConfig(pkt); } @@ -76,8 +77,8 @@ void PciDev::PciConfigPort::recvFunctional(Packet *pkt) { assert(pkt->result == Packet::Unknown); - assert(pkt->getAddr() >= configAddr && pkt->getAddr() < configAddr + - PCI_CONFIG_SIZE); + assert(pkt->getAddr() >= configAddr && + pkt->getAddr() < configAddr + PCI_CONFIG_SIZE); device->recvConfig(pkt); } @@ -97,8 +98,8 @@ PciDev::PciConfigPort::recvTiming(Packet *pkt) resendNacked(pkt); } else { assert(pkt->result == Packet::Unknown); - assert(pkt->getAddr() >= configAddr && pkt->getAddr() < configAddr + - PCI_CONFIG_SIZE); + 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(); diff --git a/src/mem/tport.hh b/src/mem/tport.hh index 5473e945e..4d5c4599d 100644 --- a/src/mem/tport.hh +++ b/src/mem/tport.hh @@ -76,19 +76,21 @@ PioDevice::drain(Event *de) class SimpleTimingPort : public Port { protected: - /** A list of outgoing timing response packets that haven't been serviced - * yet. */ + /** A list of outgoing timing response packets that haven't been + * serviced yet. */ std::list<Packet*> transmitList; /** - * This class is used to implemented sendTiming() with a delay. When a delay - * is requested a new event is created. When the event time expires it - * attempts to send the packet. If it cannot, the packet is pushed onto the - * transmit list to be sent when recvRetry() is called. */ + * This class is used to implemented sendTiming() with a delay. When + * a delay is requested a new event is created. When the event time + * expires it attempts to send the packet. If it cannot, the packet + * is pushed onto the transmit list to be sent when recvRetry() is + * called. */ class SendEvent : public Event { SimpleTimingPort *port; Packet *packet; + public: SendEvent(SimpleTimingPort *p, Packet *pkt, Tick t) : Event(&mainEventQueue), port(p), packet(pkt) { setFlags(AutoDelete); schedule(curTick + t); } @@ -97,8 +99,6 @@ class SimpleTimingPort : public Port virtual const char *description() { return "Future scheduled sendTiming event"; } - - friend class SimpleTimingPort; }; @@ -127,8 +127,6 @@ class SimpleTimingPort : public Port {} unsigned int drain(Event *de); - - friend class SimpleTimingPort::SendEvent; }; #endif // __MEM_TPORT_HH__ |