dev-arm: Conditionally enable HDLcd when doing DTB autogen
[gem5.git] / src / dev / intel_8254_timer.hh
index 30ddc7bcae148fa59612c30b6ffb9bef104866ea..86b91620db674eb129409dc90ccd0decaf599b98 100644 (file)
 #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) */
@@ -100,6 +102,8 @@ class Intel8254Timer : public EventManager
             void setTo(int clocks);
 
             int clocksLeft();
+
+            Tick getInterval();
         };
 
       private:
@@ -110,6 +114,9 @@ class Intel8254Timer : public EventManager
 
         CounterEvent event;
 
+        /** True after startup is called. */
+        bool running;
+
         /** Initial count value */
         uint16_t initial_count;
 
@@ -119,6 +126,9 @@ class Intel8254Timer : public EventManager
         /** Interrupt period */
         uint16_t period;
 
+        /** When to start ticking */
+        Tick offset;
+
         /** Current mode of operation */
         uint8_t mode;
 
@@ -169,7 +179,7 @@ class Intel8254Timer : public EventManager
          * @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.
@@ -177,8 +187,10 @@ class Intel8254Timer : public EventManager
          * @param cp The checkpoint use.
          * @param section The section name of this object
          */
-        void unserialize(const std::string &base, Checkpoint *cp,
-                         const std::string &section);
+        void unserialize(const std::string &base, CheckpointIn &cp);
+
+        /** Start ticking */
+        void startup();
     };
 
   protected:
@@ -234,7 +246,7 @@ class Intel8254Timer : public EventManager
      * @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.
@@ -242,8 +254,10 @@ class Intel8254Timer : public EventManager
      * @param cp The checkpoint use.
      * @param section The section name of this object
      */
-    void unserialize(const std::string &base, Checkpoint *cp,
-                     const std::string &section);
+    void unserialize(const std::string &base, CheckpointIn &cp);
+
+    /** Start ticking */
+    void startup();
 };
 
 #endif // __DEV_8254_HH__