Go to the documentation of this file.
42 #ifndef __DEV_ARM_BASE_GIC_H__
43 #define __DEV_ARM_BASE_GIC_H__
45 #include <unordered_map>
57 struct ArmInterruptPinParams;
82 virtual void sendInt(uint32_t num) = 0;
90 virtual void sendPPInt(uint32_t num, uint32_t cpu) = 0;
91 virtual void clearPPInt(uint32_t num, uint32_t cpu) = 0;
101 virtual void clearInt(uint32_t num) = 0;
170 std::unordered_map<ContextID, ArmPPI*>
pins;
200 virtual void raise() = 0;
202 virtual void clear() = 0;
240 void raise()
override;
241 void clear()
override;
251 void raise()
override;
252 void clear()
override;
ArmSPI(Platform *platform, uint32_t int_num)
Private Peripheral Interrupt Generator Since PPIs are banked in the GIC, this class is capable of gen...
void clear() override
Clear a signalled interrupt.
ArmSPIGen(const ArmSPIParams *p)
virtual ArmInterruptPin * get(ThreadContext *tc=nullptr)=0
std::unordered_map< ContextID, ArmPPI * > pins
virtual void clear()=0
Clear a signalled interrupt.
Basic support for object serialization.
void setThreadContext(ThreadContext *tc)
Set the thread context owning this interrupt.
int ContextID
Globally unique thread context ID.
ArmInterruptPin * get(ThreadContext *tc=nullptr) override
bool _active
True if interrupt pin is active, false otherwise.
virtual bool supportsVersion(GicVersion version)=0
Check if version supported.
uint32_t num() const
Get interrupt number.
const uint32_t intNum
Interrupt number to generate.
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
ArmInterruptPin * get(ThreadContext *tc=nullptr) override
Shared Peripheral Interrupt Generator It is capable of generating one interrupt only: it maintains a ...
This device is the base class which all devices senstive to an address range inherit from.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
ContextID targetContext() const
Get the target context ID of this interrupt.
ArmInterruptPin(Platform *platform, ThreadContext *tc, uint32_t int_num)
This SimObject is instantiated in the python world and serves as an ArmInterruptPin generator.
void clear() override
Clear a signalled interrupt.
Platform * platform
Platform this GIC belongs to.
virtual void writeCpu(ContextID ctx, Addr daddr, uint32_t data)=0
virtual void writeDistributor(ContextID ctx, Addr daddr, uint32_t data)=0
ArmInterruptPinGen(const ArmInterruptPinParams *p)
const ThreadContext * threadContext
Pointer to the thread context that owns this interrupt in case it is a thread-/CPU-private interrupt.
virtual void clearPPInt(uint32_t num, uint32_t cpu)=0
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
RealView *const platform
Arm platform to use for interrupt generation.
bool active() const
True if interrupt pin is active, false otherwise.
virtual void sendInt(uint32_t num)=0
Post an interrupt from a device that is connected to the GIC.
virtual void clearInt(uint32_t num)=0
Clear an interrupt from a device that is connected to the GIC.
virtual uint32_t readDistributor(ContextID ctx, Addr daddr)=0
Generic representation of an Arm interrupt pin.
std::ostream CheckpointOut
ArmSystem * getSystem() const
const Params * params() const
virtual void sendPPInt(uint32_t num, uint32_t cpu)=0
Interface call for private peripheral interrupts.
ArmPPIGen(const ArmPPIParams *p)
void serialize(CheckpointOut &cp) const override
Serialize an object.
void unserialize(CheckpointIn &cp) override
Unserialize an object.
ArmPPI(Platform *platform, ThreadContext *tc, uint32_t int_num)
virtual uint32_t readCpu(ContextID ctx, Addr daddr)=0
Abstract superclass for simulation objects.
Generated on Wed Sep 30 2020 14:02:10 for gem5 by doxygen 1.8.17