coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mmio.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Originally imported from linux/include/asm-arm/io.h. This file has changed
4  * substantially since then.
5  */
6 
7 #ifndef __ARCH_MMIO_H__
8 #define __ARCH_MMIO_H__
9 
10 #include <arch/cache.h>
11 #include <endian.h>
12 #include <stdint.h>
13 
14 static inline uint8_t read8(const void *addr)
15 {
16  dmb();
17  return *(volatile uint8_t *)__builtin_assume_aligned(addr, sizeof(uint8_t));
18 }
19 
20 static inline uint16_t read16(const void *addr)
21 {
22  dmb();
23  return *(volatile uint16_t *)__builtin_assume_aligned(addr, sizeof(uint16_t));
24 }
25 
26 static inline uint32_t read32(const void *addr)
27 {
28  dmb();
29  return *(volatile uint32_t *)__builtin_assume_aligned(addr, sizeof(uint32_t));
30 }
31 
32 /* Not supported */
33 uint64_t read64(const void *addr);
34 
35 static inline void write8(void *addr, uint8_t val)
36 {
37  dmb();
38  *(volatile uint8_t *)__builtin_assume_aligned(addr, sizeof(uint8_t)) = val;
39  dmb();
40 }
41 
42 static inline void write16(void *addr, uint16_t val)
43 {
44  dmb();
45  *(volatile uint16_t *)__builtin_assume_aligned(addr, sizeof(uint16_t)) = val;
46  dmb();
47 }
48 
49 static inline void write32(void *addr, uint32_t val)
50 {
51  dmb();
52  *(volatile uint32_t *)__builtin_assume_aligned(addr, sizeof(uint32_t)) = val;
53  dmb();
54 }
55 
56 /* Not supported */
57 void write64(void *addr, uint64_t val);
58 
59 #endif /* __ARCH_MMIO_H__ */
void write64(void *addr, uint64_t val)
uint64_t read64(const void *addr)
static void write8(void *addr, uint8_t val)
Definition: mmio.h:35
static void write32(void *addr, uint32_t val)
Definition: mmio.h:49
static uint16_t read16(const void *addr)
Definition: mmio.h:20
static uint32_t read32(const void *addr)
Definition: mmio.h:26
static uint8_t read8(const void *addr)
Definition: mmio.h:14
static void write16(void *addr, uint16_t val)
Definition: mmio.h:42
#define dmb()
Definition: barrier.h:17
static u32 addr
Definition: cirrus.c:14
unsigned short uint16_t
Definition: stdint.h:11
unsigned int uint32_t
Definition: stdint.h:14
unsigned long long uint64_t
Definition: stdint.h:17
unsigned char uint8_t
Definition: stdint.h:8
u8 val
Definition: sys.c:300