2016-07-05 09:55:03 +01:00
|
|
|
/*
|
2017-01-19 10:26:16 +00:00
|
|
|
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
|
2016-07-05 09:55:03 +01:00
|
|
|
*
|
2017-05-03 09:38:09 +01:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
2016-07-05 09:55:03 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __UTILS_H__
|
|
|
|
#define __UTILS_H__
|
|
|
|
|
2017-04-10 19:45:52 +01:00
|
|
|
#if !ERROR_DEPRECATED
|
|
|
|
#include <utils_def.h>
|
2017-01-19 10:26:16 +00:00
|
|
|
#endif
|
|
|
|
|
2016-12-02 13:51:54 +00:00
|
|
|
/*
|
|
|
|
* C code should be put in this part of the header to avoid breaking ASM files
|
|
|
|
* or linker scripts including it.
|
|
|
|
*/
|
|
|
|
#if !(defined(__LINKER__) || defined(__ASSEMBLY__))
|
|
|
|
|
|
|
|
#include <types.h>
|
|
|
|
|
2017-08-03 08:56:38 +01:00
|
|
|
typedef struct mem_region_t {
|
|
|
|
uintptr_t base;
|
|
|
|
size_t nbytes;
|
|
|
|
} mem_region_t;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* zero_normalmem all the regions defined in tbl.
|
|
|
|
*/
|
|
|
|
void clear_mem_regions(mem_region_t *tbl, size_t nregions);
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* checks that a region (addr + nbytes-1) of memory is totally covered by
|
|
|
|
* one of the regions defined in tbl. Caller must ensure that (addr+nbytes-1)
|
|
|
|
* doesn't overflow.
|
|
|
|
*/
|
|
|
|
int mem_region_in_array_chk(mem_region_t *tbl, size_t nregions,
|
|
|
|
uintptr_t addr, size_t nbytes);
|
|
|
|
|
2016-12-02 13:51:54 +00:00
|
|
|
/*
|
|
|
|
* Fill a region of normal memory of size "length" in bytes with zero bytes.
|
|
|
|
*
|
|
|
|
* WARNING: This function can only operate on normal memory. This means that
|
|
|
|
* the MMU must be enabled when using this function. Otherwise, use
|
|
|
|
* zeromem.
|
|
|
|
*/
|
|
|
|
void zero_normalmem(void *mem, u_register_t length);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Fill a region of memory of size "length" in bytes with null bytes.
|
|
|
|
*
|
|
|
|
* Unlike zero_normalmem, this function has no restriction on the type of
|
|
|
|
* memory targeted and can be used for any device memory as well as normal
|
|
|
|
* memory. This function must be used instead of zero_normalmem when MMU is
|
|
|
|
* disabled.
|
|
|
|
*
|
|
|
|
* NOTE: When data cache and MMU are enabled, prefer zero_normalmem for faster
|
|
|
|
* zeroing.
|
|
|
|
*/
|
|
|
|
void zeromem(void *mem, u_register_t length);
|
|
|
|
#endif /* !(defined(__LINKER__) || defined(__ASSEMBLY__)) */
|
|
|
|
|
2016-07-05 09:55:03 +01:00
|
|
|
#endif /* __UTILS_H__ */
|