Memory-mapped I/O

These helpers expect and return little endian types (i.e. leint32_t) which may help with locating endianness related bugs using the sparse static analyzer.

leint32_t mmio_read32(void *addr)

read 4 bytes in memory-mapped register

Parameters

void *addr

memory-mapped register

Return

read value (native endian)

leint64_t mmio_lh_read64(void *addr)

read 8 bytes in memory-mapped register

Parameters

void *addr

memory-mapped register

Description

Read the low 4 bytes first, then the high 4 bytes.

Return

read value (native endian)

void mmio_write32(void *addr, leint32_t v)

write 4 bytes to memory-mapped register

Parameters

void *addr

memory-mapped register

leint32_t v

value to write (native endian)

void mmio_lh_write64(void *addr, leint64_t v)

write 8 bytes to memory-mapped register

Parameters

void *addr

memory-mapped register

leint64_t v

value to write (native endian)

Description

Write 8 bytes to memory-mapped register as two 4 byte writes (low bytes first, then high).

void mmio_hl_write64(void *addr, leint64_t v)

write 8 bytes to memory-mapped register

Parameters

void *addr

memory-mapped register

leint64_t v

value to write (native endian)

Description

Write 8 bytes to memory-mapped register as two 4 byte writes (high bytes first, then low).