Mailing List Archive

[xen master] tools/ocaml/xenctrl: Add hvm_param_{get,set} bindings
commit 10acd21795a9df5c0908c58104e82472c5fa2d17
Author: Edwin Török <edvin.torok@citrix.com>
AuthorDate: Fri Dec 2 10:55:58 2022 +0000
Commit: Andrew Cooper <andrew.cooper3@citrix.com>
CommitDate: Fri Dec 2 13:41:04 2022 +0000

tools/ocaml/xenctrl: Add hvm_param_{get,set} bindings

Not to be confused which hvm_get_param, which also exists and has a
different, more error-prone interface.

This one always returns a 64-bit value, and that is retained in the
OCaml binding as well, returning 'int64' (and not int, or nativeint
which might have different sizes).

Signed-off-by: Edwin Török <edvin.torok@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
---
tools/ocaml/libs/xc/xenctrl.ml | 47 ++++++++++++++++++++++++++++++++++++
tools/ocaml/libs/xc/xenctrl.mli | 48 +++++++++++++++++++++++++++++++++++++
tools/ocaml/libs/xc/xenctrl_stubs.c | 31 ++++++++++++++++++++++++
3 files changed, 126 insertions(+)

diff --git a/tools/ocaml/libs/xc/xenctrl.ml b/tools/ocaml/libs/xc/xenctrl.ml
index b70ab89caa..9a80ae5e28 100644
--- a/tools/ocaml/libs/xc/xenctrl.ml
+++ b/tools/ocaml/libs/xc/xenctrl.ml
@@ -309,6 +309,53 @@ external map_foreign_range: handle -> domid -> int
-> nativeint -> Xenmmap.mmap_interface
= "stub_map_foreign_range"

+type hvm_param =
+ | HVM_PARAM_CALLBACK_IRQ
+ | HVM_PARAM_STORE_PFN
+ | HVM_PARAM_STORE_EVTCHN
+ | HVM_PARAM_UNDEF_3
+ | HVM_PARAM_PAE_ENABLED
+ | HVM_PARAM_IOREQ_PFN
+ | HVM_PARAM_BUFIOREQ_PFN
+ | HVM_PARAM_UNDEF_7
+ | HVM_PARAM_UNDEF_8
+ | HVM_PARAM_VIRIDIAN
+ | HVM_PARAM_TIMER_MODE
+ | HVM_PARAM_HPET_ENABLED
+ | HVM_PARAM_IDENT_PT
+ | HVM_PARAM_UNDEF_13
+ | HVM_PARAM_ACPI_S_STATE
+ | HVM_PARAM_VM86_TSS
+ | HVM_PARAM_VPT_ALIGN
+ | HVM_PARAM_CONSOLE_PFN
+ | HVM_PARAM_CONSOLE_EVTCHN
+ | HVM_PARAM_ACPI_IOPORTS_LOCATION
+ | HVM_PARAM_MEMORY_EVENT_CR0
+ | HVM_PARAM_MEMORY_EVENT_CR3
+ | HVM_PARAM_MEMORY_EVENT_CR4
+ | HVM_PARAM_MEMORY_EVENT_INT3
+ | HVM_PARAM_NESTEDHVM
+ | HVM_PARAM_MEMORY_EVENT_SINGLE_STEP
+ | HVM_PARAM_UNDEF_26
+ | HVM_PARAM_PAGING_RING_PFN
+ | HVM_PARAM_MONITOR_RING_PFN
+ | HVM_PARAM_SHARING_RING_PFN
+ | HVM_PARAM_MEMORY_EVENT_MSR
+ | HVM_PARAM_TRIPLE_FAULT_REASON
+ | HVM_PARAM_IOREQ_SERVER_PFN
+ | HVM_PARAM_NR_IOREQ_SERVER_PAGES
+ | HVM_PARAM_VM_GENERATION_ID_ADDR
+ | HVM_PARAM_ALTP2M
+ | HVM_PARAM_X87_FIP_WIDTH
+ | HVM_PARAM_VM86_TSS_SIZED
+ | HVM_PARAM_MCA_CAP
+
+external hvm_param_get: handle -> domid -> hvm_param -> int64
+ = "stub_xc_hvm_param_get"
+
+external hvm_param_set: handle -> domid -> hvm_param -> int64 -> unit
+ = "stub_xc_hvm_param_set"
+
external domain_assign_device: handle -> domid -> (int * int * int * int) -> unit
= "stub_xc_domain_assign_device"
external domain_deassign_device: handle -> domid -> (int * int * int * int) -> unit
diff --git a/tools/ocaml/libs/xc/xenctrl.mli b/tools/ocaml/libs/xc/xenctrl.mli
index f6a777ede6..82def5a17c 100644
--- a/tools/ocaml/libs/xc/xenctrl.mli
+++ b/tools/ocaml/libs/xc/xenctrl.mli
@@ -235,6 +235,54 @@ external map_foreign_range :
handle -> domid -> int -> nativeint -> Xenmmap.mmap_interface
= "stub_map_foreign_range"

+(* needs to be sorted according to its numeric value, watch out for gaps! *)
+type hvm_param =
+ | HVM_PARAM_CALLBACK_IRQ
+ | HVM_PARAM_STORE_PFN
+ | HVM_PARAM_STORE_EVTCHN
+ | HVM_PARAM_UNDEF_3
+ | HVM_PARAM_PAE_ENABLED
+ | HVM_PARAM_IOREQ_PFN
+ | HVM_PARAM_BUFIOREQ_PFN
+ | HVM_PARAM_UNDEF_7
+ | HVM_PARAM_UNDEF_8
+ | HVM_PARAM_VIRIDIAN
+ | HVM_PARAM_TIMER_MODE
+ | HVM_PARAM_HPET_ENABLED
+ | HVM_PARAM_IDENT_PT
+ | HVM_PARAM_UNDEF_13
+ | HVM_PARAM_ACPI_S_STATE
+ | HVM_PARAM_VM86_TSS
+ | HVM_PARAM_VPT_ALIGN
+ | HVM_PARAM_CONSOLE_PFN
+ | HVM_PARAM_CONSOLE_EVTCHN
+ | HVM_PARAM_ACPI_IOPORTS_LOCATION
+ | HVM_PARAM_MEMORY_EVENT_CR0
+ | HVM_PARAM_MEMORY_EVENT_CR3
+ | HVM_PARAM_MEMORY_EVENT_CR4
+ | HVM_PARAM_MEMORY_EVENT_INT3
+ | HVM_PARAM_NESTEDHVM
+ | HVM_PARAM_MEMORY_EVENT_SINGLE_STEP
+ | HVM_PARAM_UNDEF_26
+ | HVM_PARAM_PAGING_RING_PFN
+ | HVM_PARAM_MONITOR_RING_PFN
+ | HVM_PARAM_SHARING_RING_PFN
+ | HVM_PARAM_MEMORY_EVENT_MSR
+ | HVM_PARAM_TRIPLE_FAULT_REASON
+ | HVM_PARAM_IOREQ_SERVER_PFN
+ | HVM_PARAM_NR_IOREQ_SERVER_PAGES
+ | HVM_PARAM_VM_GENERATION_ID_ADDR
+ | HVM_PARAM_ALTP2M
+ | HVM_PARAM_X87_FIP_WIDTH
+ | HVM_PARAM_VM86_TSS_SIZED
+ | HVM_PARAM_MCA_CAP
+
+external hvm_param_get: handle -> domid -> hvm_param -> int64
+ = "stub_xc_hvm_param_get"
+
+external hvm_param_set: handle -> domid -> hvm_param -> int64 -> unit
+ = "stub_xc_hvm_param_set"
+
external domain_assign_device: handle -> domid -> (int * int * int * int) -> unit
= "stub_xc_domain_assign_device"
external domain_deassign_device: handle -> domid -> (int * int * int * int) -> unit
diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c
index 9cbf17103d..2fba9c5e94 100644
--- a/tools/ocaml/libs/xc/xenctrl_stubs.c
+++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
@@ -1185,6 +1185,37 @@ CAMLprim value stub_xc_domain_irq_permission(value xch, value domid,
CAMLreturn(Val_unit);
}

+CAMLprim value stub_xc_hvm_param_get(value xch, value domid, value param)
+{
+ CAMLparam3(xch, domid, param);
+ uint64_t val;
+ int ret;
+
+ caml_enter_blocking_section();
+ ret = xc_hvm_param_get(_H(xch), _D(domid), Int_val(param), &val);
+ caml_leave_blocking_section();
+
+ if ( ret )
+ failwith_xc(_H(xch));
+
+ CAMLreturn(caml_copy_int64(val));
+}
+
+CAMLprim value stub_xc_hvm_param_set(value xch, value domid, value param, value val)
+{
+ CAMLparam4(xch, domid, param, val);
+ int ret;
+
+ caml_enter_blocking_section();
+ ret = xc_hvm_param_set(_H(xch), _D(domid), Int_val(param), Int64_val(val));
+ caml_leave_blocking_section();
+
+ if ( ret )
+ failwith_xc(_H(xch));
+
+ CAMLreturn(Val_unit);
+}
+
static uint32_t encode_sbdf(int domain, int bus, int dev, int func)
{
return ((uint32_t)domain & 0xffff) << 16 |
--
generated by git-patchbot for /home/xen/git/xen.git#master