diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/firmware/hvmloader/hvmloader.c | 26 | ||||
-rw-r--r-- | tools/python/xen/xend/XendConfig.py | 3 | ||||
-rw-r--r-- | tools/python/xen/xend/XendConstants.py | 7 | ||||
-rw-r--r-- | tools/python/xen/xend/XendDomainInfo.py | 5 | ||||
-rw-r--r-- | tools/python/xen/xm/create.py | 8 | ||||
-rw-r--r-- | tools/python/xen/xm/xenapi_create.py | 1 |
6 files changed, 36 insertions, 14 deletions
diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c index 050a6266f6..9dff7cc08d 100644 --- a/tools/firmware/hvmloader/hvmloader.c +++ b/tools/firmware/hvmloader/hvmloader.c @@ -101,30 +101,36 @@ asm ( static enum { VGA_none, VGA_std, VGA_cirrus } virtual_vga = VGA_none; -static void -init_hypercalls(void) +static void init_hypercalls(void) { uint32_t eax, ebx, ecx, edx; unsigned long i; char signature[13]; xen_extraversion_t extraversion; + uint32_t base; - cpuid(0x40000000, &eax, &ebx, &ecx, &edx); + for ( base = 0x40000000; base < 0x40001000; base += 0x100 ) + { + cpuid(base, &eax, &ebx, &ecx, &edx); + + *(uint32_t *)(signature + 0) = ebx; + *(uint32_t *)(signature + 4) = ecx; + *(uint32_t *)(signature + 8) = edx; + signature[12] = '\0'; - *(uint32_t *)(signature + 0) = ebx; - *(uint32_t *)(signature + 4) = ecx; - *(uint32_t *)(signature + 8) = edx; - signature[12] = '\0'; + if ( !strcmp("XenVMMXenVMM", signature) ) + break; + } - BUG_ON(strcmp("XenVMMXenVMM", signature) || (eax < 0x40000002)); + BUG_ON(strcmp("XenVMMXenVMM", signature) || ((eax - base) < 2)); /* Fill in hypercall transfer pages. */ - cpuid(0x40000002, &eax, &ebx, &ecx, &edx); + cpuid(base + 2, &eax, &ebx, &ecx, &edx); for ( i = 0; i < eax; i++ ) wrmsr(ebx, HYPERCALL_PHYSICAL_ADDRESS + (i << 12) + i); /* Print version information. */ - cpuid(0x40000001, &eax, &ebx, &ecx, &edx); + cpuid(base + 1, &eax, &ebx, &ecx, &edx); hypercall_xen_version(XENVER_extraversion, extraversion); printf("Detected Xen v%u.%u%s\n", eax >> 16, eax & 0xffff, extraversion); } diff --git a/tools/python/xen/xend/XendConfig.py b/tools/python/xen/xend/XendConfig.py index bf7c6dcdc9..a7431bd7ef 100644 --- a/tools/python/xen/xend/XendConfig.py +++ b/tools/python/xen/xend/XendConfig.py @@ -155,6 +155,7 @@ XENAPI_PLATFORM_CFG_TYPES = { 'vncdisplay': int, 'vnclisten': str, 'timer_mode': int, + 'viridian': int, 'vncpasswd': str, 'vncunused': int, 'xauthority': str, @@ -442,6 +443,8 @@ class XendConfig(dict): if self.is_hvm(): if 'timer_mode' not in self['platform']: self['platform']['timer_mode'] = 1 + if 'viridian' not in self['platform']: + self['platform']['viridian'] = 0 if 'rtc_timeoffset' not in self['platform']: self['platform']['rtc_timeoffset'] = 0 if 'hpet' not in self['platform']: diff --git a/tools/python/xen/xend/XendConstants.py b/tools/python/xen/xend/XendConstants.py index 8b98286841..13e046a086 100644 --- a/tools/python/xen/xend/XendConstants.py +++ b/tools/python/xen/xend/XendConstants.py @@ -43,9 +43,10 @@ HVM_PARAM_STORE_EVTCHN = 2 HVM_PARAM_PAE_ENABLED = 4 HVM_PARAM_IOREQ_PFN = 5 HVM_PARAM_BUFIOREQ_PFN = 6 -HVM_PARAM_NVRAM_FD = 7 -HVM_PARAM_VHPT_SIZE = 8 -HVM_PARAM_BUFPIOREQ_PFN = 9 +HVM_PARAM_NVRAM_FD = 7 # ia64 +HVM_PARAM_VHPT_SIZE = 8 # ia64 +HVM_PARAM_BUFPIOREQ_PFN = 9 # ia64 +HVM_PARAM_VIRIDIAN = 9 # x86 HVM_PARAM_TIMER_MODE = 10 HVM_PARAM_HPET_ENABLED = 11 HVM_PARAM_ACPI_S_STATE = 14 diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 77b2598b1c..faf96a79c6 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -2078,6 +2078,11 @@ class XendDomainInfo: xc.hvm_set_param(self.domid, HVM_PARAM_TIMER_MODE, long(timer_mode)) + # Set Viridian interface configuration of domain + viridian = self.info["platform"].get("viridian") + if arch.type == "x86" and hvm and viridian is not None: + xc.hvm_set_param(self.domid, HVM_PARAM_VIRIDIAN, long(viridian)) + # Optionally enable virtual HPET hpet = self.info["platform"].get("hpet") if hvm and hpet is not None: diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py index dc333e4707..6c4753be5e 100644 --- a/tools/python/xen/xm/create.py +++ b/tools/python/xen/xm/create.py @@ -218,6 +218,11 @@ gopts.var('timer_mode', val='TIMER_MODE', use="""Timer mode (0=delay virtual time when ticks are missed; 1=virtual time is always wallclock time.""") +gopts.var('viridian', val='VIRIDIAN', + fn=set_int, default=0, + use="""Expose Viridian interface to x86 HVM guest? + (Default is 0).""") + gopts.var('acpi', val='ACPI', fn=set_int, default=1, use="Disable or enable ACPI of HVM domain.") @@ -856,7 +861,8 @@ def configure_hvm(config_image, vals): 'vnc', 'vncdisplay', 'vncunused', 'vncconsole', 'vnclisten', 'sdl', 'display', 'xauthority', 'rtc_timeoffset', 'monitor', 'acpi', 'apic', 'usb', 'usbdevice', 'keymap', 'pci', 'hpet', - 'guest_os_type', 'hap', 'opengl', 'cpuid', 'cpuid_check'] + 'guest_os_type', 'hap', 'opengl', 'cpuid', 'cpuid_check', + 'viridian' ] for a in args: if a in vals.__dict__ and vals.__dict__[a] is not None: diff --git a/tools/python/xen/xm/xenapi_create.py b/tools/python/xen/xm/xenapi_create.py index ceac76f1e1..60992566b0 100644 --- a/tools/python/xen/xm/xenapi_create.py +++ b/tools/python/xen/xm/xenapi_create.py @@ -969,6 +969,7 @@ class sxp2xml: 'usbdevice', 'hpet', 'timer_mode', + 'viridian', 'vhpt', 'guest_os_type', 'hap', |