5 #ifndef OPENTITAN_SW_DEVICE_LIB_CRYPTO_DRIVERS_OTBN_H_
6 #define OPENTITAN_SW_DEVICE_LIB_CRYPTO_DRIVERS_OTBN_H_
12 #include "sw/device/lib/crypto/impl/status.h"
23 kOtbnWideWordNumBits = 256,
25 kOtbnWideWordNumBytes = kOtbnWideWordNumBits / 8,
27 kOtbnWideWordNumWords = kOtbnWideWordNumBytes /
sizeof(uint32_t),
105 #define OTBN_SYMBOL_PTR(app_name, sym) _otbn_local_app_##app_name##_##sym
116 #define OTBN_SYMBOL_ADDR(app_name, sym) _otbn_remote_app_##app_name##_##sym
125 #define OTBN_DECLARE_SYMBOL_PTR(app_name, symbol_name) \
126 extern const uint32_t OTBN_SYMBOL_PTR(app_name, symbol_name)[]
142 #define OTBN_DECLARE_SYMBOL_ADDR(app_name, symbol_name) \
143 extern const uint32_t OTBN_SYMBOL_ADDR(app_name, symbol_name)[]
157 #define OTBN_DECLARE_APP_SYMBOLS(app_name) \
158 OTBN_DECLARE_SYMBOL_PTR(app_name, _imem_start); \
159 OTBN_DECLARE_SYMBOL_PTR(app_name, _imem_end); \
160 OTBN_DECLARE_SYMBOL_PTR(app_name, _dmem_data_start); \
161 OTBN_DECLARE_SYMBOL_PTR(app_name, _dmem_data_end); \
162 OTBN_DECLARE_SYMBOL_ADDR(app_name, _dmem_data_start); \
163 OTBN_DECLARE_SYMBOL_ADDR(app_name, _checksum)
175 #define OTBN_APP_T_INIT(app_name) \
177 .imem_start = OTBN_SYMBOL_PTR(app_name, _imem_start), \
178 .imem_end = OTBN_SYMBOL_PTR(app_name, _imem_end), \
179 .dmem_data_start = OTBN_SYMBOL_PTR(app_name, _dmem_data_start), \
180 .dmem_data_end = OTBN_SYMBOL_PTR(app_name, _dmem_data_end), \
181 .dmem_data_start_addr = OTBN_ADDR_T_INIT(app_name, _dmem_data_start), \
182 .checksum = OTBN_ADDR_T_INIT(app_name, _checksum), \
188 #define OTBN_ADDR_T_INIT(app_name, symbol_name) \
189 ((uint32_t)OTBN_SYMBOL_ADDR(app_name, symbol_name))
205 status_t otbn_dmem_write(
size_t num_words,
const uint32_t *src,
222 status_t otbn_dmem_set(
size_t num_words,
const uint32_t src, otbn_addr_t dest);
238 status_t otbn_dmem_read(
size_t num_words, otbn_addr_t src, uint32_t *dest);
256 status_t otbn_busy_wait_for_done(
void);
263 uint32_t otbn_err_bits_get(
void);
279 uint32_t otbn_instruction_count_get(
void);
312 status_t otbn_set_ctrl_software_errs_fatal(
bool enable);