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