1/* 2 * Definitions for cpus with variable page sizes. 3 * 4 * Copyright (c) 2003 Fabrice Bellard 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18 */ 19 20#ifndef EXEC_PAGE_VARY_H 21#define EXEC_PAGE_VARY_H 22 23typedef struct { 24 bool decided; 25 int bits; 26 uint64_t mask; 27} TargetPageBits; 28 29#ifdef IN_PAGE_VARY 30extern bool set_preferred_target_page_bits_common(int bits); 31extern void finalize_target_page_bits_common(int min); 32#endif 33 34/** 35 * set_preferred_target_page_bits: 36 * @bits: number of bits needed to represent an address within the page 37 * 38 * Set the preferred target page size (the actual target page 39 * size may be smaller than any given CPU's preference). 40 * Returns true on success, false on failure (which can only happen 41 * if this is called after the system has already finalized its 42 * choice of page size and the requested page size is smaller than that). 43 */ 44bool set_preferred_target_page_bits(int bits); 45 46/** 47 * finalize_target_page_bits: 48 * Commit the final value set by set_preferred_target_page_bits. 49 */ 50void finalize_target_page_bits(void); 51 52#endif /* EXEC_PAGE_VARY_H */ 53