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