/* * Xen HVM emulation support in KVM * * Copyright © 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. * */ #ifndef QEMU_I386_KVM_XEN_COMPAT_H #define QEMU_I386_KVM_XEN_COMPAT_H #include "hw/xen/interface/memory.h" typedef uint32_t compat_pfn_t; typedef uint32_t compat_ulong_t; typedef uint32_t compat_ptr_t; #define __DEFINE_COMPAT_HANDLE(name, type) \ typedef struct { \ compat_ptr_t c; \ type *_[0] __attribute__((packed)); \ } __compat_handle_ ## name; \ #define DEFINE_COMPAT_HANDLE(name) __DEFINE_COMPAT_HANDLE(name, name) #define COMPAT_HANDLE(name) __compat_handle_ ## name DEFINE_COMPAT_HANDLE(compat_pfn_t); DEFINE_COMPAT_HANDLE(compat_ulong_t); DEFINE_COMPAT_HANDLE(int); struct compat_xen_add_to_physmap { domid_t domid; uint16_t size; unsigned int space; compat_ulong_t idx; compat_pfn_t gpfn; }; struct compat_xen_add_to_physmap_batch { domid_t domid; uint16_t space; uint16_t size; uint16_t extra; COMPAT_HANDLE(compat_ulong_t) idxs; COMPAT_HANDLE(compat_pfn_t) gpfns; COMPAT_HANDLE(int) errs; }; struct compat_physdev_map_pirq { domid_t domid; uint16_t pad; /* IN */ int type; /* IN (ignored for ..._MULTI_MSI) */ int index; /* IN or OUT */ int pirq; /* IN - high 16 bits hold segment for ..._MSI_SEG and ..._MULTI_MSI */ int bus; /* IN */ int devfn; /* IN (also OUT for ..._MULTI_MSI) */ int entry_nr; /* IN */ uint64_t table_base; } __attribute__((packed)); #endif /* QEMU_I386_XEN_COMPAT_H */