29 #ifndef __ARCH_RISCV_INTERRUPT_HH__
30 #define __ARCH_RISCV_INTERRUPT_HH__
40 #include "debug/Interrupt.hh"
41 #include "params/RiscvInterrupts.hh"
59 std::bitset<NumInterruptTypes>
ip;
60 std::bitset<NumInterruptTypes>
ie;
63 using Params = RiscvInterruptsParams;
67 std::bitset<NumInterruptTypes>
77 mask.mei = (!sideleg.mei) | (sideleg.mei &
status.uie);
78 mask.mti = (!sideleg.mti) | (sideleg.mti &
status.uie);
79 mask.msi = (!sideleg.msi) | (sideleg.msi &
status.uie);
80 mask.sei = (!sideleg.sei) | (sideleg.sei &
status.uie);
81 mask.sti = (!sideleg.sti) | (sideleg.sti &
status.uie);
82 mask.ssi = (!sideleg.ssi) | (sideleg.ssi &
status.uie);
87 mask.mei = (!mideleg.mei) | (mideleg.mei &
status.sie);
88 mask.mti = (!mideleg.mti) | (mideleg.mti &
status.sie);
89 mask.msi = (!mideleg.msi) | (mideleg.msi &
status.sie);
101 panic(
"Unknown privilege mode %d.", prv);
105 return std::bitset<NumInterruptTypes>(
mask);
125 return std::make_shared<NonMaskableInterruptFault>();
132 for (
const int &
id : interrupt_order)
134 return std::make_shared<InterruptFault>(
id);
173 uint64_t
readIP()
const {
return (uint64_t)
ip.to_ulong(); }
174 uint64_t
readIE()
const {
return (uint64_t)
ie.to_ulong(); }
181 unsigned long ip_ulong =
ip.to_ulong();
182 unsigned long ie_ulong =
ie.to_ulong();
190 unsigned long ip_ulong;
191 unsigned long ie_ulong;
BaseInterruptsParams Params
void serialize(CheckpointOut &cp) const
Serialize an object.
void setIP(const uint64_t &val)
void setIE(const uint64_t &val)
Interrupts(const Params &p)
std::bitset< NumInterruptTypes > globalMask() const
bool checkNonMaskableInterrupt() const
void post(int int_num, int index)
bool checkInterrupts() const
void clear(int int_num, int index)
std::bitset< NumInterruptTypes > ip
bool checkInterrupt(int num) const
void unserialize(CheckpointIn &cp)
Unserialize an object.
std::bitset< NumInterruptTypes > ie
virtual RegVal readMiscReg(RegIndex misc_reg)=0
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
#define panic(...)
This implements a cprintf based panic() function.
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::shared_ptr< FaultBase > Fault
std::ostream CheckpointOut
constexpr decltype(nullptr) NoFault
#define UNSERIALIZE_SCALAR(scalar)
#define SERIALIZE_SCALAR(scalar)