|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 33/41] arm : acpi prepare acpi tables for dom0
Map acpi tables described in uefi table to DOM0 address space
Signed-off-by: Parth Dixit <parth.dixit@xxxxxxxxxx>
---
xen/arch/arm/domain_build.c | 59 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 58 insertions(+), 1 deletion(-)
diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index f2ca525..90bdd01 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -1225,6 +1225,50 @@ static int handle_node(struct domain *d, struct
kernel_info *kinfo,
return res;
}
#ifdef CONFIG_ACPI
+static int prepare_acpi(struct domain *d, struct kernel_info *kinfo, struct
membank tbl_add[])
+{
+ unsigned long res;
+ u64 addr, size;
+ int i = 0;
+
+ addr = acpi_os_get_root_pointer();
+ if( !addr )
+ return -ENODEV;
+
+ size = sizeof(struct acpi_table_rsdp);
+
+ res = map_regions(d,
+ paddr_to_pfn(addr & PAGE_MASK),
+ DIV_ROUND_UP(size, PAGE_SIZE),
+ paddr_to_pfn(addr & PAGE_MASK));
+ if ( res )
+ {
+ printk(XENLOG_ERR "Unable to map 0x%"PRIx64
+ " - 0x%"PRIx64" in domain \n",
+ addr & PAGE_MASK, PAGE_ALIGN(addr + size) - 1);
+ return res;
+ }
+
+ for( i = 0; i < acpi_gbl_root_table_list.count; i++ )
+ {
+ addr = acpi_gbl_root_table_list.tables[i].address;
+ size = acpi_gbl_root_table_list.tables[i].length;
+ res = map_regions(d,
+ paddr_to_pfn(addr & PAGE_MASK),
+ DIV_ROUND_UP(size, PAGE_SIZE),
+ paddr_to_pfn(addr & PAGE_MASK));
+ if ( res )
+ {
+ printk(XENLOG_ERR "Unable to map 0x%"PRIx64
+ " - 0x%"PRIx64" in domain \n",
+ addr & PAGE_MASK, PAGE_ALIGN(addr + size) - 1);
+ return res;
+ }
+ }
+
+ return 0;
+}
+
static int estimate_acpi_size(struct domain *d,struct kernel_info *kinfo,
struct membank tbl_add[])
{
int size = 0;
@@ -1429,6 +1473,10 @@ static int create_acpi_dtb(struct domain *d, struct
kernel_info *kinfo, struct m
{
return -EINVAL;
}
+static int prepare_acpi(struct domain *d, struct kernel_info *kinfo, struct
membank tbl_add[])
+{
+ return -EINVAL;
+}
#endif
static int prepare_dtb(struct domain *d, struct kernel_info *kinfo)
{
@@ -1647,10 +1695,19 @@ int construct_dom0(struct domain *d)
* as the initrd & fdt in RAM, so call it first.
*/
kernel_load(&kinfo);
+
+ if ( !acpi_disabled )
+ {
+ rc = prepare_acpi(d, &kinfo, tbl_add);
+ if ( rc < 0 )
+ return rc;
+ }
+
/* initrd_load will fix up the fdt, so call it before dtb_load */
initrd_load(&kinfo);
/* Allocate the event channel IRQ and fix up the device tree */
- evtchn_fixup(d, &kinfo);
+ if( acpi_disabled )
+ evtchn_fixup(d, &kinfo);
dtb_load(&kinfo);
/* Now that we are done restore the original p2m and current. */
--
1.9.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |