(* add pcis *)
List.iter (fun (devid, devs) ->
let bind = ref false in
+ let dev_msitranslate = ref None in
let devs = List.map (fun dev ->
bind := !bind || dev.pci_bind;
+ maybe (fun x -> dev_msitranslate := Some x) dev.pci_msitranslate;
(dev.pci_domain, dev.pci_bus, dev.pci_slot, dev.pci_func)
) devs in
if !bind then
Device.PCI.bind devs;
- Device.PCI.add ~xc ~xs ~hvm:cfg.hvm ~msitranslate:cfg.global_pci_msitranslate devs domid devid
+ (* if the device has defined a msitranslate value, use it,
+ otherwise use the global one *)
+ let msitranslate =
+ match !dev_msitranslate with
+ | None -> cfg.global_pci_msitranslate
+ | Some i -> i
+ in
+ Device.PCI.add ~xc ~xs ~hvm:cfg.hvm ~msitranslate devs domid devid
) cfg.pcis;
(* add device model *)