xref: /openbmc/qemu/include/exec/page-vary.h (revision a9c17e9a21af9c4bf9c08dedf0f0df4a6566cf52)
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