1 /* 2 * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef __MMIO_H__ 8 #define __MMIO_H__ 9 10 #include <stdint.h> 11 12 static inline void mmio_write_8(uintptr_t addr, uint8_t value) 13 { 14 *(volatile uint8_t*)addr = value; 15 } 16 17 static inline uint8_t mmio_read_8(uintptr_t addr) 18 { 19 return *(volatile uint8_t*)addr; 20 } 21 22 static inline void mmio_write_16(uintptr_t addr, uint16_t value) 23 { 24 *(volatile uint16_t*)addr = value; 25 } 26 27 static inline uint16_t mmio_read_16(uintptr_t addr) 28 { 29 return *(volatile uint16_t*)addr; 30 } 31 32 static inline void mmio_write_32(uintptr_t addr, uint32_t value) 33 { 34 *(volatile uint32_t*)addr = value; 35 } 36 37 static inline uint32_t mmio_read_32(uintptr_t addr) 38 { 39 return *(volatile uint32_t*)addr; 40 } 41 42 static inline void mmio_write_64(uintptr_t addr, uint64_t value) 43 { 44 *(volatile uint64_t*)addr = value; 45 } 46 47 static inline uint64_t mmio_read_64(uintptr_t addr) 48 { 49 return *(volatile uint64_t*)addr; 50 } 51 52 static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear) 53 { 54 mmio_write_32(addr, mmio_read_32(addr) & ~clear); 55 } 56 57 static inline void mmio_setbits_32(uintptr_t addr, uint32_t set) 58 { 59 mmio_write_32(addr, mmio_read_32(addr) | set); 60 } 61 62 static inline void mmio_clrsetbits_32(uintptr_t addr, 63 uint32_t clear, 64 uint32_t set) 65 { 66 mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set); 67 } 68 69 #endif /* __MMIO_H__ */ 70