151180423SJuan Quintela /* 251180423SJuan Quintela * Target page sizes and friends for non target files 351180423SJuan Quintela * 451180423SJuan Quintela * Copyright (c) 2017 Red Hat Inc 551180423SJuan Quintela * 651180423SJuan Quintela * Authors: 751180423SJuan Quintela * David Alan Gilbert <dgilbert@redhat.com> 851180423SJuan Quintela * Juan Quintela <quintela@redhat.com> 951180423SJuan Quintela * 1051180423SJuan Quintela * This work is licensed under the terms of the GNU GPL, version 2 or later. 1151180423SJuan Quintela * See the COPYING file in the top-level directory. 1251180423SJuan Quintela */ 1351180423SJuan Quintela 1451180423SJuan Quintela #ifndef EXEC_TARGET_PAGE_H 1551180423SJuan Quintela #define EXEC_TARGET_PAGE_H 1651180423SJuan Quintela 17*58d00538SRichard Henderson /* 18*58d00538SRichard Henderson * If compiling per-target, get the real values. 19*58d00538SRichard Henderson * For generic code, reuse the mechanism for variable page size. 20*58d00538SRichard Henderson */ 21*58d00538SRichard Henderson #ifdef COMPILING_PER_TARGET 22*58d00538SRichard Henderson #include "cpu-param.h" 23*58d00538SRichard Henderson #include "exec/target_long.h" 24*58d00538SRichard Henderson #define TARGET_PAGE_TYPE target_long 25*58d00538SRichard Henderson #else 26*58d00538SRichard Henderson #define TARGET_PAGE_BITS_VARY 27*58d00538SRichard Henderson #define TARGET_PAGE_TYPE int 28*58d00538SRichard Henderson #endif 2951180423SJuan Quintela 30*58d00538SRichard Henderson #ifdef TARGET_PAGE_BITS_VARY 31*58d00538SRichard Henderson # include "exec/page-vary.h" 32*58d00538SRichard Henderson extern const TargetPageBits target_page; 33*58d00538SRichard Henderson # ifdef CONFIG_DEBUG_TCG 34*58d00538SRichard Henderson # define TARGET_PAGE_BITS ({ assert(target_page.decided); \ 35*58d00538SRichard Henderson target_page.bits; }) 36*58d00538SRichard Henderson # define TARGET_PAGE_MASK ({ assert(target_page.decided); \ 37*58d00538SRichard Henderson (TARGET_PAGE_TYPE)target_page.mask; }) 38*58d00538SRichard Henderson # else 39*58d00538SRichard Henderson # define TARGET_PAGE_BITS target_page.bits 40*58d00538SRichard Henderson # define TARGET_PAGE_MASK ((TARGET_PAGE_TYPE)target_page.mask) 41*58d00538SRichard Henderson # endif 42*58d00538SRichard Henderson # define TARGET_PAGE_SIZE (-(int)TARGET_PAGE_MASK) 43*58d00538SRichard Henderson #else 44*58d00538SRichard Henderson # define TARGET_PAGE_SIZE (1 << TARGET_PAGE_BITS) 45*58d00538SRichard Henderson # define TARGET_PAGE_MASK ((TARGET_PAGE_TYPE)-1 << TARGET_PAGE_BITS) 46*58d00538SRichard Henderson #endif 47*58d00538SRichard Henderson 48*58d00538SRichard Henderson #define TARGET_PAGE_ALIGN(addr) ROUND_UP((addr), TARGET_PAGE_SIZE) 49*58d00538SRichard Henderson qemu_target_page_size(void)50*58d00538SRichard Hendersonstatic inline size_t qemu_target_page_size(void) 51*58d00538SRichard Henderson { 52*58d00538SRichard Henderson return TARGET_PAGE_SIZE; 53*58d00538SRichard Henderson } 54*58d00538SRichard Henderson qemu_target_page_mask(void)55*58d00538SRichard Hendersonstatic inline int qemu_target_page_mask(void) 56*58d00538SRichard Henderson { 57*58d00538SRichard Henderson return TARGET_PAGE_MASK; 58*58d00538SRichard Henderson } 59*58d00538SRichard Henderson qemu_target_page_bits(void)60*58d00538SRichard Hendersonstatic inline int qemu_target_page_bits(void) 61*58d00538SRichard Henderson { 62*58d00538SRichard Henderson return TARGET_PAGE_BITS; 63*58d00538SRichard Henderson } 64*58d00538SRichard Henderson 6562c5e181SJuan Quintela size_t qemu_target_pages_to_MiB(size_t pages); 66*58d00538SRichard Henderson 6751180423SJuan Quintela #endif 68