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