18933c34bSSandrine Bailleux /* 28933c34bSSandrine Bailleux * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 38933c34bSSandrine Bailleux * 48933c34bSSandrine Bailleux * SPDX-License-Identifier: BSD-3-Clause 58933c34bSSandrine Bailleux */ 68933c34bSSandrine Bailleux 78933c34bSSandrine Bailleux #ifndef __XLAT_TABLES_ARCH_H__ 88933c34bSSandrine Bailleux #define __XLAT_TABLES_ARCH_H__ 98933c34bSSandrine Bailleux 108933c34bSSandrine Bailleux #ifdef AARCH32 118933c34bSSandrine Bailleux #include "aarch32/xlat_tables_aarch32.h" 128933c34bSSandrine Bailleux #else 138933c34bSSandrine Bailleux #include "aarch64/xlat_tables_aarch64.h" 148933c34bSSandrine Bailleux #endif 158933c34bSSandrine Bailleux 168933c34bSSandrine Bailleux /* 178933c34bSSandrine Bailleux * Evaluates to 1 if the given virtual address space size is valid, or 0 if it's 188933c34bSSandrine Bailleux * not. 198933c34bSSandrine Bailleux * 208933c34bSSandrine Bailleux * A valid size is one that is a power of 2 and is within the architectural 218933c34bSSandrine Bailleux * limits. Not that these limits are different for AArch32 and AArch64. 228933c34bSSandrine Bailleux */ 238933c34bSSandrine Bailleux #define CHECK_VIRT_ADDR_SPACE_SIZE(size) \ 24*d92a2863SRoberto Vargas (((unsigned long long)(size) >= MIN_VIRT_ADDR_SPACE_SIZE) && \ 25*d92a2863SRoberto Vargas ((unsigned long long)(size) <= MAX_VIRT_ADDR_SPACE_SIZE) && \ 268933c34bSSandrine Bailleux IS_POWER_OF_TWO(size)) 278933c34bSSandrine Bailleux 288933c34bSSandrine Bailleux /* 298933c34bSSandrine Bailleux * Evaluates to 1 if the given physical address space size is a power of 2, 308933c34bSSandrine Bailleux * or 0 if it's not. 318933c34bSSandrine Bailleux */ 328933c34bSSandrine Bailleux #define CHECK_PHY_ADDR_SPACE_SIZE(size) \ 338933c34bSSandrine Bailleux (IS_POWER_OF_TWO(size)) 348933c34bSSandrine Bailleux 358933c34bSSandrine Bailleux /* 368933c34bSSandrine Bailleux * Compute the number of entries required at the initial lookup level to address 378933c34bSSandrine Bailleux * the whole virtual address space. 388933c34bSSandrine Bailleux */ 398933c34bSSandrine Bailleux #define GET_NUM_BASE_LEVEL_ENTRIES(addr_space_size) \ 408933c34bSSandrine Bailleux ((addr_space_size) >> \ 418933c34bSSandrine Bailleux XLAT_ADDR_SHIFT(GET_XLAT_TABLE_LEVEL_BASE(addr_space_size))) 428933c34bSSandrine Bailleux 438933c34bSSandrine Bailleux #endif /* __XLAT_TABLES_ARCH_H__ */ 44