Software APIs
spi_passthru.h
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 #ifndef OPENTITAN_SW_DEVICE_LIB_TESTING_JSON_SPI_PASSTHRU_H_
5 #define OPENTITAN_SW_DEVICE_LIB_TESTING_JSON_SPI_PASSTHRU_H_
6 
7 #include "sw/device/lib/ujson/ujson_derive.h"
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 // clang-format off
12 
13 #define MODULE_ID MAKE_MODULE_ID('j', 's', 'p')
14 
15 #define STRUCT_CONFIG_JEDEC_ID(field, string) \
16  field(device_id, uint16_t) \
17  field(manufacturer_id, uint8_t) \
18  field(continuation_code, uint8_t) \
19  field(continuation_len, uint8_t)
20 UJSON_SERDE_STRUCT(ConfigJedecId, config_jedec_id_t, STRUCT_CONFIG_JEDEC_ID);
21 
22 #define STRUCT_STATUS_REGISTER(field, string) \
23  field(status, uint32_t) \
24  field(addr_4b, bool)
25 UJSON_SERDE_STRUCT(StatusRegister, status_register_t, STRUCT_STATUS_REGISTER);
26 
27 #define STRUCT_SFDP_DATA(field, string) \
28  field(data, uint8_t, 256)
29 UJSON_SERDE_STRUCT(SfdpData, sfdp_data_t, STRUCT_SFDP_DATA);
30 
31 #define STRUCT_UPLOAD_INFO(field, string) \
32  field(opcode, uint8_t) \
33  field(has_address, bool) \
34  field(addr_4b, bool) \
35  field(data_len, uint16_t) \
36  field(flash_status, uint32_t) \
37  field(address, uint32_t) \
38  field(data, uint8_t, 256)
39 UJSON_SERDE_STRUCT(UploadInfo, upload_info_t, STRUCT_UPLOAD_INFO);
40 
41 #define STRUCT_SPI_FLASH_READ_ID(field, string) \
42  field(device_id, uint16_t) \
43  field(manufacturer_id, uint8_t) \
44  field(continuation_len, uint8_t)
45 UJSON_SERDE_STRUCT(SpiFlashReadId, spi_flash_read_id_t,
46  STRUCT_SPI_FLASH_READ_ID);
47 
48 #define STRUCT_SPI_MAILBOX_MAP(field, string) \
49  field(address, uint32_t)
50 UJSON_SERDE_STRUCT(SpiMailboxMap, spi_mailbox_map_t,
51  STRUCT_SPI_MAILBOX_MAP);
52 
53 #define STRUCT_SPI_MAILBOX_WRITE(field, string) \
54  field(offset, uint16_t) \
55  field(length, uint16_t) \
56  field(data, uint8_t, 256)
57 UJSON_SERDE_STRUCT(SpiMailboxWrite, spi_mailbox_write_t,
58  STRUCT_SPI_MAILBOX_WRITE);
59 
60 #define STRUCT_SPI_FLASH_READ_SFDP(field, string) \
61  field(address, uint32_t) \
62  field(length, uint16_t)
63 UJSON_SERDE_STRUCT(SpiFlashReadSfdp, spi_flash_read_sfdp_t,
64  STRUCT_SPI_FLASH_READ_SFDP);
65 
66 #define STRUCT_SPI_FLASH_ERASE_SECTOR(field, string) \
67  field(address, uint32_t) \
68  field(addr4b, bool)
69 UJSON_SERDE_STRUCT(SpiFlashEraseSector, spi_flash_erase_sector_t, STRUCT_SPI_FLASH_ERASE_SECTOR);
70 
71 #define STRUCT_SPI_FLASH_WRITE(field, string) \
72  field(address, uint32_t) \
73  field(addr4b, bool) \
74  field(data, uint8_t, 256) \
75  field(length, uint16_t)
76 UJSON_SERDE_STRUCT(SpiFlashWrite, spi_flash_write_t, STRUCT_SPI_FLASH_WRITE);
77 
78 #define STRUCT_SPI_PASSTHRU_SWAP_MAP(field, string) \
79  field(mask, uint32_t) \
80  field(value, uint32_t)
81 UJSON_SERDE_STRUCT(SpiPassthruSwapMap, spi_passthru_swap_map_t, STRUCT_SPI_PASSTHRU_SWAP_MAP);
82 
83 #undef MODULE_ID
84 
85 // clang-format on
86 #ifdef __cplusplus
87 }
88 #endif
89 #endif // OPENTITAN_SW_DEVICE_LIB_TESTING_JSON_SPI_PASSTHRU_H_