Home | History | Annotate | Download | only in lib
      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