Go to the documentation of this file.
42 #ifndef __DEV_ARM_BASE_GIC_H__
43 #define __DEV_ARM_BASE_GIC_H__
46 #include <unordered_map>
53 #include "enums/ArmInterruptType.hh"
61 class ArmInterruptPin;
64 class ArmSigInterruptPin;
66 struct ArmInterruptPinParams;
69 struct ArmSigInterruptPinParams;
92 virtual void sendInt(uint32_t num) = 0;
100 virtual void sendPPInt(uint32_t num, uint32_t cpu) = 0;
101 virtual void clearPPInt(uint32_t num, uint32_t cpu) = 0;
111 virtual void clearInt(uint32_t num) = 0;
181 std::unordered_map<ContextID, ArmPPI*>
pins;
223 virtual void raise() = 0;
225 virtual void clear() = 0;
266 void raise()
override;
267 void clear()
override;
277 void raise()
override;
278 void clear()
override;
290 void raise()
override;
291 void clear()
override;
296 #endif // __DEV_ARM_BASE_GIC_H__
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
void serialize(CheckpointOut &cp) const override
Serialize an object.
const ThreadContext * threadContext
Pointer to the thread context that owns this interrupt in case it is a thread-/CPU-private interrupt.
ArmSystem * getSystem() const
const uint32_t intNum
Interrupt number to generate.
ArmInterruptPin * get(ThreadContext *tc=nullptr) override
This device is the base class which all devices senstive to an address range inherit from.
ArmSPIGen(const ArmSPIParams &p)
std::vector< std::unique_ptr< IntSourcePin< ArmSigInterruptPinGen > > > sigPin
void unserialize(CheckpointIn &cp) override
Unserialize an object.
ArmSigInterruptPinGen(const ArmSigInterruptPinParams &p)
uint32_t num() const
Get interrupt number.
Platform * platform
Platform this GIC belongs to.
ArmSPI(const ArmSPIParams &p)
virtual uint32_t readCpu(ContextID ctx, Addr daddr)=0
const PortID InvalidPortID
ArmInterruptPin(const ArmInterruptPinParams &p, ThreadContext *tc)
Shared Peripheral Interrupt Generator It is capable of generating one interrupt only: it maintains a ...
ContextID targetContext() const
Get the target context ID of this interrupt.
void clear() override
Clear a signalled interrupt.
std::unordered_map< ContextID, ArmPPI * > pins
Basic support for object serialization.
ArmSigInterruptPin(const ArmSigInterruptPinParams &p)
void clear() override
Clear a signalled interrupt.
virtual void writeCpu(ContextID ctx, Addr daddr, uint32_t data)=0
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual void clearPPInt(uint32_t num, uint32_t cpu)=0
ArmInterruptPin * get(ThreadContext *tc=nullptr) override
bool _active
True if interrupt pin is active, false otherwise.
virtual void clear()=0
Clear a signalled interrupt.
virtual bool supportsVersion(GicVersion version)=0
Check if version supported.
ArmInterruptPin * get(ThreadContext *tc=nullptr) override
const Params & params() const
Port & getPort(const std::string &if_name, PortID idx=InvalidPortID) override
Get a port with a given name and index.
Abstract superclass for simulation objects.
virtual void sendInt(uint32_t num)=0
Post an interrupt from a device that is connected to the GIC.
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
ArmPPIGen(const Params &p)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
virtual void writeDistributor(ContextID ctx, Addr daddr, uint32_t data)=0
virtual uint32_t readDistributor(ContextID ctx, Addr daddr)=0
RealView *const platform
Arm platform to use for interrupt generation.
void clear() override
Clear a signalled interrupt.
ArmPPI(const ArmPPIParams &p, ThreadContext *tc)
virtual ArmInterruptPin * get(ThreadContext *tc=nullptr)=0
void setThreadContext(ThreadContext *tc)
Set the thread context owning this interrupt.
virtual void clearInt(uint32_t num)=0
Clear an interrupt from a device that is connected to the GIC.
Ports are used to interface objects to each other.
int ContextID
Globally unique thread context ID.
Generic representation of an Arm interrupt pin.
std::ostream CheckpointOut
ArmInterruptPinGen(const ArmInterruptPinParams &p)
virtual void sendPPInt(uint32_t num, uint32_t cpu)=0
Interface call for private peripheral interrupts.
bool active() const
True if interrupt pin is active, false otherwise.
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
const ArmInterruptType triggerType
Interrupt triggering type.
Private Peripheral Interrupt Generator Since PPIs are banked in the GIC, this class is capable of gen...
This SimObject is instantiated in the python world and serves as an ArmInterruptPin generator.
Generated on Wed Jul 28 2021 12:10:25 for gem5 by doxygen 1.8.17