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_clrsetbits_16(uintptr_t addr, 33 uint16_t clear, 34 uint16_t set) 35 { 36 mmio_write_16(addr, (mmio_read_16(addr) & ~clear) | set); 37 } 38 39 static inline void mmio_write_32(uintptr_t addr, uint32_t value) 40 { 41 *(volatile uint32_t*)addr = value; 42 } 43 44 static inline uint32_t mmio_read_32(uintptr_t addr) 45 { 46 return *(volatile uint32_t*)addr; 47 } 48 49 static inline void mmio_write_64(uintptr_t addr, uint64_t value) 50 { 51 *(volatile uint64_t*)addr = value; 52 } 53 54 static inline uint64_t mmio_read_64(uintptr_t addr) 55 { 56 return *(volatile uint64_t*)addr; 57 } 58 59 static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear) 60 { 61 mmio_write_32(addr, mmio_read_32(addr) & ~clear); 62 } 63 64 static inline void mmio_setbits_32(uintptr_t addr, uint32_t set) 65 { 66 mmio_write_32(addr, mmio_read_32(addr) | set); 67 } 68 69 static inline void mmio_clrsetbits_32(uintptr_t addr, 70 uint32_t clear, 71 uint32_t set) 72 { 73 mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set); 74 } 75 76 #endif /* MMIO_H */ 77