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 23 typedef struct { 24 bool decided; 25 int bits; 26 uint64_t mask; 27 } TargetPageBits; 28 29 #ifdef IN_PAGE_VARY 30 extern bool set_preferred_target_page_bits_common(int bits); 31 extern 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 */ 44 bool 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 */ 50 void finalize_target_page_bits(void); 51 52 #endif /* EXEC_PAGE_VARY_H */ 53