1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2014, Linaro Limited 4 * All rights reserved. 5 */ 6 #ifndef IO_H 7 #define IO_H 8 9 #include <stdint.h> 10 #include <types_ext.h> 11 #include <utee_defines.h> 12 13 static inline void write8(uint8_t val, vaddr_t addr) 14 { 15 *(volatile uint8_t *)addr = val; 16 } 17 18 static inline void write16(uint16_t val, vaddr_t addr) 19 { 20 *(volatile uint16_t *)addr = val; 21 } 22 23 static inline void write32(uint32_t val, vaddr_t addr) 24 { 25 *(volatile uint32_t *)addr = val; 26 } 27 28 static inline uint8_t read8(vaddr_t addr) 29 { 30 return *(volatile uint8_t *)addr; 31 } 32 33 static inline uint16_t read16(vaddr_t addr) 34 { 35 return *(volatile uint16_t *)addr; 36 } 37 38 static inline uint32_t read32(vaddr_t addr) 39 { 40 return *(volatile uint32_t *)addr; 41 } 42 43 static inline void io_mask8(vaddr_t addr, uint8_t val, uint8_t mask) 44 { 45 write8((read8(addr) & ~mask) | (val & mask), addr); 46 } 47 48 static inline void io_mask16(vaddr_t addr, uint16_t val, uint16_t mask) 49 { 50 write16((read16(addr) & ~mask) | (val & mask), addr); 51 } 52 53 static inline void io_mask32(vaddr_t addr, uint32_t val, uint32_t mask) 54 { 55 write32((read32(addr) & ~mask) | (val & mask), addr); 56 } 57 58 static inline uint64_t get_be64(const void *p) 59 { 60 return TEE_U64_FROM_BIG_ENDIAN(*(const uint64_t *)p); 61 } 62 63 static inline void put_be64(void *p, uint64_t val) 64 { 65 *(uint64_t *)p = TEE_U64_TO_BIG_ENDIAN(val); 66 } 67 68 static inline uint32_t get_be32(const void *p) 69 { 70 return TEE_U32_FROM_BIG_ENDIAN(*(const uint32_t *)p); 71 } 72 73 static inline void put_be32(void *p, uint32_t val) 74 { 75 *(uint32_t *)p = TEE_U32_TO_BIG_ENDIAN(val); 76 } 77 78 static inline uint16_t get_be16(const void *p) 79 { 80 return TEE_U16_FROM_BIG_ENDIAN(*(const uint16_t *)p); 81 } 82 83 static inline void put_be16(void *p, uint16_t val) 84 { 85 *(uint16_t *)p = TEE_U16_TO_BIG_ENDIAN(val); 86 } 87 88 #endif /*IO_H*/ 89