xref: /openbmc/qemu/system/memory-internal.h (revision d4c9cab37fa440807a4f2bf87efd0511d5694b2c)
1*d4c9cab3SPhilippe Mathieu-Daudé /*
2*d4c9cab3SPhilippe Mathieu-Daudé  * Declarations for functions which are internal to the memory subsystem.
3*d4c9cab3SPhilippe Mathieu-Daudé  *
4*d4c9cab3SPhilippe Mathieu-Daudé  * Copyright 2011 Red Hat, Inc. and/or its affiliates
5*d4c9cab3SPhilippe Mathieu-Daudé  *
6*d4c9cab3SPhilippe Mathieu-Daudé  * Authors:
7*d4c9cab3SPhilippe Mathieu-Daudé  *  Avi Kivity <avi@redhat.com>
8*d4c9cab3SPhilippe Mathieu-Daudé  *
9*d4c9cab3SPhilippe Mathieu-Daudé  * This work is licensed under the terms of the GNU GPL, version 2 or
10*d4c9cab3SPhilippe Mathieu-Daudé  * later.  See the COPYING file in the top-level directory.
11*d4c9cab3SPhilippe Mathieu-Daudé  *
12*d4c9cab3SPhilippe Mathieu-Daudé  */
13*d4c9cab3SPhilippe Mathieu-Daudé 
14*d4c9cab3SPhilippe Mathieu-Daudé #ifndef MEMORY_INTERNAL_H
15*d4c9cab3SPhilippe Mathieu-Daudé #define MEMORY_INTERNAL_H
16*d4c9cab3SPhilippe Mathieu-Daudé 
17*d4c9cab3SPhilippe Mathieu-Daudé #ifndef CONFIG_USER_ONLY
18*d4c9cab3SPhilippe Mathieu-Daudé static inline AddressSpaceDispatch *flatview_to_dispatch(FlatView *fv)
19*d4c9cab3SPhilippe Mathieu-Daudé {
20*d4c9cab3SPhilippe Mathieu-Daudé     return fv->dispatch;
21*d4c9cab3SPhilippe Mathieu-Daudé }
22*d4c9cab3SPhilippe Mathieu-Daudé 
23*d4c9cab3SPhilippe Mathieu-Daudé static inline AddressSpaceDispatch *address_space_to_dispatch(AddressSpace *as)
24*d4c9cab3SPhilippe Mathieu-Daudé {
25*d4c9cab3SPhilippe Mathieu-Daudé     return flatview_to_dispatch(address_space_to_flatview(as));
26*d4c9cab3SPhilippe Mathieu-Daudé }
27*d4c9cab3SPhilippe Mathieu-Daudé 
28*d4c9cab3SPhilippe Mathieu-Daudé FlatView *address_space_get_flatview(AddressSpace *as);
29*d4c9cab3SPhilippe Mathieu-Daudé void flatview_unref(FlatView *view);
30*d4c9cab3SPhilippe Mathieu-Daudé 
31*d4c9cab3SPhilippe Mathieu-Daudé extern const MemoryRegionOps unassigned_mem_ops;
32*d4c9cab3SPhilippe Mathieu-Daudé 
33*d4c9cab3SPhilippe Mathieu-Daudé void flatview_add_to_dispatch(FlatView *fv, MemoryRegionSection *section);
34*d4c9cab3SPhilippe Mathieu-Daudé AddressSpaceDispatch *address_space_dispatch_new(FlatView *fv);
35*d4c9cab3SPhilippe Mathieu-Daudé void address_space_dispatch_compact(AddressSpaceDispatch *d);
36*d4c9cab3SPhilippe Mathieu-Daudé void address_space_dispatch_free(AddressSpaceDispatch *d);
37*d4c9cab3SPhilippe Mathieu-Daudé 
38*d4c9cab3SPhilippe Mathieu-Daudé void mtree_print_dispatch(struct AddressSpaceDispatch *d,
39*d4c9cab3SPhilippe Mathieu-Daudé                           MemoryRegion *root);
40*d4c9cab3SPhilippe Mathieu-Daudé 
41*d4c9cab3SPhilippe Mathieu-Daudé /* returns true if end is big endian. */
42*d4c9cab3SPhilippe Mathieu-Daudé static inline bool devend_big_endian(enum device_endian end)
43*d4c9cab3SPhilippe Mathieu-Daudé {
44*d4c9cab3SPhilippe Mathieu-Daudé     QEMU_BUILD_BUG_ON(DEVICE_HOST_ENDIAN != DEVICE_LITTLE_ENDIAN &&
45*d4c9cab3SPhilippe Mathieu-Daudé                       DEVICE_HOST_ENDIAN != DEVICE_BIG_ENDIAN);
46*d4c9cab3SPhilippe Mathieu-Daudé 
47*d4c9cab3SPhilippe Mathieu-Daudé     if (end == DEVICE_NATIVE_ENDIAN) {
48*d4c9cab3SPhilippe Mathieu-Daudé         return target_words_bigendian();
49*d4c9cab3SPhilippe Mathieu-Daudé     }
50*d4c9cab3SPhilippe Mathieu-Daudé     return end == DEVICE_BIG_ENDIAN;
51*d4c9cab3SPhilippe Mathieu-Daudé }
52*d4c9cab3SPhilippe Mathieu-Daudé 
53*d4c9cab3SPhilippe Mathieu-Daudé /* enum device_endian to MemOp.  */
54*d4c9cab3SPhilippe Mathieu-Daudé static inline MemOp devend_memop(enum device_endian end)
55*d4c9cab3SPhilippe Mathieu-Daudé {
56*d4c9cab3SPhilippe Mathieu-Daudé     return devend_big_endian(end) ? MO_BE : MO_LE;
57*d4c9cab3SPhilippe Mathieu-Daudé }
58*d4c9cab3SPhilippe Mathieu-Daudé 
59*d4c9cab3SPhilippe Mathieu-Daudé #endif
60*d4c9cab3SPhilippe Mathieu-Daudé #endif
61