#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;
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()
void lowerInterruptPin(int number);
int getVector();
- virtual void serialize(std::ostream &os);
- virtual void unserialize(Checkpoint *cp, const std::string §ion);
+ void serialize(CheckpointOut &cp) const override;
+ void unserialize(CheckpointIn &cp) override;
};
} // namespace X86ISA