SyterKit 0.4.0.x
SyterKit is a bare-metal framework
Loading...
Searching...
No Matches
io.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0+ */
2
3#ifndef __IO_H__
4#define __IO_H__
5
6#include <stdint.h>
7#include <types.h>
8
14#define BIT(x) (1 << x)
15
26#define REG32(x) (*((volatile uint32_t *) (x)))
27
35#define clrsetbits_le32(addr, clear, set) write32((addr), (read32(addr) & ~(clear)) | (set))
36
43#define setbits_le32(addr, set) write32((addr), read32(addr) | (set))
44
51#define clrbits_le32(addr, clear) write32((addr), read32(addr) & ~(clear))
52
58#define readb(addr) read8(addr)
59
66#define writeb(val, addr) write8((addr), (val))
67
73#define readw(addr) read16(addr)
74
81#define writew(val, addr) write16((addr), (val))
82
88#define readl(addr) read32(addr)
89
96#define writel(val, addr) write32((addr), (val))
97
104static inline __attribute__((__always_inline__)) uint8_t read8(virtual_addr_t addr) {
105 return (*((volatile uint8_t *) (addr)));
106}
107
114static inline __attribute__((__always_inline__)) uint16_t read16(virtual_addr_t addr) {
115 return (*((volatile uint16_t *) (addr)));
116}
117
124static inline __attribute__((__always_inline__)) uint32_t read32(virtual_addr_t addr) {
125 return (*((volatile uint32_t *) (addr)));
126}
127
134static inline __attribute__((__always_inline__)) uint64_t read64(virtual_addr_t addr) {
135 return (*((volatile uint64_t *) (addr)));
136}
137
144static inline __attribute__((__always_inline__)) void write8(virtual_addr_t addr, uint8_t value) {
145 *((volatile uint8_t *) (addr)) = value;
146}
147
154static inline __attribute__((__always_inline__)) void write16(virtual_addr_t addr, uint16_t value) {
155 *((volatile uint16_t *) (addr)) = value;
156}
157
164static inline __attribute__((__always_inline__)) void write32(virtual_addr_t addr, uint32_t value) {
165 *((volatile uint32_t *) (addr)) = value;
166}
167
174static inline __attribute__((__always_inline__)) void write64(virtual_addr_t addr, uint64_t value) {
175 *((volatile uint64_t *) (addr)) = value;
176}
177
178
179#endif
static void write64(virtual_addr_t addr, u64_t value)
Definition io.h:34
static u16_t read16(virtual_addr_t addr)
Definition io.h:10
static u64_t read64(virtual_addr_t addr)
Definition io.h:18
static void write8(virtual_addr_t addr, u8_t value)
Definition io.h:22
static u32_t read32(virtual_addr_t addr)
Definition io.h:14
static void write16(virtual_addr_t addr, u16_t value)
Definition io.h:26
static void write32(virtual_addr_t addr, u32_t value)
Definition io.h:30
static u8_t read8(virtual_addr_t addr)
Definition io.h:6
u64_t uint64_t
Definition stdint.h:16
u32_t uint32_t
Definition stdint.h:13
u8_t uint8_t
Definition stdint.h:7
u16_t uint16_t
Definition stdint.h:10
unsigned long long virtual_addr_t
Definition types.h:32
static __attribute__((__always_inline__)) uint8_t read8(virtual_addr_t addr)
Inline function to read an 8-bit value from the specified address.
Definition io.h:104
static uint8_t value
Definition io.h:144