CP-8358: PCI subsystem device/vendor ID handling

These patches add the PCI subsystem device/vendor ID/name to PCI objects, parsing them from lspci output on xapi startup.

Support is also added for specifying a physical subsystem device ID in vGPU config files; xapi will take this into account when determining whether a vGPU configuration is supported on a discovered PCI device.

If a config file does not specify a physical subsystem device ID, xapi will interpret this to mean that only the physical device ID is required to identify a device which will support the vGPU configuration.
Will it work on machines with no PCI bus like my cubie?
On 10 Jun 2014 14:51, "Si Beaumont" <notifications@github.com> wrote:

> In ocaml/xapi/xapi_pci_helpers.ml:
>
> >  type pci = {
> > -	id: string;
> > -	vendor_id: int64;
> > -	vendor_name: string;
> > -	device_id: int64;
> > -	device_name: string;
> > -	class_id: int64;
> > -	class_name: string;
> > +	pci_id: string;
> > +	vendor: pci_property;
> > +	device: pci_property;
> > +	pci_class: pci_property;
> > +	subsystem_vendor: pci_property option;
>
> How can both subsystem_vendor and subsystem_device both be type
> pci_property? The syntax of the pci.ids file is:
>
> # Syntax:
> # vendor  vendor_name
> #       device  device_name                             <-- single tab
> #               subvendor subdevice  subsystem_name     <-- two tabs
>
> I.e. there is just one name for each pair of these values. It seems this
> datatype doesn't quite encode the semantics the same way as pci.ids.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/xapi-project/xen-api/pull/1787/files#r13593963>.
>