int xc_domain_cpuid_apply(int xc, unsigned int domid, int hvm);
int xc_cpuid_check(uint32_t input, uint32_t optsubinput,
char *config[4], char *config_out[4]);
-int xc_domain_send_s3resume(int handle, unsigned int domid);
-
int xc_domain_suppress_spurious_page_faults(int xc, uint32_t domid);
+int xc_domain_send_s3resume(int handle, unsigned int domid);
+int xc_domain_set_vpt_align(int handle, unsigned int domid, int vpt_align);
+int xc_domain_set_hpet(int handle, unsigned int domid, int hpet);
+int xc_domain_set_timer_mode(int handle, unsigned int domid, int mode);
+int xc_domain_get_acpi_s_state(int handle, unsigned int domid);
+
#if XEN_SYSCTL_INTERFACE_VERSION >= 6
#define SAFEDIV(a, b) (((b) >= 0) ? (a) / (b) : (a))
#define COMPAT_FIELD_physinfo_get_nr_cpus(p) (p).nr_cpus
cap : int;
}
+type physinfo_cap_flag =
+ | CAP_HVM
+ | CAP_DirectIO
+
type physinfo =
{
nr_cpus : int;
free_pages : nativeint;
scrub_pages : nativeint;
(* XXX hw_cap *)
+ capabilities : physinfo_cap_flag list;
}
type version =
external domain_suppress_spurious_page_faults: handle -> domid -> unit
= "stub_xc_domain_suppress_spurious_page_faults"
-external domain_get_acpi_s_state: handle -> domid -> int = "stub_xc_domain_get_acpi_s_state"
+external domain_set_timer_mode: handle -> domid -> int -> unit = "stub_xc_domain_set_timer_mode"
+external domain_set_hpet: handle -> domid -> int -> unit = "stub_xc_domain_set_hpet"
+external domain_set_vpt_align: handle -> domid -> int -> unit = "stub_xc_domain_set_vpt_align"
external domain_send_s3resume: handle -> domid -> unit = "stub_xc_domain_send_s3resume"
+external domain_get_acpi_s_state: handle -> domid -> int = "stub_xc_domain_get_acpi_s_state"
(** check if some hvm domain got pv driver or not *)
external hvm_check_pvdriver: handle -> domid -> bool
handle : int array;
}
type sched_control = { weight : int; cap : int; }
+type physinfo_cap_flag = CAP_HVM | CAP_DirectIO
type physinfo = {
nr_cpus : int;
threads_per_core : int;
total_pages : nativeint;
free_pages : nativeint;
scrub_pages : nativeint;
+ capabilities : physinfo_cap_flag list;
}
type version = { major : int; minor : int; extra : string; }
type compile_info = {
external domain_test_assign_device: handle -> domid -> (int * int * int * int) -> bool
= "stub_xc_domain_test_assign_device"
-external domain_get_acpi_s_state: handle -> domid -> int = "stub_xc_domain_get_acpi_s_state"
+external domain_set_timer_mode: handle -> domid -> int -> unit = "stub_xc_domain_set_timer_mode"
+external domain_set_hpet: handle -> domid -> int -> unit = "stub_xc_domain_set_hpet"
+external domain_set_vpt_align: handle -> domid -> int -> unit = "stub_xc_domain_set_vpt_align"
+
external domain_send_s3resume: handle -> domid -> unit
= "stub_xc_domain_send_s3resume"
+external domain_get_acpi_s_state: handle -> domid -> int = "stub_xc_domain_get_acpi_s_state"
external hvm_check_pvdriver : handle -> domid -> bool
= "stub_xc_hvm_check_pvdriver"
};
DECLARE_HYPERCALL2(__HYPERVISOR_hvm_op, HVMOP_set_param, (unsigned long) &arg);
int ret;
-
+
if (mlock(&arg, sizeof(arg)) == -1) {
xc_error_set("mlock failed: %s", strerror(errno));
return -1;
return ret;
}
+#ifndef HVM_PARAM_HPET_ENABLED
+#define HVM_PARAM_HPET_ENABLED 11
+#endif
+
+#ifndef HVM_PARAM_ACPI_S_STATE
+#define HVM_PARAM_ACPI_S_STATE 14
+#endif
+
+#ifndef HVM_PARAM_VPT_ALIGN
+#define HVM_PARAM_VPT_ALIGN 16
+#endif
+
int xc_domain_send_s3resume(int handle, unsigned int domid)
{
#define HVM_PARAM_ACPI_S_STATE 14
return xc_set_hvm_param(handle, domid, HVM_PARAM_ACPI_S_STATE, 0);
}
+int xc_domain_set_timer_mode(int handle, unsigned int domid, int mode)
+{
+ return xc_set_hvm_param(handle, domid,
+ HVM_PARAM_TIMER_MODE, (unsigned long) mode);
+}
+
+int xc_domain_set_hpet(int handle, unsigned int domid, int hpet)
+{
+ return xc_set_hvm_param(handle, domid, HVM_PARAM_HPET_ENABLED, (unsigned long) hpet);
+}
+
+int xc_domain_set_vpt_align(int handle, unsigned int domid, int vpt_align)
+{
+ return xc_set_hvm_param(handle, domid, HVM_PARAM_HPET_ENABLED, (unsigned long) vpt_align);
+}
+
int xc_domain_get_acpi_s_state(int handle, unsigned int domid)
{
int ret;
CAMLprim value stub_xc_physinfo(value xc_handle)
{
CAMLparam1(xc_handle);
- CAMLlocal1(physinfo);
+ CAMLlocal3(physinfo, cap_list, tmp);
xc_physinfo_t c_physinfo;
int r;
if (r)
failwith_xc();
- physinfo = caml_alloc_tuple(9);
+ tmp = cap_list = Val_emptylist;
+ for (r = 0; r < 2; r++) {
+ if ((c_physinfo.capabilities >> r) & 1) {
+ tmp = caml_alloc_small(2, Tag_cons);
+ Field(tmp, 0) = Val_int(r);
+ Field(tmp, 1) = cap_list;
+ cap_list = tmp;
+ }
+ }
+
+ physinfo = caml_alloc_tuple(10);
Store_field(physinfo, 0, Val_int(COMPAT_FIELD_physinfo_get_nr_cpus(c_physinfo)));
Store_field(physinfo, 1, Val_int(c_physinfo.threads_per_core));
Store_field(physinfo, 2, Val_int(c_physinfo.cores_per_socket));
Store_field(physinfo, 6, caml_copy_nativeint(c_physinfo.total_pages));
Store_field(physinfo, 7, caml_copy_nativeint(c_physinfo.free_pages));
Store_field(physinfo, 8, caml_copy_nativeint(c_physinfo.scrub_pages));
+ Store_field(physinfo, 9, cap_list);
CAMLreturn(physinfo);
}
CAMLreturn(Val_unit);
}
-CAMLprim value stub_xc_watchdog(value handle, value id, value timeout)
+CAMLprim value stub_xc_watchdog(value handle, value domid, value timeout)
{
- CAMLparam3(handle, id, timeout);
+ CAMLparam3(handle, domid, timeout);
int ret;
unsigned int c_timeout = Int32_val(timeout);
- ret = xc_domain_watchdog(_H(handle), Int_val(id), c_timeout);
+ ret = xc_domain_watchdog(_H(handle), _D(domid), c_timeout);
if (ret < 0)
failwith_xc();
CAMLreturn(Val_unit);
}
+
+CAMLprim value stub_xc_domain_set_timer_mode(value handle, value id, value mode)
+{
+ CAMLparam3(handle, id, mode);
+ int ret;
+
+ ret = xc_domain_set_timer_mode(_H(handle), _D(id), Int_val(mode));
+ if (ret < 0)
+ failwith_xc();
+ CAMLreturn(Val_unit);
+}
+
+CAMLprim value stub_xc_domain_set_hpet(value handle, value id, value mode)
+{
+ CAMLparam3(handle, id, mode);
+ int ret;
+
+ ret = xc_domain_set_hpet(_H(handle), _D(id), Int_val(mode));
+ if (ret < 0)
+ failwith_xc();
+ CAMLreturn(Val_unit);
+}
+
+CAMLprim value stub_xc_domain_set_vpt_align(value handle, value id, value mode)
+{
+ CAMLparam3(handle, id, mode);
+ int ret;
+
+ ret = xc_domain_set_vpt_align(_H(handle), _D(id), Int_val(mode));
+ if (ret < 0)
+ failwith_xc();
+ CAMLreturn(Val_unit);
+}
+
/*
* Local variables:
* indent-tabs-mode: t