The access_simple() function is similar to access() but takes some additional arguments instead of a complete generic_transaction_t structure. An inquiry version of this function is available as access_simple_inq(). Both these functions can perform endian conversion if the buffer pointed to by buf contains a value in host endian byte-order. To avoid endian conversion, Sim_Endian_Target should be specified as endian. These two functions are not available from Python.
The functions read() and write() operate on data in an attr_value_t format. This is useful for accesses from Python, but they can also be used from C/C++. The value returned by read() is statically allocated and should be copied to a destination buffer directly after the call. The largest amount of data that can be transferred in a single read() call is 1024 bytes. If the write() function fails, the pseudo exception is returned as an integer.
#define MEMORY_SPACE_INTERFACE "memory_space"
struct memory_space_interface {
map_list_t *(*space_lookup)(conf_object_t *NOTNULL obj,
generic_transaction_t *NOTNULL mop,
map_info_t mapinfo);
exception_type_t (*access)(conf_object_t *NOTNULL obj,
generic_transaction_t *NOTNULL mop);
exception_type_t (*access_simple)(conf_object_t *obj,
conf_object_t *initiator,
physical_address_t addr,
char *buf,
physical_address_t len,
read_or_write_t type,
endianness_t endian);
exception_type_t (*access_simple_inq)(conf_object_t *obj,
conf_object_t *initiator,
physical_address_t addr,
char *buf,
physical_address_t len,
read_or_write_t type,
endianness_t endian);
attr_value_t (*read)(conf_object_t *NOTNULL obj,
conf_object_t *initiator,
physical_address_t addr,
int length,
int inquiry);
exception_type_t (*write)(conf_object_t *NOTNULL obj,
conf_object_t *initiator,
physical_address_t addr,
attr_value_t data,
int inquiry);
cycles_t (*timing_model_operate)(conf_object_t *NOTNULL space,
generic_transaction_t *NOTNULL mop);
};