cpumap: int32;
}
+type xen_arm_arch_domainconfig =
+{
+ gic_version: int;
+ nr_spis: int;
+ clock_frequency: int32;
+}
+
+type x86_arch_emulation_flags =
+ | X86_EMU_LAPIC
+ | X86_EMU_HPET
+ | X86_EMU_PM
+ | X86_EMU_RTC
+ | X86_EMU_IOAPIC
+ | X86_EMU_PIC
+ | X86_EMU_VGA
+ | X86_EMU_IOMMU
+ | X86_EMU_PIT
+ | X86_EMU_USE_PIRQ
+
+type xen_x86_arch_domainconfig =
+{
+ emulation_flags: x86_arch_emulation_flags list;
+}
+
+type arch_domainconfig =
+ | ARM of xen_arm_arch_domainconfig
+ | X86 of xen_x86_arch_domainconfig
+
type domaininfo =
{
domid : domid;
max_vcpu_id : int;
ssidref : int32;
handle : int array;
+ arch_config : arch_domainconfig;
}
type sched_control =
cputime : int64;
cpumap : int32;
}
+
+type xen_arm_arch_domainconfig = {
+ gic_version: int;
+ nr_spis: int;
+ clock_frequency: int32;
+}
+
+type x86_arch_emulation_flags =
+ | X86_EMU_LAPIC
+ | X86_EMU_HPET
+ | X86_EMU_PM
+ | X86_EMU_RTC
+ | X86_EMU_IOAPIC
+ | X86_EMU_PIC
+ | X86_EMU_VGA
+ | X86_EMU_IOMMU
+ | X86_EMU_PIT
+ | X86_EMU_USE_PIRQ
+
+type xen_x86_arch_domainconfig = {
+ emulation_flags: x86_arch_emulation_flags list;
+}
+
+type arch_domainconfig =
+ | ARM of xen_arm_arch_domainconfig
+ | X86 of xen_x86_arch_domainconfig
+
type domaininfo = {
domid : domid;
dying : bool;
max_vcpu_id : int;
ssidref : int32;
handle : int array;
+ arch_config : arch_domainconfig;
}
type sched_control = { weight : int; cap : int; }
type physinfo_cap_flag = CAP_HVM | CAP_DirectIO
static value alloc_domaininfo(xc_domaininfo_t * info)
{
CAMLparam0();
- CAMLlocal2(result, tmp);
+ CAMLlocal5(result, tmp, arch_config, x86_arch_config, emul_list);
int i;
- result = caml_alloc_tuple(16);
+ result = caml_alloc_tuple(17);
Store_field(result, 0, Val_int(info->domain));
Store_field(result, 1, Val_bool(info->flags & XEN_DOMINF_dying));
Store_field(result, 15, tmp);
+ /* emulation_flags: x86_arch_emulation_flags list; */
+ tmp = emul_list = Val_emptylist;
+ for (i = 0; i < 10; i++) {
+ if ((info->arch_config.emulation_flags >> i) & 1) {
+ tmp = caml_alloc_small(2, Tag_cons);
+ Field(tmp, 0) = Val_int(i);
+ Field(tmp, 1) = emul_list;
+ emul_list = tmp;
+ }
+ }
+
+ /* xen_x86_arch_domainconfig */
+ x86_arch_config = caml_alloc_tuple(1);
+ Store_field(x86_arch_config, 0, emul_list);
+
+ /* arch_config: arch_domainconfig */
+ arch_config = caml_alloc_small(1, 1);
+
+ Store_field(arch_config, 0, x86_arch_config);
+
+ Store_field(result, 16, arch_config);
+
CAMLreturn(result);
}