1*8933c34bSSandrine Bailleux /* 2*8933c34bSSandrine Bailleux * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3*8933c34bSSandrine Bailleux * 4*8933c34bSSandrine Bailleux * SPDX-License-Identifier: BSD-3-Clause 5*8933c34bSSandrine Bailleux */ 6*8933c34bSSandrine Bailleux 7*8933c34bSSandrine Bailleux #ifndef __XLAT_TABLES_ARCH_H__ 8*8933c34bSSandrine Bailleux #define __XLAT_TABLES_ARCH_H__ 9*8933c34bSSandrine Bailleux 10*8933c34bSSandrine Bailleux #ifdef AARCH32 11*8933c34bSSandrine Bailleux #include "aarch32/xlat_tables_aarch32.h" 12*8933c34bSSandrine Bailleux #else 13*8933c34bSSandrine Bailleux #include "aarch64/xlat_tables_aarch64.h" 14*8933c34bSSandrine Bailleux #endif 15*8933c34bSSandrine Bailleux 16*8933c34bSSandrine Bailleux /* 17*8933c34bSSandrine Bailleux * Evaluates to 1 if the given virtual address space size is valid, or 0 if it's 18*8933c34bSSandrine Bailleux * not. 19*8933c34bSSandrine Bailleux * 20*8933c34bSSandrine Bailleux * A valid size is one that is a power of 2 and is within the architectural 21*8933c34bSSandrine Bailleux * limits. Not that these limits are different for AArch32 and AArch64. 22*8933c34bSSandrine Bailleux */ 23*8933c34bSSandrine Bailleux #define CHECK_VIRT_ADDR_SPACE_SIZE(size) \ 24*8933c34bSSandrine Bailleux (((size) >= MIN_VIRT_ADDR_SPACE_SIZE) && \ 25*8933c34bSSandrine Bailleux ((size) <= MAX_VIRT_ADDR_SPACE_SIZE) && \ 26*8933c34bSSandrine Bailleux IS_POWER_OF_TWO(size)) 27*8933c34bSSandrine Bailleux 28*8933c34bSSandrine Bailleux /* 29*8933c34bSSandrine Bailleux * Evaluates to 1 if the given physical address space size is a power of 2, 30*8933c34bSSandrine Bailleux * or 0 if it's not. 31*8933c34bSSandrine Bailleux */ 32*8933c34bSSandrine Bailleux #define CHECK_PHY_ADDR_SPACE_SIZE(size) \ 33*8933c34bSSandrine Bailleux (IS_POWER_OF_TWO(size)) 34*8933c34bSSandrine Bailleux 35*8933c34bSSandrine Bailleux /* 36*8933c34bSSandrine Bailleux * Compute the number of entries required at the initial lookup level to address 37*8933c34bSSandrine Bailleux * the whole virtual address space. 38*8933c34bSSandrine Bailleux */ 39*8933c34bSSandrine Bailleux #define GET_NUM_BASE_LEVEL_ENTRIES(addr_space_size) \ 40*8933c34bSSandrine Bailleux ((addr_space_size) >> \ 41*8933c34bSSandrine Bailleux XLAT_ADDR_SHIFT(GET_XLAT_TABLE_LEVEL_BASE(addr_space_size))) 42*8933c34bSSandrine Bailleux 43*8933c34bSSandrine Bailleux #endif /* __XLAT_TABLES_ARCH_H__ */ 44