SystemC Library API Reference Manual
Reference documentation for the Simics SystemC Library.
 
Loading...
Searching...
No Matches
i3c_slave_simics_adapter.h
Go to the documentation of this file.
1/*
2 © 2021 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_IFACE_I3C_SLAVE_SIMICS_ADAPTER_H
15#define SIMICS_SYSTEMC_IFACE_I3C_SLAVE_SIMICS_ADAPTER_H
16
17#include <simics/devs/i3c.h>
21
22#include <string>
23#include <vector>
24
25namespace simics {
26namespace systemc {
27namespace iface {
28
29template<typename TBase, typename TInterface = I3cSlaveInterface>
31 : public SimicsAdapter<i3c_slave_interface_t> {
32 public:
34 : SimicsAdapter<i3c_slave_interface_t>(
35 I3C_SLAVE_INTERFACE, init_iface()) {
36 }
37
38 protected:
39 static void start(conf_object_t *obj, uint8_t address) {
40 adapter<TBase, TInterface>(obj)->start(address);
41 }
42 static void write(conf_object_t *obj, uint8_t value) {
43 adapter<TBase, TInterface>(obj)->write(value);
44 }
45 static void sdr_write(conf_object_t *obj, ::bytes_t data) {
46 types::bytes_t bytes;
47 bytes.data = data.data;
48 bytes.len = data.len;
49 adapter<TBase, TInterface>(obj)->sdr_write(bytes);
50 }
51 static void read(conf_object_t *obj) {
52 adapter<TBase, TInterface>(obj)->read();
53 }
54 static void daa_read(conf_object_t *obj) {
55 adapter<TBase, TInterface>(obj)->daa_read();
56 }
57 static void stop(conf_object_t *obj) {
58 adapter<TBase, TInterface>(obj)->stop();
59 }
60 static void ibi_start(conf_object_t *obj) {
61 adapter<TBase, TInterface>(obj)->ibi_start();
62 }
63 static void ibi_acknowledge(conf_object_t *obj, ::i3c_ack_t ack) {
64 adapter<TBase, TInterface>(obj)->ibi_acknowledge(
65 ack == I3C_ack ? types::I3C_ack : types::I3C_noack);
66 }
67
68 private:
69 std::vector<std::string> description(conf_object_t *obj,
70 DescriptionType type) override {
71 return descriptionBase<TBase, TInterface>(obj, type);
72 }
73 i3c_slave_interface_t init_iface() {
74 i3c_slave_interface_t iface = {};
75 iface.start = start;
76 iface.write = write;
77 iface.sdr_write = sdr_write;
78 iface.read = read;
79 iface.daa_read = daa_read;
80 iface.stop = stop;
81 iface.ibi_start = ibi_start;
82 iface.ibi_acknowledge = ibi_acknowledge;
83 return iface;
84 }
85};
86
87} // namespace iface
88} // namespace systemc
89} // namespace simics
90
91#endif
Definition: i3c_slave_simics_adapter.h:31
static void start(conf_object_t *obj, uint8_t address)
Definition: i3c_slave_simics_adapter.h:39
I3cSlaveSimicsAdapter()
Definition: i3c_slave_simics_adapter.h:33
static void read(conf_object_t *obj)
Definition: i3c_slave_simics_adapter.h:51
static void write(conf_object_t *obj, uint8_t value)
Definition: i3c_slave_simics_adapter.h:42
static void ibi_start(conf_object_t *obj)
Definition: i3c_slave_simics_adapter.h:60
static void ibi_acknowledge(conf_object_t *obj, ::i3c_ack_t ack)
Definition: i3c_slave_simics_adapter.h:63
static void sdr_write(conf_object_t *obj, ::bytes_t data)
Definition: i3c_slave_simics_adapter.h:45
static void daa_read(conf_object_t *obj)
Definition: i3c_slave_simics_adapter.h:54
static void stop(conf_object_t *obj)
Definition: i3c_slave_simics_adapter.h:57
Base class for mapping Simics interface to a C++ interface.
Definition: simics_adapter.h:45
DescriptionType
Definition: description_interface.h:23
@ I3C_ack
Definition: i3c_ack.h:21
@ I3C_noack
Definition: i3c_ack.h:22
Definition: adapter.h:79
Definition: bytes.h:26
const uint8_t * data
Definition: bytes.h:27
size_t len
Definition: bytes.h:28