127eb9d65SRichard Henderson /* 227eb9d65SRichard Henderson * Definitions for cpus with variable page sizes. 327eb9d65SRichard Henderson * 427eb9d65SRichard Henderson * Copyright (c) 2003 Fabrice Bellard 527eb9d65SRichard Henderson * 627eb9d65SRichard Henderson * This library is free software; you can redistribute it and/or 727eb9d65SRichard Henderson * modify it under the terms of the GNU Lesser General Public 827eb9d65SRichard Henderson * License as published by the Free Software Foundation; either 927eb9d65SRichard Henderson * version 2.1 of the License, or (at your option) any later version. 1027eb9d65SRichard Henderson * 1127eb9d65SRichard Henderson * This library is distributed in the hope that it will be useful, 1227eb9d65SRichard Henderson * but WITHOUT ANY WARRANTY; without even the implied warranty of 1327eb9d65SRichard Henderson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1427eb9d65SRichard Henderson * Lesser General Public License for more details. 1527eb9d65SRichard Henderson * 1627eb9d65SRichard Henderson * You should have received a copy of the GNU Lesser General Public 1727eb9d65SRichard Henderson * License along with this library; if not, see <http://www.gnu.org/licenses/>. 1827eb9d65SRichard Henderson */ 1927eb9d65SRichard Henderson 2027eb9d65SRichard Henderson #ifndef EXEC_PAGE_VARY_H 2127eb9d65SRichard Henderson #define EXEC_PAGE_VARY_H 2227eb9d65SRichard Henderson 2327eb9d65SRichard Henderson typedef struct { 2427eb9d65SRichard Henderson bool decided; 2527eb9d65SRichard Henderson int bits; 2627eb9d65SRichard Henderson uint64_t mask; 2727eb9d65SRichard Henderson } TargetPageBits; 2827eb9d65SRichard Henderson 2944b99a6dSRichard Henderson #ifdef IN_PAGE_VARY 30*f703f1efSPhilippe Mathieu-Daudé bool set_preferred_target_page_bits_common(int bits); 31*f703f1efSPhilippe Mathieu-Daudé void finalize_target_page_bits_common(int min); 3244b99a6dSRichard Henderson #endif 3344b99a6dSRichard Henderson 34ec5f7ca8SMarc-André Lureau /** 35ec5f7ca8SMarc-André Lureau * set_preferred_target_page_bits: 36ec5f7ca8SMarc-André Lureau * @bits: number of bits needed to represent an address within the page 37ec5f7ca8SMarc-André Lureau * 38ec5f7ca8SMarc-André Lureau * Set the preferred target page size (the actual target page 39ec5f7ca8SMarc-André Lureau * size may be smaller than any given CPU's preference). 40ec5f7ca8SMarc-André Lureau * Returns true on success, false on failure (which can only happen 41ec5f7ca8SMarc-André Lureau * if this is called after the system has already finalized its 42ec5f7ca8SMarc-André Lureau * choice of page size and the requested page size is smaller than that). 43ec5f7ca8SMarc-André Lureau */ 44ec5f7ca8SMarc-André Lureau bool set_preferred_target_page_bits(int bits); 45ec5f7ca8SMarc-André Lureau 46ec5f7ca8SMarc-André Lureau /** 47ec5f7ca8SMarc-André Lureau * finalize_target_page_bits: 48ec5f7ca8SMarc-André Lureau * Commit the final value set by set_preferred_target_page_bits. 49ec5f7ca8SMarc-André Lureau */ 50ec5f7ca8SMarc-André Lureau void finalize_target_page_bits(void); 51ec5f7ca8SMarc-André Lureau 5227eb9d65SRichard Henderson #endif /* EXEC_PAGE_VARY_H */ 53