|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] tools/ocaml: Add OCaml binding of virq bind
1. Add a common bind virq function
2. Reduce the stub code of `bind_dom_exc_virq`
Signed-off-by: Yang Qian <yang.qian@xxxxxxxxxx>
---
tools/ocaml/libs/eventchn/xeneventchn.ml | 19 ++++++++++++++++++-
tools/ocaml/libs/eventchn/xeneventchn.mli | 21 +++++++++++++++++++++
tools/ocaml/libs/eventchn/xeneventchn_stubs.c | 8 ++++----
3 files changed, 43 insertions(+), 5 deletions(-)
diff --git a/tools/ocaml/libs/eventchn/xeneventchn.ml
b/tools/ocaml/libs/eventchn/xeneventchn.ml
index 89edb92..dd00a1f 100644
--- a/tools/ocaml/libs/eventchn/xeneventchn.ml
+++ b/tools/ocaml/libs/eventchn/xeneventchn.ml
@@ -21,9 +21,26 @@ external fd: handle -> Unix.file_descr = "stub_eventchn_fd"
type t = int
+type virq_t =
+ | Timer (* #define VIRQ_TIMER 0 *)
+ | Debug (* #define VIRQ_DEBUG 1 *)
+ | Console (* #define VIRQ_CONSOLE 2 *)
+ | Dom_exc (* #define VIRQ_DOM_EXC 3 *)
+ | Tbuf (* #define VIRQ_TBUF 4 *)
+ | Reserved_5 (* Do not use this value as it's not defined *)
+ | Debugger (* #define VIRQ_DEBUGGER 6 *)
+ | Xenoprof (* #define VIRQ_XENOPROF 7 *)
+ | Con_ring (* #define VIRQ_CON_RING 8 *)
+ | Pcpu_state (* #define VIRQ_PCPU_STATE 9 *)
+ | Mem_event (* #define VIRQ_MEM_EVENT 10 *)
+ | Xc_reserved (* #define VIRQ_XC_RESERVED 11 *)
+ | Enomem (* #define VIRQ_ENOMEM 12 *)
+ | Xenpmu (* #define VIRQ_XENPMU 13 *)
+
external notify: handle -> int -> unit = "stub_eventchn_notify"
external bind_interdomain: handle -> int -> int -> int =
"stub_eventchn_bind_interdomain"
-external bind_dom_exc_virq: handle -> int = "stub_eventchn_bind_dom_exc_virq"
+external bind_virq: handle -> virq_t -> int = "stub_eventchn_bind_virq"
+let bind_dom_exc_virq handle = bind_virq handle Dom_exc
external unbind: handle -> int -> unit = "stub_eventchn_unbind"
external pending: handle -> int = "stub_eventchn_pending"
external unmask: handle -> int -> unit = "stub_eventchn_unmask"
diff --git a/tools/ocaml/libs/eventchn/xeneventchn.mli
b/tools/ocaml/libs/eventchn/xeneventchn.mli
index e180145..08c7337 100644
--- a/tools/ocaml/libs/eventchn/xeneventchn.mli
+++ b/tools/ocaml/libs/eventchn/xeneventchn.mli
@@ -22,6 +22,23 @@ type handle
type t
(** A local event channel. *)
+type virq_t =
+ | Timer (* #define VIRQ_TIMER 0 *)
+ | Debug (* #define VIRQ_DEBUG 1 *)
+ | Console (* #define VIRQ_CONSOLE 2 *)
+ | Dom_exc (* #define VIRQ_DOM_EXC 3 *)
+ | Tbuf (* #define VIRQ_TBUF 4 *)
+ | Reserved_5 (* Do not use this value as it's not defined *)
+ | Debugger (* #define VIRQ_DEBUGGER 6 *)
+ | Xenoprof (* #define VIRQ_XENOPROF 7 *)
+ | Con_ring (* #define VIRQ_CON_RING 8 *)
+ | Pcpu_state (* #define VIRQ_PCPU_STATE 9 *)
+ | Mem_event (* #define VIRQ_MEM_EVENT 10 *)
+ | Xc_reserved (* #define VIRQ_XC_RESERVED 11 *)
+ | Enomem (* #define VIRQ_ENOMEM 12 *)
+ | Xenpmu (* #define VIRQ_XENPMU 13 *)
+
+
val to_int: t -> int
val of_int: int -> t
@@ -49,6 +66,10 @@ val bind_dom_exc_virq : handle -> t
(domain exception VIRQ). On error it will throw a Failure
exception. *)
+val bind_virq: handle -> virq_t -> t
+(** Binds a local event channel to the specific VIRQ type.
+ On error it will throw a Failure exception. *)
+
val unbind : handle -> t -> unit
(** Unbinds the given event channel. On error it will throw a
Failure exception. *)
diff --git a/tools/ocaml/libs/eventchn/xeneventchn_stubs.c
b/tools/ocaml/libs/eventchn/xeneventchn_stubs.c
index 45a385d..2b7984f 100644
--- a/tools/ocaml/libs/eventchn/xeneventchn_stubs.c
+++ b/tools/ocaml/libs/eventchn/xeneventchn_stubs.c
@@ -90,15 +90,15 @@ CAMLprim value stub_eventchn_bind_interdomain(value xce,
value domid,
CAMLreturn(port);
}
-CAMLprim value stub_eventchn_bind_dom_exc_virq(value xce)
+CAMLprim value stub_eventchn_bind_virq(value xce, value virq_type)
{
- CAMLparam1(xce);
+ CAMLparam2(xce, virq_type);
CAMLlocal1(port);
xenevtchn_port_or_error_t rc;
- rc = xenevtchn_bind_virq(_H(xce), VIRQ_DOM_EXC);
+ rc = xenevtchn_bind_virq(_H(xce), Int_val(virq_type));
if (rc == -1)
- caml_failwith("evtchn bind_dom_exc_virq failed");
+ caml_failwith("evtchn bind_virq failed");
port = Val_int(rc);
CAMLreturn(port);
--
2.9.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |