libxl: ocaml: add PCI device helper functions
authorRob Hoes <rob.hoes@citrix.com>
Wed, 6 Nov 2013 17:49:59 +0000 (17:49 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Mon, 11 Nov 2013 15:39:47 +0000 (15:39 +0000)
Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Acked-by: David Scott <dave.scott@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
tools/ocaml/libs/xl/genwrap.py
tools/ocaml/libs/xl/xenlight_stubs.c

index 3d4a866a871ea61c7ef37da7bc6e5d04df746ad2..edadd144df78bf203cbcf2c95e52ac4399970ec9 100644 (file)
@@ -35,7 +35,12 @@ functions = { # ( name , [type1,type2,....] )
                       [ ("list",           ["ctx", "domid", "t list"]),
                         ("of_devid",       ["ctx", "domid", "int", "t"]),
                       ],
-    "device_pci":     DEVICE_FUNCTIONS,
+    "device_pci":     DEVICE_FUNCTIONS +
+                      [ ("list",              ["ctx", "domid", "t list"]),
+                        ("assignable_add",    ["ctx", "t", "bool", "unit"]),
+                        ("assignable_remove", ["ctx", "t", "bool", "unit"]),
+                        ("assignable_list",   ["ctx", "t list"]),
+                      ],
     "dominfo":        [ ("list",           ["ctx", "t list"]),
                         ("get",            ["ctx", "domid", "t"]),
                       ],
index 3f41935c08dda92e15e4ada38b97b722e606c230..be8a3e8671cc2b75b150d73ab0128af1db6d4b81 100644 (file)
@@ -442,6 +442,96 @@ value stub_xl_device_nic_list(value ctx, value domid)
        CAMLreturn(list);
 }
 
+value stub_xl_device_pci_list(value ctx, value domid)
+{
+       CAMLparam2(ctx, domid);
+       CAMLlocal2(list, temp);
+       libxl_device_pci *c_list;
+       int i, nb;
+       uint32_t c_domid;
+
+       c_domid = Int_val(domid);
+
+       c_list = libxl_device_pci_list(CTX, c_domid, &nb);
+       if (!c_list)
+               failwith_xl(ERROR_FAIL, "pci_list");
+
+       list = temp = Val_emptylist;
+       for (i = 0; i < nb; i++) {
+               list = caml_alloc_small(2, Tag_cons);
+               Field(list, 0) = Val_int(0);
+               Field(list, 1) = temp;
+               temp = list;
+               Store_field(list, 0, Val_device_pci(&c_list[i]));
+               libxl_device_pci_dispose(&c_list[i]);
+       }
+       free(c_list);
+
+       CAMLreturn(list);
+}
+
+value stub_xl_device_pci_assignable_add(value ctx, value info, value rebind)
+{
+       CAMLparam3(ctx, info, rebind);
+       libxl_device_pci c_info;
+       int ret, marker_var;
+
+       device_pci_val(CTX, &c_info, info);
+
+       ret = libxl_device_pci_assignable_add(CTX, &c_info, (int) Bool_val(rebind));
+
+       libxl_device_pci_dispose(&c_info);
+
+       if (ret != 0)
+               failwith_xl(ret, "pci_assignable_add");
+
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_device_pci_assignable_remove(value ctx, value info, value rebind)
+{
+       CAMLparam3(ctx, info, rebind);
+       libxl_device_pci c_info;
+       int ret, marker_var;
+
+       device_pci_val(CTX, &c_info, info);
+
+       ret = libxl_device_pci_assignable_remove(CTX, &c_info, (int) Bool_val(rebind));
+
+       libxl_device_pci_dispose(&c_info);
+
+       if (ret != 0)
+               failwith_xl(ret, "pci_assignable_remove");
+
+       CAMLreturn(Val_unit);
+}
+
+value stub_xl_device_pci_assignable_list(value ctx)
+{
+       CAMLparam1(ctx);
+       CAMLlocal2(list, temp);
+       libxl_device_pci *c_list;
+       int i, nb;
+       uint32_t c_domid;
+
+       c_list = libxl_device_pci_assignable_list(CTX, &nb);
+       if (!c_list)
+               failwith_xl(ERROR_FAIL, "pci_assignable_list");
+
+       list = temp = Val_emptylist;
+       for (i = 0; i < nb; i++) {
+               list = caml_alloc_small(2, Tag_cons);
+               Field(list, 0) = Val_int(0);
+               Field(list, 1) = temp;
+               temp = list;
+               Store_field(list, 0, Val_device_pci(&c_list[i]));
+               libxl_device_pci_dispose(&c_list[i]);
+       }
+       free(c_list);
+
+       CAMLreturn(list);
+}
+
 value stub_xl_physinfo_get(value ctx)
 {
        CAMLparam1(ctx);