Go to the documentation of this file.
50 #ifndef __ARCH_X86_INTERRUPTS_HH__
51 #define __ARCH_X86_INTERRUPTS_HH__
61 #include "params/X86LocalApic.hh"
200 void init()
override;
216 return entry.periodic;
225 if (if_name ==
"int_requestor") {
227 }
else if (if_name ==
"int_responder") {
229 }
else if (if_name ==
"pio") {
287 panic(
"Interrupts::post unimplemented!\n");
293 panic(
"Interrupts::clear unimplemented!\n");
299 panic(
"Interrupts::clearAll unimplemented!\n");
305 #endif // __ARCH_X86_INTERRUPTS_HH__
PioPort< Interrupts > pioPort
void completeIPI(PacketPtr pkt)
void requestInterrupt(uint8_t vector, uint8_t deliveryMode, bool level)
void setRegNoEffect(ApicRegIndex reg, uint32_t val)
const PortID InvalidPortID
void unserialize(CheckpointIn &cp) override
Unserialize an object.
AddrRangeList getAddrRanges() const
void clearRegArrayBit(ApicRegIndex base, uint8_t vector)
IntRequestPort< Interrupts > intRequestPort
bool pendingUnmaskableInt
int findRegArrayMSB(ApicRegIndex base)
uint64_t Tick
Tick count type.
bool triggerTimerInterrupt()
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
IntResponsePort< Interrupts > intResponsePort
bool getRegArrayBit(ApicRegIndex base, uint8_t vector)
Bitfield< 10, 8 > deliveryMode
The ClockDomain provides clock to group of clocked objects bundled under the same clock domain.
void setReg(ApicRegIndex reg, uint32_t val)
AddrRangeList getIntAddrRange() const
ClockDomain & clockDomain
The PioPort class is a programmed i/o port that all devices that are sensitive to an address range us...
ThreadContext is the external interface to all thread state for anything outside of the CPU.
uint32_t regs[NUM_APIC_REGS]
virtual Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
Get a port with a given name and index.
X86LocalApicParams Params
std::shared_ptr< FaultBase > Fault
bool checkInterrupts() const override
Ports are used to interface objects to each other.
bool hasPendingUnmaskable() const
Check if there are pending unmaskable interrupts.
Interrupts(const Params &p)
void post(int int_num, int index) override
This is exposed globally, independent of the ISA.
BaseInterruptsParams Params
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void updateIntrInfo() override
bool checkInterruptsRaw() const
Check if there are pending interrupts without ignoring the interrupts disabled flag.
void serialize(CheckpointOut &cp) const override
Serialize an object.
void clear(int int_num, int index) override
constexpr int findMsbSet(uint64_t val)
Returns the bit position of the MSB that is set in the input.
uint32_t readReg(ApicRegIndex miscReg)
void setRegArrayBit(ApicRegIndex base, uint8_t vector)
EndBitUnion(LVTEntry) EventFunctionWrapper apicTimerEvent
BitUnion32(LVTEntry) Bitfield< 7
Tick recvMessage(PacketPtr pkt)
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
int divideFromConf(uint32_t conf)
ApicRegIndex decodeAddr(Addr paddr)
void processApicTimerEvent()
std::ostream CheckpointOut
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Tick write(PacketPtr pkt)
@ APIC_INTERRUPT_REQUEST_BASE
void setThreadContext(ThreadContext *_tc) override
Fault getInterrupt() override
Tick clockPeriod() const
Get the clock period.
#define panic(...)
This implements a cprintf based panic() function.
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Generated on Tue Jun 22 2021 15:28:19 for gem5 by doxygen 1.8.17