Go to the documentation of this file.
38 #ifndef __DEV_ARM_GICV3_ITS_H__
39 #define __DEV_ARM_GICV3_ITS_H__
45 #include "params/Gicv3Its.hh"
76 friend class ::ItsProcess;
77 friend class ::ItsTranslation;
78 friend class ::ItsCommand;
121 static const uint64_t
BASER_SZ = 0x00000000000000FF;
157 Bitfield<31> quiescent;
173 Bitfield<63, 32>
high;
197 Bitfield<63, 32>
high;
227 bool idOutOfRange(uint32_t event_id, uint8_t itt_range) const;
285 VIRTUAL_INTERRUPT = 0,
286 PHYSICAL_INTERRUPT = 1
348 using DTE = Gicv3Its::DTE;
350 using CTE = Gicv3Its::CTE;
358 const std::string
name()
const;
369 Yield &yield,
const Addr itt_base, uint32_t event_id,
ITTE itte);
372 Yield &yield, uint32_t collection_id,
CTE cte);
375 Yield &yield, uint32_t device_id);
378 Yield &yield,
const Addr itt_base, uint32_t event_id);
525 const auto size =
bits(command.
raw[1], 4, 0);
526 const auto valid =
bits(command.
raw[2], 63);
bool deviceOutOfRange(uint32_t device_id) const
Returns TRUE if the value supplied has bits above the implemented range or if the value supplied exce...
Port & getPort(const std::string &if_name, PortID idx) override
Get a port with a given name and index.
Bitfield< 52, 48 > entrySize
static const AddrRange GITS_BASER
bool collectionOutOfRange(uint32_t collection_id) const
Returns TRUE if the value supplied has bits above the implemented range or if the value exceeds the t...
AddrRangeList getAddrRanges() const override
Every PIO device is obliged to provide an implementation that returns the address ranges the device r...
void movall(Yield &yield, CommandEntry &command)
Gicv3Its(const Gicv3ItsParams *params)
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
bool deviceOutOfRange(CommandEntry &command) const
void vmapp(Yield &yield, CommandEntry &command)
CallerType: A reference to an object of this class will be passed to the coroutine task.
void doInt(Yield &yield, CommandEntry &command)
void vsync(Yield &yield, CommandEntry &command)
ItsProcess(Gicv3Its &_its)
Bitfield< 7, 4 > ittEntrySize
void writeDeviceTable(Yield &yield, uint32_t device_id, DTE dte)
bool recvTimingResp(PacketPtr pkt)
void moveAllPendingState(Gicv3Redistributor *rd1, Gicv3Redistributor *rd2)
std::pair< uint32_t, Gicv3Redistributor * > translateLPI(Yield &yield, uint32_t device_id, uint32_t event_id)
EventFunctionWrapper commandEvent
static std::string commandName(uint32_t cmd)
std::unique_ptr< Coroutine > coroutine
std::vector< BASER > tableBases
DataPort(const std::string &_name, Gicv3Its &_its)
static const uint32_t itsTranslate
Bitfield< 61, 59 > innerCache
void serialize(CheckpointOut &cp) const override
Serialize an object.
uint64_t Tick
Tick count type.
Bitfield< 51, 12 > physAddr
void doWrite(Yield &yield, Addr addr, void *ptr, size_t size)
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
ItsAction runProcessTiming(ItsProcess *proc, PacketPtr pkt)
void mapi(Yield &yield, CommandEntry &command)
static const uint64_t BASER_ESZ
void sync(Yield &yield, CommandEntry &command)
Bitfield< 17, 13 > devBits
void movi(Yield &yield, CommandEntry &command)
void unserialize(CheckpointIn &cp) override
Unserialize an object.
BitUnion64(DTE) Bitfield< 57
bool collectionOutOfRange(CommandEntry &command) const
ItsAction run(PacketPtr pkt)
DrainState
Object drain/handover states.
static const uint64_t BASER_WMASK
BitUnion32(CTLR) Bitfield< 31 > quiescent
Addr pageAddress(enum ItsTables table)
bool sizeOutOfRange(uint32_t size) const
Returns TRUE if the value (size) supplied exceeds the maximum allowed by GITS_TYPER....
static const uint64_t BASER_TYPE
bool idOutOfRange(uint32_t event_id, uint8_t itt_range) const
Returns TRUE if the eventID supplied has bits above the implemented size or above the itt_range.
static const uint32_t itsControl
A virtual base opaque structure used to hold state associated with the packet (e.g....
void main(Yield &yield) override
The AddrRange class encapsulates an address range, and supports a number of tests to check if two ran...
bool sizeOutOfRange(CommandEntry &command) const
void mapd(Yield &yield, CommandEntry &command)
bool lpiOutOfRange(uint32_t intid) const
Returns TRUE if the value supplied is larger than that permitted by GICD_TYPER.IDbits or not in the L...
Bitfield< 9, 8 > pageSize
Ports are used to interface objects to each other.
const std::string name() const
Returns the Gicv3Its name.
void clear(Yield &yield, CommandEntry &command)
void vmapi(Yield &yield, CommandEntry &command)
void writeIrqTranslationTable(Yield &yield, const Addr itt_base, uint32_t event_id, ITTE itte)
void doRead(Yield &yield, Addr addr, void *ptr, size_t size)
static const uint64_t BASER_SZ
std::unordered_map< std::underlying_type< enum CommandType >::type, DispatchEntry > DispatchTable
bool idOutOfRange(CommandEntry &command, DTE dte) const
bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the peer.
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
EndBitUnion(CTLR) BitUnion64(CRDWR) Bitfield< 63
void vmapti(Yield &yield, CommandEntry &command)
Bitfield< 35, 32 > cidBits
uint64_t readDeviceTable(Yield &yield, uint32_t device_id)
This template defines a Coroutine wrapper type with a Boost-like interface.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
std::function< void(ItsCommand *, Yield &, CommandEntry &)> ExecFn
An ItsCommand is created whenever there is a new command in the command queue.
void terminate(Yield &yield)
void vmovp(Yield &yield, CommandEntry &command)
void vmovi(Yield &yield, CommandEntry &command)
void incrementReadPointer()
void mapc(Yield &yield, CommandEntry &command)
const Params * params() const
uint64_t maxCommands() const
static const uint64_t BASER_WMASK_UNIMPL
Gicv3Redistributor * getRedistributor(uint64_t rd_base)
DrainState drain() override
Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are pa...
Bitfield< 52, 1 > ittAddress
uint64_t readIrqTranslationTable(Yield &yield, const Addr itt_base, uint32_t event_id)
void writeIrqCollectionTable(Yield &yield, uint32_t collection_id, CTE cte)
void discard(Yield &yield, CommandEntry &command)
void vinvall(Yield &yield, CommandEntry &command)
Dispatch entry is a metadata struct which contains information about the command (like the name) and ...
void inv(Yield &yield, CommandEntry &command)
void recvReqRetry()
Called by the peer if sendTimingReq was called on this peer (causing recvTimingReq to be called on th...
virtual void main(Yield &yield)=0
Overload hash function for BasicBlockRange type.
ItsCommand(Gicv3Its &_its)
void invall(Yield &yield, CommandEntry &command)
Bitfield< 7, 4 > itsNumber
Tick write(PacketPtr pkt) override
Pure virtual function that the device must implement.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Gicv3Redistributor * getRedistributor(CTE cte)
Bitfield< 29, 16 > intNumHyp
ItsAction runProcess(ItsProcess *proc, PacketPtr pkt)
static const uint32_t CTLR_QUIESCENT
void mapti(Yield &yield, CommandEntry &command)
void translate(PacketPtr pkt)
std::ostream CheckpointOut
DispatchEntry(std::string _name, ExecFn _exec)
An ItsTranslation is created whenever a peripheral writes a message in GITS_TRANSLATER (MSI).
void main(Yield &yield) override
Bitfield< 55, 53 > outerCache
void processCommand(Yield &yield, CommandEntry &command)
std::queue< ItsAction > packetsToRetry
static DispatchTable cmdDispatcher
uint64_t readIrqCollectionTable(Yield &yield, uint32_t collection_id)
uint32_t pendingTranslations
void readCommand(Yield &yield, CommandEntry &command)
ItsAction runProcessAtomic(ItsProcess *proc, PacketPtr pkt)
ItsTranslation(Gicv3Its &_its)
static const uint32_t NUM_BASER_REGS
Bitfield< 11, 10 > shareability
static const uint64_t BASER_INDIRECT
ItsProcess is a base coroutine wrapper which is spawned by the Gicv3Its module when the latter needs ...
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:02:10 for gem5 by doxygen 1.8.17