tools: config-create: Initial support for non-Intel boards

DMAR is Intel-specific. For AMD, we need to parse IVRS table, but
this code is currently missing since there is no IOMMU support in
AMD-V port.

Initially, we just make DMAR optional and ignore possible errors
on AMD (Intel will still fail at signature check stage if DMAR is
missing, however the error message will be somewhat misleading).
The template was also modified so missing bits of information are
not included (and IOAPIC ID is set to zero).

Signed-off-by: Valentine Sinitsyn <valentine.sinitsyn@gmail.com>
x86: Improve code sharing in vcpu_cell_{init,exit}

vcpu_cell_init() and vcpu_cell_exit() functions are almost identical for
VMX and SVM. They were moved to vcpu.c with vendor-specific bits encapsulated
in vcpu_vendor_cell_init() and vcpu_vendor_cell_exit().

This also required to introduce first data abstraction structure and first
vendor-specific data accessor: vcpu_vendor_get_cell_io_bitmap(). More to follow.
x86: Introduced vcpu_skip_emulated_instruction()

New function provides a vendor-neutral way to skip a VCPU instruction.
Previously, that was done by {vmx,svm}_skip_emulated_instruction(),
which were static and had different signatures.
x86: vcpu_handle_hypercall() made generic

Hypercall handling code is now shared between SVM and VMX.
This required implementing accessors to EFER, RFLAGS, CS and RIP,
and also making vcpu_deactivate_vmm() non-static.
x86: vcpu_handle_io_access() made generic

IO VM exit handling code is now shared between SVM and VMX as well.
This required introducing struct vcpu_io_intercept to communicate
intercepted instruction properties like the port number and access
size between vendor-specific and generic code.
x86: vcpu_handle_pt_violation() made generic

And finally, NPF/EPT violation handling code is now generalized
and shared between SVM/VMX code. To communicate page fault details
between vendor-specific and generic code, struct vcpu_pf_intercept
was introduced, and vcpu_get_guest_paging_structures() was made public
(i.e. non-static). Its signature was also modified to receive cpu_data.
x86: Removed refactoring TODO

Although vcpu_map_memory_region() and vcpu_unmap_memory_region()
look very similar, there is no easy way to extract a common part
from them. Decided not to refactor this code.

Same thing with XSETBV handler: no obvious need to take this
single branch out from {svm,vmx}_handle_exit() now.
x86: Remove redundant ifs in vcpu_vendor_get_*()

There is no need to validate the pointer passed to vcpu_vendor_get_*():
it can't be NULL in the current code, and even if it could, these functions
have no error indication. So it is better to #PF than pass garbage.