45 i <
p.port_local_interrupt_pins_connection_count;
47 uint8_t interruptID =
p.local_interrupt_ids[
i];
48 assert(interruptID <= 47);
50 csprintf(
"%s.local_interrupt_pins[%d]",
p.name,
i);
58std::bitset<NumInterruptTypes>
65 if (misa.rvs || misa.rvn) {
69 if (misa.rvs && misa.rvn) {
77 mask = ~mideleg | (mideleg & ~sideleg);
95 mask |= (mideleg & ~sideleg);
104 panic(
"Unknown privilege mode %d.", prv);
108 return std::bitset<NumInterruptTypes>(
mask);
116 return std::make_shared<NonMaskableInterruptFault>(
nmi_cause);
118 if (((
ISA*)
tc->getIsaPtr())->rvType() ==
RV64) {
136 for (
const int &
id : interrupt_order) {
138 return std::make_shared<InterruptFault>(
id);
141 }
else if (((
ISA*)
tc->getIsaPtr())->rvType() ==
RV32) {
151 for (
const int &
id : interrupt_order) {
153 return std::make_shared<InterruptFault>(
id);
193 tc->getCpuPtr()->postInterrupt(
tc->threadId(), num + 16, 0);
199 unsigned long ip_ulong =
ip.to_ulong();
200 unsigned long ie_ulong =
ie.to_ulong();
208 unsigned long ip_ulong;
209 unsigned long ie_ulong;
BaseInterrupts(const Params &p)
Ports are used to interface objects to each other.
std::vector< gem5::IntSinkPin< Interrupts > * > localInterruptPins
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Interrupts(const Params &p)
void clear(int int_num, int index) override
bool checkInterrupts() const override
bool checkNonMaskableInterrupt() const
void post(int int_num, int index) override
void serialize(CheckpointOut &cp) const override
Serialize an object.
void raiseInterruptPin(uint32_t num)
Port & getPort(const std::string &if_name, PortID idx) override
Get a port with a given name and index.
RiscvInterruptsParams Params
std::bitset< NumInterruptTypes > globalMask() const
std::bitset< NumInterruptTypes > ip
bool checkInterrupt(int num) const
Fault getInterrupt() override
std::bitset< NumInterruptTypes > ie
#define panic(...)
This implements a cprintf based panic() function.
virtual Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
Get a port with a given name and index.
constexpr enums::RiscvType RV32
constexpr enums::RiscvType RV64
Copyright (c) 2024 Arm Limited All rights reserved.
std::shared_ptr< FaultBase > Fault
std::ostream CheckpointOut
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
std::string csprintf(const char *format, const Args &...args)
IntSinkPinBase IntSinkPin
constexpr decltype(nullptr) NoFault
#define UNSERIALIZE_SCALAR(scalar)
#define SERIALIZE_SCALAR(scalar)