39a40
> #include "mem/tport.hh"
51,57c52,54
< * with which it returns the address ranges it is interested in. An extra
< * sendTiming() function is implemented which takes an delay. In this way the
< * device can immediatly call sendTiming(pkt, time) after processing a request
< * and the request will be handled by the port even if the port bus the device
< * connects to is blocked.
< */
< class PioPort : public Port
---
> * with which it returns the address ranges it is interested in. */
>
> class PioPort : public SimpleTimingPort
67,70d63
< /** A list of outgoing timing response packets that haven't been serviced
< * yet. */
< std::list<Packet*> transmitList;
<
85,125d77
< void resendNacked(Packet *pkt);
<
< /**
< * 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
< {
< PioPort *port;
< Packet *packet;
<
< SendEvent(PioPort *p, Packet *pkt, Tick t)
< : Event(&mainEventQueue), port(p), packet(pkt)
< { schedule(curTick + t); }
<
< virtual void process();
<
< virtual const char *description()
< { return "Future scheduled sendTiming event"; }
<
< friend class PioPort;
< };
<
< /** Number of timing requests that are emulating the device timing before
< * attempting to end up on the bus.
< */
< int outTiming;
<
< /** If we need to drain, keep the drain event around until we're done
< * here.*/
< Event *drainEvent;
<
< /** Schedule a sendTiming() event to be called in the future. */
< void sendTiming(Packet *pkt, Tick time)
< { outTiming++; new PioPort::SendEvent(this, pkt, time); }
<
< /** This function is notification that the device should attempt to send a
< * packet again. */
< virtual void recvRetry();
<
129,131d80
< unsigned int drain(Event *de);
<
< friend class PioPort::SendEvent;