Software APIs
mem.c
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #define UJSON_SERDE_IMPL 1
6 #include "sw/device/lib/testing/json/mem.h"
7 
9 #include "sw/device/lib/testing/test_framework/ujson_ottf.h"
10 
11 #define MODULE_ID MAKE_MODULE_ID('j', 's', 'm')
12 
13 status_t ujcmd_mem_read32(ujson_t *uj) {
14  mem_read32_req_t op;
15  mem_read32_resp_t resp;
16  TRY(UJSON_WITH_CRC(ujson_deserialize_mem_read32_req_t, uj, &op));
17  if ((op.address % sizeof(uint32_t)) != 0) {
18  return INVALID_ARGUMENT();
19  }
20  resp.value = read_32((void *)op.address);
21  return RESP_OK(ujson_serialize_mem_read32_resp_t, uj, &resp);
22 }
23 
24 status_t ujcmd_mem_read(ujson_t *uj) {
25  mem_read_req_t op;
26  mem_read_resp_t resp;
27  TRY(UJSON_WITH_CRC(ujson_deserialize_mem_read_req_t, uj, &op));
28  if (op.data_len > sizeof(resp.data)) {
29  return INVALID_ARGUMENT();
30  }
31  memcpy(resp.data, (void *)op.address, op.data_len);
32  resp.data_len = op.data_len;
33  return RESP_OK(ujson_serialize_mem_read_resp_t, uj, &resp);
34 }
35 
36 status_t ujcmd_mem_write32(ujson_t *uj) {
37  mem_write32_req_t op;
38  TRY(UJSON_WITH_CRC(ujson_deserialize_mem_write32_req_t, uj, &op));
39  if ((op.address % sizeof(uint32_t)) != 0) {
40  return INVALID_ARGUMENT();
41  }
42  write_32(op.value, (void *)op.address);
43  return RESP_OK_STATUS(uj);
44 }
45 
46 status_t ujcmd_mem_write(ujson_t *uj) {
47  mem_write_req_t op;
48  TRY(UJSON_WITH_CRC(ujson_deserialize_mem_write_req_t, uj, &op));
49  if (op.data_len > sizeof(op.data)) {
50  return INVALID_ARGUMENT();
51  }
52  memcpy((void *)op.address, op.data, op.data_len);
53  return RESP_OK_STATUS(uj);
54 }