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