SystemC Library API Reference Manual
Reference documentation for the Simics SystemC Library.
 
Loading...
Searching...
No Matches
direct_memory_update.h
Go to the documentation of this file.
1/*
2 © 2015 Intel Corporation
3
4 This software and the related documents are Intel copyrighted materials, and
5 your use of them is governed by the express license under which they were
6 provided to you ("License"). Unless the License provides otherwise, you may
7 not use, modify, copy, publish, distribute, disclose or transmit this software
8 or the related documents without Intel's prior written permission.
9
10 This software and the related documents are provided as is, with no express or
11 implied warranties, other than those that are expressly stated in the License.
12*/
13
14#ifndef SIMICS_SYSTEMC_SIMICS2TLM_DIRECT_MEMORY_UPDATE_H
15#define SIMICS_SYSTEMC_SIMICS2TLM_DIRECT_MEMORY_UPDATE_H
16
20
21namespace simics {
22namespace systemc {
23namespace simics2tlm {
24
34 public:
35 DirectMemoryUpdate() : direct_memory_provider_("direct_memory") {}
38 virtual ~DirectMemoryUpdate() = default;
39
40 void release(conf_object_t *target,
41 direct_memory_handle_t handle,
42 direct_memory_ack_id_t id) override {
43 invalidate_direct_mem_ptr(target, handle, id);
44 }
45 void update_permission(conf_object_t *target,
46 direct_memory_handle_t handle,
47 access_t lost_access,
48 access_t lost_permission,
49 access_t lost_inhibit,
50 direct_memory_ack_id_t id) override {
51 invalidate_direct_mem_ptr(target, handle, id);
52 }
53 void conflicting_access(conf_object_t *target,
54 direct_memory_handle_t handle,
55 access_t conflicting_permission,
56 direct_memory_ack_id_t id) override {
57 // Assuming the systemc device does not construct any internal caches
58 // based on the DMI pointer we don't have to do anything here.
59 direct_memory(target)->ack(target, id);
60 }
61
62 // Deprecated
64 }
65
66 protected:
67 // Helper function
69 ConfObjectRef target) {
70 if (target != direct_memory_provider_.target()) {
71 direct_memory_provider_.set_target(target);
72 }
73
74 return direct_memory_provider_.get_interface<
75 const direct_memory_interface_t>();
76 }
77 void invalidate_direct_mem_ptr(conf_object_t *target,
78 direct_memory_handle_t handle,
79 direct_memory_ack_id_t id) {
81 direct_memory(target);
82 void *user_data = dm_iface->get_user_data(target, handle);
84 static_cast<tlm2simics::GasketInterface *>(user_data);
85 if (gasket) {
86 // TODO(zeffer): We don't have to invalidate all pages here. Add
87 // fine-grain invalidation mechanism based on adapter_pages concept
89 static_cast<sc_dt::uint64>(-1));
90 }
91
92 dm_iface->ack(target, id);
93 }
94
95 private:
96 InterfaceProvider direct_memory_provider_;
97};
98
99} // namespace simics2tlm
100} // namespace systemc
101} // namespace simics
102
103#endif
Returns the interface provided by the associated Simics object.
Definition: interface_provider.h:30
virtual void set_target(const ConfObjectRef &obj)
Definition: interface_provider.h:56
SimicsTargetLock< TInterface > get_interface()
Definition: interface_provider.h:92
virtual const simics::ConfObjectRef & target() const
Definition: interface_provider.h:79
Definition: simics_target_lock.h:25
Simics direct_memory_update interface.
Definition: direct_memory_update_interface.h:24
Class that implements the Simics direct_memory_update interface.
Definition: direct_memory_update.h:33
DirectMemoryUpdate & operator=(const DirectMemoryUpdate &)=delete
void update_permission(conf_object_t *target, direct_memory_handle_t handle, access_t lost_access, access_t lost_permission, access_t lost_inhibit, direct_memory_ack_id_t id) override
Definition: direct_memory_update.h:45
void conflicting_access(conf_object_t *target, direct_memory_handle_t handle, access_t conflicting_permission, direct_memory_ack_id_t id) override
Definition: direct_memory_update.h:53
void set_gasket(tlm2simics::GasketInterface::Ptr gasket)
Definition: direct_memory_update.h:63
DirectMemoryUpdate()
Definition: direct_memory_update.h:35
void release(conf_object_t *target, direct_memory_handle_t handle, direct_memory_ack_id_t id) override
Definition: direct_memory_update.h:40
void invalidate_direct_mem_ptr(conf_object_t *target, direct_memory_handle_t handle, direct_memory_ack_id_t id)
Definition: direct_memory_update.h:77
SimicsTargetLock< const direct_memory_interface_t > direct_memory(ConfObjectRef target)
Definition: direct_memory_update.h:68
DirectMemoryUpdate(const DirectMemoryUpdate &)=delete
Interface used by tlm2simics gaskets, implemented by Gasket base class.
Definition: gasket_interface.h:28
virtual void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range)=0
Calling this method will end up calling the same method on the target socket, that will forward the c...
std::shared_ptr< GasketInterface > Ptr
Definition: gasket_interface.h:30
Definition: adapter.h:79