| #ifndef __XEN_H |
| #define __XEN_H |
| |
| #include "util.h" |
| |
| extern u32 xen_cpuid_base; |
| |
| void xen_probe(void); |
| void xen_setup(void); |
| void xen_init_hypercalls(void); |
| void xen_copy_biostables(void); |
| |
| static inline int usingXen(void) { |
| if (!CONFIG_XEN) |
| return 0; |
| return (xen_cpuid_base != 0); |
| } |
| |
| unsigned long xen_hypercall_page; |
| |
| #define _hypercall0(type, name) \ |
| ({ \ |
| unsigned long __hentry = xen_hypercall_page+__HYPERVISOR_##name*32; \ |
| long __res; \ |
| asm volatile ( \ |
| "call *%%eax" \ |
| : "=a" (__res) \ |
| : "0" (__hentry) \ |
| : "memory" ); \ |
| (type)__res; \ |
| }) |
| |
| #define _hypercall1(type, name, a1) \ |
| ({ \ |
| unsigned long __hentry = xen_hypercall_page+__HYPERVISOR_##name*32; \ |
| long __res, __ign1; \ |
| asm volatile ( \ |
| "call *%%eax" \ |
| : "=a" (__res), "=b" (__ign1) \ |
| : "0" (__hentry), "1" ((long)(a1)) \ |
| : "memory" ); \ |
| (type)__res; \ |
| }) |
| |
| #define _hypercall2(type, name, a1, a2) \ |
| ({ \ |
| unsigned long __hentry = xen_hypercall_page+__HYPERVISOR_##name*32; \ |
| long __res, __ign1, __ign2; \ |
| asm volatile ( \ |
| "call *%%eax" \ |
| : "=a" (__res), "=b" (__ign1), "=c" (__ign2) \ |
| : "0" (__hentry), "1" ((long)(a1)), "2" ((long)(a2)) \ |
| : "memory" ); \ |
| (type)__res; \ |
| }) |
| |
| #define _hypercall3(type, name, a1, a2, a3) \ |
| ({ \ |
| unsigned long __hentry = xen_hypercall_page+__HYPERVISOR_##name*32; \ |
| long __res, __ign1, __ign2, __ign3; \ |
| asm volatile ( \ |
| "call *%%eax" \ |
| : "=a" (__res), "=b" (__ign1), "=c" (__ign2), \ |
| "=d" (__ign3) \ |
| : "0" (__hentry), "1" ((long)(a1)), "2" ((long)(a2)), \ |
| "3" ((long)(a3)) \ |
| : "memory" ); \ |
| (type)__res; \ |
| }) |
| |
| #define _hypercall4(type, name, a1, a2, a3, a4) \ |
| ({ \ |
| unsigned long __hentry = xen_hypercall_page+__HYPERVISOR_##name*32; \ |
| long __res, __ign1, __ign2, __ign3, __ign4; \ |
| asm volatile ( \ |
| "call *%%eax" \ |
| : "=a" (__res), "=b" (__ign1), "=c" (__ign2), \ |
| "=d" (__ign3), "=S" (__ign4) \ |
| : "0" (__hentry), "1" ((long)(a1)), "2" ((long)(a2)), \ |
| "3" ((long)(a3)), "4" ((long)(a4)) \ |
| : "memory" ); \ |
| (type)__res; \ |
| }) |
| |
| #define _hypercall5(type, name, a1, a2, a3, a4, a5) \ |
| ({ \ |
| unsigned long __hentry = xen_hypercall_page+__HYPERVISOR_##name*32; \ |
| long __res, __ign1, __ign2, __ign3, __ign4, __ign5; \ |
| asm volatile ( \ |
| "call *%%eax" \ |
| : "=a" (__res), "=b" (__ign1), "=c" (__ign2), \ |
| "=d" (__ign3), "=S" (__ign4), "=D" (__ign5) \ |
| : "0" (__hentry), "1" ((long)(a1)), "2" ((long)(a2)), \ |
| "3" ((long)(a3)), "4" ((long)(a4)), \ |
| "5" ((long)(a5)) \ |
| : "memory" ); \ |
| (type)__res; \ |
| }) |
| |
| /****************************************************************************** |
| * |
| * The following interface definitions are taken from Xen and have the |
| * following license: |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to |
| * deal in the Software without restriction, including without limitation the |
| * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| * sell copies of the Software, and to permit persons to whom the Software is |
| * furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in |
| * all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
| * DEALINGS IN THE SOFTWARE. |
| */ |
| |
| /* xen.h */ |
| |
| #define __HYPERVISOR_xen_version 17 |
| |
| /* version.h */ |
| |
| /* arg == xen_extraversion_t. */ |
| #define XENVER_extraversion 1 |
| typedef char xen_extraversion_t[16]; |
| #define XEN_EXTRAVERSION_LEN (sizeof(xen_extraversion_t)) |
| |
| #endif |