Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _XEN_XEN_H
0003 #define _XEN_XEN_H
0004 
0005 enum xen_domain_type {
0006     XEN_NATIVE,     /* running on bare hardware    */
0007     XEN_PV_DOMAIN,      /* running in a PV domain      */
0008     XEN_HVM_DOMAIN,     /* running in a Xen hvm domain */
0009 };
0010 
0011 #ifdef CONFIG_XEN
0012 extern enum xen_domain_type xen_domain_type;
0013 #else
0014 #define xen_domain_type     XEN_NATIVE
0015 #endif
0016 
0017 #ifdef CONFIG_XEN_PVH
0018 extern bool xen_pvh;
0019 #else
0020 #define xen_pvh         0
0021 #endif
0022 
0023 #define xen_domain()        (xen_domain_type != XEN_NATIVE)
0024 #define xen_pv_domain()     (xen_domain_type == XEN_PV_DOMAIN)
0025 #define xen_hvm_domain()    (xen_domain_type == XEN_HVM_DOMAIN)
0026 #define xen_pvh_domain()    (xen_pvh)
0027 
0028 #include <linux/types.h>
0029 
0030 extern uint32_t xen_start_flags;
0031 
0032 #include <xen/interface/hvm/start_info.h>
0033 extern struct hvm_start_info pvh_start_info;
0034 
0035 #ifdef CONFIG_XEN_DOM0
0036 #include <xen/interface/xen.h>
0037 #include <asm/xen/hypervisor.h>
0038 
0039 #define xen_initial_domain()    (xen_domain() && \
0040                  (xen_start_flags & SIF_INITDOMAIN))
0041 #else  /* !CONFIG_XEN_DOM0 */
0042 #define xen_initial_domain()    (0)
0043 #endif  /* CONFIG_XEN_DOM0 */
0044 
0045 struct bio_vec;
0046 struct page;
0047 
0048 bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
0049         const struct page *page);
0050 
0051 #if defined(CONFIG_MEMORY_HOTPLUG) && defined(CONFIG_XEN_BALLOON)
0052 extern u64 xen_saved_max_mem_size;
0053 #endif
0054 
0055 #ifdef CONFIG_XEN_UNPOPULATED_ALLOC
0056 int xen_alloc_unpopulated_pages(unsigned int nr_pages, struct page **pages);
0057 void xen_free_unpopulated_pages(unsigned int nr_pages, struct page **pages);
0058 #include <linux/ioport.h>
0059 int arch_xen_unpopulated_init(struct resource **res);
0060 #else
0061 #include <xen/balloon.h>
0062 static inline int xen_alloc_unpopulated_pages(unsigned int nr_pages,
0063         struct page **pages)
0064 {
0065     return xen_alloc_ballooned_pages(nr_pages, pages);
0066 }
0067 static inline void xen_free_unpopulated_pages(unsigned int nr_pages,
0068         struct page **pages)
0069 {
0070     xen_free_ballooned_pages(nr_pages, pages);
0071 }
0072 #endif
0073 
0074 #endif  /* _XEN_XEN_H */