std1.0.0-beta-7 SafeC docs

Source interrupt/mmio.h

View in the repository

// SafeC Standard Library — MMIO Helpers
// Memory-mapped I/O read/write primitives. Freestanding-safe.
#pragma once

// ── MmioReg: single-register wrapper with methods ────────────────────────────
namespace std {

struct MmioReg {
    &volatile unsigned int addr;  // MMIO register address

    unsigned int read32() const;
    void         write32(unsigned int val);
    void         set_bits(unsigned int mask);
    void         clear_bits(unsigned int mask);
    unsigned int read_field(int lo, int hi) const;
    void         write_field(int lo, int hi, unsigned int val);

    // Create a MmioReg pointing at `addr`.
    static struct MmioReg at(&volatile unsigned int addr);
};

// ── Free-function API (backward-compatible) ───────────────────────────────────
unsigned int mmio_read32(&volatile unsigned int addr);
void         mmio_write32(&volatile unsigned int addr, unsigned int val);
unsigned int mmio_read16(&volatile unsigned short addr);
void         mmio_write16(&volatile unsigned short addr, unsigned int val);
unsigned int mmio_read8(&volatile unsigned char addr);
void         mmio_write8(&volatile unsigned char addr, unsigned int val);
void         mmio_set_bits32(&volatile unsigned int addr, unsigned int mask);
void         mmio_clear_bits32(&volatile unsigned int addr, unsigned int mask);
unsigned int mmio_read_field32(&volatile unsigned int addr, int lo, int hi);
void         mmio_write_field32(&volatile unsigned int addr, int lo, int hi, unsigned int val);

} // namespace std