#ifndef __DEV_8254_HH__
#define __DEV_8254_HH__
-#include <string>
#include <iostream>
+#include <string>
#include "base/bitunion.hh"
#include "base/types.hh"
-#include "sim/eventq.hh"
+#include "base/trace.hh"
+#include "debug/Intel8254Timer.hh"
+#include "sim/eventq_impl.hh"
#include "sim/serialize.hh"
/** Programmable Interval Timer (Intel 8254) */
void setTo(int clocks);
int clocksLeft();
+
+ Tick getInterval();
};
private:
CounterEvent event;
+ /** True after startup is called. */
+ bool running;
+
/** Initial count value */
uint16_t initial_count;
/** Interrupt period */
uint16_t period;
+ /** When to start ticking */
+ Tick offset;
+
/** Current mode of operation */
uint8_t mode;
* @param base The base name of the counter object.
* @param os The stream to serialize to.
*/
- void serialize(const std::string &base, std::ostream &os);
+ void serialize(const std::string &base, CheckpointOut &cp) const;
/**
* Reconstruct the state of this object from a checkpoint.
* @param cp The checkpoint use.
* @param section The section name of this object
*/
- void unserialize(const std::string &base, Checkpoint *cp,
- const std::string §ion);
+ void unserialize(const std::string &base, CheckpointIn &cp);
+
+ /** Start ticking */
+ void startup();
};
protected:
* @param base The base name of the counter object.
* @param os The stream to serialize to.
*/
- void serialize(const std::string &base, std::ostream &os);
+ void serialize(const std::string &base, CheckpointOut &cp) const;
/**
* Reconstruct the state of this object from a checkpoint.
* @param cp The checkpoint use.
* @param section The section name of this object
*/
- void unserialize(const std::string &base, Checkpoint *cp,
- const std::string §ion);
+ void unserialize(const std::string &base, CheckpointIn &cp);
+
+ /** Start ticking */
+ void startup();
};
#endif // __DEV_8254_HH__