diff options
Diffstat (limited to 'src/dev/arm/vgic.hh')
-rw-r--r-- | src/dev/arm/vgic.hh | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/dev/arm/vgic.hh b/src/dev/arm/vgic.hh index e1c4960e9..ac88f842f 100644 --- a/src/dev/arm/vgic.hh +++ b/src/dev/arm/vgic.hh @@ -52,6 +52,9 @@ #ifndef __DEV_ARM_VGIC_H__ #define __DEV_ARM_VGIC_H__ +#include <algorithm> +#include <array> + #include "base/addr_range.hh" #include "base/bitunion.hh" #include "cpu/intr_control.hh" @@ -162,8 +165,17 @@ class VGic : public PioDevice /* State per CPU. EVERYTHING should be in this struct and simply replicated * N times. */ - struct vcpuIntData { - ListReg LR[NUM_LR]; + struct vcpuIntData : public Serializable { + vcpuIntData() + : vctrl(0), hcr(0), eisr(0), VMGrp0En(0), VMGrp1En(0), + VMAckCtl(0), VMFiqEn(0), VMCBPR(0), VEM(0), VMABP(0), VMBP(0), + VMPriMask(0) + { + std::fill(LR.begin(), LR.end(), 0); + } + virtual ~vcpuIntData() {} + + std::array<ListReg, NUM_LR> LR; VCTLR vctrl; HCR hcr; @@ -179,9 +191,12 @@ class VGic : public PioDevice uint8_t VMABP; uint8_t VMBP; uint8_t VMPriMask; + + void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; + void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; }; - struct vcpuIntData vcpuData[VGIC_CPU_MAX]; + struct std::array<vcpuIntData, VGIC_CPU_MAX> vcpuData; public: typedef VGicParams Params; @@ -197,8 +212,8 @@ class VGic : public PioDevice virtual Tick read(PacketPtr pkt); virtual Tick write(PacketPtr pkt); - virtual void serialize(std::ostream &os); - virtual void unserialize(Checkpoint *cp, const std::string §ion); + void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; + void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; private: Tick readVCpu(PacketPtr pkt); |