quic/qbox
|
Exclusive load/store TLM extension. More...
#include <exclusive-access.h>
Classes | |
class | InitiatorId |
Public Types | |
enum | ExclusiveStoreStatus { EXCLUSIVE_STORE_NA = 0 , EXCLUSIVE_STORE_SUCCESS , EXCLUSIVE_STORE_FAILURE } |
Public Member Functions | |
ExclusiveAccessTlmExtension (const ExclusiveAccessTlmExtension &)=default | |
virtual tlm_extension_base * | clone () const override |
virtual void | copy_from (const tlm_extension_base &ext) override |
void | set_exclusive_store_success () |
void | set_exclusive_store_failure () |
ExclusiveStoreStatus | get_exclusive_store_status () const |
void | add_hop (int id) |
const InitiatorId & | get_initiator_id () const |
Exclusive load/store TLM extension.
Exclusive load/store TLM extension. It embeds an initiator ID (InitiatorId) and a store status (ExclusiveStoreStatus).
The initiator ID is meant to be composed by all the routers on the path that support this extension. Each router can call add_hop on the extension with an unique ID correponding to the initiator the request is comming from (typically the index of the initiator on the router). The first initiator is not required call add_hop since an empty InitiatorId is a perfectly valid ID (in the case the initiator would be directly connected to a target, without routers in between). It can still do it if it needs to emit exclusive transactions with different exclusive IDs.
The store status is valid after a TLM_WRITE_COMMAND transaction and indicate whether the exclusive store succeeded or not.