Go to the documentation of this file.
50 #ifndef __ARCH_X86_INTERRUPTS_HH__
51 #define __ARCH_X86_INTERRUPTS_HH__
61 #include "params/X86LocalApic.hh"
206 void init()
override;
222 return entry.periodic;
231 if (if_name ==
"int_requestor") {
233 }
else if (if_name ==
"int_responder") {
235 }
else if (if_name ==
"pio") {
293 panic(
"Interrupts::post unimplemented!\n");
299 panic(
"Interrupts::clear unimplemented!\n");
305 panic(
"Interrupts::clearAll unimplemented!\n");
311 #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.
int findMsbSet(uint64_t val)
Returns the bit position of the MSB that is set in the input.
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.
const Params * params() const
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.
X86LocalApicParams Params
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.
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.
BaseInterruptsParams Params
void post(int int_num, int index) override
This is exposed globally, independent of the ISA.
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
uint32_t readReg(ApicRegIndex miscReg)
void setRegArrayBit(ApicRegIndex base, uint8_t vector)
const SimObjectParams * _params
Cached copy of the object parameters.
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
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.
T bits(T val, int first, int last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Generated on Wed Sep 30 2020 14:01:58 for gem5 by doxygen 1.8.17