[ARM] arm32: arm32ve: Move memcpy and memset implementation to separate files

This patch splits cpu_string.S into cpu_memcpy.S and cpu_memset.S.

Generally, in most OSs (Linux, FreeBSD, NetBSD, ...) the arch specific
low-level implementation of memcpy and memset are located in separate
assembly sources hence this patch.

Signed-off-by: Anup Patel <anup@brainfault.org>
[ARM] arm64: Optimized memcpy and memset implementation

This patch adapts Linux low-level implementation of
memcpy and memset for Xvisor arm64 port. As a result,
of this patch the ping delay in guest Linux further
reduced by 0.035 ms on Foundation v8 model.

Signed-off-by: Anup Patel <anup@brainfault.org>
[CORE] Extended IRQ support added.

This add extended IRQ support in Xvisor, and IRQ chaining.
The aim is to have a light and simple Linux IRQ domain like, without modifying
the existing Xvisor IRQs.

More precisely, it maps multiple IRQ on an hard IRQ.
Those extended IRQ number are defined above the upper bound of
CONFIG_HOST_IRQ_COUNT.
This helps, for example, GPIO drivers to have multiple IRQ on a single hardware
one.

In order to be used, as for IRQ domain, the driver must first add a new group,
with vmm_host_extirq_add, which return the new "vmm_host_extirq_group".
Then, IRQs of this group must be mapped, with "vmm_host_extirq_create_mapping",
returning the IRQ number.
This IRQ number, defined it the upper bound of CONFIG_HOST_IRQ_COUNT, can be
used as regular one.

When the driver HW irq is raised, the driver must call
"vmm_host_extirq_find_mapping" to retrieve the corresponding extended IRQ,
from the domain, and the group IRQ offset.
The invert function, which retrieve the extended IRQ from the domain IRQ is
"vmm_host_extirq_to_hwirq" (this is the main difference with the Linux kernel
domain IRQs, as retrieving the IRQ number is enough, but was not directly
possible in Xvisor without changing IRQ management).

Signed-off-by: Jimmy Durand Wesolowski <jimmy.durand-wesolowski@openwide.fr>
[MAKEFILE] Avoid quoting the "VMM_MODNAME" macro variable on the command line.

Since the "VMM_MODNAME" macro variable will be used for defining "modtbl" and
"nidtbl", it must not contain double quotes.

Signed-off-by: Jimmy Durand Wesolowski <jimmy.durand-wesolowski@openwide.fr>
[CORE] Avoid declaring "nidtbl" and "modtbl" structures as unused and static.

As being declared as static and unused, the "nidtbl" and "modtbl" structures
are removed from the objects compiled in -O1 or more optimized level, leading
to empty ".nidtbl" and ".modtbl" sections.
The module tree tables are now named with "__modtbl__" and the module name
(the compiled file name) to avoid multiple definitions.

Signed-off-by: Jimmy Durand Wesolowski <jimmy.durand-wesolowski@openwide.fr>
[DRIVERS] irqchip: Fix VMM_HOST_IRQ_INIT_DECLARE() usage in irq-versatile-fpga

The VMM_HOST_IRQ_INIT_DECLARE() macro usage in irq-versatile-fpga uses same
variable name as irq-vic for irqchip nidtbl entry hence this patch fixes it.

Signed-off-by: Anup Patel <anup@brainfault.org>
[CORE] vmm_modules: Ensure unique variable name for modtbl entry

Recently, we made modtbl entries global variables but this results
in "multiple declaration ..." compile errors because it quite likely
that two modtbl entry variables to have same name because their
source filenames are same.

This patch tries to make the modtbl entry variable names more
unique by appending __LINE__ pre-defined macro of GCC. In other
words, we append modtbl variable declaration line number to its name.

Signed-off-by: Anup Patel <anup@brainfault.org>
Merge remote-tracking branch 'upstream/master'