driver: string;
}
+type dev = int * int * int * int
+
+exception Cannot_add of dev list * exn (* devices, reason *)
exception Cannot_use_pci_with_no_pciback of t list
let get_from_system domain bus slot func =
)
) resources
-let add ~xc ~xs ~hvm ~msitranslate pcidevs domid devid =
+let add_noexn ~xc ~xs ~hvm ~msitranslate pcidevs domid devid =
let pcidevs = List.map (fun (domain, bus, slot, func) ->
let (irq, resources, driver) = get_from_system domain bus slot func in
{ domain = domain; bus = bus; slot = slot; func = func;
"online", "1";
"num_devs", string_of_int (List.length xsdevs);
"state", string_of_int (Xenbus.int_of Xenbus.Initialising);
- "msitranslate", string_of_int (msitranslate);
+ "msitranslate", string_of_int (msitranslate);
] and frontendlist = [
"backend-id", "0";
"state", string_of_int (Xenbus.int_of Xenbus.Initialising);
Generic.add_device ~xs device (xsdevs @ backendlist) frontendlist;
()
+let add ~xc ~xs ~hvm ~msitranslate pcidevs domid devid =
+ try add_noexn ~xc ~xs ~hvm ~msitranslate pcidevs domid devid
+ with exn ->
+ raise (Cannot_add (pcidevs, exn))
+
let release ~xc ~xs ~hvm pcidevs domid devid =
let pcidevs = List.map (fun (domain, bus, slot, func) ->
let (irq, resources, driver) = get_from_system domain bus slot func in
resources: (int64 * int64 * int64) list;
driver: string;
}
+ type dev = int * int * int * int
+ exception Cannot_add of (dev list) * exn
exception Cannot_use_pci_with_no_pciback of t list
val add : xc:Xc.handle -> xs:Xs.xsh -> hvm:bool -> msitranslate:int
- -> (int * int * int * int) list -> Xc.domid -> int -> unit
+ -> dev list -> Xc.domid -> int -> unit
val release : xc:Xc.handle -> xs:Xs.xsh -> hvm:bool
- -> (int * int * int * int) list -> Xc.domid -> int -> unit
+ -> dev list -> Xc.domid -> int -> unit
val reset : xs:Xs.xsh -> device -> unit
- val bind : (int * int * int * int) list -> unit
+ val bind : dev list -> unit
end
module Dm :