5 #ifndef OPENTITAN_SW_DEVICE_LIB_BASE_MMIO_H_ 6 #define OPENTITAN_SW_DEVICE_LIB_BASE_MMIO_H_ 43 #define MMIO_DEPRECATED 45 #ifdef OT_PLATFORM_RV32 63 .base = (
volatile void *)address,
80 return ((
volatile uint8_t *)base.base)[offset /
sizeof(uint8_t)];
95 inline uint32_t mmio_region_read32(
mmio_region_t base, ptrdiff_t offset) {
96 return ((
volatile uint32_t *)base.base)[offset /
sizeof(uint32_t)];
110 inline void mmio_region_write8(
mmio_region_t base, ptrdiff_t offset,
112 ((
volatile uint8_t *)base.base)[offset /
sizeof(uint8_t)] = value;
126 inline void mmio_region_write8_shadowed(
mmio_region_t base, ptrdiff_t offset,
128 ((
volatile uint8_t *)base.base)[offset /
sizeof(uint8_t)] = value;
129 ((
volatile uint8_t *)base.base)[offset /
sizeof(uint8_t)] = value;
143 inline void mmio_region_write32(
mmio_region_t base, ptrdiff_t offset,
145 ((
volatile uint32_t *)base.base)[offset /
sizeof(uint32_t)] = value;
159 inline void mmio_region_write32_shadowed(
mmio_region_t base, ptrdiff_t offset,
161 ((
volatile uint32_t *)base.base)[offset /
sizeof(uint32_t)] = value;
162 ((
volatile uint32_t *)base.base)[offset /
sizeof(uint32_t)] = value;
164 #else // OT_PLATFORM_RV32 183 uint8_t mmio_region_read8(
mmio_region_t base, ptrdiff_t offset);
185 uint32_t mmio_region_read32(
mmio_region_t base, ptrdiff_t offset);
187 void mmio_region_write8(
mmio_region_t base, ptrdiff_t offset, uint8_t value);
188 void mmio_region_write32(
mmio_region_t base, ptrdiff_t offset, uint32_t value);
189 void mmio_region_write8_shadowed(
mmio_region_t base, ptrdiff_t offset,
191 void mmio_region_write32_shadowed(
mmio_region_t base, ptrdiff_t offset,
193 #endif // OT_PLATFORM_RV32 210 uint32_t mask, uint32_t mask_index) {
212 mmio_region_read32(base, offset),
231 uint32_t bit_index) {
248 ptrdiff_t offset, uint32_t mask,
249 uint32_t mask_index) {
250 uint32_t register_value = mmio_region_read32(base, offset);
254 mmio_region_write32(base, offset, register_value);
270 ptrdiff_t offset, uint32_t mask,
271 uint32_t mask_index) {
272 uint32_t register_value = mmio_region_read32(base, offset);
276 mmio_region_write32(base, offset, register_value);
292 ptrdiff_t offset, uint32_t mask,
293 uint32_t mask_index) {
294 uint32_t register_value = 0x0u;
298 mmio_region_write32(base, offset, register_value);
320 uint32_t register_value = mmio_region_read32(base, offset);
322 mmio_region_write32(base, offset, register_value);
341 uint32_t register_value = 0x0u;
343 mmio_region_write32(base, offset, register_value);
359 uint32_t bit_index) {
360 uint32_t register_value = mmio_region_read32(base, offset);
362 mmio_region_write32(base, offset, register_value);
377 uint32_t bit_index) {
378 uint32_t register_value = mmio_region_read32(base, offset);
380 mmio_region_write32(base, offset, register_value);
398 uint32_t bit_index) {
399 uint32_t register_value = 0x0u;
401 mmio_region_write32(base, offset, register_value);
417 void *dest,
size_t len);
432 const void *src,
size_t len);
436 #endif // __cplusplus 438 #endif // OPENTITAN_SW_DEVICE_LIB_BASE_MMIO_H_