base: add the FmtStackTrace debug option
[gem5.git] / src / dev / x86 / i8259.hh
index 2a5d5f6aa2b481d0de90fdfd9cd6f05905e5050c..f9f0afff82d632d6cca7a5cc049059a38a41f47f 100644 (file)
 #ifndef __DEV_X86_I8259_HH__
 #define __DEV_X86_I8259_HH__
 
+#include "dev/intpin.hh"
 #include "dev/io_device.hh"
-#include "dev/x86/intdev.hh"
-#include "params/I8259.hh"
 #include "enums/X86I8259CascadeMode.hh"
+#include "params/I8259.hh"
 
 namespace X86ISA
 {
 
-class I8259 : public BasicPioDevice, public IntDev
+class I8259 : public BasicPioDevice
 {
   protected:
     static const int NumLines = 8;
     bool pinStates[NumLines];
 
+    void init() override;
+
     Tick latency;
-    IntSourcePin *output;
+    std::vector<IntSourcePin<I8259> *> output;
+    std::vector<IntSinkPin<I8259> *> inputs;
     Enums::X86I8259CascadeMode mode;
     I8259 * slave;
 
@@ -89,8 +92,19 @@ class I8259 : public BasicPioDevice, public IntDev
 
     I8259(Params * p);
 
-    Tick read(PacketPtr pkt);
-    Tick write(PacketPtr pkt);
+    Port &
+    getPort(const std::string &if_name, PortID idx=InvalidPortID) override
+    {
+        if (if_name == "inputs")
+            return *inputs.at(idx);
+        else if (if_name == "output")
+            return *output.at(idx);
+        else
+            return BasicPioDevice::getPort(if_name, idx);
+    }
+
+    Tick read(PacketPtr pkt) override;
+    Tick write(PacketPtr pkt) override;
 
     void
     maskAll()
@@ -109,8 +123,8 @@ class I8259 : public BasicPioDevice, public IntDev
     void lowerInterruptPin(int number);
     int getVector();
 
-    virtual void serialize(std::ostream &os);
-    virtual void unserialize(Checkpoint *cp, const std::string &section);
+    void serialize(CheckpointOut &cp) const override;
+    void unserialize(CheckpointIn &cp) override;
 };
 
 } // namespace X86ISA