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