diff --git a/paw/stos/head/hal/mmio.h b/paw/stos/head/hal/mmio.h new file mode 100644 index 0000000..67b3e4d --- /dev/null +++ b/paw/stos/head/hal/mmio.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2026, Chloe M. + * Provided under the BSD-3 clause. + * + * Description: MMIO helpers + * Author: Chloe M. + */ + +#ifndef _MU_MMIO_H_ +#define _MU_MMIO_H_ 1 + +#include + +/* Builds mmio_write functions */ +#define _MMIO_WRITE_BUILDER(NAME, TYPE) \ + static inline void \ + MMIO##NAME(volatile TYPE *ptr, TYPE val) \ + { \ + BARRIER(); \ + *(volatile TYPE *)ptr = val; \ + } + +/* Builds mmio_read functions */ +#define _MMIO_READ_BUILDER(NAME, TYPE) \ + static inline TYPE \ + MMIO##NAME(volatile TYPE *ptr) \ + { \ + BARRIER(); \ + return *(volatile TYPE *)ptr; \ + } + +/* mmio_write */ +_MMIO_WRITE_BUILDER(Write8, UCHAR); +_MMIO_WRITE_BUILDER(Write16, USHORT); +_MMIO_WRITE_BUILDER(Write32, ULONG); +#if __SIZEOF_SIZE_T__ == 8 +_MMIO_WRITE_BUILDER(Write64, UQUAD); +#endif + +/* Builds mmio_read functions */ +_MMIO_READ_BUILDER(Read8, UCHAR); +_MMIO_READ_BUILDER(Read16, USHORT); +_MMIO_READ_BUILDER(Read32, ULONG); +#if __SIZEOF_SIZE_T__ == 8 +_MMIO_READ_BUILDER(Read64, UQUAD); +#endif + +#endif /* !_MU_MMIO_H_ */