1/* 2 * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7#ifndef __UTILS_H__ 8#define __UTILS_H__ 9 10#if !ERROR_DEPRECATED 11#include <utils_def.h> 12#endif 13 14/* 15 * C code should be put in this part of the header to avoid breaking ASM files 16 * or linker scripts including it. 17 */ 18#if !(defined(__LINKER__) || defined(__ASSEMBLY__)) 19 20#include <types.h> 21 22typedef struct mem_region_t { 23 uintptr_t base; 24 size_t nbytes; 25} mem_region_t; 26 27/* 28 * zero_normalmem all the regions defined in tbl. 29 */ 30void clear_mem_regions(mem_region_t *tbl, size_t nregions); 31 32 33/* 34 * checks that a region (addr + nbytes-1) of memory is totally covered by 35 * one of the regions defined in tbl. Caller must ensure that (addr+nbytes-1) 36 * doesn't overflow. 37 */ 38int mem_region_in_array_chk(mem_region_t *tbl, size_t nregions, 39 uintptr_t addr, size_t nbytes); 40 41/* 42 * Fill a region of normal memory of size "length" in bytes with zero bytes. 43 * 44 * WARNING: This function can only operate on normal memory. This means that 45 * the MMU must be enabled when using this function. Otherwise, use 46 * zeromem. 47 */ 48void zero_normalmem(void *mem, u_register_t length); 49 50/* 51 * Fill a region of memory of size "length" in bytes with null bytes. 52 * 53 * Unlike zero_normalmem, this function has no restriction on the type of 54 * memory targeted and can be used for any device memory as well as normal 55 * memory. This function must be used instead of zero_normalmem when MMU is 56 * disabled. 57 * 58 * NOTE: When data cache and MMU are enabled, prefer zero_normalmem for faster 59 * zeroing. 60 */ 61void zeromem(void *mem, u_register_t length); 62#endif /* !(defined(__LINKER__) || defined(__ASSEMBLY__)) */ 63 64#endif /* __UTILS_H__ */ 65