14#ifndef SIMICS_SYSTEMC_IFACE_SPI_SLAVE_SIMICS_ADAPTER_H
15#define SIMICS_SYSTEMC_IFACE_SPI_SLAVE_SIMICS_ADAPTER_H
17#include <simics/devs/serial-peripheral-interface.h>
21#include <simics/base/types.h>
22#include <simics/util/dbuffer.h>
32template<
typename TBase,
typename TInterface = SpiSlaveInterface>
34 :
public SimicsAdapter<serial_peripheral_interface_slave_interface_t> {
37 :
SimicsAdapter<serial_peripheral_interface_slave_interface_t>(
38 SERIAL_PERIPHERAL_INTERFACE_SLAVE_INTERFACE, init_iface()) {
42 static void spi_request(conf_object_t *obj,
int first,
int last,
43 int bits, dbuffer_t *payload) {
47 bytes_t data = dbuffer_bytes(payload);
48 if ((bits + 7) / 8 !=
static_cast<int>(data.len)) {
50 "Mismatch of the payload buffer size (%lu) %s (%d)",
51 data.len,
"with ceil(bits / 8)", (bits + 7) / 8);
53 adapter<TBase, TInterface>(obj)->spi_request(first, last,
59 serial_peripheral_interface_flags_t flags) {
60 adapter<TBase, TInterface>(obj)->connect_master(master, port, flags);
64 adapter<TBase, TInterface>(obj)->disconnect_master(master);
68 std::vector<std::string> description(conf_object_t *obj,
70 return descriptionBase<TBase, TInterface>(obj, type);
72 serial_peripheral_interface_slave_interface_t init_iface() {
73 serial_peripheral_interface_slave_interface_t iface = {};
Base class for mapping Simics interface to a C++ interface.
Definition: simics_adapter.h:45
Adapter for Simics serial_peripheral_interface_slave interface.
Definition: spi_slave_simics_adapter.h:34
static void spi_request(conf_object_t *obj, int first, int last, int bits, dbuffer_t *payload)
Definition: spi_slave_simics_adapter.h:42
static void connect_master(conf_object_t *obj, conf_object_t *master, const char *port, serial_peripheral_interface_flags_t flags)
Definition: spi_slave_simics_adapter.h:57
static void disconnect_master(conf_object_t *obj, conf_object_t *master)
Definition: spi_slave_simics_adapter.h:63
SpiSlaveSimicsAdapter()
Definition: spi_slave_simics_adapter.h:36
DescriptionType
Definition: description_interface.h:23