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