core: Introduce PCI device state

We will have to store a number of runtime state information for PCI
devices. Allocate these states as an array during cell creation and
release them on cell destruction.

We can already use the structure to keep a reference to the cell the
device belongs to. This avoids having to pass this around over multiple
hops.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
x86: Use PCI device structure inside VTD code

Perpare the VTD PCI device handling code for dealing with or passing of
PCI device states instead of the static device information. This also
allows to simplify the code by switching vtd_return_device_to_root_cell
to pci_get_assigned_device.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
core: Only perform PCI config space writes on PCI_ACCESS_PERFORM

If we emulate a config space write, we may be able to skip the physical
access completely. To model this, rename PCI_ACCESS_EMULATE to
PCI_ACCESS_DONE which signals to the caller of the moderation functions
that no physical access should be performed.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>