#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 I82094AA;
-
-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;
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()
+ {
+ IMR = 0xFF;
+ }
+
+ void
+ unmaskAll()
+ {
+ IMR = 0x00;
+ }
void signalInterrupt(int line);
void raiseInterruptPin(int number);
void lowerInterruptPin(int number);
int getVector();
+
+ void serialize(CheckpointOut &cp) const override;
+ void unserialize(CheckpointIn &cp) override;
};
-}; // namespace X86ISA
+} // namespace X86ISA
#endif //__DEV_X86_I8259_HH__